From: Norbert Moutarde Date: Tue, 12 Nov 2013 15:49:49 +0000 (+0100) Subject: Initial commit X-Git-Url: https://git.nothing2do.fr/?a=commitdiff_plain;h=6f29724d676785bf840170d5f4b778b46466837b;p=diary-mobile.git Initial commit --- 6f29724d676785bf840170d5f4b778b46466837b diff --git a/diary-mobile-android.pro b/diary-mobile-android.pro new file mode 100644 index 0000000..8e0abed --- /dev/null +++ b/diary-mobile-android.pro @@ -0,0 +1,29 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-11-08T18:37:19 +# +#------------------------------------------------- + +QT += core gui network sql + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = diary-mobile-android +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h + +FORMS += mainwindow.ui + +CONFIG += mobility +MOBILITY = +QMAKE_CXXFLAGS += -fpermissive + +ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android + +OTHER_FILES += \ + android/AndroidManifest.xml diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..1c37597 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,363 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "mainwindow.h" +#include +#include +#include +//#include +#include +#include +#include +#include +#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(128); + break; + case ScreenOrientationLockLandscape: + attribute = static_cast(129); + break; + default: + case ScreenOrientationAuto: + attribute = static_cast(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())="<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 :"<; + 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("<size(action)="<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; iaddAction(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°"<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() ? "<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():"<size(); +} +int MainWindow::alias(const QString & a){ + qDebug()<<"alias("<prepare(cmd); + q->bindValue(":name", a); + q->exec(); + int qs=q->size(); + qDebug()<<"q->size(alias)="<text(); + qDebug()<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();*/ + +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..f57f67e --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,114 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +//#include don't work since 5.1 (or 5.2) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include + +class CLabel : public QLabel +{ +Q_OBJECT + + +public: + explicit CLabel( const QString& text ="default", QWidget * parent = 0 ); + ~CLabel(); +signals: + void clicked(); +private slots: + +protected: + void mousePressEvent ( QMouseEvent * event ) ; + void mouseReleaseEvent(QMouseEvent * event ) ; +}; +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit MainWindow(QWidget *parent = 0); + virtual ~MainWindow(); + + // Note that this will only have an effect on Symbian and Fremantle. + void setOrientation(ScreenOrientation orientation); + + void showExpanded(); + CLabel* addWidget(const QString &, CLabel *); + void remWidget(const QString &); +private slots: + void start(); + void chooseuser(); + void chooseport(); + void choosehost(); + void choosepass(); + void choosedb(); + void choosefile(); + //void disconnect(); + void quit(); + void lsconfig(); + void action(const QString &); + void createMenuBar(); + void toggleMenu(); + void flush(); + void editConf(const QString &); + void confChanged(); + //void newStatus(QAbstractSocket::SocketState &); + //void incomingData(); + void debug(int); + void connected(); + void TCPerrors(QAbstractSocket::SocketError); + QString getText(const QString &); + void connectdb(); + void firstrun(); + QString &get(int, int); + int alias(const QString &); + int alias(const QString &, int &); + int exec(const QString &); + int entry(); +public slots: + +signals: + //qint16 bytesAvailable() const; +private: + QWidget *screen; + QGridLayout *grid; + //QTableWidget *table; + QVBoxLayout * vbox; + QHBoxLayout * hbox; + QLineEdit *texte; + CLabel *ok; + QLabel *label; + QSettings *conf; + QNetworkAccessManager *net; + QString host, user, tmp, password, servercert, database; + QMenu *FileMenu, *EditMenu, *HelpMenu; + unsigned short int port;// j'ai lu les docs sur internet et 0<"unsigned short int"<65536 + QSignalMapper *signalmap; + QMap widget; + QList way; + QSqlDatabase db; + QSqlQuery *q; + +}; + + +#endif // MAINWINDOW_H +