diff --git a/app/settings/viewsdialog/viewscontroller.cpp b/app/settings/viewsdialog/viewscontroller.cpp index d89856a0a..724d5da66 100644 --- a/app/settings/viewsdialog/viewscontroller.cpp +++ b/app/settings/viewsdialog/viewscontroller.cpp @@ -124,9 +124,12 @@ bool Views::hasSelectedView() const return (selectedRow >= 0); } -void Views::appendViewFromViewTemplate(const Data::View &view) +const Latte::Data::View Views::appendViewFromViewTemplate(const Data::View &view) { - m_model->appendTemporaryView(view); + Data::View newview = view; + newview.name = uniqueViewName(view.name); + m_model->appendTemporaryView(newview); + return newview; } void Views::selectRow(const QString &id) @@ -140,6 +143,31 @@ void Views::onCurrentLayoutChanged() m_model->setOriginalData(layout.views); } + +QString Views::uniqueViewName(QString name) +{ + if (name.isEmpty()) { + return name; + } + + int pos_ = name.lastIndexOf(QRegExp(QString(" - [0-9]+"))); + + if (m_model->containsCurrentName(name) && pos_ > 0) { + name = name.left(pos_); + } + + int i = 2; + + QString namePart = name; + + while (m_model->containsCurrentName(name)) { + name = namePart + " - " + QString::number(i); + i++; + } + + return name; +} + void Views::applyColumnWidths() { m_view->horizontalHeader()->setSectionResizeMode(Model::Views::NAMECOLUMN, QHeaderView::Stretch); diff --git a/app/settings/viewsdialog/viewscontroller.h b/app/settings/viewsdialog/viewscontroller.h index 496f98cbd..2928b2f89 100644 --- a/app/settings/viewsdialog/viewscontroller.h +++ b/app/settings/viewsdialog/viewscontroller.h @@ -70,7 +70,7 @@ public: // const Latte::Data::Layout selectedViewCurrentData() const; // const Latte::Data::Layout selectedViewOriginalData() const; - void appendViewFromViewTemplate(const Data::View &view); + const Latte::Data::View appendViewFromViewTemplate(const Data::View &view); void selectRow(const QString &id); @@ -85,6 +85,8 @@ signals: private: void init(); + QString uniqueViewName(QString name); + private slots: void loadConfig(); void saveConfig(); diff --git a/app/settings/viewsdialog/viewshandler.cpp b/app/settings/viewsdialog/viewshandler.cpp index 2a452933f..a9d5f954d 100644 --- a/app/settings/viewsdialog/viewshandler.cpp +++ b/app/settings/viewsdialog/viewshandler.cpp @@ -133,10 +133,11 @@ void ViewsHandler::initViewTemplatesSubMenu() QAction *newview = m_viewTemplatesSubMenu->addAction(templates[i].name); newview->setIcon(QIcon::fromTheme("document-new")); - QString templateid = templates[i].id; - connect(newview, &QAction::triggered, this, [&, templateid]() { - newView(templateid); + Data::Generic templateData = templates[i]; + + connect(newview, &QAction::triggered, this, [&, templateData]() { + newView(templateData); }); } @@ -213,16 +214,18 @@ void ViewsHandler::save() } -void ViewsHandler::newView(const QString &templateId) +void ViewsHandler::newView(const Data::Generic &templateData) { - qDebug() << "new view from template :: " << templateId; - - Data::ViewsTable views = Latte::Layouts::Storage::self()->views(templateId); + Data::ViewsTable views = Latte::Layouts::Storage::self()->views(templateData.id); if (views.rowCount() > 0) { Data::View viewfromtemplate = views[0]; - viewfromtemplate.setState(Data::View::OriginFromViewTemplate, templateId); - m_viewsController->appendViewFromViewTemplate(views[0]); + viewfromtemplate.setState(Data::View::OriginFromViewTemplate, templateData.id); + viewfromtemplate.name = templateData.name; + Data::View newview = m_viewsController->appendViewFromViewTemplate(viewfromtemplate); + + showInlineMessage(i18nc("settings:dock/panel added successfully","%0 added successfully...").arg(newview.name), + KMessageWidget::Information); } } diff --git a/app/settings/viewsdialog/viewshandler.h b/app/settings/viewsdialog/viewshandler.h index 435edc34c..3e29ebbd3 100644 --- a/app/settings/viewsdialog/viewshandler.h +++ b/app/settings/viewsdialog/viewshandler.h @@ -86,7 +86,7 @@ private slots: void onCurrentLayoutIndexChanged(int row); - void newView(const QString &templateId); + void newView(const Data::Generic &templateData); private: void init(); diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp index ea5bc2032..b5f336f9e 100644 --- a/app/settings/viewsdialog/viewsmodel.cpp +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -125,6 +125,11 @@ void Views::initAlignments() s_verticalAlignments.setValue(verticals); } +bool Views::containsCurrentName(const QString &name) const +{ + return m_viewsTable.containsName(name); +} + void Views::resetData() { clear(); @@ -418,7 +423,7 @@ QVariant Views::data(const QModelIndex &index, int role) const } break; case NAMECOLUMN: - if (role == Qt::DisplayRole || role == Qt::UserRole){ + if (role == Qt::DisplayRole || role == Qt::UserRole || role == Qt::EditRole){ return m_viewsTable[row].name; } break; diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h index 5da5271eb..3807bc826 100644 --- a/app/settings/viewsdialog/viewsmodel.h +++ b/app/settings/viewsdialog/viewsmodel.h @@ -73,6 +73,7 @@ public: ~Views(); bool hasChangedData() const; + bool containsCurrentName(const QString &name) const; //! all original data will become also current void resetData();