view main.h @ 41:c953ee761af0

Cosmetics.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 06 Apr 2017 14:49:37 +0300
parents 2cc7c89ab649
children 60ffa45b4014
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)
//
#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_VERSION       "0.2"                     // Version string


//
// 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);
    int  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 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;

private slots:
    void on_button_AddPerson_clicked();

    void on_button_EditPerson_clicked();

    void on_button_ClearFilter_clicked();

    void on_button_Quit_clicked();

    void on_button_AddDebt_clicked();

    void on_button_PayDebt_clicked();

    void on_button_PayFullDebt_clicked();

    void on_edit_PersonFilter_textChanged(const QString &arg1);

    void on_tableview_People_doubleClicked(const QModelIndex &index);

    void selectedPersonChanged(const QModelIndex &, const QModelIndex &);
    
    void changeUIScaleZoomIn();
    void changeUIScaleZoomOut();
    
    void updateSortOrder(int index, Qt::SortOrder order);

    void on_button_DeletePerson_clicked();

private:
    Ui::SyntilistaMainWindow *ui;

    TransactionSQLModel *model_Latest;
    PersonInfo currPerson;

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

    QShortcut *sc_quit, *sc_esc, *sc_sc_up, *sc_sc_dn;
};


//
// 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;
};

#endif // SYNTILISTA_H