]> git.nothing2do.fr Git - diary-mobile.git/commitdiff
Initial commit
authorNorbert Moutarde <norbert.moutarde@nothing2do.eu>
Tue, 12 Nov 2013 15:49:49 +0000 (16:49 +0100)
committerNorbert Moutarde <norbert.moutarde@nothing2do.eu>
Tue, 12 Nov 2013 15:49:49 +0000 (16:49 +0100)
diary-mobile-android.pro [new file with mode: 0644]
main.cpp [new file with mode: 0644]
mainwindow.cpp [new file with mode: 0644]
mainwindow.h [new file with mode: 0644]

diff --git a/diary-mobile-android.pro b/diary-mobile-android.pro
new file mode 100644 (file)
index 0000000..8e0abed
--- /dev/null
@@ -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 (file)
index 0000000..b48f94e
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+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 (file)
index 0000000..1c37597
--- /dev/null
@@ -0,0 +1,363 @@
+#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();*/
+
+}
diff --git a/mainwindow.h b/mainwindow.h
new file mode 100644 (file)
index 0000000..f57f67e
--- /dev/null
@@ -0,0 +1,114 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+//#include <QtGui> don't work since 5.1 (or 5.2)
+#include <QtNetwork/QtNetwork>
+#include <QtSql/QSqlDatabase>
+#include <QGridLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QStatusBar>
+#include <QInputDialog>
+#include <QMenu>
+#include <QMenuBar>
+#include <QtSql/QSqlQuery>
+#include <QtSql/QSqlError>
+#include <QMessageBox>
+//#include <QTableWidget>
+#include <QTextEdit>
+
+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<const QString, const CLabel*> widget;
+    QList<QString> way;
+    QSqlDatabase db;
+    QSqlQuery *q;
+
+};
+
+
+#endif // MAINWINDOW_H
+