chore: add boilerplate for a settings dialog

This commit is contained in:
talksik
2026-01-27 17:04:05 -08:00
parent d4f8a964cd
commit 5b271ab623
8 changed files with 307 additions and 54 deletions
+1
View File
@@ -28,6 +28,7 @@ qt_add_executable(llink
src/networkmanager.cpp
src/authdialog.ui
src/authdialog.cpp
src/settingsdialog.h src/settingsdialog.cpp src/settingsdialog.ui
)
qt_add_resources(llink
+21 -2
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 16.0.2, 2026-01-27T10:36:09. -->
<!-- Written by QtCreator 16.0.2, 2026-01-27T16:56:03. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -447,7 +447,26 @@
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/Users/talksik/Documents/code/llink/build/Qt_6_8_6_for_macOS-Debug/llink.app/Contents/MacOS</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">testauthmanager</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">testauthmanager</value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/Users/talksik/Documents/code/llink/build/Qt_6_8_6_for_macOS-Debug/tests</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
</valuemap>
</data>
<data>
+25 -3
View File
@@ -3,21 +3,29 @@
//
#include "MainWindow.h"
#include "authdialog.h"
#include "authmanager.h"
#include "settingsdialog.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QMenu>
#include <QSystemTrayIcon>
#include "authmanager.h"
#include "authdialog.h"
#include <QTimer>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), m_trayIcon(nullptr), m_authManager(new AuthManager(this)), m_authDialog(nullptr)
: QMainWindow(parent), m_trayIcon(nullptr), m_authManager(new AuthManager(this)), m_settingsDialog(nullptr),
m_authDialog(nullptr)
{
m_authDialog = new AuthDialog(m_authManager, this);
ui = new Ui::MainWindow;
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint);
ui->splitter->setStretchFactor(0, 1);
ui->splitter->setStretchFactor(1, 1);
ui->splitter->setStretchFactor(2, 2);
m_authDialog->setModal(true);
@@ -73,3 +81,17 @@ MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_exitButton_clicked()
{
qApp->exit(0);
}
void MainWindow::on_settingsButton_clicked()
{
if (!m_settingsDialog)
{
m_settingsDialog = new SettingsDialog(m_authManager, this);
}
m_settingsDialog->show();
}
+11 -2
View File
@@ -10,9 +10,11 @@
QT_BEGIN_NAMESPACE
class QSystemTrayIcon;
class AuthManager;
class AuthDialog;
QT_END_NAMESPACE
class AuthDialog;
class SettingsDialog;
namespace Ui {
class MainWindow;
}
@@ -26,7 +28,12 @@ public:
~MainWindow();
private:
private slots:
void on_exitButton_clicked();
void on_settingsButton_clicked();
private:
void setupTrayIcon();
QSystemTrayIcon *m_trayIcon;
@@ -34,6 +41,8 @@ private:
AuthManager *m_authManager;
AuthDialog *m_authDialog;
SettingsDialog *m_settingsDialog;
};
#endif //LLINK_MAINWINDOW_H
+119 -47
View File
@@ -7,60 +7,134 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>598</height>
<height>676</height>
</rect>
</property>
<property name="windowTitle">
<string>Flowy.llink</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="label_3">
<property name="enabled">
<bool>true</bool>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="geometry">
<rect>
<x>360</x>
<y>20</y>
<width>61</width>
<height>16</height>
</rect>
<property name="topMargin">
<number>0</number>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<property name="rightMargin">
<number>0</number>
</property>
<property name="text">
<string/>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="pixmap">
<pixmap resource="../build/Qt_6_8_6_for_macOS-Debug/.qt/rcc/PREFIX_PATH.qrc">:/assets/FLOWY-4.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>300</x>
<y>250</y>
<width>181</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Welcome to Flowy.llink</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>28</height>
</size>
</property>
<widget class="QToolButton" name="exitButton">
<property name="geometry">
<rect>
<x>770</x>
<y>0</y>
<width>26</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset theme="QIcon::ThemeIcon::ApplicationExit"/>
</property>
</widget>
<widget class="QToolButton" name="settingsButton">
<property name="geometry">
<rect>
<x>740</x>
<y>0</y>
<width>26</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset theme="QIcon::ThemeIcon::HelpAbout"/>
</property>
</widget>
</widget>
</item>
<item>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<widget class="QTreeView" name="topLevelParticlesView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QListView" name="particlesView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QWidget" name="contentView" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>0</height>
</size>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>140</x>
<y>300</y>
<width>111</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Main content area</string>
</property>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar">
<property name="sizePolicy">
@@ -71,8 +145,6 @@
</property>
</widget>
</widget>
<resources>
<include location="../build/Qt_6_8_6_for_macOS-Debug/.qt/rcc/PREFIX_PATH.qrc"/>
</resources>
<resources/>
<connections/>
</ui>
+24
View File
@@ -0,0 +1,24 @@
#include "settingsdialog.h"
#include "authmanager.h"
#include "ui_settingsdialog.h"
SettingsDialog::SettingsDialog(AuthManager *authManager, QWidget *parent)
: QDialog(parent), m_authManager(authManager), ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
this->setModal(true);
connect(ui->signOutButton, &QPushButton::clicked, this, &SettingsDialog::on_signOutButton_clicked);
}
SettingsDialog::~SettingsDialog()
{
delete ui;
}
void SettingsDialog::on_signOutButton_clicked()
{
m_authManager->signOut();
close();
}
+29
View File
@@ -0,0 +1,29 @@
#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H
#include <QDialog>
class AuthManager;
namespace Ui
{
class SettingsDialog;
}
class SettingsDialog : public QDialog
{
Q_OBJECT
public:
explicit SettingsDialog(AuthManager *, QWidget *parent = nullptr);
~SettingsDialog();
private slots:
void on_signOutButton_clicked();
private:
Ui::SettingsDialog *ui;
AuthManager *m_authManager;
};
#endif // SETTINGSDIALOG_H
+77
View File
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>785</width>
<height>700</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QListWidget" name="listWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>221</width>
<height>701</height>
</rect>
</property>
</widget>
<widget class="QStackedWidget" name="stackedWidget">
<property name="geometry">
<rect>
<x>220</x>
<y>0</y>
<width>561</width>
<height>701</height>
</rect>
</property>
<widget class="QWidget" name="page">
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>220</x>
<y>310</y>
<width>85</width>
<height>64</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="authLabel">
<property name="text">
<string>Hello, </string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="signOutButton">
<property name="text">
<string>Sign Out</string>
</property>
<property name="default">
<bool>true</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QWidget" name="page_2"/>
</widget>
</widget>
<resources/>
<connections/>
</ui>