From 4d7e1dca831f91399516862901a3176e3645f9a3 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 27 Aug 2020 13:19:47 +0300 Subject: [PATCH] update layouts table to support new approach --- app/data/layouticondata.cpp | 5 - app/data/layouticondata.h | 1 - .../controllers/layoutscontroller.cpp | 93 ++++++++++--------- app/settings/controllers/layoutscontroller.h | 2 +- app/settings/handlers/tablayoutshandler.cpp | 6 ++ app/settings/models/layoutsmodel.cpp | 58 ++++++------ 6 files changed, 86 insertions(+), 79 deletions(-) diff --git a/app/data/layouticondata.cpp b/app/data/layouticondata.cpp index ee30ef85f..4be401c03 100644 --- a/app/data/layouticondata.cpp +++ b/app/data/layouticondata.cpp @@ -31,14 +31,12 @@ LayoutIcon::LayoutIcon() LayoutIcon::LayoutIcon(LayoutIcon &&o) : Generic(o), - isFreeActivities(o.isFreeActivities), isBackgroundFile(o.isBackgroundFile) { } LayoutIcon::LayoutIcon(const LayoutIcon &o) : Generic(o), - isFreeActivities(o.isFreeActivities), isBackgroundFile(o.isBackgroundFile) { } @@ -46,7 +44,6 @@ LayoutIcon::LayoutIcon(const LayoutIcon &o) LayoutIcon &LayoutIcon::operator=(LayoutIcon &&rhs) { id = rhs.id; - isFreeActivities = rhs.isFreeActivities; isBackgroundFile = rhs.isBackgroundFile; name = rhs.name; @@ -56,7 +53,6 @@ LayoutIcon &LayoutIcon::operator=(LayoutIcon &&rhs) LayoutIcon &LayoutIcon::operator=(const LayoutIcon &rhs) { id = rhs.id; - isFreeActivities = rhs.isFreeActivities; isBackgroundFile = rhs.isBackgroundFile; name = rhs.name; @@ -67,7 +63,6 @@ bool LayoutIcon::operator==(const LayoutIcon &rhs) const { return (id == rhs.id) && (name == rhs.name) - && (isFreeActivities == rhs.isFreeActivities) && (isBackgroundFile == rhs.isBackgroundFile); } diff --git a/app/data/layouticondata.h b/app/data/layouticondata.h index 0909535f8..294edd9e3 100644 --- a/app/data/layouticondata.h +++ b/app/data/layouticondata.h @@ -39,7 +39,6 @@ public: LayoutIcon(const LayoutIcon &o); //! Layout data - bool isFreeActivities{false}; bool isBackgroundFile{true}; //! Operators diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp index c83b60a5c..401c32f77 100644 --- a/app/settings/controllers/layoutscontroller.cpp +++ b/app/settings/controllers/layoutscontroller.cpp @@ -68,7 +68,8 @@ Layouts::Layouts(Settings::Handler::TabLayouts *parent) loadConfig(); m_proxyModel->setSourceModel(m_model); - connect(m_model, &Model::Layouts::inMultipleModeChanged, this, &Layouts::updateLastColumnWidth); + connect(m_model, &Model::Layouts::inMultipleModeChanged, this, &Layouts::applyColumnWidths); + connect(m_handler->corona()->universalSettings(), &UniversalSettings::canDisableBordersChanged, this, &Layouts::applyColumnWidths); connect(m_model, &QAbstractItemModel::dataChanged, this, &Layouts::dataChanged); connect(m_model, &Model::Layouts::rowsInserted, this, &Layouts::dataChanged); @@ -120,7 +121,6 @@ void Layouts::initView() { m_view->setModel(m_proxyModel); m_view->setHorizontalHeader(m_headerView); - m_view->horizontalHeader()->setStretchLastSection(true); m_view->verticalHeader()->setVisible(false); m_view->setSortingEnabled(true); @@ -221,12 +221,45 @@ void Layouts::setInMultipleMode(bool inMultiple) m_model->setInMultipleMode(inMultiple); } -void Layouts::updateLastColumnWidth() +void Layouts::applyColumnWidths() { if (m_model->inMultipleMode()) { - //! column widths - if (m_viewColumnWidths.count()>=5) { - m_view->setColumnWidth(Model::Layouts::ACTIVITYCOLUMN, m_viewColumnWidths[4].toInt()); + m_view->horizontalHeader()->setSectionResizeMode(Model::Layouts::ACTIVITYCOLUMN, QHeaderView::Stretch); + m_view->horizontalHeader()->setSectionResizeMode(Model::Layouts::NAMECOLUMN, QHeaderView::Interactive); + } else { + m_view->horizontalHeader()->setSectionResizeMode(Model::Layouts::NAMECOLUMN, QHeaderView::Stretch); + m_view->horizontalHeader()->setSectionResizeMode(Model::Layouts::ACTIVITYCOLUMN, QHeaderView::Interactive); + } + + //! this line should be commented for debugging layouts window functionality + m_view->setColumnHidden(Model::Layouts::IDCOLUMN, true); + m_view->setColumnHidden(Model::Layouts::HIDDENTEXTCOLUMN, true); + + int maxColumns = Model::Layouts::ACTIVITYCOLUMN - Model::Layouts::BACKGROUNDCOLUMN; //4 - multiple + + if (m_handler->corona()->universalSettings()->canDisableBorders()) { + m_view->setColumnHidden(Model::Layouts::BORDERSCOLUMN, false); + } else { + m_view->setColumnHidden(Model::Layouts::BORDERSCOLUMN, true); + } + + if (m_model->inMultipleMode()) { + m_view->setColumnHidden(Model::Layouts::ACTIVITYCOLUMN, false); + } else { + m_view->setColumnHidden(Model::Layouts::ACTIVITYCOLUMN, true); + } + + if (!m_viewColumnWidths.isEmpty()) { + for (int i=0; icorona()->universalSettings()->canDisableBorders()) + || (currentColumn == Model::Layouts::NAMECOLUMN && !m_model->inMultipleMode()) + || (currentColumn == Model::Layouts::ACTIVITYCOLUMN && !m_model->inMultipleMode())) { + continue; + } + + m_view->setColumnWidth(currentColumn, m_viewColumnWidths[i].toInt()); } } } @@ -392,28 +425,7 @@ void Layouts::loadLayouts() m_view->selectRow(rowForName(m_handler->corona()->layoutsManager()->currentLayoutName())); - //! this line should be commented for debugging layouts window functionality - m_view->setColumnHidden(Model::Layouts::IDCOLUMN, true); - m_view->setColumnHidden(Model::Layouts::HIDDENTEXTCOLUMN, true); - - if (m_handler->corona()->universalSettings()->canDisableBorders()) { - m_view->setColumnHidden(Model::Layouts::BORDERSCOLUMN, false); - } else { - m_view->setColumnHidden(Model::Layouts::BORDERSCOLUMN, true); - } - - m_view->resizeColumnsToContents(); - - - if (!m_viewColumnWidths.isEmpty()) { - int lastColumn = inMultiple ? 5 : 4; - - for (int i=0; isetColumnWidth(Model::Layouts::BACKGROUNDCOLUMN+i, m_viewColumnWidths[i].toInt()); - } - } - - updateLastColumnWidth(); + applyColumnWidths(); //! there are broken layouts and the user must be informed! if (brokenLayouts.count() > 0) { @@ -494,7 +506,7 @@ const Latte::Data::Layout Layouts::addLayoutByText(QString rawLayoutText) /**Window has to be activated explicitely since the window where the drag * started would otherwise be the active window. By activating the window - the user can immediately change the name by simply typing.*/ + the user can immediately change the name by simply typing.*/ m_handler->dialog()->activateWindow(); return newLayout; @@ -662,7 +674,7 @@ void Layouts::save() //! update only the Central-specific layout parts CentralLayout *centralActive = isOriginalLayout ? m_handler->corona()->layoutsManager()->synchronizer()->centralLayout(iLayoutOriginalData.name) : nullptr; - CentralLayout *central = centralActive ? centralActive : m_layouts[iLayoutCurrentData.id]; + CentralLayout *central = centralActive ? centralActive : m_layouts[iLayoutCurrentData.id]; central->setShowInMenu(iLayoutCurrentData.isShownInMenu); central->setDisableBordersForMaximizedWindows(iLayoutCurrentData.hasDisabledBorders); @@ -778,21 +790,16 @@ void Layouts::save() void Layouts::storeColumnWidths() { - //! save column widths - m_viewColumnWidths.clear(); + m_viewColumnWidths[0] = QString::number(m_view->columnWidth(Model::Layouts::BACKGROUNDCOLUMN)); - m_viewColumnWidths << QString::number(m_view->columnWidth(Model::Layouts::BACKGROUNDCOLUMN)); - m_viewColumnWidths << QString::number(m_view->columnWidth(Model::Layouts::NAMECOLUMN)); - m_viewColumnWidths << QString::number(m_view->columnWidth(Model::Layouts::MENUCOLUMN)); - m_viewColumnWidths << QString::number(m_view->columnWidth(Model::Layouts::BORDERSCOLUMN)); + if (m_model->inMultipleMode()) { + m_viewColumnWidths[1] = QString::number(m_view->columnWidth(Model::Layouts::NAMECOLUMN)); + } - if (inMultipleMode()) { - m_viewColumnWidths << QString::number(m_view->columnWidth(Model::Layouts::ACTIVITYCOLUMN)); - } else { - //! In Single Mode, keed recorded value for ACTIVITYCOLUMN - if (m_viewColumnWidths.count()>=5) { - m_viewColumnWidths << m_viewColumnWidths[4]; - } + m_viewColumnWidths[2] = QString::number(m_view->columnWidth(Model::Layouts::MENUCOLUMN)); + + if (m_handler->corona()->universalSettings()->canDisableBorders()) { + m_viewColumnWidths[3] = QString::number(m_view->columnWidth(Model::Layouts::BORDERSCOLUMN)); } } diff --git a/app/settings/controllers/layoutscontroller.h b/app/settings/controllers/layoutscontroller.h index 6b0d24027..9fcc14017 100644 --- a/app/settings/controllers/layoutscontroller.h +++ b/app/settings/controllers/layoutscontroller.h @@ -104,7 +104,7 @@ private slots: void loadConfig(); void saveConfig(); void storeColumnWidths(); - void updateLastColumnWidth(); + void applyColumnWidths(); void onNameDuplicatedFrom(const QString &provenId, const QString &trialId); diff --git a/app/settings/handlers/tablayoutshandler.cpp b/app/settings/handlers/tablayoutshandler.cpp index 2c0b281bc..b2c41ad6a 100644 --- a/app/settings/handlers/tablayoutshandler.cpp +++ b/app/settings/handlers/tablayoutshandler.cpp @@ -274,6 +274,12 @@ bool TabLayouts::inDefaultValues() const void TabLayouts::reset() { m_layoutsController->reset(); + + if (m_layoutsController->inMultipleMode()) { + m_ui->multipleToolBtn->setChecked(true); + } else { + m_ui->singleToolBtn->setChecked(true); + } } void TabLayouts::resetDefaults() diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp index 65464684b..d2130be3f 100644 --- a/app/settings/models/layoutsmodel.cpp +++ b/app/settings/models/layoutsmodel.cpp @@ -344,43 +344,44 @@ QList Layouts::iconsForCentralLayout(const int &row) co { QList icons; - QStringList activitiesIds = m_layoutsTable[row].activities; - - int freeActivitiesPos = -1; - - for(int i=0; i= 0) { - Latte::Data::LayoutIcon freeActsData = icons.takeAt(freeActivitiesPos); - icons.clear(); - icons << freeActsData; - return icons; - } - - if (!m_layoutsTable[row].icon.isEmpty() && freeActivitiesPos<0) { - //! if there is specific icon set from the user for this layout - //! we draw only that icon + if (!m_layoutsTable[row].icon.isEmpty()) { + //! if there is specific icon set from the user for this layout we draw only that icon icons.clear(); Latte::Data::LayoutIcon icon; icon.name = m_layoutsTable[row].icon; - icon.isFreeActivities = false; icon.isBackgroundFile = false; icons << icon; return icons; @@ -399,7 +400,6 @@ QList Layouts::iconsForCentralLayout(const int &row) co if (QFileInfo(colorPath).exists()) { Latte::Data::LayoutIcon icon; icon.isBackgroundFile = true; - icon.isFreeActivities = false; icon.name = colorPath; icons << icon; } @@ -565,7 +565,7 @@ QVariant Layouts::data(const QModelIndex &index, int role) const if (m_layoutsTable[row].activities.contains(Latte::Data::Layout::ALLACTIVITIESID)) { return sortingPriority(HIGHESTPRIORITY, row); } else if (m_layoutsTable[row].activities.contains(Latte::Data::Layout::FREEACTIVITIESID)) { - return sortingPriority(HIGHPRIORITY, row); + return sortingPriority(HIGHPRIORITY, row); } else { return sortingPriority(MEDIUMPRIORITY, row) + m_layoutsTable[row].activities.count(); }