viewsdialog:support import function

work/spdx
Michail Vourlakos 4 years ago
parent 9d916aba35
commit 5e9c838239

@ -260,12 +260,12 @@ void TabLayouts::initExportLayoutSubMenu()
m_layoutExportSubMenu->clear();
}
QAction *exportForBackup = m_layoutExportSubMenu->addAction(i18nc("export layout for backup","&Export For Backup..."));
QAction *exportForBackup = m_layoutExportSubMenu->addAction(i18nc("export for backup","&Export For Backup..."));
exportForBackup->setIcon(QIcon::fromTheme("document-export"));
exportForBackup->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_E));
connect(exportForBackup, &QAction::triggered, this, &TabLayouts::exportLayoutForBackup);
QAction *exportAsTemplate = m_layoutExportSubMenu->addAction(i18nc("export layout as layout template","Export As &Template..."));
QAction *exportAsTemplate = m_layoutExportSubMenu->addAction(i18nc("export as template","Export As &Template..."));
exportAsTemplate->setIcon(QIcon::fromTheme("document-export"));
exportAsTemplate->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_T));
connect(exportAsTemplate, &QAction::triggered, this, &TabLayouts::exportLayoutAsTemplate);
@ -468,7 +468,8 @@ void TabLayouts::duplicateLayout()
void TabLayouts::installLayoutTemplate(Latte::Data::Layout importedLayout, QString templateFilePath, ImportedLayoutOrigin origin)
{
QString layoutName = QFileInfo(templateFilePath).baseName();
QString layoutName = QFileInfo(templateFilePath).fileName();
layoutName = layoutName.remove("layout.latte");
QString informationText = origin == ImportedLayoutOrigin::DOWNLOADED ? i18nc("settings:layout downloaded successfully","Layout <b>%0</b> downloaded successfully...").arg(importedLayout.name) :
i18nc("settings:layout imported successfully","Layout <b>%0</b> imported successfully...").arg(importedLayout.name);

@ -169,6 +169,11 @@ bool Views::hasSelectedView() const
return m_view->selectionModel()->hasSelection();
}
int Views::selectedViewsCount() const
{
return m_view->selectionModel()->selectedRows(Model::Views::IDCOLUMN).count();
}
int Views::rowForId(QString id) const
{
for (int i = 0; i < m_proxyModel->rowCount(); ++i) {

@ -78,6 +78,7 @@ public:
void sortByColumn(int column, Qt::SortOrder order);
bool hasSelectedView() const;
int selectedViewsCount() const;
const Data::ViewsTable selectedViewsCurrentData() const;
const Latte::Data::View appendViewFromViewTemplate(const Data::View &view);

@ -39,6 +39,9 @@
#include "../../templates/templatesmanager.h"
#include "../../tools/commontools.h"
// Qt
#include <QFileDialog>
// KDE
#include <KLocalizedString>
#include <KStandardGuiItem>
@ -106,6 +109,26 @@ void ViewsHandler::init()
connect(m_removeViewAction, &QAction::triggered, this, &ViewsHandler::removeSelectedViews);
m_ui->removeBtn->addAction(m_removeViewAction); //this is needed in order to be triggered properly
//! Import
m_importViewAction =new QAction(i18nc("import dock/panel","&Import..."));
m_duplicateViewAction->setToolTip(i18n("Import dock or panel from local file"));
m_importViewAction->setIcon(QIcon::fromTheme("document-import"));
m_importViewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_I));
connectActionWithButton(m_ui->importBtn, m_importViewAction);
connect(m_importViewAction, &QAction::triggered, this, &ViewsHandler::importView);
//! Export
m_exportViewAction = new QAction(i18nc("export layout", "&Export"), this);
m_exportViewAction->setToolTip(i18n("Export selected dock or panel at your system"));
m_exportViewAction->setIcon(QIcon::fromTheme("document-export"));
m_exportViewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E));
connectActionWithButton(m_ui->exportBtn, m_exportViewAction);
connect(m_exportViewAction, &QAction::triggered, m_ui->exportBtn, &QPushButton::showMenu);
initViewExportSubMenu();
m_exportViewAction->setMenu(m_viewExportSubMenu);
m_ui->exportBtn->setMenu(m_viewExportSubMenu);
//! signals
connect(this, &ViewsHandler::currentLayoutChanged, this, &ViewsHandler::reload);
@ -162,6 +185,26 @@ void ViewsHandler::initViewTemplatesSubMenu()
}
}
void ViewsHandler::initViewExportSubMenu()
{
if (!m_viewExportSubMenu) {
m_viewExportSubMenu = new QMenu(m_ui->exportBtn);
m_viewExportSubMenu->setMinimumWidth(m_ui->exportBtn->width() * 2);
} else {
m_viewExportSubMenu->clear();
}
QAction *exportforbackup = m_viewExportSubMenu->addAction(i18nc("export for backup","&Export For Backup..."));
exportforbackup->setIcon(QIcon::fromTheme("document-export"));
exportforbackup->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_E));
connect(exportforbackup, &QAction::triggered, this, &ViewsHandler::exportViewForBackup);
QAction *exportastemplate = m_viewExportSubMenu->addAction(i18nc("export as template","Export As &Template..."));
exportastemplate->setIcon(QIcon::fromTheme("document-export"));
exportastemplate->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_T));
connect(exportastemplate, &QAction::triggered, this, &ViewsHandler::exportViewAsTemplate);
}
void ViewsHandler::reload()
{
o_data = m_dialog->layoutsController()->selectedLayoutCurrentData();
@ -265,6 +308,69 @@ void ViewsHandler::removeSelectedViews()
m_viewsController->removeSelectedViews();
}
void ViewsHandler::exportViewForBackup()
{
if (!m_viewsController->hasSelectedView()) {
return;
}
if (m_viewsController->selectedViewsCount() > 1) {
showInlineMessage(i18n("<b>Export</b> functionality is supported only for one dock or panel each time."),
KMessageWidget::Warning,
false);
return;
}
//! it needs to be thought properly how this should be approached
//! the best scenario is Storage to provide a view file and afterwards use that file
}
void ViewsHandler::exportViewAsTemplate()
{
if (!m_viewsController->hasSelectedView()) {
return;
}
if (m_viewsController->selectedViewsCount() > 1) {
showInlineMessage(i18n("<b>Export</b> functionality is supported only for one dock or panel each time."),
KMessageWidget::Warning,
false);
return;
}
//! it needs to be thought properly how this should be approached
//! the best scenario is Storage to provide a view file and afterwards use that file
}
void ViewsHandler::importView()
{
qDebug() << Q_FUNC_INFO;
QFileDialog *importFileDialog = new QFileDialog(m_dialog, i18nc("import dock/panel", "Import Dock/Panel"), QDir::homePath(), QStringLiteral("view.latte"));
importFileDialog->setWindowIcon(QIcon::fromTheme("document-import"));
importFileDialog->setLabelText(QFileDialog::Accept, i18n("Import"));
importFileDialog->setFileMode(QFileDialog::AnyFile);
importFileDialog->setAcceptMode(QFileDialog::AcceptOpen);
importFileDialog->setDefaultSuffix("view.latte");
QStringList filters;
filters << QString(i18nc("import dock panel", "Latte Dock or Panel file v0.2") + "(*.view.latte)");
importFileDialog->setNameFilters(filters);
connect(importFileDialog, &QFileDialog::finished, importFileDialog, &QFileDialog::deleteLater);
connect(importFileDialog, &QFileDialog::fileSelected, this, [&](const QString & file) {
Data::Generic templatedata;
templatedata.id = file;
templatedata.name = QFileInfo(file).fileName();
templatedata.name = templatedata.name.remove(".view.latte");
newView(templatedata);
});
importFileDialog->open();
}
void ViewsHandler::onCurrentLayoutIndexChanged(int row)
{
bool switchtonewlayout{false};

@ -90,9 +90,14 @@ signals:
private slots:
void initViewTemplatesSubMenu();
void initViewExportSubMenu();
void removeSelectedViews();
void updateWindowTitle();
void exportViewForBackup();
void exportViewAsTemplate();
void importView();
void onCurrentLayoutIndexChanged(int row);
void newView(const Data::Generic &templateData);
@ -122,9 +127,12 @@ private:
QAction *m_newViewAction{nullptr};
QAction *m_duplicateViewAction{nullptr};
QAction *m_removeViewAction{nullptr};
QAction *m_exportViewAction{nullptr};
QAction *m_importViewAction{nullptr};
//! Menus
QMenu *m_viewTemplatesSubMenu{nullptr};
QMenu *m_viewExportSubMenu{nullptr};
};
}

Loading…
Cancel
Save