From a0e9d2e6015c4dff3acea55939c3d66dceb54ceb Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Sat, 17 Aug 2019 22:03:17 +0300 Subject: [PATCH] - more work on refactoring --- client/CMakeLists.txt | 5 ++--- client/browserwidget.cpp | 36 +++++++++++++++++++++++++++------- client/browserwidget.h | 42 ++++++++++++++++++++++++++++++++++------ client/main.cpp | 41 +++++++++++++++++++++++++++++++++++++++ client/mainwindow.cpp | 16 +++++---------- client/mainwindow.h | 1 + 6 files changed, 114 insertions(+), 27 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index ba58e91..9782a6f 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -142,7 +142,7 @@ target_include_directories(${EXE_NAME} SYSTEM BEFORE #PUBLIC ${UUID_INCLUDE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/sqlitecpp/include PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/sqlitecpp/sqlite3/include - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../lib/openssl/include + PUBLIC ${OPENSSL_INCLUDE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../lib/uuid/include ) @@ -164,8 +164,7 @@ endif() target_link_libraries(${EXE_NAME} SQLiteCpp qtkeychain - #${UUID_LIB} - uuid + ${UUID_LIB} ${OPENSSL_CRYPTO} Qt5::Core Qt5::Widgets Qt5::PrintSupport Qt5::OpenGL # Qt ${PLATFORM_LIBS} # System specific libraries diff --git a/client/browserwidget.cpp b/client/browserwidget.cpp index 8e7e476..a4b501a 100644 --- a/client/browserwidget.cpp +++ b/client/browserwidget.cpp @@ -1,6 +1,9 @@ #include "browserwidget.h" #include "ui_browserwidget.h" +#include "tasktreemodel.h" +#include + BrowserWidget::BrowserWidget(QWidget *parent) : QWidget(parent), ui(new Ui::BrowserWidget) @@ -13,7 +16,7 @@ BrowserWidget::~BrowserWidget() delete ui; } -void BrowserWidget::newRootTask() +void BrowserWidget::onNewRootTask() { PTask rootTask = mTaskTreeModel->addTask(QModelIndex(), Storage::instance().topOfTaskTree().size()); QModelIndex rootIndex = mTaskTreeModel->getIndex(rootTask); @@ -21,7 +24,7 @@ void BrowserWidget::newRootTask() ui->mTaskTree->edit(rootIndex); } -void BrowserWidget::newTask() +void BrowserWidget::onNewTask() { QModelIndex index = ui->mTaskTree->currentIndex(); if (index.isValid()) @@ -39,7 +42,7 @@ void BrowserWidget::newTask() ui->mTaskTree->edit(childIndex); } -void BrowserWidget::newSibling() +void BrowserWidget::onNewSibling() { QModelIndex index = ui->mTaskTree->currentIndex(); if (!index.isValid()) @@ -55,7 +58,7 @@ void BrowserWidget::newSibling() ui->mTaskTree->edit(i); } -void BrowserWidget::moveUp() +void BrowserWidget::onMoveUp() { QModelIndex index = ui->mTaskTree->currentIndex(); if (!index.isValid()) @@ -72,7 +75,7 @@ void BrowserWidget::moveUp() ui->mTaskTree->setCurrentIndex(mTaskTreeModel->getIndex(currentTask)); } -void BrowserWidget::moveDown() +void BrowserWidget::onMoveDown() { QModelIndex index = ui->mTaskTree->currentIndex(); if (!index.isValid()) @@ -95,14 +98,14 @@ void BrowserWidget::moveDown() ui->mTaskTree->setCurrentIndex(mTaskTreeModel->getIndex(currentTask)); } -void BrowserWidget::renameTask() +void BrowserWidget::onRenameTask() { QModelIndex index = ui->mTaskTree->currentIndex(); if (index.isValid()) ui->mTaskTree->edit(index); } -void BrowserWidget::deleteTask() +void BrowserWidget::onDeleteTask() { QModelIndex index = ui->mTaskTree->currentIndex(); if (!index.isValid()) @@ -135,3 +138,22 @@ void BrowserWidget::deleteTask() mTaskTreeModel->deleteTask(ui->mTaskTree->currentIndex()); } } + +void BrowserWidget::alertBox(const QString &title, const QString &text, AlertType alertType) +{ + mAlertBox = new QMessageBox(alertType == AlertType_Critical ? QMessageBox::Critical : QMessageBox::Warning, + title, text, QMessageBox::Ok, this, + Qt::Sheet); + switch (alertType) + { + case AlertType_Critical: + connect(mAlertBox, SIGNAL(finished(int)), this, SLOT(criticalAlertFinished(int))); + break; + + case AlertType_Warning: + connect(mAlertBox, SIGNAL(finished(int)), this, SLOT(warningAlertFinished(int))); + break; + } + + mAlertBox->show(); +} diff --git a/client/browserwidget.h b/client/browserwidget.h index 2926bba..e594789 100644 --- a/client/browserwidget.h +++ b/client/browserwidget.h @@ -3,10 +3,16 @@ #include +#include "task.h" +#include "settings.h" + namespace Ui { class BrowserWidget; } +class TaskTreeModel; +class QMessageBox; + class BrowserWidget : public QWidget { Q_OBJECT @@ -17,16 +23,40 @@ public: private: Ui::BrowserWidget *ui; + TaskTreeModel* mTaskTreeModel = nullptr; + PTask mCurrentTask, mAutomaticTask; + QSharedPointer mSettings; + QMessageBox* mAlertBox = nullptr; + + enum AlertType + { + AlertType_Warning, + AlertType_Critical, + AlertType_CannotOpen + }; + void alertBox(const QString &title, const QString &text, AlertType alertType); public slots: + // Called when new root task has to be created. It will create both task in DB and UI. void onNewRootTask(); - void onNewTask(); - void onNewSibling(); - void onMoveUp(); - void onMoveDown(); - void onRenameTask(); - void onDeleteTask(); + // Called when new task has to be created. + void onNewTask(); + + // Called when new sibling is requested. + void onNewSibling(); + + // Called when node is moved up + void onMoveUp(); + + // Called when node is moved down + void onMoveDown(); + + // Called when node is to be renamed + void onRenameTask(); + + // Called when node has to be deleted + void onDeleteTask(); }; #endif // BROWSERWIDGET_H diff --git a/client/main.cpp b/client/main.cpp index 5310ac2..28e94ee 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -9,6 +9,47 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); helper::theme::applyCurrent(Settings::instance()); + // Check if database / password are available + QString path = helper::path::pathToDatabase(); + + // Find optional custom path to database + if (Settings::instance().data()[KEY_DB_FILENAME_SPECIFIED].toBool()) + path = Settings::instance().data()[KEY_DB_FILENAME].toString(); + + QString folder = QFileInfo(path).absoluteDir().path(); + Storage::instance().setPath(path); + + // Check if file exists at all + if (!QFile::exists(path)) + { + // Show dialog that requests database path + } + else + { + // Check if password is available + if (mSettings->data()[KEY_AUTOSAVE_PASSWORD].toBool()) + { + QString password = helper::password::load(); + if (password.isEmpty()) + { + // Ask about password + } + else + { + Storage::instance().setKey(password); + if (!Storage::instance().open()) + { + askDbPassword(tr("Invalid password, please try again.")); + } + else + QApplication::postEvent(this, new UiInitEvent()); + } + } + else + askDbPassword(QString()); + } + + MainWindow w; w.layout()->invalidate(); diff --git a/client/mainwindow.cpp b/client/mainwindow.cpp index 7b88132..bda8efb 100644 --- a/client/mainwindow.cpp +++ b/client/mainwindow.cpp @@ -6,6 +6,7 @@ #include "helper.h" #include "newpassworddlg.h" #include "passworddlg.h" + #include #include #include @@ -13,6 +14,7 @@ #include #include #include +#include #include "appevents.h" #include "preferencesdlg.h" @@ -62,14 +64,6 @@ MainWindow::MainWindow(QWidget *parent) : loadGeometry(); - // Now check if database is already configured - mStackedViews = new QStackedWidget(this); - setCentralWidget(mStackedViews); - mStackedViews->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); - buildMainView(); - buildOpenOrCreateView(); - buildPasswordView(); - // Find default database file exists QString path = helper::path::pathToDatabase(); @@ -852,7 +846,7 @@ void MainWindow::buildPasswordView() { if (!mConnectDbWidget) { - mConnectDbWidget = new ConnectDbWidget(message, mStackedViews); + mConnectDbWidget = new ConnectDbWidget(QString(), mStackedViews); connect(mConnectDbWidget, SIGNAL(passwordEntered(QString)), this, SLOT(onDbPasswordEntered(QString))); connect(mConnectDbWidget, SIGNAL(cancelled()), this, SLOT(onDbPasswordCancelled())); int index = mStackedViews->addWidget(mConnectDbWidget); @@ -865,9 +859,9 @@ void MainWindow::buildOpenOrCreateView() if (!mOpenOrCreateDbWidget) { mOpenOrCreateDbWidget = new OpenOrCreateDbWidget(mStackedViews); - connect(w, &OpenOrCreateDbWidget::databaseChanged, + connect(mOpenOrCreateDbWidget, &OpenOrCreateDbWidget::databaseChanged, [this](const QString& path) { onDatabaseChanged(path); }); - connect(w, &OpenOrCreateDbWidget::passwordEntered, + connect(mOpenOrCreateDbWidget, &OpenOrCreateDbWidget::passwordEntered, [this](const QString& password) { onNewDbPasswordEntered(password); }); int index = mStackedViews->addWidget(mOpenOrCreateDbWidget); assert (index == ViewIndex_OpenOrCreateDb); diff --git a/client/mainwindow.h b/client/mainwindow.h index 838efd5..66eaf9b 100644 --- a/client/mainwindow.h +++ b/client/mainwindow.h @@ -96,6 +96,7 @@ private: QDialog* mTrayWindow = nullptr; QString mPassword = NOPASSWORDSTRING; ConnectDbWidget* mConnectDbWidget = nullptr; + OpenOrCreateDbWidget* mOpenOrCreateDbWidget = nullptr; QStackedWidget* mStackedViews = nullptr;