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();