Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/gui/newwizard/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ target_sources(OpenCloudGui PRIVATE
pages/accountconfiguredwizardpage.h
pages/accountconfiguredwizardpage.cpp

pages/syncfoldersetupwizardpage.ui
pages/syncfoldersetupwizardpage.h
pages/syncfoldersetupwizardpage.cpp

setupwizardwidget.ui
setupwizardwidget.h
setupwizardwidget.cpp
Expand Down Expand Up @@ -43,6 +47,8 @@ target_sources(OpenCloudGui PRIVATE
states/serverurlsetupwizardstate.cpp
states/oauthcredentialssetupwizardstate.cpp
states/accountconfiguredsetupwizardstate.cpp
states/syncfoldersetupwizardstate.cpp
states/syncfoldersetupwizardstate.h

setupwizardcontext.cpp
)
2 changes: 2 additions & 0 deletions src/gui/newwizard/enums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ template <>
QString OCC::Utility::enumToDisplayName(SetupWizardState state)
{
switch (state) {
case SetupWizardState::SyncFolderSetupState:
return QApplication::translate("SetupWizardState", "Sync Folder");
case SetupWizardState::ServerUrlState:
if (GlobalConfig::serverUrl().isValid()) {
return QApplication::translate("SetupWizardState", "Server URL");
Expand Down
4 changes: 3 additions & 1 deletion src/gui/newwizard/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@ namespace OCC::Wizard {
Q_NAMESPACE

enum class SetupWizardState {
SyncFolderSetupState,
FirstState = SyncFolderSetupState,

ServerUrlState,
FirstState = ServerUrlState,

CredentialsState,

Expand Down
45 changes: 45 additions & 0 deletions src/gui/newwizard/pages/syncfoldersetupwizardpage.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#include "syncfoldersetupwizardpage.h"

#include <QFileDialog>

#include "libsync/theme.h"
#include "ui_syncfoldersetupwizardpage.h"

namespace OCC::Wizard {

SyncFolderSetupWizardPage::SyncFolderSetupWizardPage(const QString &defaultSyncFolder, QWidget *parent)
: _ui(std::make_unique<Ui::SyncFolderSetupWizardPage>())
{
_ui->setupUi(this);
_ui->syncFolderLineEdit->setText(QDir::toNativeSeparators(defaultSyncFolder));

connect(_ui->chooseFolderButton, &QToolButton::clicked, this, [this, defaultSyncFolder]() {
auto dialog = new QFileDialog(this, tr("Select the sync folder location"), defaultSyncFolder);
dialog->setFileMode(QFileDialog::Directory);
dialog->setOption(QFileDialog::ShowDirsOnly);
dialog->setOption(QFileDialog::DontCreateDirectories);

connect(dialog, &QFileDialog::fileSelected, this, [this](const QString &directory) {
_ui->syncFolderLineEdit->setText(QDir::toNativeSeparators(directory));
Q_EMIT contentChanged();
});
dialog->open();
});
}

SyncFolderSetupWizardPage::~SyncFolderSetupWizardPage() noexcept
{
delete _ui;
}

QString SyncFolderSetupWizardPage::syncFolder() const
{
return QDir::fromNativeSeparators(_ui->syncFolderLineEdit->text());
}

bool SyncFolderSetupWizardPage::validateInput() const
{
return !syncFolder().isEmpty();
}

} // OCC::Wizard
32 changes: 32 additions & 0 deletions src/gui/newwizard/pages/syncfoldersetupwizardpage.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

#pragma once

#include "gui/newwizard/pages/abstractsetupwizardpage.h"

#include <memory>

namespace Ui {
class SyncFolderSetupWizardPage;
}

namespace OCC::Wizard {

class SyncFolderSetupWizardPage : public AbstractSetupWizardPage
{
Q_OBJECT

public:
explicit SyncFolderSetupWizardPage(const QString &defaultSyncFolder, QWidget *parent = nullptr);
~SyncFolderSetupWizardPage() override;

QString syncFolder() const;
bool validateInput() const override;

Q_SIGNALS:
void contentChanged() override;

private:
std::unique_ptr<Ui::SyncFolderSetupWizardPage> _ui;
};

} // OCC::Wizard
126 changes: 126 additions & 0 deletions src/gui/newwizard/pages/syncfoldersetupwizardpage.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SyncFolderSetupWizardPage</class>
<widget class="QWidget" name="SyncFolderSetupWizardPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="titleLabel">
<property name="text">
<string>Choose Sync Folder Location</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="descriptionLabel">
<property name="text">
<string>Select where you want your synced files to be stored on this computer.</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="syncFolderLineEdit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="chooseFolderButton">
<property name="text">
<string>...</string>
</property>
<property name="toolTip">
<string>Browse for folder</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
9 changes: 9 additions & 0 deletions src/gui/newwizard/setupwizardcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "states/accountconfiguredsetupwizardstate.h"
#include "states/oauthcredentialssetupwizardstate.h"
#include "states/serverurlsetupwizardstate.h"
#include "states/syncfoldersetupwizardstate.h"
#include "theme.h"

using namespace std::chrono_literals;
Expand Down Expand Up @@ -97,6 +98,10 @@ void SetupWizardController::changeStateTo(SetupWizardState nextState, ChangeReas
}

switch (nextState) {
case SetupWizardState::SyncFolderSetupState: {
_currentState = new SyncFolderSetupWizardState(_context);
break;
}
case SetupWizardState::ServerUrlState: {
_currentState = new ServerUrlSetupWizardState(_context);
break;
Expand Down Expand Up @@ -131,6 +136,10 @@ void SetupWizardController::changeStateTo(SetupWizardState nextState, ChangeReas

connect(_currentState, &AbstractSetupWizardState::evaluationSuccessful, this, [this]() {
switch (_currentState->state()) {
case SetupWizardState::SyncFolderSetupState: {
changeStateTo(SetupWizardState::ServerUrlState);
return;
}
case SetupWizardState::ServerUrlState: {
changeStateTo(SetupWizardState::CredentialsState);
return;
Expand Down
38 changes: 38 additions & 0 deletions src/gui/newwizard/states/syncfoldersetupwizardstate.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@


#include "gui/newwizard/states/syncfoldersetupwizardstate.h"
#include "gui/newwizard/pages/syncfoldersetupwizardpage.h"
#include "gui/folderman.h"

namespace OCC::Wizard {

SyncFolderSetupWizardState::SyncFolderSetupWizardState(SetupWizardContext *context)
: AbstractSetupWizardState(context)
{
const QString defaultSyncFolder = FolderMan::suggestSyncFolder(FolderMan::NewFolderType::SpacesSyncRoot, {});
QString syncTargetDir = _context->accountBuilder().syncTargetDir();

if (syncTargetDir.isEmpty()) {
syncTargetDir = defaultSyncFolder;
}

_page = new SyncFolderSetupWizardPage(syncTargetDir);
}

SetupWizardState SyncFolderSetupWizardState::state() const
{
return SetupWizardState::SyncFolderSetupState;
}

void SyncFolderSetupWizardState::evaluatePage()
{
auto *syncFolderPage = qobject_cast<SyncFolderSetupWizardPage *>(_page);
Q_ASSERT(syncFolderPage != nullptr);

const QString syncTargetDir = syncFolderPage->syncFolder();
_context->accountBuilder().setSyncTargetDir(syncTargetDir);

Q_EMIT evaluationSuccessful();
}

} // OCC::Wizard
19 changes: 19 additions & 0 deletions src/gui/newwizard/states/syncfoldersetupwizardstate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

#pragma once

#include "gui/newwizard/states/abstractsetupwizardstate.h"

namespace OCC::Wizard {

class SyncFolderSetupWizardState : public AbstractSetupWizardState
{
Q_OBJECT

public:
explicit SyncFolderSetupWizardState(SetupWizardContext *context);

SetupWizardState state() const override;
void evaluatePage() override;
};

} // OCC::Wizard