Moved startup wizard to welcome page in main window's stacked widget.

This commit is contained in:
Jim Evins
2016-05-14 20:01:36 -04:00
parent 73b7475cbc
commit 8d9686430f
10 changed files with 339 additions and 245 deletions
+3 -3
View File
@@ -50,7 +50,7 @@ set (glabels_sources
SelectProductDialog.cpp SelectProductDialog.cpp
Settings.cpp Settings.cpp
SimplePreview.cpp SimplePreview.cpp
StartupWizard.cpp StartupView.cpp
TemplatePicker.cpp TemplatePicker.cpp
TemplatePickerItem.cpp TemplatePickerItem.cpp
TextNode.cpp TextNode.cpp
@@ -89,7 +89,7 @@ set (glabels_qobject_headers
SelectProductDialog.h SelectProductDialog.h
Settings.h Settings.h
SimplePreview.h SimplePreview.h
StartupWizard.h StartupView.h
TemplatePicker.h TemplatePicker.h
UndoRedoModel.h UndoRedoModel.h
) )
@@ -102,7 +102,7 @@ set (glabels_forms
ui/PrintView.ui ui/PrintView.ui
ui/PropertiesView.ui ui/PropertiesView.ui
ui/SelectProductDialog.ui ui/SelectProductDialog.ui
ui/StartupWizard.ui ui/StartupView.ui
) )
set (glabels_resource_files set (glabels_resource_files
+21 -9
View File
@@ -36,9 +36,9 @@
/// ///
/// New Label Dialog /// New Label Dialog
/// ///
bool File::newLabel( QWidget *parent ) bool File::newLabel( MainWindow *window )
{ {
SelectProductDialog dialog( parent ); SelectProductDialog dialog( window );
dialog.exec(); dialog.exec();
const glabels::Template* tmplate = dialog.tmplate(); const glabels::Template* tmplate = dialog.tmplate();
@@ -51,9 +51,17 @@ bool File::newLabel( QWidget *parent )
const glabels::Frame* frame = tmplate->frames().first(); const glabels::Frame* frame = tmplate->frames().first();
label->setRotate( frame->h() > frame->w() ); label->setRotate( frame->h() > frame->w() );
// Either apply to current window or open a new one
if ( window->isEmpty() )
{
window->setModel( label );
}
else
{
MainWindow *newWindow = new MainWindow(); MainWindow *newWindow = new MainWindow();
newWindow->setModel( label ); newWindow->setModel( label );
newWindow->show(); newWindow->show();
}
return true; return true;
} }
@@ -67,13 +75,13 @@ bool File::newLabel( QWidget *parent )
/// ///
/// Open File Dialog /// Open File Dialog
/// ///
bool File::open( QWidget *parent ) void File::open( MainWindow *window )
{ {
QString fileName = QString fileName =
QFileDialog::getOpenFileName( parent, QFileDialog::getOpenFileName( window,
tr("Open label"), tr("Open label"),
".", ".",
tr("glabels project files (*.glabels);;All files (*)") tr("glabels files (*.glabels);;All files (*)")
); );
if ( !fileName.isEmpty() ) if ( !fileName.isEmpty() )
{ {
@@ -82,11 +90,17 @@ bool File::open( QWidget *parent )
{ {
label->setFileName( fileName ); label->setFileName( fileName );
// Either apply to current window or open a new one
if ( window->isEmpty() )
{
window->setModel( label );
}
else
{
MainWindow *newWindow = new MainWindow(); MainWindow *newWindow = new MainWindow();
newWindow->setModel( label ); newWindow->setModel( label );
newWindow->show(); newWindow->show();
}
return true;
} }
else else
{ {
@@ -97,8 +111,6 @@ bool File::open( QWidget *parent )
msgBox.exec(); msgBox.exec();
} }
} }
return false;
} }
+2 -2
View File
@@ -36,8 +36,8 @@ class File : public QObject
Q_OBJECT Q_OBJECT
public: public:
static bool newLabel( QWidget *parent = 0 ); static bool newLabel( MainWindow *window = 0 );
static bool open( QWidget *parent = 0 ); static void open( MainWindow *window );
static bool save( MainWindow *window ); static bool save( MainWindow *window );
static bool saveAs( MainWindow *window ); static bool saveAs( MainWindow *window );
static void print( MainWindow *window ); static void print( MainWindow *window );
+45 -16
View File
@@ -37,6 +37,7 @@
#include "libglabels/Db.h" #include "libglabels/Db.h"
#include "PreferencesDialog.h" #include "PreferencesDialog.h"
#include "StartupView.h"
#include "PropertiesView.h" #include "PropertiesView.h"
#include "LabelEditor.h" #include "LabelEditor.h"
#include "ObjectEditor.h" #include "ObjectEditor.h"
@@ -68,6 +69,7 @@ MainWindow::MainWindow()
createStatusBar(); createStatusBar();
// Build pages // Build pages
QWidget* welcomePage = createWelcomePage();
QWidget* propertiesPage = createPropertiesPage(); QWidget* propertiesPage = createPropertiesPage();
QWidget* editorPage = createEditorPage(); QWidget* editorPage = createEditorPage();
QWidget* mergePage = createMergePage(); QWidget* mergePage = createMergePage();
@@ -80,35 +82,43 @@ MainWindow::MainWindow()
mContents->setMinimumWidth(96); mContents->setMinimumWidth(96);
mContents->setMaximumWidth(96); mContents->setMaximumWidth(96);
mContents->setSpacing(6); mContents->setSpacing(6);
mContents->setEnabled( false );
// Pages widget // Pages widget
mPages = new QStackedWidget(); mPages = new QStackedWidget();
mPages->setEnabled( false );
// Add "Welcome" page
mPages->addWidget( welcomePage );
mWelcomeButton = new QListWidgetItem(mContents);
mWelcomeButton->setText(tr("Welcome"));
mWelcomeButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// Add "Properties" page // Add "Properties" page
mPages->addWidget( propertiesPage ); mPages->addWidget( propertiesPage );
QListWidgetItem *propertiesButton = new QListWidgetItem(mContents); mPropertiesButton = new QListWidgetItem(mContents);
propertiesButton->setText(tr("Properties")); mPropertiesButton->setText(tr("Properties"));
propertiesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); mPropertiesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// Add "Editor" page // Add "Editor" page
mPages->addWidget( editorPage ); mPages->addWidget( editorPage );
QListWidgetItem *editorButton = new QListWidgetItem(mContents); mEditorButton = new QListWidgetItem(mContents);
editorButton->setText(tr("Editor")); mEditorButton->setText(tr("Editor"));
editorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); mEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// Add "Merge" page // Add "Merge" page
mPages->addWidget( mergePage ); mPages->addWidget( mergePage );
QListWidgetItem *mergeButton = new QListWidgetItem(mContents); mMergeButton = new QListWidgetItem(mContents);
mergeButton->setText(tr("Merge")); mMergeButton->setText(tr("Merge"));
mergeButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); mMergeButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// Add "Print" page // Add "Print" page
mPages->addWidget( printPage ); mPages->addWidget( printPage );
QListWidgetItem *printButton = new QListWidgetItem(mContents); mPrintButton = new QListWidgetItem(mContents);
printButton->setText(tr("Print")); mPrintButton->setText(tr("Print"));
printButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); mPrintButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// Set initial page selection
mWelcomeButton->setSelected( true );
mPages->setCurrentIndex(mContents->row(mWelcomeButton));
// Create central widget // Create central widget
QWidget *centralWidget = new QWidget(); QWidget *centralWidget = new QWidget();
@@ -172,8 +182,9 @@ void MainWindow::setModel( LabelModel *label )
mMergeView->setModel( mModel , mUndoRedoModel ); mMergeView->setModel( mModel , mUndoRedoModel );
mPrintView->setModel( mModel ); mPrintView->setModel( mModel );
mContents->setEnabled( true ); mEditorButton->setSelected( true );
mPages->setEnabled( true ); mPages->setCurrentIndex(mContents->row(mEditorButton));
setDocVerbsEnabled( true ); setDocVerbsEnabled( true );
setSelectionVerbsEnabled( false ); setSelectionVerbsEnabled( false );
setMultiSelectionVerbsEnabled( false ); setMultiSelectionVerbsEnabled( false );
@@ -659,6 +670,17 @@ void MainWindow::createStatusBar()
} }
///
/// Create Welcome Page
///
QWidget* MainWindow::createWelcomePage()
{
mWelcomeView = new StartupView( this );
return mWelcomeView;
}
/// ///
/// Create Properties Page /// Create Properties Page
/// ///
@@ -768,6 +790,13 @@ void MainWindow::setDocVerbsEnabled( bool enabled )
objectsCenterMenu->setEnabled( enabled ); objectsCenterMenu->setEnabled( enabled );
objectsCenterHorizAction->setEnabled( enabled ); objectsCenterHorizAction->setEnabled( enabled );
objectsCenterVertAction->setEnabled( enabled ); objectsCenterVertAction->setEnabled( enabled );
// Contents buttons
mWelcomeButton->setHidden( enabled );
mPropertiesButton->setHidden( !enabled );
mEditorButton->setHidden( !enabled );
mMergeButton->setHidden( !enabled );
mPrintButton->setHidden( !enabled );
} }
+9
View File
@@ -38,6 +38,7 @@ class QScrollArea;
// Forward References // Forward References
class LabelModel; class LabelModel;
class UndoRedoModel; class UndoRedoModel;
class StartupView;
class PropertiesView; class PropertiesView;
class LabelEditor; class LabelEditor;
class ObjectEditor; class ObjectEditor;
@@ -161,6 +162,7 @@ private:
void createToolBars(); void createToolBars();
void createStatusBar(); void createStatusBar();
QWidget* createWelcomePage();
QWidget* createPropertiesPage(); QWidget* createPropertiesPage();
QWidget* createEditorPage(); QWidget* createEditorPage();
QWidget* createMergePage(); QWidget* createMergePage();
@@ -210,7 +212,14 @@ private:
UndoRedoModel* mUndoRedoModel; UndoRedoModel* mUndoRedoModel;
QListWidget* mContents; QListWidget* mContents;
QListWidgetItem* mWelcomeButton;
QListWidgetItem* mPropertiesButton;
QListWidgetItem* mEditorButton;
QListWidgetItem* mMergeButton;
QListWidgetItem* mPrintButton;
QStackedWidget* mPages; QStackedWidget* mPages;
StartupView* mWelcomeView;
PropertiesView* mPropertiesView; PropertiesView* mPropertiesView;
QScrollArea* mLabelEditorScrollArea; QScrollArea* mLabelEditorScrollArea;
LabelEditor* mLabelEditor; LabelEditor* mLabelEditor;
@@ -1,4 +1,4 @@
/* StartupWizard.cpp /* StartupView.cpp
* *
* Copyright (C) 2016 Jim Evins <evins@snaught.com> * Copyright (C) 2016 Jim Evins <evins@snaught.com>
* *
@@ -18,17 +18,18 @@
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>. * along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "StartupWizard.h" #include "StartupView.h"
#include "File.h" #include "File.h"
#include "MainWindow.h"
#include <QtDebug> #include <QtDebug>
/// ///
/// Constructor /// Constructor
/// ///
StartupWizard::StartupWizard( QWidget *parent ) StartupView::StartupView( MainWindow* window )
: QDialog(parent) : QWidget(window), mWindow(window)
{ {
setupUi( this ); setupUi( this );
@@ -44,34 +45,16 @@ StartupWizard::StartupWizard( QWidget *parent )
/// ///
/// "New Project" Button Clicked Slot /// "New Project" Button Clicked Slot
/// ///
void StartupWizard::onNewProjectButtonClicked() void StartupView::onNewProjectButtonClicked()
{ {
hide(); File::newLabel( mWindow );
if ( File::newLabel() )
{
close();
}
else
{
show();
}
} }
/// ///
/// "Open Project" Button Clicked Slot /// "Open Project" Button Clicked Slot
/// ///
void StartupWizard::onOpenProjectButtonClicked() void StartupView::onOpenProjectButtonClicked()
{ {
hide(); File::open( mWindow );
if ( File::open() )
{
close();
}
else
{
show();
}
} }
@@ -1,4 +1,4 @@
/* StartupWizard.h /* StartupView.h
* *
* Copyright (C) 2016 Jim Evins <evins@snaught.com> * Copyright (C) 2016 Jim Evins <evins@snaught.com>
* *
@@ -18,16 +18,18 @@
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>. * along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef StartupWizard_h #ifndef StartupView_h
#define StartupWizard_h #define StartupView_h
#include "ui_StartupWizard.h" #include "ui_StartupView.h"
class MainWindow; // Forward reference
/// ///
/// Startup Wizard Dialog Widget /// Startup View Widget
/// ///
class StartupWizard : public QDialog, public Ui_StartupWizard class StartupView : public QWidget, public Ui_StartupView
{ {
Q_OBJECT Q_OBJECT
@@ -36,7 +38,7 @@ class StartupWizard : public QDialog, public Ui_StartupWizard
// Life Cycle // Life Cycle
///////////////////////////////// /////////////////////////////////
public: public:
StartupWizard( QWidget *parent = 0 ); StartupView( MainWindow* window );
///////////////////////////////// /////////////////////////////////
@@ -46,7 +48,14 @@ private slots:
void onNewProjectButtonClicked(); void onNewProjectButtonClicked();
void onOpenProjectButtonClicked(); void onOpenProjectButtonClicked();
/////////////////////////////////
// Private data
/////////////////////////////////
private:
MainWindow* mWindow;
}; };
#endif // StartupWizard_h #endif // StartupView_h
+3 -3
View File
@@ -24,7 +24,7 @@
#include "libglabels/Db.h" #include "libglabels/Db.h"
#include "Settings.h" #include "Settings.h"
#include "MergeFactory.h" #include "MergeFactory.h"
#include "StartupWizard.h" #include "MainWindow.h"
int main( int argc, char **argv ) int main( int argc, char **argv )
@@ -48,8 +48,8 @@ int main( int argc, char **argv )
///////////////////////////////// /////////////////////////////////
/// @TODO open file(s) from command line if present, otherwise start wizard /// @TODO open file(s) from command line if present, otherwise start wizard
StartupWizard startupWizard; MainWindow mainWindow;
startupWizard.show(); mainWindow.show();
return app.exec(); return app.exec();
} }
+224
View File
@@ -0,0 +1,224 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>StartupView</class>
<widget class="QWidget" name="StartupView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>460</width>
<height>397</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>108</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="titleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>319</width>
<height>53</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>53</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">padding:8px;</string>
</property>
<property name="text">
<string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:24pt; font-weight:600;&quot;&gt;gLabels &lt;/span&gt;&lt;span style=&quot; font-size:16pt; color:#909090;&quot;&gt;Label Designer&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Welcome to gLabels. Let's get started:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCommandLinkButton" name="newProjectButton">
<property name="minimumSize">
<size>
<width>319</width>
<height>59</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>59</height>
</size>
</property>
<property name="text">
<string>New Project</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/24x24/actions/file-new.png</normaloff>:/icons/24x24/actions/file-new.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="description">
<string>Create a new blank gLabels project</string>
</property>
</widget>
</item>
<item>
<widget class="QCommandLinkButton" name="openProjectButton">
<property name="minimumSize">
<size>
<width>319</width>
<height>59</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>59</height>
</size>
</property>
<property name="text">
<string>Open Project</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/24x24/actions/file-open.png</normaloff>:/icons/24x24/actions/file-open.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="description">
<string>Open an existing gLabels project</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../icons.qrc"/>
</resources>
<connections>
<connection>
<sender>newProjectButton</sender>
<signal>clicked()</signal>
<receiver>StartupView</receiver>
<slot>onNewProjectButtonClicked()</slot>
<hints>
<hint type="sourcelabel">
<x>304</x>
<y>141</y>
</hint>
<hint type="destinationlabel">
<x>356</x>
<y>144</y>
</hint>
</hints>
</connection>
<connection>
<sender>openProjectButton</sender>
<signal>clicked()</signal>
<receiver>StartupView</receiver>
<slot>onOpenProjectButtonClicked()</slot>
<hints>
<hint type="sourcelabel">
<x>311</x>
<y>194</y>
</hint>
<hint type="destinationlabel">
<x>357</x>
<y>194</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>onNewProjectButtonClicked()</slot>
<slot>onOpenProjectButtonClicked()</slot>
</slots>
</ui>
-172
View File
@@ -1,172 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>StartupWizard</class>
<widget class="QDialog" name="StartupWizard">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>339</width>
<height>218</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>gLabels - Startup Wizard</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="titleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>319</width>
<height>53</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>53</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">padding:8px;</string>
</property>
<property name="text">
<string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:24pt; font-weight:600;&quot;&gt;gLabels &lt;/span&gt;&lt;span style=&quot; font-size:16pt; color:#909090;&quot;&gt;Label Designer&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Welcome to gLabels. Let's get started:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCommandLinkButton" name="newProjectButton">
<property name="minimumSize">
<size>
<width>319</width>
<height>59</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>59</height>
</size>
</property>
<property name="text">
<string>New Project</string>
</property>
<property name="description">
<string>Create a new blank gLabels project</string>
</property>
</widget>
</item>
<item>
<widget class="QCommandLinkButton" name="openProjectButton">
<property name="minimumSize">
<size>
<width>319</width>
<height>59</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>59</height>
</size>
</property>
<property name="text">
<string>Open Project</string>
</property>
<property name="description">
<string>Open an existing gLabels project</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections>
<connection>
<sender>newProjectButton</sender>
<signal>clicked()</signal>
<receiver>StartupWizard</receiver>
<slot>onNewProjectButtonClicked()</slot>
<hints>
<hint type="sourcelabel">
<x>291</x>
<y>102</y>
</hint>
<hint type="destinationlabel">
<x>338</x>
<y>108</y>
</hint>
</hints>
</connection>
<connection>
<sender>openProjectButton</sender>
<signal>clicked()</signal>
<receiver>StartupWizard</receiver>
<slot>onOpenProjectButtonClicked()</slot>
<hints>
<hint type="sourcelabel">
<x>312</x>
<y>170</y>
</hint>
<hint type="destinationlabel">
<x>338</x>
<y>169</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>onNewProjectButtonClicked()</slot>
<slot>onOpenProjectButtonClicked()</slot>
</slots>
</ui>