diff options
author | Petr Mrázek <peterix@gmail.com> | 2014-06-29 19:59:08 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2014-06-29 19:59:08 +0200 |
commit | 5179aed3a066dfc9885a75d36a0e64c48aa448f7 (patch) | |
tree | ec0c656f06ca923b86a9025c0904cfc7c7f81845 /gui/pagedialog/PageDialog.cpp | |
parent | 77de2d1e5472051cd05857dc4304bdc9ad77e36d (diff) | |
download | MultiMC-5179aed3a066dfc9885a75d36a0e64c48aa448f7.tar MultiMC-5179aed3a066dfc9885a75d36a0e64c48aa448f7.tar.gz MultiMC-5179aed3a066dfc9885a75d36a0e64c48aa448f7.tar.lz MultiMC-5179aed3a066dfc9885a75d36a0e64c48aa448f7.tar.xz MultiMC-5179aed3a066dfc9885a75d36a0e64c48aa448f7.zip |
Separate page dialog into a page container and a dialog.
Diffstat (limited to 'gui/pagedialog/PageDialog.cpp')
-rw-r--r-- | gui/pagedialog/PageDialog.cpp | 178 |
1 files changed, 18 insertions, 160 deletions
diff --git a/gui/pagedialog/PageDialog.cpp b/gui/pagedialog/PageDialog.cpp index 56bdfd14..07027a84 100644 --- a/gui/pagedialog/PageDialog.cpp +++ b/gui/pagedialog/PageDialog.cpp @@ -15,184 +15,42 @@ #include "PageDialog.h" #include "gui/Platform.h" -#include <QStackedLayout> -#include <QPushButton> -#include <QSortFilterProxyModel> -#include <QUrl> #include "MultiMC.h" -#include <QStyledItemDelegate> -#include <QListView> -#include <QLineEdit> -#include <QLabel> -#include <QDialogButtonBox> -#include <QGridLayout> -#include <QDesktopServices> #include <settingsobject.h> -#include "PageDialog_p.h" #include <gui/widgets/IconLabel.h> - -class PageEntryFilterModel : public QSortFilterProxyModel -{ -public: - explicit PageEntryFilterModel(QObject *parent = 0) : QSortFilterProxyModel(parent) - { - } - -protected: - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const - { - const QString pattern = filterRegExp().pattern(); - const auto model = static_cast<PageModel *>(sourceModel()); - const auto page = model->pages().at(sourceRow); - if(!page->shouldDisplay()) - return false; - // Regular contents check, then check page-filter. - return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); - } -}; +#include <gui/widgets/PageContainer.h> +#include <QDialogButtonBox> +#include <QPushButton> +#include <QVBoxLayout> +#include <QtGui/QKeyEvent> PageDialog::PageDialog(BasePageProviderPtr pageProvider, QString defaultId, QWidget *parent) : QDialog(parent) { MultiMCPlatform::fixWM_CLASS(this); - createUI(); setWindowTitle(pageProvider->dialogTitle()); - restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("PagedGeometry").toByteArray())); - - m_model = new PageModel(this); - m_proxyModel = new PageEntryFilterModel(this); - int firstIndex = -1; - int counter = 0; - auto pages = pageProvider->getPages(); - for(auto page: pages) - { - page->stackIndex = m_pageStack->addWidget(dynamic_cast<QWidget *>(page)); - page->listIndex = counter; - counter++; - if(firstIndex == -1) - { - firstIndex = page->stackIndex; - } - } - m_model->setPages(pages); - - m_proxyModel->setSourceModel(m_model); - m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - - m_pageList->setIconSize(QSize(pageIconSize, pageIconSize)); - m_pageList->setSelectionMode(QAbstractItemView::SingleSelection); - m_pageList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - m_pageList->setModel(m_proxyModel); - connect(m_pageList->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), - this, SLOT(currentChanged(QModelIndex))); - m_pageStack->setStackingMode(QStackedLayout::StackOne); - m_pageList->setFocus(); - // now find what we want to have selected... - auto page = m_model->findPageEntryById(defaultId); - QModelIndex index; - if(page) - { - index = m_proxyModel->mapFromSource(m_model->index(page->listIndex)); - } - else - { - index = m_proxyModel->index(0,0); - } - if(index.isValid()) - m_pageList->setCurrentIndex(index); -} - -void PageDialog::createUI() -{ - m_pageStack = new QStackedLayout; - m_filter = new QLineEdit; - m_pageList = new PageView; - m_header = new QLabel(); - m_iconHeader = new IconLabel(this, QIcon(), QSize(24,24)); - - QFont headerLabelFont = m_header->font(); - headerLabelFont.setBold(true); - const int pointSize = headerLabelFont.pointSize(); - if (pointSize > 0) - headerLabelFont.setPointSize(pointSize + 2); - m_header->setFont(headerLabelFont); - - QHBoxLayout *headerHLayout = new QHBoxLayout; - const int leftMargin = MMC->style()->pixelMetric(QStyle::PM_LayoutLeftMargin); - headerHLayout->addSpacerItem( - new QSpacerItem(leftMargin, 0, QSizePolicy::Fixed, QSizePolicy::Ignored)); - headerHLayout->addWidget(m_header); - headerHLayout->addSpacerItem( - new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored)); - headerHLayout->addWidget(m_iconHeader); - - m_pageStack->setMargin(0); - m_pageStack->addWidget(new QWidget(this)); - + m_container = new PageContainer(pageProvider, defaultId, this); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(m_container); + mainLayout->setSpacing(0); + mainLayout->setContentsMargins(0,0,0,0); + setLayout(mainLayout); + QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Close); buttons->button(QDialogButtonBox::Close)->setDefault(true); - connect(buttons->button(QDialogButtonBox::Close), SIGNAL(clicked()), this, SLOT(close())); - connect(buttons->button(QDialogButtonBox::Help), SIGNAL(clicked()), this, SLOT(help())); + m_container->addButtons(buttons); - QGridLayout *mainGridLayout = new QGridLayout; - mainGridLayout->addLayout(headerHLayout, 0, 1, 1, 1); - mainGridLayout->addWidget(m_pageList, 0, 0, 2, 1); - mainGridLayout->addLayout(m_pageStack, 1, 1, 1, 1); - mainGridLayout->addWidget(buttons, 2, 0, 1, 2); - mainGridLayout->setColumnStretch(1, 4); - setLayout(mainGridLayout); -} - -void PageDialog::showPage(int row) -{ - if(row != -1) - { - m_currentPage = m_model->pages().at(row); - } - else - { - m_currentPage = nullptr; - } - if(m_currentPage) - { - m_pageStack->setCurrentIndex(m_currentPage->stackIndex); - m_header->setText(m_currentPage->displayName()); - m_iconHeader->setIcon(m_currentPage->icon()); - m_currentPage->opened(); - } - else - { - m_pageStack->setCurrentIndex(0); - m_header->setText(QString()); - m_iconHeader->setIcon(QIcon::fromTheme("bug")); - } -} - -void PageDialog::help() -{ - if(m_currentPage) - { - QString pageId = m_currentPage->helpPage(); - if(pageId.isEmpty()) - return; - QDesktopServices::openUrl(QUrl("https://github.com/MultiMC/MultiMC5/wiki/" + pageId)); - } -} + connect(buttons->button(QDialogButtonBox::Close), SIGNAL(clicked()), this, SLOT(close())); + connect(buttons->button(QDialogButtonBox::Help), SIGNAL(clicked()), m_container, SLOT(help())); -void PageDialog::currentChanged(const QModelIndex ¤t) -{ - showPage(current.isValid() ? m_proxyModel->mapToSource(current).row() : -1); + restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("PagedGeometry").toByteArray())); } void PageDialog::closeEvent(QCloseEvent * event) { - bool accepted = true; - for(auto page: m_model->pages()) - { - accepted &= page->apply(); - } - if(accepted) + if(m_container->requestClose(event)) { MMC->settings()->set("PagedGeometry", saveGeometry().toBase64()); QDialog::closeEvent(event); |