Mercurial > minori
diff src/dialog/settings.cpp @ 6:1d82f6e04d7d
Update: add first parts to the settings dialog
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Wed, 16 Aug 2023 00:49:17 -0400 |
parents | |
children | 07a9095eaeed |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dialog/settings.cpp Wed Aug 16 00:49:17 2023 -0400 @@ -0,0 +1,104 @@ +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QDialogButtonBox> +#include <QPlainTextEdit> +#include <QPlainTextDocumentLayout> +#include <QComboBox> +#include <QGroupBox> +#include <QWidget> +#include <QTextDocument> +#include "settings.h" +#include "sidebar.h" +#include "ui_utils.h" + +SettingsPage::SettingsPage(QWidget* parent, QString title) + : QWidget(parent) { + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + page_title = new QLabel(title, this); + page_title->setWordWrap(false); + page_title->setFrameShape(QFrame::Panel); + page_title->setFrameShadow(QFrame::Sunken); + page_title->setStyleSheet("QLabel { font-size: 10pt; font-weight: bold; background-color: #ABABAB; color: white; }"); + page_title->setFixedHeight(23); + page_title->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + page_title->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + tab_widget = new QTabWidget(this); + tab_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + + QVBoxLayout* layout = new QVBoxLayout; + layout->setMargin(0); + layout->addWidget(page_title); + layout->addWidget(tab_widget); + setLayout(layout); +} + +void SettingsPage::SetTitle(QString title) { + page_title->setText(title); +} + +void SettingsPage::AddTab(QWidget* tab, QString title) { + tab_widget->addTab(tab, title); +} + +void SettingsPage::SaveInfo() { + // no-op... child classes will implement this +} + +void SettingsDialog::OnSidebar(QListWidgetItem* item) { + layout->itemAt(1)->widget()->setVisible(false); // old widget + layout->replaceWidget(layout->itemAt(1)->widget(), pages[item->listWidget()->row(item)], Qt::FindDirectChildrenOnly); + pages[item->listWidget()->row(item)]->setVisible(true); // new widget +} + +void SettingsDialog::OnOK() { + for (const auto& page : pages) { + page->SaveInfo(); + } + QDialog::accept(); +} + +SettingsDialog::SettingsDialog(QWidget* parent) + : QDialog(parent) { + setFixedSize(755, 566); + setWindowTitle(tr("Settings")); + setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); + QWidget* widget = new QWidget(this); + widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + sidebar = new SideBar(widget); + sidebar->setCurrentItem(sidebar->AddItem(tr("Services"), UiUtils::CreateSideBarIcon(":/icons/24x24/globe.png"))); + //sidebar->AddItem(tr("Library"), UiUtils::CreateSideBarIcon(":/icons/24x24/inbox-film.png")); + sidebar->AddItem(tr("Application"), UiUtils::CreateSideBarIcon(":/icons/24x24/application-sidebar-list.png")); + //sidebar->AddItem(tr("Recognition"), UiUtils::CreateSideBarIcon(":/icons/24x24/question.png")); + //sidebar->AddItem(tr("Sharing"), UiUtils::CreateSideBarIcon(":/icons/24x24/megaphone.png")); + //sidebar->AddItem(tr("Torrents"), UiUtils::CreateSideBarIcon(":/icons/24x24/feed.png")); + //sidebar->AddItem(tr("Advanced"), UiUtils::CreateSideBarIcon(":/icons/24x24/gear.png")); + sidebar->setIconSize(QSize(24, 24)); + sidebar->setFrameShape(QFrame::Box); + sidebar->setStyleSheet("QListWidget { background-color: white; font-size: 12px; }"); + sidebar->setFixedWidth(158); + sidebar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + connect(sidebar, &QListWidget::itemActivated, this, &SettingsDialog::OnSidebar); + + SettingsPageServices* services_page = new SettingsPageServices(this); + pages.push_back(services_page); + SettingsPageApplication* application_page = new SettingsPageApplication(this); + application_page->setVisible(false); + pages.push_back(application_page); + + layout = new QHBoxLayout; + layout->addWidget(sidebar); + layout->addWidget(services_page); + layout->setMargin(0); + widget->setLayout(layout); + + QDialogButtonBox* button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); + connect(button_box, &QDialogButtonBox::accepted, this, &SettingsDialog::OnOK); + connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject); + + QVBoxLayout* buttons_layout = new QVBoxLayout(this); + buttons_layout->addWidget(widget); + buttons_layout->addWidget(button_box); + setLayout(buttons_layout); +} + +#include "moc_settings.cpp"