--- /dev/null
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "mainwindow.h"
+#include <QtGui>
+#include <QtCore/QCoreApplication>
+#include <QtNetwork/QtNetwork>
+//#include <QtNetwork/QSslSocket>
+#include <QApplication>
+#include <QKeySequence>
+#include <QDateTime>
+#include <QFileDialog>
+#define MAXCOLUMN 4
+#define MAXLINE 5 // !!!
+
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ conf=new QSettings(QString("FwF"), QString("diary-mobile"), this);
+ if (conf->allKeys().size()==0)firstrun();
+ texte=new QLineEdit();
+ screen=new QWidget(this);
+ vbox=new QVBoxLayout(screen);
+ hbox=new QHBoxLayout();
+ grid=new QGridLayout();
+ ok=new CLabel(QString("ok"));
+ connect(ok, SIGNAL(clicked()), this, SLOT(entry()));
+ hbox->addWidget(texte);
+ hbox->addWidget(ok);
+ vbox->addLayout(hbox);
+
+ vbox->addLayout(grid);
+ signalmap=new QSignalMapper(this);
+ host=conf->value(QString("host"), QVariant("host")).toString();
+ port=conf->value(QString("port"), QVariant(5432)).toInt();
+ user=conf->value(QString("user"), QVariant("user")).toString();
+ servercert=conf->value(QString("server-cert"), QVariant("a.pem")).toString();
+ database=conf->value(QString("database"), QVariant("db")).toString();
+ password=conf->value(QString("password"), QVariant("pass")).toString();
+ conf->value(QString("file"), QVariant("diary.txt"));
+ connect(signalmap, SIGNAL(mapped(const QString &)),
+ this, SLOT(action(const QString &)));
+ label=new QLabel("Save locally");
+ grid->setHorizontalSpacing(1);
+ screen->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+ grid->setSizeConstraint(QLayout::SetMaximumSize);
+ setCentralWidget(screen);
+ createMenuBar();
+ statusBar()->addPermanentWidget(label);
+
+ start();
+}
+void MainWindow::start(){
+ flush();
+ connectdb();
+ addWidget(QString("select distinct nom from alias order by nom;"), new CLabel("alias"));
+ addWidget(QString("select nom from var;"), new CLabel("var"));
+ addWidget(QString("select distinct word from memo;"), new CLabel("memo"));
+ addWidget(QString("port"), new CLabel("port"));
+ addWidget(QString("host"), new CLabel("host"));
+ addWidget(QString("file"), new CLabel("file"));
+
+}
+MainWindow::~MainWindow()
+{
+}
+void MainWindow::setOrientation(ScreenOrientation orientation)
+{
+#if defined(Q_OS_SYMBIAN)
+ // If the version of Qt on the device is < 4.7.2, that attribute won't work
+ if (orientation != ScreenOrientationAuto) {
+ const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.'));
+ if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) {
+ qWarning("Screen orientation locking only supported with Qt 4.7.2 and above");
+ return;
+ }
+ }
+#endif // Q_OS_SYMBIAN
+
+ Qt::WidgetAttribute attribute;
+ switch (orientation) {
+#if QT_VERSION < 0x040702
+ // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
+ case ScreenOrientationLockPortrait:
+ attribute = static_cast<Qt::WidgetAttribute>(128);
+ break;
+ case ScreenOrientationLockLandscape:
+ attribute = static_cast<Qt::WidgetAttribute>(129);
+ break;
+ default:
+ case ScreenOrientationAuto:
+ attribute = static_cast<Qt::WidgetAttribute>(130);
+ break;
+#else // QT_VERSION < 0x040702
+ case ScreenOrientationLockPortrait:
+ //attribute = Qt::WA_LockPortraitOrientation;
+ break;
+ case ScreenOrientationLockLandscape:
+ //attribute = Qt::WA_LockLandscapeOrientation;
+ break;
+ default:
+ case ScreenOrientationAuto:
+ //attribute = Qt::WA_AutoOrientation;
+ break;
+#endif // QT_VERSION < 0x040702
+ };
+ //setAttribute(attribute, true);
+}
+void MainWindow::showExpanded()
+{
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
+ showFullScreen();
+#elif defined(Q_WS_MAEMO_5)
+ showMaximized();
+#else
+ show();
+#endif
+}
+void MainWindow::choosehost(){
+ bool ok=0;
+ host=QInputDialog::getText(this, QString("Host"), QString("Enter hostname (or ip)"), QLineEdit::Normal, host, &ok);
+ if(ok==1)conf->setValue(QString("host"), host);
+}
+void MainWindow::chooseuser(){
+ bool ok=0;
+ user=QInputDialog::getText(this, QString("Username"), QString("Enter username"), QLineEdit::Normal, user, &ok);
+ if(ok==1)conf->setValue(QString("user"), user);
+}
+void MainWindow::choosepass(){
+ bool ok=0;
+ password=QInputDialog::getText(this, QString("Password"), QString("Enter password"), QLineEdit::PasswordEchoOnEdit, password, &ok);
+ if(ok==1)conf->setValue(QString("password"), password);
+}
+void MainWindow::choosedb(){
+ bool ok=0;
+ database=QInputDialog::getText(this, QString("Database name"), QString("Enter database name"), QLineEdit::Normal, database, &ok);
+ if(ok==1)conf->setValue(QString("database"), database);
+}
+void MainWindow::chooseport(){
+
+ bool ok;
+ port=QInputDialog::getInt(this, QString("port ?"), QString("quel port ?"), port, 1, 65535, 1, &ok);
+ if((ok==1)){
+ conf->setValue(QString("port"), port);
+ }else{
+ port=22;
+ }
+}
+void MainWindow::choosefile(){
+
+ conf->setValue(QString("file"), QFileDialog::getSaveFileName(this, tr("Open file to write into"), "diary.txt"));
+
+}
+void MainWindow::lsconfig(){
+ flush();
+ QStringList tmp=conf->allKeys();
+ qDebug()<<"conf.size(in lsconfig())="<<tmp.size();
+ for(int a=0; a<tmp.size();a++){
+ CLabel * b=new CLabel(tmp[a]);
+ addWidget(tmp[a], b);
+ }
+
+
+}
+void MainWindow::quit(){
+ conf->sync();
+ //debug(0);
+ qApp->quit();
+}
+CLabel* MainWindow::addWidget(const QString &key, CLabel * a){
+
+ widget.insert(key, a);
+ a->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+ //qDebug()<<"a :"<<a->;
+ grid->addWidget(a, grid->count()/MAXCOLUMN, grid->count()%MAXCOLUMN, 1, 1, Qt::AlignVCenter | Qt::AlignHCenter);
+ QObject::connect(a, SIGNAL(clicked()), signalmap, SLOT(map()));
+ signalmap->setMapping(a, key);
+ return a;
+}
+void MainWindow::remWidget(const QString & a){
+ QObject::disconnect(widget.value(a), SIGNAL(clicked()), signalmap, SLOT(map()));
+ grid->removeWidget(widget.value(a));
+ widget.remove(a);
+}
+void MainWindow::action(const QString & a){
+ qDebug()<<"action("<<a<<")";
+ int b;
+ if(!alias(a))b=exec(a);
+ //qDebug()<<"q->size(action)="<<q->size();
+ flush();
+
+ if (a=="host")choosehost();
+ else if (a=="port")chooseport();
+ else if (a=="user")chooseuser();
+ else if (a=="database")choosedb();
+ else if (a=="password")choosepass();
+ else if (a=="file")choosefile();
+ for (int i=0; i<b; i++){
+ QString c=get(i, 0);
+ qDebug()<<"c="<<c;
+ addWidget(c, new CLabel(c));
+ }
+ qDebug()<<"action() end";
+
+}
+void MainWindow::createMenuBar(){
+ FileMenu=new QMenu(QString("&File"), this);
+ FileMenu->addAction(tr("&Start..."), this, SLOT(start()),QKeySequence(tr("Ctrl+S", "Start")));
+ FileMenu->addAction(tr("&Connect"), this, SLOT(connectdb()),QKeySequence(tr("Ctrl+C", "Connect")));
+ FileMenu->addAction(tr("&Quit..."), this, SLOT(quit()),QKeySequence(tr("Ctrl+Q", "Quit")));
+ menuBar()->addMenu(FileMenu);
+ EditMenu=new QMenu(QString("&Edit"));
+ EditMenu->addAction(tr("Co&nfig"), this, SLOT(lsconfig()), QKeySequence(tr("Ctrl+N", "Edit|Co&nfig")));
+ menuBar()->addMenu(EditMenu);
+ HelpMenu=new QMenu(QString("&Help"));
+ HelpMenu->addAction(tr("About Qt"), qApp, SLOT(aboutQt()), QKeySequence(tr("ctrl+H", "About Qt")));
+ menuBar()->addMenu(HelpMenu);
+
+ menuBar()->show();
+}
+void MainWindow::toggleMenu(){
+ if (menuBar()->isVisible()){
+ menuBar()->hide();
+ }else{
+ menuBar()->show();
+ }
+
+}
+void MainWindow::flush(){
+ QLayoutItem *child;
+ while ((child = grid->takeAt(0)) != 0) {// c'est inutile de mettre "!= 0", non ?
+ delete child->widget();
+ delete child;
+ }
+ widget.clear();
+}
+void MainWindow::editConf(const QString & a){
+ label=new QLabel(a);
+ texte=new QLineEdit(conf->value(a).toString());
+ //texte=new QLineEdit(a);
+ CLabel * button=new CLabel(QString("ok"));
+ grid->addWidget(label, 1, 0);
+ grid->addWidget(texte, 1, 1);
+ grid->addWidget(button, 1,2);
+ connect(button, SIGNAL(clicked()), this, SLOT(confChanged()));
+
+}
+void MainWindow::confChanged(){
+ conf->setValue(label->text(), texte->text());
+ start();
+}
+CLabel::CLabel( const QString& text, QWidget * parent ) : QLabel(parent)
+{
+ setText(text);
+ setWordWrap(true);
+ setLineWidth(5);
+ setStyleSheet("background-color: red;border-style: outset;border-width: 7px;border-radius: 10px;border-color: beige;font: bold 10px;padding: 6px;");
+ setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+
+
+}
+CLabel::~CLabel()
+{
+}
+void CLabel::mousePressEvent ( QMouseEvent * event )
+{
+ switch(event->button()){
+ case Qt::LeftButton:setStyleSheet("background-color: red;border-style: inset;border-width: 7px;border-radius: 10px;border-color: beige;font: bold 10px;padding: 6px;");emit clicked();break;
+ }
+}
+void CLabel::mouseReleaseEvent( QMouseEvent * event )
+{
+ switch(event->button()){
+ case Qt::LeftButton:setStyleSheet("background-color: red;border-style: outset;border-width: 7px;border-radius: 10px;border-color: beige;font: bold 10px;padding: 6px;");emit releaseMouse();break;
+
+ }
+}
+void MainWindow::debug(int col){
+ q->first();
+ while(q->isValid()){
+ int k=q->at();
+ qDebug()<<"n°"<<k+1<<"="<<get(k,col);
+ q->next();
+ }
+}
+void MainWindow::connected(){
+ label->setText(QString("Online"));
+ qDebug()<<"connected !!!";
+}
+void MainWindow::TCPerrors(QAbstractSocket::SocketError a){
+ qDebug()<<"erreurs TCP : "<< a;
+ //ssl->disconnect();
+}
+QString MainWindow::getText(const QString &a){
+ return widget.value(a)->text();
+}
+void MainWindow::connectdb(){
+ //db = QSqlDatabase::addDatabase("QSQLITE");
+ db = QSqlDatabase::addDatabase("QPSQL");
+ db.setHostName(host);
+ db.setDatabaseName(database);
+ db.setUserName(user);
+ db.setPassword(password);
+ db.setConnectOptions(QString("requiressl=1 connect_timeout=10000"));//10sec
+ bool ok=db.open();
+ qDebug()<<"db.open() ? "<<ok;
+ q=new QSqlQuery(db);
+ qDebug() << "Available drivers: " << QSqlDatabase::drivers();
+
+}
+void MainWindow::firstrun(){
+ conf->setValue(QString("host"), QVariant("127.0.0.1"));
+ conf->setValue(QString("port"),QVariant(5432));
+ conf->setValue(QString("user"), QVariant("user"));
+ conf->setValue(QString("servercert"), QVariant("a.pem"));
+ conf->setValue(QString("database"), QVariant("db"));
+ conf->setValue(QString("password"), QVariant("pass"));
+ conf->setValue(QString("file"), QVariant("diary.txt"));
+}
+QString &MainWindow::get(int row, int column){
+ q->seek(row);
+ tmp=q->value(column).toString();
+ return tmp;
+}
+int MainWindow::exec(const QString & a){
+
+ q->prepare(a);// make it
+ q->exec();// do it
+ QSqlError b=q->lastError();
+ if (b.isValid())qDebug()<<"q->lastError():"<<b;
+ return q->size();
+}
+int MainWindow::alias(const QString & a){
+ qDebug()<<"alias("<<a<<")";
+ QString cmd="select cmd,argc,inf from alias-qt where nom = :name;";
+ q->prepare(cmd);
+ q->bindValue(":name", a);
+ q->exec();
+ int qs=q->size();
+ qDebug()<<"q->size(alias)="<<qs;
+ if (qs<=0){
+ return 0;
+ };
+ for(int i=0; i<qs; i++){
+ QString b=a+" "+i;
+ addWidget(b, new CLabel(i));
+ };
+ return 0;
+
+}
+int MainWindow::alias(const QString & a, int & b){
+
+}
+int MainWindow::entry(){
+ QDateTime v;
+ QString a=v.currentDateTime().toString(QString("yyyy-MM-dd hh:mm:ss"))+" "+texte->text();
+ qDebug()<<a;
+ /*q->prepare("INSERT INTO raw (date, texte) VALUES (:date, :texte);");
+ q->bindValue(":date", v.currentDateTime().toString(QString("yyyy-MM-dd hh:mm:ss")));
+ q->bindValue(":texte", texte->text());
+ q->exec();*/
+
+}