You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kile/src/kile/managetemplatesdialog.cpp

284 lines
11 KiB

/*****************************************************************************************
begin : Sun Apr 27 2003
copyright : (C) 2003 by Jeroen Wijnhout (wijnhout@science.uva.nl)
2007 by Michel Ludwig (michel.ludwig@kdemail.net)
*****************************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "managetemplatesdialog.h"
#include <tqlayout.h>
#include <tqlabel.h>
#include <tqtooltip.h>
#include <kapp.h>
#include <tdelocale.h>
#include <tdeglobal.h>
#include <kstandarddirs.h>
#include <kiconloader.h>
#include <kpushbutton.h>
#include <kicondialog.h>
#include <tdemessagebox.h>
#include "kiledebug.h"
#include <tdeio/netaccess.h>
#include "kileextensions.h"
#include "kileinfo.h"
#include "templates.h"
class TemplateListViewItem : public TQListViewItem {
public:
TemplateListViewItem(TQListView* listView, TQListViewItem* previousItem, const TQString& mode, const KileTemplate::Info& info) : TQListViewItem(listView, previousItem, mode, info.name, KileInfo::documentTypeToString(info.type)), m_info(info) {
}
virtual ~TemplateListViewItem() {
}
KileTemplate::Info getTemplateInfo() {
return m_info;
}
protected:
KileTemplate::Info m_info;
};
// dialog to create a template
ManageTemplatesDialog::ManageTemplatesDialog(KileTemplate::Manager *templateManager, const KURL& sourceURL, const TQString &caption, TQWidget *parent, const char *name ) : KDialogBase(parent,name,true,caption,KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true), m_templateManager(templateManager), m_sourceURL(sourceURL) {
m_templateType = KileDocument::Extensions().determineDocumentType(sourceURL);
TQWidget *page = new TQWidget(this , "managetemplates_mainwidget");
setMainWidget(page);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, 0, spacingHint());
TQHBoxLayout *nameLayout = new TQHBoxLayout(topLayout, spacingHint());
nameLayout->addWidget(new TQLabel(i18n("Name:"),page));
TQString fileName = m_sourceURL.fileName();
//remove the extension
int dotPos = fileName.findRev('.');
if(dotPos >= 0) {
fileName = fileName.mid(0, dotPos);
}
m_nameEdit = new KLineEdit(fileName, page);
nameLayout->addWidget(m_nameEdit);
nameLayout->addWidget(new TQLabel(i18n("Type: %1").arg(KileInfo::documentTypeToString(m_templateType)), page));
TQHBoxLayout *iconLayout = new TQHBoxLayout(topLayout, spacingHint());
iconLayout->addWidget(new TQLabel(i18n("Icon:"), page));
m_iconEdit = new KLineEdit(TDEGlobal::dirs()->findResource("appdata", "pics/type_Default.png"), page);
iconLayout->addWidget(m_iconEdit);
KPushButton *iconbut = new KPushButton(i18n("Select..."),page);
iconLayout->addWidget(iconbut);
m_templateList = new TDEListView(page);
m_templateList->setSorting(-1);
m_templateList->addColumn(i18n("marked", "M"));
m_templateList->addColumn(i18n("Existing Templates"));
m_templateList->addColumn(i18n("Document Type"));
m_templateList->setColumnWidthMode(0, TQListView::Manual);
m_templateList->setFullWidth(true);
m_templateList->setAllColumnsShowFocus(true);
populateTemplateListView(m_templateType);
topLayout->addWidget(m_templateList);
TQHBoxLayout *controlLayout = new TQHBoxLayout(topLayout, spacingHint());
m_showAllTypesCheckBox = new TQCheckBox(i18n("Show all the templates"), page);
m_showAllTypesCheckBox->setChecked(false);
connect(m_showAllTypesCheckBox, TQ_SIGNAL(toggled(bool)), this, TQ_SLOT(updateTemplateListView(bool)));
controlLayout->addWidget(m_showAllTypesCheckBox);
controlLayout->addStretch();
KPushButton *clearSelectionButton = new KPushButton(page);
clearSelectionButton->setPixmap(SmallIcon("clear_left.png"));
TQToolTip::add(clearSelectionButton, i18n("Clear Selection"));
connect(clearSelectionButton, TQ_SIGNAL(clicked()),this, TQ_SLOT(clearSelection()));
controlLayout->addWidget(clearSelectionButton);
topLayout->addWidget( new TQLabel(i18n("Select an existing template if you want to overwrite it with your new template.\nNote that you cannot overwrite templates marked with an asterisk:\nif you do select such a template, a new template with the same name\nwill be created in a location you have write access to."),page));
connect(m_templateList, TQ_SIGNAL(selectionChanged(TQListViewItem*)), this, TQ_SLOT(slotSelectedTemplate(TQListViewItem*)));
connect(iconbut, TQ_SIGNAL(clicked()),this, TQ_SLOT(slotSelectIcon()));
connect(this, TQ_SIGNAL(aboutToClose()), this, TQ_SLOT(addTemplate()));
}
// dialog to remove a template
ManageTemplatesDialog::ManageTemplatesDialog(KileTemplate::Manager *templateManager, const TQString &caption, TQWidget *parent, const char *name ) : KDialogBase(parent,name,true,caption,KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true), m_templateManager(templateManager), m_templateType(KileDocument::Undefined), m_showAllTypesCheckBox(NULL)
{
TQWidget *page = new TQWidget(this, "managetemplates_mainwidget");
setMainWidget(page);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, 0, spacingHint());
m_templateList = new TDEListView(page);
m_templateList->setSorting(-1);
m_templateList->addColumn(i18n("marked", "M"));
m_templateList->addColumn(i18n("Existing Templates"));
m_templateList->addColumn(i18n("Document Type"));
m_templateList->setColumnWidthMode(0, TQListView::Manual);
m_templateList->setFullWidth(true);
m_templateList->setAllColumnsShowFocus(true);
populateTemplateListView(KileDocument::Undefined);
topLayout->addWidget(m_templateList);
topLayout->addWidget( new TQLabel(i18n("Please select the template that you want to remove.\nNote that you cannot delete templates marked with an asterisk (for which you lack the necessary deletion permissions)."),page));
connect(this, TQ_SIGNAL(aboutToClose()), this, TQ_SLOT(removeTemplate()));
}
ManageTemplatesDialog::~ManageTemplatesDialog(){
}
void ManageTemplatesDialog::updateTemplateListView(bool showAllTypes) {
populateTemplateListView((showAllTypes ? KileDocument::Undefined : m_templateType));
}
void ManageTemplatesDialog::clearSelection() {
m_templateList->clearSelection();
}
void ManageTemplatesDialog::slotOk() {
emit aboutToClose();
}
void ManageTemplatesDialog::populateTemplateListView(KileDocument::Type type) {
m_templateManager->scanForTemplates();
KileTemplate::TemplateList templateList = m_templateManager->getTemplates(type);
TQString mode;
TQListViewItem* previousItem = NULL;
m_templateList->clear();
for (KileTemplate::TemplateListIterator i = templateList.begin(); i != templateList.end(); ++i)
{
KileTemplate::Info info = *i;
TQFileInfo iconFileInfo(info.icon);
mode = (TQFileInfo(info.path).isWritable() && (!iconFileInfo.exists() || iconFileInfo.isWritable())) ? " " : "*";
if((type == KileDocument::Undefined) || (info.type == type)) {
previousItem = new TemplateListViewItem(m_templateList, previousItem, mode, info);
}
}
}
void ManageTemplatesDialog::slotSelectedTemplate(TQListViewItem *item) {
TemplateListViewItem *templateItem = dynamic_cast<TemplateListViewItem*>(item);
if(templateItem) {
KileTemplate::Info info = templateItem->getTemplateInfo();
m_nameEdit->setText(info.name);
m_iconEdit->setText(info.icon);
}
}
void ManageTemplatesDialog::slotSelectIcon() {
TDEIconDialog *dlg = new TDEIconDialog();
TQString res = dlg->openDialog();
TDEIconLoader kil;
if (!res.isNull() ) {
m_iconEdit->setText(kil.iconPath(res,-TDEIcon::SizeLarge, false));
}
}
void ManageTemplatesDialog::addTemplate() {
TQString templateName = (m_nameEdit->text()).stripWhiteSpace();
if(templateName.isEmpty()) {
KMessageBox::error(this, i18n("Sorry, but the template name that you have entered is invalid.\nPlease enter a new name."));
return;
}
TQString icon = (m_iconEdit->text()).stripWhiteSpace();
KURL iconURL = KURL::fromPathOrURL(icon);
if (icon.isEmpty()) {
KMessageBox::error(this, i18n("Please choose an icon first."));
return;
}
if (!TDEIO::NetAccess::exists(iconURL, true, kapp->mainWidget())) {
KMessageBox::error(this, i18n("Sorry, but the icon file: %1\ndoes not seem to exist. Please choose a new icon.").arg(icon));
return;
}
if (!TDEIO::NetAccess::exists(m_sourceURL, true, kapp->mainWidget())) {
KMessageBox::error(this, i18n("Sorry, but the file: %1\ndoes not seem to exist. Maybe you forgot to save the file?").arg(m_sourceURL.prettyURL()));
return;
}
TQListViewItem* item = m_templateList->selectedItem();
if(!item && m_templateManager->searchForTemplate(templateName, m_templateType)) {
KMessageBox::error(this, i18n("Sorry, but a template named \"%1\" already exists.\nPlease remove it first.").arg(templateName));
return;
}
bool returnValue;
if(item) {
TemplateListViewItem *templateItem = dynamic_cast<TemplateListViewItem*>(item);
Q_ASSERT(templateItem);
KileTemplate::Info templateInfo = templateItem->getTemplateInfo();
if (KMessageBox::warningYesNo(this, i18n("You are about to replace the template \"%1\"; are you sure?").arg(templateInfo.name)) == KMessageBox::No) {
reject();
return;
}
returnValue = m_templateManager->replace(templateInfo, m_sourceURL, templateName, iconURL);
}
else {
returnValue = m_templateManager->add(m_sourceURL, templateName, iconURL);
}
if (!returnValue) {
KMessageBox::error(this, i18n("Failed to create the template."));
reject();
return;
}
accept();
}
bool ManageTemplatesDialog::removeTemplate()
{
TQListViewItem* item = m_templateList->selectedItem();
if(!item) {
KMessageBox::information(this, i18n("Please select a template that should be removed."));
return true;
}
TemplateListViewItem *templateItem = dynamic_cast<TemplateListViewItem*>(item);
Q_ASSERT(templateItem);
KileTemplate::Info templateInfo = templateItem->getTemplateInfo();
if (!(TDEIO::NetAccess::exists(KURL::fromPathOrURL(templateInfo.path), false, kapp->mainWidget()) && (TDEIO::NetAccess::exists(KURL::fromPathOrURL(templateInfo.icon), false, kapp->mainWidget()) || !TQFileInfo(templateInfo.icon).exists()))) {
KMessageBox::error(this, i18n("Sorry, but you do not have the necessary permissions to remove the selected template."));
return false;
}
if (KMessageBox::warningYesNo(this, i18n("You are about to remove the template \"%1\"; are you sure?").arg(templateInfo.name)) == KMessageBox::No) {
return false;
}
if (!m_templateManager->remove(templateInfo))
{
KMessageBox::error(this, i18n("Sorry, but the template could not be removed."));
reject();
return false;
}
accept();
return true;
}
#include "managetemplatesdialog.moc"