summaryrefslogtreecommitdiffstats
path: root/tdeiconedit/knew.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeiconedit/knew.cpp')
-rw-r--r--tdeiconedit/knew.cpp326
1 files changed, 326 insertions, 0 deletions
diff --git a/tdeiconedit/knew.cpp b/tdeiconedit/knew.cpp
new file mode 100644
index 00000000..2536816f
--- /dev/null
+++ b/tdeiconedit/knew.cpp
@@ -0,0 +1,326 @@
+/*
+ KDE Draw - a small graphics drawing program for the KDE
+ Copyright (C) 1998 Thomas Tanghus (tanghus@kde.org)
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <tqlayout.h>
+#include <tqpainter.h>
+#include <tqbuttongroup.h>
+#include <tqradiobutton.h>
+#include <tqpushbutton.h>
+
+#include <tdeconfig.h>
+#include <tdelocale.h>
+#include <tdeglobal.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+#include <tdeapplication.h>
+
+#include "knew.h"
+
+TDEIconTemplateContainer* TDEIconTemplateContainer::instance = 0;
+
+void createStandardTemplates(TDEIconTemplateContainer *list)
+{
+ TDEIconLoader *kil = TDEGlobal::iconLoader();
+
+ TDEIconTemplate it;
+ it.path = kil->iconPath("standard", TDEIcon::User);
+ it.title = i18n("Standard File");
+ list->append(it);
+
+ it.path = kil->iconPath("source", TDEIcon::User);
+ it.title = i18n("Source File");
+ list->append(it);
+
+ it.path = kil->iconPath("compressed", TDEIcon::User);
+ it.title = i18n("Compressed File");
+ list->append(it);
+
+ it.path = kil->iconPath("folder", TDEIcon::User);
+ it.title = i18n("Standard Folder");
+ list->append(it);
+
+ it.path = kil->iconPath("package", TDEIcon::User);
+ it.title = i18n("Standard Package");
+ list->append(it);
+
+ it.path = kil->iconPath("mini-folder", TDEIcon::User);
+ it.title = i18n("Mini Folder");
+ list->append(it);
+
+ it.path = kil->iconPath("mini-package", TDEIcon::User);
+ it.title = i18n("Mini Package");
+ list->append(it);
+}
+
+void TDEIconTemplateContainer::save()
+{
+ TDEConfig *k = kapp->config();
+ k->setGroup("Templates");
+
+ TQStringList names;
+ for (TQValueListIterator<TDEIconTemplate> iter = begin(); iter != end(); iter++)
+ {
+ names.append((*iter).title);
+ }
+
+ k->writeEntry("Names", names);
+
+ for(unsigned int i = 0; i < names.count(); i++)
+ {
+ k->writePathEntry(names[i], (*this)[i].path);
+ }
+}
+
+TDEIconTemplateContainer::TDEIconTemplateContainer() : TQValueList<TDEIconTemplate>()
+{
+ TQStrList names;
+ TDEConfig *k = kapp->config();
+ k->setGroup("Templates");
+ k->readListEntry("Names", names);
+ for(int i = 0; i < (int)names.count(); i++)
+ {
+ TDEIconTemplate it;
+ it.path = k->readPathEntry(names.at(i));
+ it.title = names.at(i);
+ //kdDebug(4640) << "Template: " << names.at(i) << "\n" << path.data() << endl;
+ append(it);
+ }
+
+ if(count() == 0)
+ {
+ createStandardTemplates(this);
+ }
+}
+
+TDEIconTemplateContainer::~TDEIconTemplateContainer()
+{
+ clear();
+}
+
+TDEIconListBoxItem::TDEIconListBoxItem( TDEIconTemplate t )
+ : TQListBoxItem(), icontemplate(t)
+{
+ //kdDebug(4640) << "TDEIconListBoxItem - " << t->path.data() << ", " << t->title.data() << endl;
+
+ pm.load(t.path);
+ setText( t.title );
+}
+
+void TDEIconListBoxItem::reloadIcon()
+{
+ pm.load(icontemplate.path);
+ setText( icontemplate.title );
+}
+
+
+
+void TDEIconListBoxItem::paint( TQPainter *p )
+{
+ p->drawPixmap( 3, 0, pm );
+ TQFontMetrics fm = p->fontMetrics();
+ int yPos; // vertical text position
+ if ( pm.height() < fm.height() )
+ yPos = fm.ascent() + fm.leading()/2;
+ else
+ yPos = pm.height()/2 - fm.height()/2 + fm.ascent();
+ p->drawText( pm.width() + 5, yPos, text() );
+}
+
+int TDEIconListBoxItem::height(const TQListBox *lb ) const
+{
+ return TQMAX( pm.height(), lb->fontMetrics().lineSpacing() + 1 );
+}
+
+int TDEIconListBoxItem::width(const TQListBox *lb ) const
+{
+ return pm.width() + lb->fontMetrics().width( text() ) + 6;
+}
+
+NewSelect::NewSelect(TQWidget *parent) : TQWidget( parent )
+{
+ wiz = (KWizard*) parent;
+ grp = new TQButtonGroup( this );
+ connect( grp, TQT_SIGNAL( clicked( int ) ), TQT_SLOT( buttonClicked( int ) ) );
+ grp->setExclusive( true );
+
+ TQVBoxLayout* ml = new TQVBoxLayout( this );
+ ml->addWidget( grp, 1 );
+ //ml->addWidget(grp, 10, AlignLeft);
+ TQVBoxLayout* l = new TQVBoxLayout( grp, 10 );
+
+ rbscratch = new TQRadioButton( i18n( "Create from scratch" ), grp );
+ l->addWidget( rbscratch, 1 );
+ //l->addWidget(rbscratch, 5, AlignLeft);
+
+ rbtempl = new TQRadioButton( i18n( "Create from template" ), grp );
+ l->addWidget( rbtempl, 1 );
+ //l->addWidget(rbtempl, 5, AlignLeft);
+
+ //grp->setMinimumSize(grp->childrenRect().size());
+
+ grp->setButton( 0 );
+}
+
+NewSelect::~NewSelect()
+{
+}
+
+void NewSelect::buttonClicked(int id)
+{
+ //kdDebug(4640) << "Button: " << id << endl;
+
+ emit iconopenstyle(id);
+}
+
+NewFromTemplate::NewFromTemplate( TQWidget* parent )
+ : TQWidget( parent )
+{
+ wiz = (KWizard*) parent;
+
+ TQVBoxLayout* ml = new TQVBoxLayout(this);
+
+ grp = new TQGroupBox( i18n( "Templates" ), this );
+ ml->addWidget( grp, 1 );
+ //ml->addWidget(grp, 10, AlignLeft);
+
+ TQHBoxLayout* l = new TQHBoxLayout( grp, 15 );
+
+ templates = new TDEIconListBox( grp );
+ connect( templates, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( checkSelection( int ) ) );
+ l->addWidget( templates );
+
+ for( int i = 0; i < (int) TDEIconTemplateContainer::self()->count(); i++ )
+ templates->insertItem( new TDEIconListBoxItem( *TDEIconTemplateContainer::self()->at( i ) ) );
+}
+
+NewFromTemplate::~NewFromTemplate()
+{
+}
+
+void NewFromTemplate::checkSelection( int )
+{
+ //kdDebug(4640) << "checkSelection(int) " << templates->currentItem() << endl;
+ if( templates->currentItem() != -1 )
+ wiz->finishButton()->setEnabled( true );
+ else
+ wiz->finishButton()->setEnabled( false );
+}
+
+KNewIcon::KNewIcon( TQWidget* parent )
+ : KWizard( parent, 0, true )
+{
+ //kdDebug(4640) << "KNewIcon" << endl;
+ setCaption( i18n( "Create New Icon" ) );
+ resize( 400, 250 );
+
+ openstyle = 0;
+
+ finishButton()->setEnabled( true );
+ cancelButton()->setEnabled( true );
+ nextButton()->setEnabled( false );
+
+ select = new NewSelect( this );
+ connect( select, TQT_SIGNAL( iconopenstyle( int ) ), TQT_SLOT( iconOpenStyle( int ) ) );
+
+ scratch = new KResizeWidget( this, 0, TQSize( 32, 32 ) );
+ // this doesn't accept default valid size, besides spin buttons won't allow
+ // an invalid size to be set by the user - forces user to change valid default
+ // size to create the new icon object -
+ connect( scratch, TQT_SIGNAL( validSize( bool ) ), TQT_SLOT( checkPage( bool ) ) );
+ connect(this, TQT_SIGNAL(selected(const TQString &)), this, TQT_SLOT(checkPage(const TQString &)));
+ templ = new NewFromTemplate(this);
+ templ->hide();
+
+ addPage(select, i18n("Select Icon Type"));
+ addPage(scratch, i18n("Create From Scratch"));
+ act = scratch;
+ //addPage(templ, i18n("Create From Template"));
+}
+
+KNewIcon::~KNewIcon()
+{
+ delete select;
+ delete scratch;
+ delete templ;
+}
+
+void KNewIcon::okClicked()
+{
+ if(openstyle == Blank)
+ emit newicon(scratch->getSize());
+ else
+ emit newicon(templ->path());
+ hide();
+ setResult(1);
+ accept();
+}
+
+void KNewIcon::cancelClicked()
+{
+ hide();
+ setResult(0);
+ reject();
+}
+
+void KNewIcon::iconOpenStyle(int style)
+{
+ openstyle = style;
+
+ if( act )
+ removePage( act );
+
+ if(openstyle == Blank)
+ {
+ act = scratch;
+ setNextEnabled( act, true );
+ addPage( scratch, i18n( "Create From Scratch" ) );
+ }
+ else if( openstyle == Template )
+ {
+ act = templ;
+ setNextEnabled( act, true );
+ addPage( templ, i18n( "Create From Template" ) );
+ }
+}
+
+void KNewIcon::checkPage( bool b)
+{
+ //kdDebug(4640) << "checkPage(int) " << openstyle << " " << p << endl;
+ if(openstyle == Blank)
+ finishButton()->setEnabled(true);
+ else if( !b )
+ finishButton()->setEnabled(false);
+ else
+ templ->checkSelection(0);
+}
+
+void KNewIcon::checkPage(const TQString &)
+{
+ if(currentPage() == select || openstyle == Blank)
+ finishButton()->setEnabled(true);
+ else
+ finishButton()->setEnabled(false);
+}
+#include "knew.moc"
+
+
+
+
+