23#include <KoTemplateCreateDia.h>
28#include <tqgroupbox.h>
29#include <tqradiobutton.h>
30#include <tqpushbutton.h>
32#include <tqcheckbox.h>
35#include <tdetempfile.h>
37#include <tdelistview.h>
39#include <KoTemplates.h>
40#include <kicondialog.h>
41#include <kinputdialog.h>
42#include <tdemessagebox.h>
44#include <kstandarddirs.h>
46#include <tdeio/netaccess.h>
47#include <kiconloader.h>
48#include <tdeaboutdata.h>
49#include <tdeconfigbase.h>
53#include <tdeinstance.h>
56class KoTemplateCreateDiaPrivate {
58 KoTemplateCreateDiaPrivate( TQWidget* , TDEInstance * instance)
59 : m_instance( instance ), m_tempFile( TQString(),
".png" )
71 m_tempFile.setAutoDelete(
true );
73 ~KoTemplateCreateDiaPrivate() {
77 KoTemplateTree *m_tree;
79 TQRadioButton *m_default, *m_custom;
80 TQPushButton *m_select;
82 TQString m_customFile;
83 TQPixmap m_customPixmap;
84 TDEListView *m_groups;
85 TQPushButton *m_add, *m_remove;
86 TQCheckBox *m_defaultTemplate;
87 TDEInstance *m_instance;
100KoTemplateCreateDia::KoTemplateCreateDia(
const TQCString &templateType, TDEInstance *instance,
101 const TQString &file,
const TQPixmap &pix, TQWidget *parent ) :
102 KDialogBase( parent,
"template create dia", true, i18n(
"Create Template" ),
105 d=
new KoTemplateCreateDiaPrivate( parent, instance );
107 TQFrame *mainwidget=makeMainWidget();
109 TQVBoxLayout *leftbox=
new TQVBoxLayout(mbox);
111 TQLabel *label=
new TQLabel(i18n(
"Name:"), mainwidget);
112 leftbox->addSpacing(label->fontMetrics().height()/2);
113 TQHBoxLayout *namefield=
new TQHBoxLayout(leftbox);
114 namefield->addWidget(label);
116 d->m_name->setFocus();
117 connect(d->m_name, TQ_SIGNAL(textChanged(
const TQString &)),
118 this, TQ_SLOT(slotNameChanged(
const TQString &)));
119 namefield->addWidget(d->m_name);
121 label=
new TQLabel(i18n(
"Group:"), mainwidget);
122 leftbox->addWidget(label);
124 leftbox->addWidget(d->m_groups);
125 d->m_groups->addColumn(
"");
126 d->m_groups->header()->hide();
127 d->m_groups->setRootIsDecorated(
true);
128 d->m_groups->setSorting(0);
130 d->m_tree=
new KoTemplateTree(templateType, instance,
true);
134 TQHBoxLayout *bbox=
new TQHBoxLayout(leftbox);
135 d->m_add=
new TQPushButton(i18n(
"&Add Group..."), mainwidget);
136 connect(d->m_add, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotAddGroup()));
137 bbox->addWidget(d->m_add);
138 d->m_remove=
new TQPushButton(i18n(
"&Remove"), mainwidget);
139 connect(d->m_remove, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotRemove()));
140 bbox->addWidget(d->m_remove);
142 TQVBoxLayout *rightbox=
new TQVBoxLayout(mbox);
143 TQGroupBox *pixbox=
new TQGroupBox(i18n(
"Picture"), mainwidget);
144 rightbox->addWidget(pixbox);
147 pixlayout->addSpacing(pixbox->fontMetrics().height()/2);
148 pixlayout->addStretch(1);
149 d->m_default=
new TQRadioButton(i18n(
"&Default"), pixbox);
150 d->m_default->setChecked(
true);
151 connect(d->m_default, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotDefault()));
152 pixlayout->addWidget(d->m_default);
153 TQHBoxLayout *custombox=
new TQHBoxLayout(pixlayout);
154 d->m_custom=
new TQRadioButton(i18n(
"Custom"), pixbox);
155 d->m_custom->setChecked(
false);
156 connect(d->m_custom, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotCustom()));
157 custombox->addWidget(d->m_custom);
158 d->m_select=
new TQPushButton(i18n(
"&Select..."), pixbox);
159 connect(d->m_select, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotSelect()));
160 custombox->addWidget(d->m_select, 1);
161 custombox->addStretch(1);
162 pixlayout->addStretch(1);
163 label=
new TQLabel(i18n(
"Preview:"), pixbox);
164 pixlayout->addWidget(label);
165 TQHBoxLayout *previewbox=
new TQHBoxLayout(pixlayout);
166 previewbox->addStretch(10);
167 d->m_preview=
new TQLabel(pixbox);
168 previewbox->addWidget(d->m_preview);
169 previewbox->addStretch(10);
170 pixlayout->addStretch(8);
172 d->m_defaultTemplate =
new TQCheckBox( i18n(
"Use the new template as default"), mainwidget );
173 d->m_defaultTemplate->setChecked(
true );
174 TQToolTip::add( d->m_defaultTemplate, i18n(
"Use the new template every time %1 starts").arg(instance->aboutData()->programName() ) );
175 rightbox->addWidget( d->m_defaultTemplate );
177 enableButtonOK(
false);
181 connect(d->m_groups,TQ_SIGNAL( selectionChanged()),
this,TQ_SLOT(slotSelectionChanged()));
183 d->m_remove->setEnabled(d->m_groups->currentItem());
186KoTemplateCreateDia::~KoTemplateCreateDia() {
190void KoTemplateCreateDia::slotSelectionChanged()
192 const TQListViewItem* item = d->m_groups->currentItem();
193 d->m_remove->setEnabled( item );
197 if ( item->depth() > 0 )
199 d->m_name->setText( item->text( 0 ) );
203void KoTemplateCreateDia::createTemplate(
const TQCString &templateType, TDEInstance *instance,
204 const TQString &file,
const TQPixmap &pix, TQWidget *parent ) {
206 KoTemplateCreateDia *dia =
new KoTemplateCreateDia( templateType, instance, file, pix, parent );
214 TQListViewItem *item=d->m_groups->currentItem();
216 item=d->m_groups->firstChild();
218 d->m_tree->writeTemplateTree();
226 d->m_tree->writeTemplateTree();
231 KoTemplateGroup *group=d->m_tree->find(item->text(0));
233 d->m_tree->writeTemplateTree();
238 if(d->m_name->text().isEmpty()) {
239 d->m_tree->writeTemplateTree();
245 TQString dir=d->m_tree->instance()->dirs()->saveLocation(d->m_tree->templateType());
247 TQString templateDir=dir+
"/.source/";
248 TQString iconDir=dir+
"/.icon/";
250 TQString file=KoTemplates::stripWhiteSpace(d->m_name->text());
251 TQString tmpIcon=
".icon/"+file;
253 TQString icon=iconDir+file;
257 const int pos = m_file.findRev(
'.' );
260 ext = m_file.mid( pos );
262 kdWarning(30004) <<
"Template extension not found!" << endl;
265 dest.setPath(templateDir+file+ext);
266 if ( TQFile::exists( dest.prettyURL(0, KURL::StripFileProtocol) ) )
271 dest.setPath( templateDir + file + ext );
272 tmpIcon=
".icon/"+file+
".png";
273 icon=iconDir+file+
".png";
275 while ( TDEIO::NetAccess::exists( dest,
true,
this ) );
278 kdDebug(30004) <<
"Trying to create template: " << d->m_name->text() <<
"URL=" <<
".source/"+file+ext <<
" ICON=" << tmpIcon << endl;
279 KoTemplate *t=
new KoTemplate(d->m_name->text(), TQString(),
".source/"+file+ext, tmpIcon,
"",
"",
false,
true);
281 KoTemplate *existingTemplate=group->find(d->m_name->text());
282 if(existingTemplate && !existingTemplate->isHidden()) {
284 " the existing '%1' template?").
285 arg(existingTemplate->name()))==KMessageBox::Yes)
297 if(!TDEStandardDirs::makeDir(templateDir) || !TDEStandardDirs::makeDir(iconDir)) {
298 d->m_tree->writeTemplateTree();
304 orig.setPath( m_file );
309 TDEIO::NetAccess::file_copy( orig, dest, -1,
true,
false,
this );
312 if(d->m_default->isChecked() && !m_pixmap.isNull())
313 m_pixmap.save(icon,
"PNG");
314 else if(!d->m_customPixmap.isNull())
315 d->m_customPixmap.save(icon,
"PNG");
317 kdWarning(30004) <<
"Could not save the preview picture!" << endl;
322 TQStringList tmp=group->dirs();
323 for(TQStringList::ConstIterator it=tmp.begin(); it!=tmp.end() && !ready; ++it) {
324 if((*it).contains(dir)==0) {
325 orig.setPath( (*it)+
".directory" );
327 if( TDEIO::NetAccess::exists(orig,
true,
this) ) {
328 dest.setPath( dir+
"/.directory" );
330 TDEIO::NetAccess::file_copy( orig, dest, -1,
true,
false,
this );
336 d->m_tree->writeTemplateTree();
338 if ( d->m_defaultTemplate->isChecked() )
340 TDEConfigGroup grp( d->m_instance->config(),
"TemplateChooserDialog" );
341 grp.writeEntry(
"LastReturnType",
"Template" );
342 grp.writePathEntry(
"FullTemplateName", dir +
"/" + t->file() );
343 grp.writePathEntry(
"AlwaysUseTemplate", dir +
"/" + t->file() );
350 d->m_default->setChecked(
true);
351 d->m_custom->setChecked(
false);
355void KoTemplateCreateDia::slotCustom() {
357 d->m_default->setChecked(
false);
358 d->m_custom->setChecked(
true);
359 if(d->m_customFile.isEmpty())
365void KoTemplateCreateDia::slotSelect() {
367 d->m_default->setChecked(
false);
368 d->m_custom->setChecked(
true);
370 TQString
name = TDEIconDialog::getIcon();
371 if(
name.isEmpty() ) {
372 if(d->m_customFile.isEmpty()) {
373 d->m_default->setChecked(
true);
374 d->m_custom->setChecked(
false);
379 TQString path = TDEGlobal::iconLoader()->iconPath(name, TDEIcon::Desktop);
380 d->m_customFile = path;
381 d->m_customPixmap=TQPixmap();
385void KoTemplateCreateDia::slotNameChanged(
const TQString &name) {
387 if( (
name.stripWhiteSpace().isEmpty() || !d->m_groups->firstChild() ) && !d->m_changed )
393void KoTemplateCreateDia::slotAddGroup() {
398 KoTemplateGroup *group=d->m_tree->find(name);
399 if(group && !group->isHidden())
404 TQString dir=d->m_tree->instance()->dirs()->saveLocation(d->m_tree->templateType());
406 KoTemplateGroup *newGroup=
new KoTemplateGroup(name, dir, 0,
true);
407 d->m_tree->add(newGroup);
408 TQListViewItem *item=
new TQListViewItem(d->m_groups, name);
409 d->m_groups->setCurrentItem(item);
411 d->m_name->setFocus();
416void KoTemplateCreateDia::slotRemove() {
418 TQListViewItem *item=d->m_groups->currentItem();
424 if (item->depth()==0) {
425 what = i18n(
"Do you really want to remove that group?");
426 removed = i18n(
"Remove Group");
428 what = i18n(
"Do you really want to remove that template?");
429 removed = i18n(
"Remove Template");
433 removed,KGuiItem(i18n(
"&Delete"),
"edit-delete"))==KMessageBox::Cancel) {
434 d->m_name->setFocus();
438 if(item->depth()==0) {
439 KoTemplateGroup *group=d->m_tree->find(item->text(0));
441 group->setHidden(
true);
445 for(KoTemplateGroup *g=d->m_tree->first(); g!=0L && !done; g=d->m_tree->next()) {
446 KoTemplate *t=g->find(item->text(0));
456 d->m_name->setFocus();
460void KoTemplateCreateDia::updatePixmap() {
462 if(d->m_default->isChecked() && !m_pixmap.isNull())
463 d->m_preview->setPixmap(m_pixmap);
464 else if(d->m_custom->isChecked() && !d->m_customFile.isEmpty()) {
465 if(d->m_customPixmap.isNull()) {
466 kdDebug(30004) <<
"Trying to load picture " << d->m_customFile << endl;
468 KoTemplate t(
"foo",
"bar", TQString(), d->m_customFile);
469 d->m_customPixmap=t.loadPicture(d->m_tree->instance());
472 kdWarning(30004) <<
"Trying to load picture" << endl;
474 if(!d->m_customPixmap.isNull())
475 d->m_preview->setPixmap(d->m_customPixmap);
477 d->m_preview->setText(i18n(
"Could not load picture."));
480 d->m_preview->setText(i18n(
"No picture available."));
483void KoTemplateCreateDia::fillGroupTree() {
485 for(KoTemplateGroup *group=d->m_tree->first(); group!=0L; group=d->m_tree->next()) {
486 if(group->isHidden())
488 TQListViewItem *groupItem=
new TQListViewItem(d->m_groups, group->name());
489 for(KoTemplate *t=group->first(); t!=0L; t=group->next()) {
492 (void)
new TQListViewItem(groupItem, t->name());
497#include <KoTemplateCreateDia.moc>
virtual void slotCancel()
void enableButtonOK(bool state)
virtual void slotDefault()
static void information(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const TQString &dontShowAgainName=TQString::null, int options=Notify)
static int warningYesNo(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonYes=KStdGuiItem::yes(), const KGuiItem &buttonNo=KStdGuiItem::no(), const TQString &dontAskAgainName=TQString::null, int options=Notify|Dangerous)
static int warningContinueCancel(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonContinue=KStdGuiItem::cont(), const TQString &dontAskAgainName=TQString::null, int options=Notify)
const char * name(StdAction id)