From f1d6352f275f6b58f6dbe2e55ff1ebb7bb9fc2cd Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Tue, 5 Apr 2011 18:31:14 +0200 Subject: [PATCH] working folder wizard, only actual creation of the folder pending --- src/CMakeLists.txt | 3 +- src/mirall/application.cpp | 8 +- src/mirall/application.h | 2 + src/mirall/folderwizard.cpp | 125 ++++++++++++- src/mirall/folderwizard.h | 66 ++++++- src/mirall/folderwizard.ui | 261 --------------------------- src/mirall/folderwizardsourcepage.ui | 76 ++++++++ src/mirall/folderwizardtargetpage.ui | 229 +++++++++++++++++++++++ 8 files changed, 502 insertions(+), 268 deletions(-) delete mode 100644 src/mirall/folderwizard.ui create mode 100644 src/mirall/folderwizardsourcepage.ui create mode 100644 src/mirall/folderwizardtargetpage.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 12041cdde1..db17b3f031 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,7 +4,8 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include(${QT_USE_FILE}) set(mirall_UI -mirall/folderwizard.ui +mirall/folderwizardsourcepage.ui +mirall/folderwizardtargetpage.ui ) qt4_wrap_ui(mirall_UI_SRCS ${mirall_UI}) diff --git a/src/mirall/application.cpp b/src/mirall/application.cpp index 6ee49da702..6f1d5bd66c 100644 --- a/src/mirall/application.cpp +++ b/src/mirall/application.cpp @@ -11,6 +11,7 @@ #include "mirall/constants.h" #include "mirall/application.h" #include "mirall/folder.h" +#include "mirall/folderwizard.h" #include "mirall/unisonfolder.h" #include "mirall/inotify.h" @@ -24,6 +25,9 @@ Application::Application(int argc, char **argv) : INotify::initialize(); setApplicationName("Mirall"); + setQuitOnLastWindowClosed(false); + + _folderWizard = new FolderWizard(); _folderConfigPath = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/folders"; @@ -89,7 +93,9 @@ void Application::setupContextMenu() void Application::slotAddFolder() { - qDebug() << "add a folder here..."; + if (_folderWizard->exec() == QDialog::Accepted) { + qDebug() << "* Folder wizard completed"; + } } void Application::setupKnownFolders() diff --git a/src/mirall/application.h b/src/mirall/application.h index e35b72f527..c22743b739 100644 --- a/src/mirall/application.h +++ b/src/mirall/application.h @@ -11,6 +11,7 @@ class QNetworkConfigurationManager; namespace Mirall { class Folder; +class FolderWizard; class Application : public QApplication { @@ -55,6 +56,7 @@ private: // counter tracking number of folders doing a sync int _folderSyncCount; + FolderWizard *_folderWizard; }; } // namespace Mirall diff --git a/src/mirall/folderwizard.cpp b/src/mirall/folderwizard.cpp index 4623b05103..53f0b8b1c9 100644 --- a/src/mirall/folderwizard.cpp +++ b/src/mirall/folderwizard.cpp @@ -1,13 +1,136 @@ +#include +#include +#include +#include +#include +#include +#include #include "mirall/folderwizard.h" namespace Mirall { +FolderWizardSourcePage::FolderWizardSourcePage() +{ + _ui.setupUi(this); + registerField("*sourceFolder", _ui.localFolderLineEdit); +} + +FolderWizardSourcePage::~FolderWizardSourcePage() +{ +} + +bool FolderWizardSourcePage::isComplete() const +{ + return QFileInfo(_ui.localFolderLineEdit->text()).isDir(); +} + +void FolderWizardSourcePage::on_localFolderChooseBtn_clicked() +{ + QString dir = QFileDialog::getExistingDirectory(this, + tr("Select the source folder"), + QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + if (!dir.isEmpty()) { + _ui.localFolderLineEdit->setText(dir); + } +} + +void FolderWizardSourcePage::on_localFolderLineEdit_textChanged() +{ + emit completeChanged(); +} + +FolderWizardTargetPage::FolderWizardTargetPage() +{ + _ui.setupUi(this); + registerField("targetLocalFolder", _ui.localFolder2LineEdit); + registerField("targetSSHFolder", _ui.sshFolderLineEdit); +} + +FolderWizardTargetPage::~FolderWizardTargetPage() +{ +} + +bool FolderWizardTargetPage::isComplete() const +{ + if (_ui.localFolderRadioBtn->isChecked()) { + return QFileInfo(_ui.localFolder2LineEdit->text()).isDir(); + } + else if (_ui.sshFolderRadioBtn->isChecked()) { + QUrl url(_ui.sshFolderLineEdit->text()); + return url.isValid() && url.scheme() == "ssh"; + } + return false; +} + +void FolderWizardTargetPage::initializePage() +{ + slotToggleItems(); +} + +void FolderWizardTargetPage::on_localFolderRadioBtn_toggled() +{ + slotToggleItems(); + emit completeChanged(); +} + +void FolderWizardTargetPage::on_sshFolderRadioBtn_toggled() +{ + slotToggleItems(); + emit completeChanged(); + +} + +void FolderWizardTargetPage::on_checkBoxOnlyOnline_toggled() +{ + slotToggleItems(); +} + +void FolderWizardTargetPage::on_localFolder2LineEdit_textChanged() +{ + emit completeChanged(); +} + +void FolderWizardTargetPage::on_sshFolderLineEdit_textChanged() +{ + emit completeChanged(); +} + +void FolderWizardTargetPage::slotToggleItems() +{ + bool enabled = _ui.localFolderRadioBtn->isChecked(); + _ui.localFolder2LineEdit->setEnabled(enabled); + _ui.localFolder2ChooseBtn->setEnabled(enabled); + + enabled = _ui.sshFolderRadioBtn->isChecked(); + _ui.sshFolderLineEdit->setEnabled(enabled); + _ui.checkBoxOnlyOnline->setEnabled(enabled); + _ui.checkBoxOnlyThisLAN->setEnabled(enabled); + + _ui.checkBoxOnlyThisLAN->setEnabled(_ui.checkBoxOnlyOnline->isEnabled() && + _ui.checkBoxOnlyOnline->isChecked()); +} + +void FolderWizardTargetPage::on_localFolder2ChooseBtn_clicked() +{ + QString dir = QFileDialog::getExistingDirectory(this, + tr("Select the target folder"), + QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + if (!dir.isEmpty()) { + _ui.localFolder2LineEdit->setText(dir); + } +} + +/** + * Folder wizard itself + */ + FolderWizard::FolderWizard(QWidget *parent) : QWizard(parent) { - _ui.setupUi(this); + setPage(Page_Source, new FolderWizardSourcePage()); + setPage(Page_Target, new FolderWizardTargetPage()); } } diff --git a/src/mirall/folderwizard.h b/src/mirall/folderwizard.h index 8cc9542ea5..871202cce9 100644 --- a/src/mirall/folderwizard.h +++ b/src/mirall/folderwizard.h @@ -2,18 +2,76 @@ #ifndef MIRALL_FOLDERWIZARD_H #define MIRALL_FOLDERWIZARD_H -#include "ui_folderwizard.h" #include +#include "ui_folderwizardsourcepage.h" +#include "ui_folderwizardtargetpage.h" + namespace Mirall { +/** + * page to ask for the local source folder + */ +class FolderWizardSourcePage : public QWizardPage +{ + Q_OBJECT +public: + FolderWizardSourcePage(); + ~FolderWizardSourcePage(); + + virtual bool isComplete() const; + +protected slots: + void on_localFolderChooseBtn_clicked(); + void on_localFolderLineEdit_textChanged(); + +private: + Ui_FolderWizardSourcePage _ui; +}; + + +/** + * page to ask for the target folder + */ + +class FolderWizardTargetPage : public QWizardPage +{ + Q_OBJECT +public: + FolderWizardTargetPage(); + ~FolderWizardTargetPage(); + + virtual bool isComplete() const; + + virtual void initializePage(); +protected slots: + void slotToggleItems(); + void on_localFolder2ChooseBtn_clicked(); + + void on_localFolderRadioBtn_toggled(); + void on_sshFolderRadioBtn_toggled(); + void on_checkBoxOnlyOnline_toggled(); + + void on_localFolder2LineEdit_textChanged(); + void on_sshFolderLineEdit_textChanged(); + +private: + Ui_FolderWizardTargetPage _ui; +}; + + class FolderWizard : public QWizard { Q_OBJECT public: - FolderWizard(QWidget *parent); -private: - Ui_FolderWizard _ui; + + enum { + Page_Source, + Page_Target + }; + + FolderWizard(QWidget *parent = 0L); + }; diff --git a/src/mirall/folderwizard.ui b/src/mirall/folderwizard.ui deleted file mode 100644 index 508904cde4..0000000000 --- a/src/mirall/folderwizard.ui +++ /dev/null @@ -1,261 +0,0 @@ - - - FolderWizard - - - - 0 - 0 - 565 - 387 - - - - Folder Setup - - - - - - - - - Which folder in your computer you want to backup/synchronize? - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - /home/local1 - - - - - - - &Choose... - - - - - - - - - - - - - - - Sync with: - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Another local folder - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 17 - 20 - - - - - - - - /home/local2 - - - - - - - C&hoose.. - - - - - - - - - Remote folder (SSH) - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 17 - 20 - - - - - - - - ssh://john@host.com//myfolder - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 17 - 20 - - - - - - - - Sync only when the computer is connected to the network - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 38 - 20 - - - - - - - - Only when connected to this local network - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - diff --git a/src/mirall/folderwizardsourcepage.ui b/src/mirall/folderwizardsourcepage.ui new file mode 100644 index 0000000000..f42b8b2587 --- /dev/null +++ b/src/mirall/folderwizardsourcepage.ui @@ -0,0 +1,76 @@ + + + FolderWizardSourcePage + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + /home/local1 + + + + + + + &Choose... + + + + + + + + + + + Which folder in your computer you want to backup/synchronize? + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 234 + + + + + + + + + diff --git a/src/mirall/folderwizardtargetpage.ui b/src/mirall/folderwizardtargetpage.ui new file mode 100644 index 0000000000..572385568e --- /dev/null +++ b/src/mirall/folderwizardtargetpage.ui @@ -0,0 +1,229 @@ + + + FolderWizardTargetPage + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + Sync with: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Another local folder + + + true + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 17 + 20 + + + + + + + + /home/local2 + + + + + + + C&hoose.. + + + + + + + + + Remote folder (SSH) + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 17 + 20 + + + + + + + + ssh://john@host.com//myfolder + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 17 + 20 + + + + + + + + Sync only when the computer is connected to the network + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 38 + 20 + + + + + + + + Only when connected to this local network + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 102 + + + + + + + + +