provide functionality for ChooseDialog in Export

work/spdx
Michail Vourlakos 4 years ago
parent 2dee058fdc
commit 08327326ff

@ -69,12 +69,13 @@ public:
bool hasChangedData() const override;
bool inDefaultValues() const override;
Latte::Data::Layout currentData() const;
public slots:
void reset() override;
void resetDefaults() override;
void save() override;
Latte::Data::Layout currentData() const;
signals:
void currentLayoutChanged();

@ -30,10 +30,12 @@ namespace Latte {
namespace Settings {
namespace Dialog {
ExportTemplateDialog::ExportTemplateDialog(QWidget *parent, const QString &layoutName, const QString &layoutId)
ExportTemplateDialog::ExportTemplateDialog(SettingsDialog *parent, const QString &layoutName, const QString &layoutId)
: GenericDialog(parent),
m_ui(new Ui::ExportTemplateDialog)
{
m_corona = parent->corona();
init();
initExtractButton(i18n("Export your selected layout as template"));
//! we must create handlers after creating/adjusting the ui
@ -45,6 +47,8 @@ ExportTemplateDialog::ExportTemplateDialog(Latte::View *view)
: GenericDialog(nullptr),
m_ui(new Ui::ExportTemplateDialog)
{
m_corona = qobject_cast<Latte::Corona *>(view->corona());
init();
initExtractButton(i18n("Export your selected view as template"));
//! we must create handlers after creating/adjusting the ui
@ -55,6 +59,11 @@ ExportTemplateDialog::~ExportTemplateDialog()
{
}
Latte::Corona *ExportTemplateDialog::corona() const
{
return m_corona;
}
Ui::ExportTemplateDialog *ExportTemplateDialog::ui() const
{
return m_ui;

@ -56,11 +56,12 @@ class ExportTemplateDialog : public GenericDialog
Q_OBJECT
public:
ExportTemplateDialog(QWidget *parent, const QString &layoutName, const QString &layoutId);
ExportTemplateDialog(SettingsDialog *parent, const QString &layoutName, const QString &layoutId);
ExportTemplateDialog(Latte::View *view);
~ExportTemplateDialog();
Ui::ExportTemplateDialog *ui() const;
Latte::Corona *corona() const;
protected:
void accept() override;
@ -80,6 +81,8 @@ private:
bool m_isExportingLayout{false};
bool m_isExportingView{false};
Latte::Corona *m_corona{nullptr};
Ui::ExportTemplateDialog *m_ui;
Controller::Layouts *m_layoutsController{nullptr};

@ -87,7 +87,20 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="locationLbl">
<widget class="QLabel" name="fileTabLbl">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>File:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fileLbl">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@ -95,7 +108,7 @@
</sizepolicy>
</property>
<property name="text">
<string notr="true">&lt;b&gt;File:&lt;/b&gt; ~/.config/latte/layouts/.....</string>
<string notr="true">~/.config/latte/layouts/.....</string>
</property>
</widget>
</item>

@ -26,13 +26,17 @@
#include "appletsmodel.h"
#include "delegates/normalcheckboxdelegate.h"
#include "../settingsdialog/layoutscontroller.h"
#include "../../lattecorona.h"
#include "../../data/appletdata.h"
#include "../../layout/genericlayout.h"
#include "../../layouts/storage.h"
#include "../../templates/templatesmanager.h"
#include "../../view/view.h"
// Qt
#include <QDir>
#include <QFileDialog>
#include <QFileInfo>
// KDE
#include <KLocalizedString>
@ -57,6 +61,8 @@ ExportTemplateHandler::ExportTemplateHandler(Dialog::ExportTemplateDialog *paren
: ExportTemplateHandler(parentDialog)
{
loadLayoutApplets(layoutName, layoutId);
o_filepath = parentDialog->corona()->templatesManager()->proposedTemplateAbsolutePath(layoutName + ".layout.latte");
setFilepath(o_filepath);
}
ExportTemplateHandler::ExportTemplateHandler(Dialog::ExportTemplateDialog *parentDialog, Latte::View *view)
@ -69,7 +75,7 @@ ExportTemplateHandler::~ExportTemplateHandler()
}
void ExportTemplateHandler::init()
{
{
m_ui->appletsTable->horizontalHeader()->setStretchLastSection(true);
m_ui->appletsTable->horizontalHeader()->setSectionsClickable(false);
@ -77,8 +83,11 @@ void ExportTemplateHandler::init()
m_ui->appletsTable->setItemDelegateForColumn(Model::Applets::NAMECOLUMN, new Settings::Applets::Delegate::NormalCheckBox(this));
//! Applets Model
//! Data Changed
connect(this, &ExportTemplateHandler::filepathChanged, this, &ExportTemplateHandler::dataChanged);
connect(m_appletsModel, &Settings::Model::Applets::appletsDataChanged, this, &ExportTemplateHandler::dataChanged);
//! Applets Model
m_appletsProxyModel = new QSortFilterProxyModel(this);
m_appletsProxyModel->setSourceModel(m_appletsModel);
m_appletsProxyModel->setSortRole(Model::Applets::SORTINGROLE);
@ -90,9 +99,22 @@ void ExportTemplateHandler::init()
//! Buttons
connect(m_ui->deselectAllBtn, &QPushButton::clicked, this, &ExportTemplateHandler::onDeselectAll);
connect(m_ui->selectAllBtn, &QPushButton::clicked, this, &ExportTemplateHandler::onSelectAll);
connect(m_ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &ExportTemplateHandler::onReset);
connect(m_ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &ExportTemplateHandler::reset);
connect(m_ui->chooseBtn, &QPushButton::clicked, this, &ExportTemplateHandler::chooseFileDialog);
//! Labels
connect(this, &ExportTemplateHandler::filepathChanged, this, &ExportTemplateHandler::onFilepathChanged);
}
void ExportTemplateHandler::setFilepath(const QString &filepath)
{
if (c_filepath == filepath) {
return;
}
c_filepath = filepath;
emit filepathChanged();
}
void ExportTemplateHandler::loadLayoutApplets(const QString &layoutName, const QString &layoutId)
@ -111,34 +133,56 @@ void ExportTemplateHandler::loadViewApplets(Latte::View *view)
void ExportTemplateHandler::chooseFileDialog()
{
QFileDialog *chooseFileDlg = new QFileDialog(m_parentDialog, i18n("Choose Layout Template file"), QDir::homePath(), QStringLiteral("layout.latte"));
QFileInfo currentFile(c_filepath);
bool inLayoutState = c_filepath.endsWith("layout.latte");
chooseFileDlg->setLabelText(QFileDialog::Accept, i18nc("choose layout file","Choose"));
QFileDialog *chooseFileDlg = new QFileDialog(m_parentDialog,
inLayoutState ? i18n("Choose Layout Template file") : i18n("Choose View Template file"),
currentFile.absoluteFilePath(),
inLayoutState ? QStringLiteral(".layout.latte") : QStringLiteral(".view.latte"));
chooseFileDlg->setLabelText(QFileDialog::Accept, i18nc("choose file","Choose"));
chooseFileDlg->setFileMode(QFileDialog::AnyFile);
chooseFileDlg->setAcceptMode(QFileDialog::AcceptSave);
chooseFileDlg->setDefaultSuffix("layout.latte");
if (inLayoutState) {
chooseFileDlg->setDefaultSuffix("layout.latte");
} else {
chooseFileDlg->setDefaultSuffix("view.latte");
}
QStringList filters;
QString filter1(i18nc("layout template", "Latte Dock Layout Template file v0.2") + "(*.layout.latte)");
filters << filter1;
if (inLayoutState) {
filters << QString(i18nc("layout template", "Latte Dock Layout Template file v0.2") + "(*.layout.latte)");
} else {
filters << QString(i18nc("view template", "Latte Dock View Template file v0.2") + "(*.view.latte)");
}
chooseFileDlg->setNameFilters(filters);
connect(chooseFileDlg, &QFileDialog::finished, chooseFileDlg, &QFileDialog::deleteLater);
connect(chooseFileDlg, &QFileDialog::fileSelected, this, [&](const QString &file) {
qDebug() << "selected: " << file;
connect(chooseFileDlg, &QFileDialog::fileSelected, this, [&, inLayoutState](const QString &file) {
if (inLayoutState) {
if (!file.endsWith(".layout.latte")) {
QString selected = file;
selected = selected.replace(QDir::homePath(), "~");
showInlineMessage(i18n("<i>%0</i> does not end with <i>.layout.latte</i> extension. Selected file <b>rejected</b>.").arg(selected), KMessageWidget::Error, true);
} else {
setFilepath(file);
}
}
});
chooseFileDlg->open();
//chooseFileDlg->selectFile(selectedLayout.name);
chooseFileDlg->selectFile(currentFile.baseName());
}
void ExportTemplateHandler::onReset()
void ExportTemplateHandler::onFilepathChanged()
{
m_appletsModel->reset();
QString filepath = c_filepath;
filepath = filepath.replace(QDir::homePath(), "~");
m_ui->fileLbl->setText(filepath);
}
void ExportTemplateHandler::onSelectAll()
@ -154,17 +198,21 @@ void ExportTemplateHandler::onDeselectAll()
bool ExportTemplateHandler::hasChangedData() const
{
return m_appletsModel->hasChangedData();
return (c_filepath != o_filepath) || m_appletsModel->hasChangedData();
}
bool ExportTemplateHandler::inDefaultValues() const
{
return m_appletsModel->inDefaultValues();
return (c_filepath == o_filepath) && m_appletsModel->inDefaultValues();
}
void ExportTemplateHandler::reset()
{
m_appletsModel->reset();
setFilepath(o_filepath);
if (m_appletsModel->hasChangedData()) {
m_appletsModel->reset();
}
}
void ExportTemplateHandler::resetDefaults()

@ -71,11 +71,15 @@ public:
bool hasChangedData() const override;
bool inDefaultValues() const override;
Latte::Data::AppletsTable currentData() const;
public slots:
void reset() override;
void resetDefaults() override;
void save() override;
Latte::Data::AppletsTable currentData() const;
signals:
void filepathChanged();
private:
void init();
@ -84,14 +88,19 @@ private:
void loadLayoutApplets(const QString &layoutName, const QString &layoutId);
void loadViewApplets(Latte::View *view);
void setFilepath(const QString &filepath);
private slots:
void onReset();
void onFilepathChanged();
void onSelectAll();
void onDeselectAll();
void chooseFileDialog();
private:
QString c_filepath;
QString o_filepath;
Dialog::ExportTemplateDialog *m_parentDialog{nullptr};
Ui::ExportTemplateDialog *m_ui{nullptr};

@ -60,12 +60,13 @@ public:
virtual bool hasChangedData() const = 0;
virtual bool inDefaultValues() const = 0;
void showInlineMessage(const QString &msg, const KMessageWidget::MessageType &type, const bool &isPersistent = false, QList<QAction *> actions = QList<QAction *>());
public slots:
virtual void reset() = 0;
virtual void resetDefaults() = 0;
virtual void save() = 0;
void showInlineMessage(const QString &msg, const KMessageWidget::MessageType &type, const bool &isPersistent = false, QList<QAction *> actions = QList<QAction *>());
signals:
void dataChanged();

@ -69,10 +69,6 @@ public:
bool inDefaultValues() const override;
bool isCurrentTab() const;
void reset() override;
void resetDefaults() override;
void save() override;
Latte::Corona *corona() const;
Dialog::SettingsDialog *dialog() const;
Ui::SettingsDialog *ui() const;
@ -83,6 +79,10 @@ public slots:
void onDragMoveEvent(QDragMoveEvent *event);
void onDropEvent(QDropEvent *event);
void reset() override;
void resetDefaults() override;
void save() override;
private slots:
void initUi();
void initLayoutMenu();

@ -23,6 +23,7 @@
#include "../layout/abstractlayout.h"
#include "../layout/centrallayout.h"
#include "../layouts/importer.h"
#include "../tools/commontools.h"
// Qt
#include <QDir>
@ -44,7 +45,7 @@ Manager::~Manager()
}
void Manager::init()
{
{
QDir systemTemplatesDir(m_corona->kPackage().filePath("templates"));
QStringList filter;
filter.append(QString("*.layout.latte"));
@ -81,6 +82,12 @@ void Manager::init()
m_viewTemplates << vdata;
}
}
//! Local Templates
QDir localTemplatesDir(Latte::configPath() + "/latte/templates");
if (!localTemplatesDir.exists()) {
QDir(Latte::configPath() + "/latte").mkdir("templates");
}
}
Data::Layout Manager::layoutTemplateForName(const QString &layoutName)
@ -155,6 +162,72 @@ void Manager::importSystemLayouts()
}
}
QString Manager::proposedTemplateAbsolutePath(QString templateFilename)
{
QString tempfilename = templateFilename;
if (tempfilename.endsWith(".layout.latte")) {
QString clearedname = QFileInfo(tempfilename).baseName();
tempfilename = uniqueLayoutTemplateName(clearedname) + ".layout.latte";
} else if (tempfilename.endsWith(".view.latte")) {
QString clearedname = QFileInfo(tempfilename).baseName();
tempfilename = uniqueViewTemplateName(clearedname) + ".view.latte";
}
return QString(Latte::configPath() + "/latte/templates/" + tempfilename);
}
bool Manager::layoutTemplateExists(const QString &templateName) const
{
return m_layoutTemplates.containsName(templateName);
}
bool Manager::viewTemplateExists(const QString &templateName) const
{
return m_viewTemplates.containsName(templateName);
}
QString Manager::uniqueLayoutTemplateName(QString name) const
{
int pos_ = name.lastIndexOf(QRegExp(QString(" - [0-9]+")));
if (layoutTemplateExists(name) && pos_ > 0) {
name = name.left(pos_);
}
int i = 2;
QString namePart = name;
while (layoutTemplateExists(name)) {
name = namePart + " - " + QString::number(i);
i++;
}
return name;
}
QString Manager::uniqueViewTemplateName(QString name) const
{
int pos_ = name.lastIndexOf(QRegExp(QString(" - [0-9]+")));
if (viewTemplateExists(name) && pos_ > 0) {
name = name.left(pos_);
}
int i = 2;
QString namePart = name;
while (viewTemplateExists(name)) {
name = namePart + " - " + QString::number(i);
i++;
}
return name;
}
//! it is used in order to provide translations for system templates
void Manager::exposeTranslatedTemplateNames()

@ -54,6 +54,9 @@ public:
Latte::Corona *corona();
void init();
bool layoutTemplateExists(const QString &templateName) const;
bool viewTemplateExists(const QString &templateName) const;
Data::Layout layoutTemplateForName(const QString &layoutName);
Data::LayoutsTable systemLayoutTemplates();
@ -62,6 +65,8 @@ public:
//! 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 proposedTemplateAbsolutePath(QString templateFilename);
void importSystemLayouts();
signals:
@ -70,6 +75,9 @@ signals:
private:
void exposeTranslatedTemplateNames();
QString uniqueLayoutTemplateName(QString name) const;
QString uniqueViewTemplateName(QString name) const;
private:
Latte::Corona *m_corona;

Loading…
Cancel
Save