view src/main.h @ 113:907f2ddf6801

Use #defines for SQL table field lengths.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 05 Jul 2017 09:52:10 +0300
parents 2524434a7193
children a5c8741b8662
line wrap: on
line source

//
// Syntilista - velkalistasovellus Kampus-kahvilaan
// Programmed and designed by Matti Hämäläinen <ccr@tnsp.org>
// (C) Copyright 2017 Tecnic Software productions (TNSP)
//
// Distributed under 3-clause BSD style license, refer to
// included file "COPYING" for exact terms.
//
#ifndef SYNTILISTA_H
#define SYNTILISTA_H

#include <QMainWindow>
#include <QShortcut>
#include <QDialog>
#include <QtSql>
#include <QSqlQueryModel>


//
// Global application defines
//
#define APP_VENDOR        "TNSP"                    // Vendor ID (for settings, etc.)
#define APP_ID            "Kampus Syntilista"       // Application ID (for settings)
#define APP_NAME          "Café Kampus Syntilista"  // Application title/name
#define APP_SQLITE_FILE   "syntilista.sqlite3"      // SQLite3 database file name (without path)


#define SQL_MAX_FIRST_NAME 128
#define SQL_MAX_LAST_NAME  128
#define SQL_MAX_EXTRA_INFO 2048


//
// Custom SQL models
//
class PersonInfo : public QObject
{
    Q_OBJECT

public:
    explicit PersonInfo()
    {
        id = -1;
        firstName = "";
        lastName = "";
        extraInfo = "";
        balance = 0;
    }

    ~PersonInfo()
    {
    }

    void dump();

    qint64 id;
    QString firstName, lastName, extraInfo;
    double balance;
    QDateTime added, updated;
};



class PersonSQLModel : public QSqlQueryModel
{
    Q_OBJECT

private:

public:
    PersonSQLModel(QObject *parent = 0);

    QVariant data(const QModelIndex &item, int role) const Q_DECL_OVERRIDE;

    int  updatePerson(const PersonInfo &person);
    qint64  addPerson(const PersonInfo &person);
    int  deletePerson(qint64 id);
    void updateModel();
};



class TransactionSQLModel : public QSqlQueryModel
{
    Q_OBJECT

private:

public:
    TransactionSQLModel(QObject *parent = 0);

    QVariant data(const QModelIndex &item, int role) const Q_DECL_OVERRIDE;

    void updateModel();
};



//
// Main window
//
namespace Ui
{
    class SyntilistaMainWindow;
    class EditPerson;
    class AboutWindow;
}

class SyntilistaMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit SyntilistaMainWindow(QWidget *parent = 0);
    ~SyntilistaMainWindow();

    void statusMsg(const QString &msg);

    void readSettings();
    void saveSettings();
    void setActivePerson(qint64 id);
    int  addTransaction(qint64 id, double value, PersonInfo &info);
    int  addTransactionGUI(qint64 id, bool debt, double value);
    void updatePersonList();

    PersonSQLModel *model_People;

public slots:
    void focusDebtEdit();

private slots:
    void on_button_AddPerson_clicked();
    void on_button_EditPerson_clicked();
    void on_button_DeletePerson_clicked();

    void on_edit_PersonFilter_textChanged(const QString &arg1);
    void on_button_ClearFilter_clicked();

    void on_button_Quit_clicked();
    void on_button_About_clicked();

    void on_button_AddDebt_clicked();
    void on_button_PayDebt_clicked();
    void on_button_PayFullDebt_clicked();

    void on_tableview_People_doubleClicked(const QModelIndex &index);

    void selectedPersonChanged(const QModelIndex &, const QModelIndex &);

    void selectRowPrev();
    void selectRowNext();

    void changeUIZoomIn();
    void changeUIZoomOut();
    void changeUIZoomReset();

    void updateSortOrder(int index, Qt::SortOrder order);


private:
    Ui::SyntilistaMainWindow *ui;

    TransactionSQLModel *model_Latest;
    PersonInfo currPerson;

    int peopleSortIndex;
    Qt::SortOrder peopleSortOrder;
    QString peopleFilter;
};


//
// Person edit / new person dialog
//
class EditPerson : public QDialog
{
    Q_OBJECT

public:
    explicit EditPerson(QWidget *parent = 0);
    ~EditPerson();

    void statusMsg(const QString &msg);

    void clearForm();
    bool validateForm();
    void setPerson(qint64 id);

private slots:
    void on_button_OK_clicked();

    void on_button_Cancel_clicked();

    void on_edit_FirstName_textChanged(const QString &arg1);

    void on_edit_LastName_textChanged(const QString &arg1);

private:
    Ui::EditPerson *ui;

    PersonInfo selPerson;
    TransactionSQLModel *model_Transactions;
};


//
// About dialog
//
class AboutWindow : public QDialog
{
    Q_OBJECT

public:
    explicit AboutWindow(QWidget *parent = 0);
    ~AboutWindow();

private slots:
    void on_button_Close_clicked();

private:
    Ui::AboutWindow *ui;
};


#endif // SYNTILISTA_H