1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*
SPDX-FileCopyrightText: 2012 Miha Čančula <miha@noughmad.eu>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "templatepage.h"
#include "ui_templatepage.h"
#include <QFileDialog>
#include <interfaces/itemplateprovider.h>
#include <language/codegen/templatesmodel.h>
#include <KNS3/DownloadDialog>
#include <KArchive>
#include <KZip>
#include <KTar>
#include <util/scopeddialog.h>
TemplatePage::TemplatePage (KDevelop::ITemplateProvider* provider, QWidget* parent) : QWidget (parent),
m_provider(provider)
{
ui = new Ui::TemplatePage;
ui->setupUi(this);
ui->getNewButton->setVisible(!m_provider->knsConfigurationFile().isEmpty());
connect(ui->getNewButton, &QPushButton::clicked,
this, &TemplatePage::getMoreTemplates);
ui->loadButton->setVisible(!m_provider->supportedMimeTypes().isEmpty());
connect(ui->loadButton, &QPushButton::clicked,
this, &TemplatePage::loadFromFile);
ui->extractButton->setEnabled(false);
connect(ui->extractButton, &QPushButton::clicked,
this, &TemplatePage::extractTemplate);
provider->reload();
ui->treeView->setModel(provider->templatesModel());
ui->treeView->expandAll();
connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &TemplatePage::currentIndexChanged);
}
TemplatePage::~TemplatePage()
{
delete ui;
}
void TemplatePage::loadFromFile()
{
KDevelop::ScopedDialog<QFileDialog> fileDialog(this);
fileDialog->setMimeTypeFilters(m_provider->supportedMimeTypes());
fileDialog->setFileMode(QFileDialog::ExistingFiles);
if (!fileDialog->exec()) {
return;
}
const auto& selectedFiles = fileDialog->selectedFiles();
for (const auto& file : selectedFiles) {
m_provider->loadTemplate(file);
}
m_provider->reload();
}
void TemplatePage::getMoreTemplates()
{
KDevelop::ScopedDialog<KNS3::DownloadDialog> dialog(m_provider->knsConfigurationFile(), this);
if (!dialog->exec()) {
return;
}
if (!dialog->changedEntries().isEmpty())
{
m_provider->reload();
}
}
void TemplatePage::currentIndexChanged(const QModelIndex& index)
{
QString archive = ui->treeView->model()->data(index, KDevelop::TemplatesModel::ArchiveFileRole).toString();
ui->extractButton->setEnabled(QFileInfo::exists(archive));
}
void TemplatePage::extractTemplate()
{
QModelIndex index = ui->treeView->currentIndex();
QString archiveName= ui->treeView->model()->data(index, KDevelop::TemplatesModel::ArchiveFileRole).toString();
QFileInfo info(archiveName);
if (!info.exists())
{
ui->extractButton->setEnabled(false);
return;
}
QScopedPointer<KArchive> archive;
if (info.suffix() == QLatin1String("zip"))
{
archive.reset(new KZip(archiveName));
}
else
{
archive.reset(new KTar(archiveName));
}
archive->open(QIODevice::ReadOnly);
const QString destination = QFileDialog::getExistingDirectory() + QLatin1Char('/') + info.baseName();
archive->directory()->copyTo(destination);
}
|