expose views templates in Views New dialog button

work/spdx
Michail Vourlakos 4 years ago
parent 5577a0c328
commit 2bb170fba8

@ -28,15 +28,22 @@
#include "../settingsdialog/layoutsmodel.h" #include "../settingsdialog/layoutsmodel.h"
#include "../settingsdialog/delegates/layoutcmbitemdelegate.h" #include "../settingsdialog/delegates/layoutcmbitemdelegate.h"
#include "../../data/layoutstable.h" #include "../../data/layoutstable.h"
#include "../../data/genericbasictable.h"
#include "../../lattecorona.h" #include "../../lattecorona.h"
#include "../../layout/abstractlayout.h" #include "../../layout/abstractlayout.h"
#include "../../layout/centrallayout.h" #include "../../layout/centrallayout.h"
#include "../../layouts/manager.h" #include "../../layouts/manager.h"
#include "../../layouts/synchronizer.h" #include "../../layouts/synchronizer.h"
#include "../../templates/templatesmanager.h"
#include "../../tools/commontools.h"
// Qt // Qt
#include <QMessageBox> #include <QMessageBox>
//! KDE
#include <KLocalizedString>
#include <KIO/OpenFileManagerWindowJob>
namespace Latte { namespace Latte {
namespace Settings { namespace Settings {
namespace Handler { namespace Handler {
@ -72,6 +79,21 @@ void ViewsHandler::init()
m_ui->layoutsCmb->setModelColumn(Model::Layouts::NAMECOLUMN); m_ui->layoutsCmb->setModelColumn(Model::Layouts::NAMECOLUMN);
m_ui->layoutsCmb->setItemDelegate(new Settings::Layout::Delegate::LayoutCmbItemDelegate(this)); m_ui->layoutsCmb->setItemDelegate(new Settings::Layout::Delegate::LayoutCmbItemDelegate(this));
//! New Button
m_newViewAction = new QAction(i18nc("new view", "&New"), this);
m_newViewAction->setToolTip(i18n("New dock or panel"));
m_newViewAction->setIcon(QIcon::fromTheme("add"));
m_newViewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
connectActionWithButton(m_ui->newBtn, m_newViewAction);
connect(m_newViewAction, &QAction::triggered, m_ui->newBtn, &QPushButton::showMenu);
initViewTemplatesSubMenu();
m_newViewAction->setMenu(m_viewTemplatesSubMenu);
m_ui->newBtn->setMenu(m_viewTemplatesSubMenu);
connect(corona()->templatesManager(), &Latte::Templates::Manager::viewTemplatesChanged, this, &ViewsHandler::initViewTemplatesSubMenu);
//! signals
connect(this, &ViewsHandler::currentLayoutChanged, this, &ViewsHandler::reload); connect(this, &ViewsHandler::currentLayoutChanged, this, &ViewsHandler::reload);
reload(); reload();
@ -85,6 +107,48 @@ void ViewsHandler::init()
connect(m_viewsController, &Settings::Controller::Views::dataChanged, this, &ViewsHandler::dataChanged); connect(m_viewsController, &Settings::Controller::Views::dataChanged, this, &ViewsHandler::dataChanged);
} }
void ViewsHandler::initViewTemplatesSubMenu()
{
if (!m_viewTemplatesSubMenu) {
m_viewTemplatesSubMenu = new QMenu(m_ui->newBtn);
m_viewTemplatesSubMenu->setMinimumWidth(m_ui->newBtn->width() * 2);
} else {
m_viewTemplatesSubMenu->clear();
}
/*Add View Templates for New Action*/
Data::GenericBasicTable templates = corona()->templatesManager()->viewTemplates();
bool customtemplateseparatoradded{false};
for (int i=0; i<templates.rowCount(); ++i) {
if (!customtemplateseparatoradded && templates[i].id.startsWith(QDir::homePath())) {
m_viewTemplatesSubMenu->addSeparator();
customtemplateseparatoradded = true;
}
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);
});
}
if (templates.rowCount() > 0) {
QAction *openTemplatesDirectory = m_viewTemplatesSubMenu->addAction(i18n("Templates..."));
openTemplatesDirectory->setToolTip(i18n("Open templates directory"));
openTemplatesDirectory->setIcon(QIcon::fromTheme("edit"));
connect(openTemplatesDirectory, &QAction::triggered, this, [&]() {
KIO::highlightInFileManager({QString(Latte::configPath() + "/latte/templates/Dock.view.latte")});
});
}
}
void ViewsHandler::reload() void ViewsHandler::reload()
{ {
m_dialog->layoutsController()->initializeSelectedLayoutViews(); m_dialog->layoutsController()->initializeSelectedLayoutViews();
@ -146,6 +210,12 @@ void ViewsHandler::save()
// m_dialog->layoutsController()->setLayoutProperties(currentData()); // m_dialog->layoutsController()->setLayoutProperties(currentData());
} }
void ViewsHandler::newView(const QString &templateId)
{
qDebug() << "new view from template :: " << templateId;
}
void ViewsHandler::onCurrentLayoutIndexChanged(int row) void ViewsHandler::onCurrentLayoutIndexChanged(int row)
{ {
bool switchtonewlayout{true}; bool switchtonewlayout{true};

@ -27,7 +27,9 @@
#include "../../layout/abstractlayout.h" #include "../../layout/abstractlayout.h"
// Qt // Qt
#include <QAction>
#include <QButtonGroup> #include <QButtonGroup>
#include <QMenu>
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
namespace Ui { namespace Ui {
@ -79,11 +81,16 @@ signals:
void currentLayoutChanged(); void currentLayoutChanged();
private slots: private slots:
void onCurrentLayoutIndexChanged(int row); void initViewTemplatesSubMenu();
void updateWindowTitle(); void updateWindowTitle();
void onCurrentLayoutIndexChanged(int row);
void newView(const QString &templateId);
private: private:
void init(); void init();
void reload(); void reload();
void loadLayout(const Latte::Data::Layout &data); void loadLayout(const Latte::Data::Layout &data);
@ -98,6 +105,12 @@ private:
QSortFilterProxyModel *m_layoutsProxyModel{nullptr}; QSortFilterProxyModel *m_layoutsProxyModel{nullptr};
Latte::Data::Layout o_data; Latte::Data::Layout o_data;
//! Actions
QAction *m_newViewAction{nullptr};
//! Menus
QMenu *m_viewTemplatesSubMenu{nullptr};
}; };
} }

@ -151,7 +151,7 @@ Data::LayoutsTable Manager::layoutTemplates()
return templates; return templates;
} }
Data::GenericTable<Data::Generic> Manager::viewTemplates() Data::GenericBasicTable Manager::viewTemplates()
{ {
return m_viewTemplates; return m_viewTemplates;
} }

@ -25,8 +25,7 @@
#include "../data/appletdata.h" #include "../data/appletdata.h"
#include "../data/layoutdata.h" #include "../data/layoutdata.h"
#include "../data/layoutstable.h" #include "../data/layoutstable.h"
#include "../data/genericdata.h" #include "../data/genericbasictable.h"
#include "../data/generictable.h"
// Qt // Qt
#include <QObject> #include <QObject>
@ -66,7 +65,7 @@ public:
Data::Layout layoutTemplateForName(const QString &layoutName); Data::Layout layoutTemplateForName(const QString &layoutName);
Data::LayoutsTable layoutTemplates(); Data::LayoutsTable layoutTemplates();
Data::GenericTable<Data::Generic> viewTemplates(); Data::GenericBasicTable viewTemplates();
//! creates a new layout with layoutName based on specific layout template and returns the new layout path //! creates a new layout with layoutName based on specific layout template and returns the new layout path
QString newLayout(QString layoutName, QString layoutTemplate = i18n(DEFAULTLAYOUTTEMPLATENAME)); QString newLayout(QString layoutName, QString layoutTemplate = i18n(DEFAULTLAYOUTTEMPLATENAME));
@ -100,7 +99,7 @@ private:
Latte::Corona *m_corona; Latte::Corona *m_corona;
Data::LayoutsTable m_layoutTemplates; Data::LayoutsTable m_layoutTemplates;
Data::GenericTable<Data::Generic> m_viewTemplates; Data::GenericBasicTable m_viewTemplates;
}; };

Loading…
Cancel
Save