From 420e1174025329251c8924b2701e9a22b7a6c65f Mon Sep 17 00:00:00 2001 From: Miroslav Safr Date: Wed, 5 Mar 2014 15:35:27 +0200 Subject: [PATCH] Int: Privatized MainWindow Signed-off-by: Miroslav Safr --- src/mainwindow.cpp | 580 +++++++++++++++++++++++++-------------------- src/mainwindow.h | 50 +--- 2 files changed, 329 insertions(+), 301 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index eac7a87..cb1e02a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -44,28 +44,86 @@ #include "commandlineargs.h" #include "desktopfile.h" -MainWindow * g_pMainGuiWindow = NULL; +namespace { + MainWindow * g_pMainGuiWindow = NULL; +} + + +class MainWindow_private : public QObject +{ + public: + explicit MainWindow_private(QObject* parent) : + QObject(parent), + loadProjectAct(NULL), + loadProjectInNewInstanceAct(NULL), + reloadProjectAct(NULL), + saveProjectAct(NULL), + backupProjectWithTimeStampAct(NULL), + saveProjectAsAct(NULL), + exportAsPictureAct(NULL), + loadTextFileAct(NULL), + printAct(NULL), + exportAsPdf(NULL), + quitAct(NULL), + deleteAllAct(NULL), + createDesktopLinkAct(NULL), + aboutAct(NULL), + m_canvasWidget(new DragWidget()), //TODO use size hint in canvas + m_aboutDialog(NULL), + m_sOpenedFile(""), + intervalReloadTimer(NULL) + {} + + QAction* loadProjectAct; + QAction* loadProjectInNewInstanceAct; + QAction* reloadProjectAct; + QAction* saveProjectAct; + QAction* backupProjectWithTimeStampAct; + QAction* saveProjectAsAct; + QAction* exportAsPictureAct; + QAction* loadTextFileAct; + QAction* printAct; + QAction* exportAsPdf; + QAction* quitAct; + QAction* deleteAllAct; + QAction* m_BgColorWhiteAction; + QAction* m_BgColorGrayAction ; + QAction* m_BgColorCyanAction; + QAction* m_BgDefaultImage1Action; + QAction* m_BgDefaultImage2Action; + QAction* m_BgImageKanban1Action; + QAction* m_BgImageKanban1HAction; + QAction* m_BgImageKanban2Action; + QAction* m_BgImageKanban2HAction; + QAction* m_BgImageKanban3Action; + QAction* m_BgImageKanban3HAction; + QAction* m_BgImageReview1Action; + QAction* m_BgImageReview2Action; + QAction* m_BgUserImageAction; + QAction* m_BgFixedSize; + QAction* m_BgSizeDefault; + QAction* m_BgSize_A5_portrait; + QAction* m_BgSize_A5_landscape; + QAction* m_BgSize_A4_portrait; + QAction* m_BgSize_A4_landscape; + QAction* m_BgSize_800_600; + QAction* m_BgSize_1024_768; + QAction* m_BgSize_1280_768; + QAction* createDesktopLinkAct; + QMap automaticReloadIntervalActMap; + QAction* aboutAct; + DragWidget* m_canvasWidget; + AboutDialog* m_aboutDialog; + QString m_sOpenedFile; + QSystemTrayIcon* m_pTrayIcon; + QTimer *intervalReloadTimer; + +}; + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), - loadProjectAct(NULL), - loadProjectInNewInstanceAct(NULL), - reloadProjectAct(NULL), - saveProjectAct(NULL), - backupProjectWithTimeStampAct(NULL), - saveProjectAsAct(NULL), - exportAsPictureAct(NULL), - loadTextFileAct(NULL), - printAct(NULL), - exportAsPdf(NULL), - quitAct(NULL), - deleteAllAct(NULL), - createDesktopLinkAct(NULL), - aboutAct(NULL), - m_canvasWidget(new DragWidget()), //TODO use size hint in canvas - m_aboutDialog(NULL), - m_sOpenedFile(""), - intervalReloadTimer(NULL) + d(new MainWindow_private(this)) { g_pMainGuiWindow = this; //createDockWindows(); @@ -73,7 +131,7 @@ MainWindow::MainWindow(QWidget *parent) : createMenus(); //createToolBars(); //createStatusBar(); - setCentralWidget(m_canvasWidget); + setCentralWidget(d->m_canvasWidget); #ifdef DEBUG setWindowTitle(QString(APPLICATION_NAME) + "-" + QString(APP_FULL_VERSION_TAG) + " (" + QString(APP_DATE) +")"); #else @@ -82,11 +140,11 @@ MainWindow::MainWindow(QWidget *parent) : setWindowIcon(QIcon(":/icons/semaphored.svg")); - m_pTrayIcon = new QSystemTrayIcon(QIcon(":/icons/semaphored.svg"),this); + d->m_pTrayIcon = new QSystemTrayIcon(QIcon(":/icons/semaphored.svg"),this); connect(this, SIGNAL(signalPlaceToTray()),this, SLOT(slotPlaceToTray()),Qt::QueuedConnection); - connect(m_pTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + connect(d->m_pTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); - m_pTrayIcon->show(); + d->m_pTrayIcon->show(); } MainWindow* MainWindow::instance() @@ -96,163 +154,163 @@ MainWindow* MainWindow::instance() void MainWindow::createActions() { - loadProjectAct = new QAction(QIcon(":/icons/load_project.svg"), tr("L&oad project.."), this); - loadProjectAct->setStatusTip(tr("Load project from file")); - loadProjectAct->setShortcut(tr("Ctrl+O")); - connect(loadProjectAct, SIGNAL(triggered()), this, SLOT(loadProjectSlot())); - - loadProjectInNewInstanceAct = new QAction(QIcon(":/icons/load_project.svg"), tr("Load project in new &instance.."), this); - loadProjectInNewInstanceAct->setStatusTip(tr("Load project in new instance")); - loadProjectInNewInstanceAct->setShortcut(tr("Shift+Ctrl+O")); - connect(loadProjectInNewInstanceAct, SIGNAL(triggered()), this, SLOT(loadProjectInNewInstanceSlot())); - - reloadProjectAct = new QAction(QIcon(":/icons/reload_project.svg"), tr("&Reload project"), this); - reloadProjectAct->setStatusTip(tr("Reload project..")); - reloadProjectAct->setShortcut(tr("Ctrl+R")); - connect(reloadProjectAct, SIGNAL(triggered()), this, SLOT(reloadProjectSlot())); - - saveProjectAct = new QAction(QIcon(":/icons/save_project.svg"), tr("&Save project"), this); - saveProjectAct->setStatusTip(tr("Save project")); - saveProjectAct->setShortcut(tr("Ctrl+S")); - connect(saveProjectAct, SIGNAL(triggered()), this, SLOT(saveProjectSlot())); - - saveProjectAsAct = new QAction(QIcon(":/icons/save_project_as.svg"), tr("Save project &as .."), this); - saveProjectAsAct->setStatusTip(tr("Save project to different file")); - saveProjectAsAct->setShortcut(tr("Ctrl+Shift+S")); - connect(saveProjectAsAct, SIGNAL(triggered()), this, SLOT(saveProjectAsSlot())); - - backupProjectWithTimeStampAct = new QAction(QIcon(":/icons/backup_project_ts.svg"), tr("&Backup project with timestamp"), this); - backupProjectWithTimeStampAct->setStatusTip(tr("Backup project with timestamp")); - backupProjectWithTimeStampAct->setShortcut(tr("Ctrl+B")); - connect(backupProjectWithTimeStampAct, SIGNAL(triggered()), this, SLOT(backupProjectWithTimeStampSlot())); - - exportAsPictureAct = new QAction(QIcon(":/icons/export_as_picture.png"), tr("&Export as a picture.."), this); - exportAsPictureAct->setStatusTip(tr("Export as a picture")); - exportAsPictureAct->setShortcut(tr("Ctrl+E")); - connect(exportAsPictureAct, SIGNAL(triggered()), this, SLOT(exportAsPictureSlot())); - - loadTextFileAct = new QAction(QIcon(":/icons/load_text_file.svg"), tr("&Load text file.."), this); - loadTextFileAct->setStatusTip(tr("Load text file")); - loadTextFileAct->setShortcut(tr("Ctrl+L")); - connect(loadTextFileAct, SIGNAL(triggered()), this, SLOT(loadTextFileSlot())); - - exportAsPdf = new QAction(QIcon(":/icons/export_as_pdf.svg"), tr("Export &To PDF.."), this); - exportAsPdf->setStatusTip(tr("Export To PDF")); - exportAsPdf->setShortcut(tr("Ctrl+Shift+P")); - connect(exportAsPdf, SIGNAL(triggered()), this, SLOT(exportCanvasToPdfSlot())); - - printAct = new QAction(QIcon(":/icons/print.svg"), tr("&Print.."), this); - printAct->setShortcuts(QKeySequence::Print); - printAct->setStatusTip(tr("Print the current canvas")); - connect(printAct, SIGNAL(triggered()), this, SLOT(printCurrentCanvasSlot())); - - quitAct = new QAction(QIcon(":/icons/quit.svg"), tr("&Quit"), this); - quitAct->setStatusTip(tr("Quit")); - quitAct->setShortcut(tr("Ctrl+Q")); - connect(quitAct, SIGNAL(triggered()), this, SLOT(close())); - - deleteAllAct = new QAction(QIcon(":/icons/delete_all.svg"), tr("D&elete All"), this); - deleteAllAct->setStatusTip(tr("Delete all")); - deleteAllAct->setShortcut(tr("Ctrl+E")); - connect(deleteAllAct, SIGNAL(triggered()), m_canvasWidget, SLOT(deleteAllItemsSlot())); + d->loadProjectAct = new QAction(QIcon(":/icons/load_project.svg"), tr("L&oad project.."), this); + d->loadProjectAct->setStatusTip(tr("Load project from file")); + d->loadProjectAct->setShortcut(tr("Ctrl+O")); + connect(d->loadProjectAct, SIGNAL(triggered()), this, SLOT(loadProjectSlot())); + + d->loadProjectInNewInstanceAct = new QAction(QIcon(":/icons/load_project.svg"), tr("Load project in new &instance.."), this); + d->loadProjectInNewInstanceAct->setStatusTip(tr("Load project in new instance")); + d->loadProjectInNewInstanceAct->setShortcut(tr("Shift+Ctrl+O")); + connect(d->loadProjectInNewInstanceAct, SIGNAL(triggered()), this, SLOT(loadProjectInNewInstanceSlot())); + + d->reloadProjectAct = new QAction(QIcon(":/icons/reload_project.svg"), tr("&Reload project"), this); + d->reloadProjectAct->setStatusTip(tr("Reload project..")); + d->reloadProjectAct->setShortcut(tr("Ctrl+R")); + connect(d->reloadProjectAct, SIGNAL(triggered()), this, SLOT(reloadProjectSlot())); + + d->saveProjectAct = new QAction(QIcon(":/icons/save_project.svg"), tr("&Save project"), this); + d->saveProjectAct->setStatusTip(tr("Save project")); + d->saveProjectAct->setShortcut(tr("Ctrl+S")); + connect(d->saveProjectAct, SIGNAL(triggered()), this, SLOT(saveProjectSlot())); + + d->saveProjectAsAct = new QAction(QIcon(":/icons/save_project_as.svg"), tr("Save project &as .."), this); + d->saveProjectAsAct->setStatusTip(tr("Save project to different file")); + d->saveProjectAsAct->setShortcut(tr("Ctrl+Shift+S")); + connect(d->saveProjectAsAct, SIGNAL(triggered()), this, SLOT(saveProjectAsSlot())); + + d->backupProjectWithTimeStampAct = new QAction(QIcon(":/icons/backup_project_ts.svg"), tr("&Backup project with timestamp"), this); + d->backupProjectWithTimeStampAct->setStatusTip(tr("Backup project with timestamp")); + d->backupProjectWithTimeStampAct->setShortcut(tr("Ctrl+B")); + connect(d->backupProjectWithTimeStampAct, SIGNAL(triggered()), this, SLOT(backupProjectWithTimeStampSlot())); + + d->exportAsPictureAct = new QAction(QIcon(":/icons/export_as_picture.png"), tr("&Export as a picture.."), this); + d->exportAsPictureAct->setStatusTip(tr("Export as a picture")); + d->exportAsPictureAct->setShortcut(tr("Ctrl+E")); + connect(d->exportAsPictureAct, SIGNAL(triggered()), this, SLOT(exportAsPictureSlot())); + + d->loadTextFileAct = new QAction(QIcon(":/icons/load_text_file.svg"), tr("&Load text file.."), this); + d->loadTextFileAct->setStatusTip(tr("Load text file")); + d->loadTextFileAct->setShortcut(tr("Ctrl+L")); + connect(d->loadTextFileAct, SIGNAL(triggered()), this, SLOT(loadTextFileSlot())); + + d->exportAsPdf = new QAction(QIcon(":/icons/export_as_pdf.svg"), tr("Export &To PDF.."), this); + d->exportAsPdf->setStatusTip(tr("Export To PDF")); + d->exportAsPdf->setShortcut(tr("Ctrl+Shift+P")); + connect(d->exportAsPdf, SIGNAL(triggered()), this, SLOT(exportCanvasToPdfSlot())); + + d->printAct = new QAction(QIcon(":/icons/print.svg"), tr("&Print.."), this); + d->printAct->setShortcuts(QKeySequence::Print); + d->printAct->setStatusTip(tr("Print the current canvas")); + connect(d->printAct, SIGNAL(triggered()), this, SLOT(printCurrentCanvasSlot())); + + d->quitAct = new QAction(QIcon(":/icons/quit.svg"), tr("&Quit"), this); + d->quitAct->setStatusTip(tr("Quit")); + d->quitAct->setShortcut(tr("Ctrl+Q")); + connect(d->quitAct, SIGNAL(triggered()), this, SLOT(close())); + + d->deleteAllAct = new QAction(QIcon(":/icons/delete_all.svg"), tr("D&elete All"), this); + d->deleteAllAct->setStatusTip(tr("Delete all")); + d->deleteAllAct->setShortcut(tr("Ctrl+E")); + connect(d->deleteAllAct, SIGNAL(triggered()), d->m_canvasWidget, SLOT(deleteAllItemsSlot())); QActionGroup* backgroundColorGroup = new QActionGroup(this); - m_BgColorWhiteAction = new QAction(QIcon(":/icons/white-bg.svg"), tr("&White"), this); - m_BgColorWhiteAction->setCheckable(true); - - m_BgColorGrayAction = new QAction(QIcon(":/icons/gray-bg.svg"), tr("&Gray"), this); - m_BgColorGrayAction->setCheckable(true); - - m_BgColorCyanAction = new QAction(QIcon(":/icons/cyan-bg.svg"), tr("&Cyan"), this); - m_BgColorCyanAction->setCheckable(true); - - m_BgDefaultImage1Action = new QAction(QIcon(":/icons/default_image1.png"), tr("&Default background image titles"), this); - m_BgDefaultImage1Action->setCheckable(true); - m_BgDefaultImage1Action->setChecked(true); - - m_BgDefaultImage2Action = new QAction(QIcon(":/icons/default_image2.png"), tr("&Default background image painting"), this); - m_BgDefaultImage2Action->setCheckable(true); - - m_BgImageKanban1Action = new QAction(QIcon(":/icons/bg-kanban1-a5.svg"), tr("&Kanban BTID 4 cols"), this); - m_BgImageKanban1Action->setCheckable(true); - m_BgImageKanban1HAction = new QAction(QIcon(":/icons/bg-kanban1-a5h.svg"), tr("&Kanban BTID 4 rows"), this); - m_BgImageKanban1HAction->setCheckable(true); - m_BgImageKanban2Action = new QAction(QIcon(":/icons/bg-kanban2-a5.svg"), tr("&Kanban TID 3 cols"), this); - m_BgImageKanban2Action->setCheckable(true); - m_BgImageKanban2HAction = new QAction(QIcon(":/icons/bg-kanban2-a5h.svg"), tr("&Kanban TID 3 rows"), this); - m_BgImageKanban2HAction->setCheckable(true); - m_BgImageKanban3Action = new QAction(QIcon(":/icons/bg-kanban3-a5.svg"), tr("&Kanban NSID 4 cols"), this); - m_BgImageKanban3Action->setCheckable(true); - m_BgImageKanban3HAction = new QAction(QIcon(":/icons/bg-kanban3-a5h.svg"), tr("&Kanban NSID 4 rows"), this); - m_BgImageKanban3HAction->setCheckable(true); - - m_BgImageReview1Action = new QAction(QIcon(":/icons/bg-review1-a5.svg"), tr("&Review board 4 cols"), this); - m_BgImageReview1Action->setCheckable(true); - m_BgImageReview2Action = new QAction(QIcon(":/icons/bg-review2-a5.svg"), tr("&Double review board 6 cols"), this); - m_BgImageReview2Action->setCheckable(true); - - - m_BgUserImageAction = new QAction(QIcon(":/icons/load_background_image.png"), tr("&User background image"), this); - m_BgUserImageAction->setStatusTip(tr("User background image")); - m_BgUserImageAction->setCheckable(true); + d->m_BgColorWhiteAction = new QAction(QIcon(":/icons/white-bg.svg"), tr("&White"), this); + d->m_BgColorWhiteAction->setCheckable(true); + + d->m_BgColorGrayAction = new QAction(QIcon(":/icons/gray-bg.svg"), tr("&Gray"), this); + d->m_BgColorGrayAction->setCheckable(true); + + d->m_BgColorCyanAction = new QAction(QIcon(":/icons/cyan-bg.svg"), tr("&Cyan"), this); + d->m_BgColorCyanAction->setCheckable(true); + + d->m_BgDefaultImage1Action = new QAction(QIcon(":/icons/default_image1.png"), tr("&Default background image titles"), this); + d->m_BgDefaultImage1Action->setCheckable(true); + d->m_BgDefaultImage1Action->setChecked(true); + + d->m_BgDefaultImage2Action = new QAction(QIcon(":/icons/default_image2.png"), tr("&Default background image painting"), this); + d->m_BgDefaultImage2Action->setCheckable(true); + + d->m_BgImageKanban1Action = new QAction(QIcon(":/icons/bg-kanban1-a5.svg"), tr("&Kanban BTID 4 cols"), this); + d->m_BgImageKanban1Action->setCheckable(true); + d->m_BgImageKanban1HAction = new QAction(QIcon(":/icons/bg-kanban1-a5h.svg"), tr("&Kanban BTID 4 rows"), this); + d->m_BgImageKanban1HAction->setCheckable(true); + d->m_BgImageKanban2Action = new QAction(QIcon(":/icons/bg-kanban2-a5.svg"), tr("&Kanban TID 3 cols"), this); + d->m_BgImageKanban2Action->setCheckable(true); + d->m_BgImageKanban2HAction = new QAction(QIcon(":/icons/bg-kanban2-a5h.svg"), tr("&Kanban TID 3 rows"), this); + d->m_BgImageKanban2HAction->setCheckable(true); + d->m_BgImageKanban3Action = new QAction(QIcon(":/icons/bg-kanban3-a5.svg"), tr("&Kanban NSID 4 cols"), this); + d->m_BgImageKanban3Action->setCheckable(true); + d->m_BgImageKanban3HAction = new QAction(QIcon(":/icons/bg-kanban3-a5h.svg"), tr("&Kanban NSID 4 rows"), this); + d->m_BgImageKanban3HAction->setCheckable(true); + + d->m_BgImageReview1Action = new QAction(QIcon(":/icons/bg-review1-a5.svg"), tr("&Review board 4 cols"), this); + d->m_BgImageReview1Action->setCheckable(true); + d->m_BgImageReview2Action = new QAction(QIcon(":/icons/bg-review2-a5.svg"), tr("&Double review board 6 cols"), this); + d->m_BgImageReview2Action->setCheckable(true); + + + d->m_BgUserImageAction = new QAction(QIcon(":/icons/load_background_image.png"), tr("&User background image"), this); + d->m_BgUserImageAction->setStatusTip(tr("User background image")); + d->m_BgUserImageAction->setCheckable(true); //connect(m_BgUserImageAction, SIGNAL(triggered()), m_canvasWidget, SLOT(loadBackgroundImageSlot())); - backgroundColorGroup->addAction(m_BgColorWhiteAction); - backgroundColorGroup->addAction(m_BgColorGrayAction); - backgroundColorGroup->addAction(m_BgColorCyanAction); - backgroundColorGroup->addAction(m_BgDefaultImage1Action); - backgroundColorGroup->addAction(m_BgDefaultImage2Action); - backgroundColorGroup->addAction(m_BgImageKanban1Action); - backgroundColorGroup->addAction(m_BgImageKanban1HAction); - backgroundColorGroup->addAction(m_BgImageKanban2Action); - backgroundColorGroup->addAction(m_BgImageKanban2HAction); - backgroundColorGroup->addAction(m_BgImageKanban3Action); - backgroundColorGroup->addAction(m_BgImageKanban3HAction); - backgroundColorGroup->addAction(m_BgImageReview1Action); - backgroundColorGroup->addAction(m_BgImageReview2Action); - backgroundColorGroup->addAction(m_BgUserImageAction); + backgroundColorGroup->addAction(d->m_BgColorWhiteAction); + backgroundColorGroup->addAction(d->m_BgColorGrayAction); + backgroundColorGroup->addAction(d->m_BgColorCyanAction); + backgroundColorGroup->addAction(d->m_BgDefaultImage1Action); + backgroundColorGroup->addAction(d->m_BgDefaultImage2Action); + backgroundColorGroup->addAction(d->m_BgImageKanban1Action); + backgroundColorGroup->addAction(d->m_BgImageKanban1HAction); + backgroundColorGroup->addAction(d->m_BgImageKanban2Action); + backgroundColorGroup->addAction(d->m_BgImageKanban2HAction); + backgroundColorGroup->addAction(d->m_BgImageKanban3Action); + backgroundColorGroup->addAction(d->m_BgImageKanban3HAction); + backgroundColorGroup->addAction(d->m_BgImageReview1Action); + backgroundColorGroup->addAction(d->m_BgImageReview2Action); + backgroundColorGroup->addAction(d->m_BgUserImageAction); backgroundColorGroup->setExclusive(true); connect(backgroundColorGroup, SIGNAL(triggered(QAction *)), this, SLOT(changeBackgroundColorSlot(QAction*))); QActionGroup* backgroundSizeGroup = new QActionGroup(this); - m_BgFixedSize = new QAction(QIcon(":/icons/size.png"), tr("&Fixed size"), this); - m_BgFixedSize->setCheckable(true); - connect(m_BgFixedSize, SIGNAL(triggered ( bool )), canvasWidget(), SLOT(setFixedSizeBg(bool ))); - connect(m_canvasWidget, SIGNAL(changeFixedSize ( bool )), m_BgFixedSize, SLOT(setChecked(bool ))); + d->m_BgFixedSize = new QAction(QIcon(":/icons/size.png"), tr("&Fixed size"), this); + d->m_BgFixedSize->setCheckable(true); + connect(d->m_BgFixedSize, SIGNAL(triggered ( bool )), canvasWidget(), SLOT(setFixedSizeBg(bool ))); + connect(canvasWidget(), SIGNAL(changeFixedSize ( bool )), d->m_BgFixedSize, SLOT(setChecked(bool ))); - m_BgSizeDefault = new QAction(QIcon(":/icons/size.png"), tr("&Default backgound size"), this); - m_BgSizeDefault->setCheckable(true); + d->m_BgSizeDefault = new QAction(QIcon(":/icons/size.png"), tr("&Default backgound size"), this); + d->m_BgSizeDefault->setCheckable(true); - m_BgSize_A5_landscape = new QAction(QIcon(":/icons/size.png"), tr("&A5 landscape"), this); - m_BgSize_A5_landscape->setCheckable(true); + d->m_BgSize_A5_landscape = new QAction(QIcon(":/icons/size.png"), tr("&A5 landscape"), this); + d->m_BgSize_A5_landscape->setCheckable(true); - m_BgSize_A5_portrait = new QAction(QIcon(":/icons/size.png"), tr("&A5 portrait"), this); - m_BgSize_A5_portrait->setCheckable(true); + d->m_BgSize_A5_portrait = new QAction(QIcon(":/icons/size.png"), tr("&A5 portrait"), this); + d->m_BgSize_A5_portrait->setCheckable(true); - m_BgSize_A4_landscape = new QAction(QIcon(":/icons/size.png"), tr("&A4 landscape"), this); - m_BgSize_A4_landscape->setCheckable(true); + d->m_BgSize_A4_landscape = new QAction(QIcon(":/icons/size.png"), tr("&A4 landscape"), this); + d->m_BgSize_A4_landscape->setCheckable(true); - m_BgSize_A4_portrait = new QAction(QIcon(":/icons/size.png"), tr("&A4 portrait"), this); - m_BgSize_A4_portrait->setCheckable(true); + d->m_BgSize_A4_portrait = new QAction(QIcon(":/icons/size.png"), tr("&A4 portrait"), this); + d->m_BgSize_A4_portrait->setCheckable(true); - m_BgSize_800_600 = new QAction(QIcon(":/icons/size.png"), tr("&800x600"), this); - m_BgSize_800_600->setCheckable(true); + d->m_BgSize_800_600 = new QAction(QIcon(":/icons/size.png"), tr("&800x600"), this); + d->m_BgSize_800_600->setCheckable(true); - m_BgSize_1024_768 = new QAction(QIcon(":/icons/size.png"), tr("&1024x768"), this); - m_BgSize_1024_768->setCheckable(true); + d->m_BgSize_1024_768 = new QAction(QIcon(":/icons/size.png"), tr("&1024x768"), this); + d->m_BgSize_1024_768->setCheckable(true); - m_BgSize_1280_768 = new QAction(QIcon(":/icons/size.png"), tr("&1280x768"), this); - m_BgSize_1280_768->setCheckable(true); + d->m_BgSize_1280_768 = new QAction(QIcon(":/icons/size.png"), tr("&1280x768"), this); + d->m_BgSize_1280_768->setCheckable(true); - backgroundSizeGroup->addAction(m_BgSizeDefault); - backgroundSizeGroup->addAction(m_BgSize_A5_landscape); - backgroundSizeGroup->addAction(m_BgSize_A5_portrait); - backgroundSizeGroup->addAction(m_BgSize_A4_landscape); - backgroundSizeGroup->addAction(m_BgSize_A4_portrait); - backgroundSizeGroup->addAction(m_BgSize_800_600); - backgroundSizeGroup->addAction(m_BgSize_1024_768); - backgroundSizeGroup->addAction(m_BgSize_1280_768); + backgroundSizeGroup->addAction(d->m_BgSizeDefault); + backgroundSizeGroup->addAction(d->m_BgSize_A5_landscape); + backgroundSizeGroup->addAction(d->m_BgSize_A5_portrait); + backgroundSizeGroup->addAction(d->m_BgSize_A4_landscape); + backgroundSizeGroup->addAction(d->m_BgSize_A4_portrait); + backgroundSizeGroup->addAction(d->m_BgSize_800_600); + backgroundSizeGroup->addAction(d->m_BgSize_1024_768); + backgroundSizeGroup->addAction(d->m_BgSize_1280_768); connect(backgroundSizeGroup, SIGNAL(triggered(QAction *)), this, SLOT(changeBackgroundSizeSlot(QAction*))); QActionGroup* reloadIntervalGroup = new QActionGroup(this); @@ -269,83 +327,83 @@ void MainWindow::createActions() intervalReloadAct->setCheckable(true); if(interval.first == 0) //default is off intervalReloadAct->setChecked(true); - automaticReloadIntervalActMap.insert(interval.first, intervalReloadAct ); + d->automaticReloadIntervalActMap.insert(interval.first, intervalReloadAct ); reloadIntervalGroup->addAction(intervalReloadAct); } - createDesktopLinkAct = new QAction(QIcon(":/icons/create_link.svg"), tr("&Create desktop link"), this); - createDesktopLinkAct->setStatusTip(tr("Create desktop link")); - connect(createDesktopLinkAct, SIGNAL(triggered()), this, SLOT(createDesktopLinkSlot())); + d->createDesktopLinkAct = new QAction(QIcon(":/icons/create_link.svg"), tr("&Create desktop link"), this); + d->createDesktopLinkAct->setStatusTip(tr("Create desktop link")); + connect(d->createDesktopLinkAct, SIGNAL(triggered()), this, SLOT(createDesktopLinkSlot())); - aboutAct = new QAction(QIcon(":/icons/about.svg"), tr("&About"), this); - aboutAct->setStatusTip(tr("Show the application's About box")); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(showAboutDialogSlot())); + d->aboutAct = new QAction(QIcon(":/icons/about.svg"), tr("&About"), this); + d->aboutAct->setStatusTip(tr("Show the application's About box")); + connect(d->aboutAct, SIGNAL(triggered()), this, SLOT(showAboutDialogSlot())); } void MainWindow::createMenus() { QMenu* fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(loadProjectAct); - fileMenu->addAction(loadProjectInNewInstanceAct); - fileMenu->addAction(reloadProjectAct); + fileMenu->addAction(d->loadProjectAct); + fileMenu->addAction(d->loadProjectInNewInstanceAct); + fileMenu->addAction(d->reloadProjectAct); fileMenu->addSeparator(); - fileMenu->addAction(saveProjectAct); - fileMenu->addAction(backupProjectWithTimeStampAct); - fileMenu->addAction(saveProjectAsAct); + fileMenu->addAction(d->saveProjectAct); + fileMenu->addAction(d->backupProjectWithTimeStampAct); + fileMenu->addAction(d->saveProjectAsAct); fileMenu->addSeparator(); - fileMenu->addAction(loadTextFileAct); + fileMenu->addAction(d->loadTextFileAct); fileMenu->addSeparator(); - fileMenu->addAction(exportAsPictureAct); - fileMenu->addAction(exportAsPdf); - fileMenu->addAction(printAct); + fileMenu->addAction(d->exportAsPictureAct); + fileMenu->addAction(d->exportAsPdf); + fileMenu->addAction(d->printAct); fileMenu->addSeparator(); - fileMenu->addAction(quitAct); + fileMenu->addAction(d->quitAct); QMenu* editMenu = menuBar()->addMenu(tr("&Edit")); - editMenu->addAction(deleteAllAct); + editMenu->addAction(d->deleteAllAct); //menuBar()->addMenu(tr("&View")); QMenu* backgroundMenu = menuBar()->addMenu(tr("&Background")); - backgroundMenu->addAction(m_BgColorWhiteAction); - backgroundMenu->addAction(m_BgColorGrayAction); - backgroundMenu->addAction(m_BgColorCyanAction); + backgroundMenu->addAction(d->m_BgColorWhiteAction); + backgroundMenu->addAction(d->m_BgColorGrayAction); + backgroundMenu->addAction(d->m_BgColorCyanAction); backgroundMenu->addSeparator(); QMenu* defaultImagesMenu = backgroundMenu->addMenu(tr("&Default images")); - defaultImagesMenu->addAction(m_BgDefaultImage1Action); - defaultImagesMenu->addAction(m_BgDefaultImage2Action); + defaultImagesMenu->addAction(d->m_BgDefaultImage1Action); + defaultImagesMenu->addAction(d->m_BgDefaultImage2Action); QMenu* kanbanImagesMenu = backgroundMenu->addMenu(tr("&Kanban dashboards")); - kanbanImagesMenu->addAction(m_BgImageKanban1Action); - kanbanImagesMenu->addAction(m_BgImageKanban1HAction); - kanbanImagesMenu->addAction(m_BgImageKanban2Action); - kanbanImagesMenu->addAction(m_BgImageKanban2HAction); - kanbanImagesMenu->addAction(m_BgImageKanban3Action); - kanbanImagesMenu->addAction(m_BgImageKanban3HAction); + kanbanImagesMenu->addAction(d->m_BgImageKanban1Action); + kanbanImagesMenu->addAction(d->m_BgImageKanban1HAction); + kanbanImagesMenu->addAction(d->m_BgImageKanban2Action); + kanbanImagesMenu->addAction(d->m_BgImageKanban2HAction); + kanbanImagesMenu->addAction(d->m_BgImageKanban3Action); + kanbanImagesMenu->addAction(d->m_BgImageKanban3HAction); QMenu* reviewImagesMenu = backgroundMenu->addMenu(tr("&Review dashboards")); - reviewImagesMenu->addAction(m_BgImageReview1Action); - reviewImagesMenu->addAction(m_BgImageReview2Action); + reviewImagesMenu->addAction(d->m_BgImageReview1Action); + reviewImagesMenu->addAction(d->m_BgImageReview2Action); backgroundMenu->addSeparator(); - backgroundMenu->addAction(m_BgUserImageAction); + backgroundMenu->addAction(d->m_BgUserImageAction); backgroundMenu->addSeparator(); QMenu* sizeMenu = backgroundMenu->addMenu(QIcon(":/icons/sizes.svg"), tr("&Size")); - sizeMenu->addAction(m_BgSizeDefault); - sizeMenu->addAction(m_BgSize_A5_landscape); - sizeMenu->addAction(m_BgSize_A5_portrait); - sizeMenu->addAction(m_BgSize_A4_landscape); - sizeMenu->addAction(m_BgSize_A4_portrait); - sizeMenu->addAction(m_BgSize_800_600); - sizeMenu->addAction(m_BgSize_1024_768); - sizeMenu->addAction(m_BgSize_1280_768); - backgroundMenu->addAction(m_BgFixedSize); + sizeMenu->addAction(d->m_BgSizeDefault); + sizeMenu->addAction(d->m_BgSize_A5_landscape); + sizeMenu->addAction(d->m_BgSize_A5_portrait); + sizeMenu->addAction(d->m_BgSize_A4_landscape); + sizeMenu->addAction(d->m_BgSize_A4_portrait); + sizeMenu->addAction(d->m_BgSize_800_600); + sizeMenu->addAction(d->m_BgSize_1024_768); + sizeMenu->addAction(d->m_BgSize_1280_768); + backgroundMenu->addAction(d->m_BgFixedSize); menuBar()->addSeparator(); QMenu* settingsMenu = menuBar()->addMenu(tr("&Settings")); QMenu* automaticReloadMenu =settingsMenu->addMenu("Automatic project reload"); - foreach (QAction* action, automaticReloadIntervalActMap) + foreach (QAction* action, d->automaticReloadIntervalActMap) automaticReloadMenu->addAction(action); settingsMenu->addSeparator(); - settingsMenu->addAction(createDesktopLinkAct); + settingsMenu->addAction(d->createDesktopLinkAct); QMenu* helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); + helpMenu->addAction(d->aboutAct); } void MainWindow::loadProjectSlot() { @@ -369,8 +427,8 @@ void MainWindow::loadProjectInNewInstanceSlot() void MainWindow::loadProject(const QString& sFilename) { if (!sFilename.startsWith(":/")) { //files from resources - m_sOpenedFile = sFilename; - setWindowTitle(m_sOpenedFile); + d->m_sOpenedFile = sFilename; + setWindowTitle(d->m_sOpenedFile); //TODO better logic, open file, new file } canvasWidget()->loadProject(sFilename); @@ -378,14 +436,14 @@ void MainWindow::loadProject(const QString& sFilename) void MainWindow::reloadProjectSlot() { - if (m_sOpenedFile.size()) //we load only real files - canvasWidget()->loadProject(m_sOpenedFile); + if (d->m_sOpenedFile.size()) //we load only real files + canvasWidget()->loadProject(d->m_sOpenedFile); } void MainWindow::saveProjectSlot() { - if (!m_sOpenedFile.isEmpty()) - canvasWidget()->saveProject(m_sOpenedFile); + if (!d->m_sOpenedFile.isEmpty()) + canvasWidget()->saveProject(d->m_sOpenedFile); else saveProjectAsSlot(); } @@ -393,22 +451,22 @@ void MainWindow::saveProjectSlot() void MainWindow::saveProjectAsSlot() { QString sFilename = QFileDialog::getSaveFileName(this, "Save project as: ", - m_sOpenedFile.size() ? m_sOpenedFile : "untitled.sem", + d->m_sOpenedFile.size() ? d->m_sOpenedFile : "untitled.sem", tr("Semaphored project files (*.sem);;All files (*)")); if(sFilename.size()) { QByteArray ext = QFileInfo(sFilename).suffix().toLower().toLatin1(); if(ext != "sem") sFilename += ".sem"; - m_sOpenedFile = sFilename; - setWindowTitle(m_sOpenedFile); - canvasWidget()->saveProject(m_sOpenedFile); + d->m_sOpenedFile = sFilename; + setWindowTitle(d->m_sOpenedFile); + canvasWidget()->saveProject(d->m_sOpenedFile); } } void MainWindow::backupProjectWithTimeStampSlot() { - if(!m_sOpenedFile.isEmpty()) { - QString sBackupFile = m_sOpenedFile; + if(!d->m_sOpenedFile.isEmpty()) { + QString sBackupFile = d->m_sOpenedFile; sBackupFile.chop(4); // sBackupFile += QDateTime::currentDateTime().toString("-yyyy_MM_dd-hh_mm"); sBackupFile += ".sem"; @@ -423,7 +481,7 @@ void MainWindow::exportAsPictureSlot() foreach(QByteArray name,QImageWriter::supportedImageFormats()) supportedFormats += name + " "; supportedFormatsFilter+= "));;SVG files (*.svg);;All files (*)"; - QString sOpenedFileBasename = m_sOpenedFile.size() ? QFileInfo(m_sOpenedFile).baseName() : "untitled"; + QString sOpenedFileBasename = d->m_sOpenedFile.size() ? QFileInfo(d->m_sOpenedFile).baseName() : "untitled"; QString sFilename = QFileDialog::getSaveFileName(this, "Save as picture as: " + supportedFormats, sOpenedFileBasename + ".png", @@ -442,33 +500,33 @@ void MainWindow::changeBackgroundColorSlot(QAction * action) { //TPDP this could be unified by m_BackgroundPicture, "" - default, filename = picture, QColor::isValidColor - color QColor newColor(Qt::white); - if (action == m_BgColorWhiteAction ) + if (action == d->m_BgColorWhiteAction ) canvasWidget()->changeBackgroundColor(Qt::white); - else if (action == m_BgColorGrayAction) + else if (action == d->m_BgColorGrayAction) canvasWidget()->changeBackgroundColor(Qt::gray); - else if (action == m_BgColorCyanAction) + else if (action == d->m_BgColorCyanAction) canvasWidget()->changeBackgroundColor(newColor = Qt::cyan); - else if (action == m_BgDefaultImage1Action) + else if (action == d->m_BgDefaultImage1Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_DEFAULT_1); - else if (action == m_BgDefaultImage2Action) + else if (action == d->m_BgDefaultImage2Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_DEFAULT_2); - else if (action == m_BgImageKanban1Action) + else if (action == d->m_BgImageKanban1Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_1); - else if (action == m_BgImageKanban1HAction) + else if (action == d->m_BgImageKanban1HAction) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_1H); - else if (action == m_BgImageKanban2Action) + else if (action == d->m_BgImageKanban2Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_2); - else if (action == m_BgImageKanban2HAction) + else if (action == d->m_BgImageKanban2HAction) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_2H); - else if (action == m_BgImageKanban3Action) + else if (action == d->m_BgImageKanban3Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_3); - else if (action == m_BgImageKanban3HAction) + else if (action == d->m_BgImageKanban3HAction) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_KANBAN_3H); - else if (action == m_BgImageReview1Action) + else if (action == d->m_BgImageReview1Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_REVIEW_1); - else if (action == m_BgImageReview2Action) + else if (action == d->m_BgImageReview2Action) canvasWidget()->changeBackgroundImage(DragWidget::BG_IMAGE_REVIEW_2); - else if (action == m_BgUserImageAction) { + else if (action == d->m_BgUserImageAction) { canvasWidget()->loadUserBackgroundImage(); } } @@ -476,24 +534,25 @@ void MainWindow::changeBackgroundColorSlot(QAction * action) void MainWindow::changeBackgroundSizeSlot(QAction * action) { QSize newSize(canvasWidget()->size()); - if (action == m_BgSizeDefault) + if (action == d->m_BgSizeDefault) ; - else if (action == m_BgSize_A5_portrait) + else if (action == d->m_BgSize_A5_portrait) newSize = QSize(DragWidget::SIZE_A5_SHORT,DragWidget::SIZE_A5_LONG); - else if (action == m_BgSize_A5_landscape) + else if (action == d->m_BgSize_A5_landscape) newSize = QSize(DragWidget::SIZE_A5_LONG,DragWidget::SIZE_A5_SHORT); - else if (action == m_BgSize_A4_portrait) + else if (action == d->m_BgSize_A4_portrait) newSize = QSize(DragWidget::SIZE_A4_SHORT,DragWidget::SIZE_A4_LONG); - else if (action == m_BgSize_A4_landscape) + else if (action == d->m_BgSize_A4_landscape) newSize = QSize(DragWidget::SIZE_A4_LONG,DragWidget::SIZE_A4_SHORT); - else if (action == m_BgSize_800_600) + else if (action == d->m_BgSize_800_600) newSize = QSize(800,600); - else if (action == m_BgSize_1024_768) + else if (action == d->m_BgSize_1024_768) newSize = QSize(1024,768); - else if (action == m_BgSize_1280_768) + else if (action == d->m_BgSize_1280_768) newSize = QSize(1280,768); resize(newSize); } + void MainWindow::loadTextFileSlot() { QString sFilename = QFileDialog::getOpenFileName(this, "Load source test file: ",QString(), @@ -502,30 +561,39 @@ void MainWindow::loadTextFileSlot() canvasWidget()->loadTextFile(sFilename); } +void MainWindow::exportToTextFileSlot() +{ + QString sFilename = QFileDialog::getOpenFileName(this, "Load source test file: ",QString(), + tr("Text files (*.txt *.*)")); + if(sFilename.size()) + canvasWidget()->loadTextFile(sFilename); +} + + void MainWindow::changeIntervalReloadSlot(QAction * action) { - int i = automaticReloadIntervalActMap.key(action, 0); + int i = d->automaticReloadIntervalActMap.key(action, 0); if(i) { - if (!intervalReloadTimer) { - intervalReloadTimer = new QTimer(this); - connect(intervalReloadTimer, SIGNAL(timeout()), this, SLOT(intervalReloadSlot())); + if (!d->intervalReloadTimer) { + d->intervalReloadTimer = new QTimer(this); + connect(d->intervalReloadTimer, SIGNAL(timeout()), this, SLOT(intervalReloadSlot())); } - intervalReloadTimer->setInterval(i*1000); - intervalReloadTimer->start(); - } else if (intervalReloadTimer) { - intervalReloadTimer->stop(); + d->intervalReloadTimer->setInterval(i*1000); + d->intervalReloadTimer->start(); + } else if (d->intervalReloadTimer) { + d->intervalReloadTimer->stop(); } } void MainWindow::intervalReloadSlot() { - if (!m_sOpenedFile.isEmpty()) - loadProject(m_sOpenedFile); + if (!d->m_sOpenedFile.isEmpty()) + loadProject(d->m_sOpenedFile); } DragWidget* MainWindow::canvasWidget() { - return m_canvasWidget; + return d->m_canvasWidget; } void MainWindow::printCurrentCanvasSlot() @@ -568,10 +636,10 @@ void MainWindow::createDesktopLinkSlot() { void MainWindow::showAboutDialogSlot() { - if (!m_aboutDialog) { - m_aboutDialog = new AboutDialog(this); + if (!d->m_aboutDialog) { + d->m_aboutDialog = new AboutDialog(this); } - m_aboutDialog->show(); + d->m_aboutDialog->show(); } void MainWindow::changeEvent(QEvent *event) diff --git a/src/mainwindow.h b/src/mainwindow.h index e630f60..80eee2a 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -34,6 +34,7 @@ class DragWidget; class QPrinter; class AboutDialog; class QTimer; +class MainWindow_private; class MainWindow : public QMainWindow { @@ -58,6 +59,7 @@ public slots: void changeIntervalReloadSlot(QAction* action); void intervalReloadSlot(); void loadTextFileSlot(); + void exportToTextFileSlot(); void printCurrentCanvasSlot(); void exportCanvasToPdfSlot(); void showAboutDialogSlot(); @@ -74,55 +76,13 @@ protected slots: virtual void changeEvent(QEvent *ev); private: - void createActions(); - void createMenus(); + void createActions(); + void createMenus(); // void createToolBars(); // void createStatusBar(); // void createDockWindows(); - QAction* loadProjectAct; - QAction* loadProjectInNewInstanceAct; - QAction* reloadProjectAct; - QAction* saveProjectAct; - QAction* backupProjectWithTimeStampAct; - QAction* saveProjectAsAct; - QAction* exportAsPictureAct; - QAction* loadTextFileAct; - QAction* printAct; - QAction* exportAsPdf; - QAction* quitAct; - QAction* deleteAllAct; - QAction* m_BgColorWhiteAction; - QAction* m_BgColorGrayAction ; - QAction* m_BgColorCyanAction; - QAction* m_BgDefaultImage1Action; - QAction* m_BgDefaultImage2Action; - QAction* m_BgImageKanban1Action; - QAction* m_BgImageKanban1HAction; - QAction* m_BgImageKanban2Action; - QAction* m_BgImageKanban2HAction; - QAction* m_BgImageKanban3Action; - QAction* m_BgImageKanban3HAction; - QAction* m_BgImageReview1Action; - QAction* m_BgImageReview2Action; - QAction* m_BgUserImageAction; - QAction* m_BgFixedSize; - QAction* m_BgSizeDefault; - QAction* m_BgSize_A5_portrait; - QAction* m_BgSize_A5_landscape; - QAction* m_BgSize_A4_portrait; - QAction* m_BgSize_A4_landscape; - QAction* m_BgSize_800_600; - QAction* m_BgSize_1024_768; - QAction* m_BgSize_1280_768; - QAction* createDesktopLinkAct; - QMap automaticReloadIntervalActMap; - QAction* aboutAct; - DragWidget* m_canvasWidget; - AboutDialog* m_aboutDialog; - QString m_sOpenedFile; - QSystemTrayIcon* m_pTrayIcon; - QTimer *intervalReloadTimer; + MainWindow_private* d; }; #endif // MAINWINDOW_H