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.
tdegraphics/tdeiconedit/tdeiconconfig.cpp

590 lines
16 KiB

/*
TDE Icon Editor - a small graphics drawing program for the TDE
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 <stdlib.h>
#include <tqcheckbox.h>
#include <tqlayout.h>
#include <tqlineedit.h>
#include <tqvbox.h>
#include <tqbuttongroup.h>
#include <tqradiobutton.h>
#include <tdeaccel.h>
#include <kbuttonbox.h>
#include <tdeapplication.h>
#include <tdelocale.h>
#include <kcolorbutton.h>
#include <tdefiledialog.h>
#include <tdemessagebox.h>
#include <kdebug.h>
#include <kurlrequester.h>
#include "tdeiconconfig.h"
#include "tdeiconedit.h"
#ifndef PICS_INCLUDED
#define PICS_INCLUDED
#include "pics/logo.xpm"
#endif
// little helper:
static inline TQPixmap loadIcon( const char * name )
{
return TDEGlobal::instance()->iconLoader()
->loadIcon( TQString::fromLatin1(name), TDEIcon::NoGroup, TDEIcon::SizeMedium );
}
KTemplateEditDlg::KTemplateEditDlg(TQWidget *parent)
: KDialogBase(parent, "KTemplateEditDlg", true, i18n( "Icon Template" ),
Ok|Cancel )
{
TQFrame *frame = makeMainWidget();
TQVBoxLayout *ml = new TQVBoxLayout(frame);
TQGroupBox *grp = new TQGroupBox(i18n("Template"), frame);
grp->setColumnLayout(0, Qt::Vertical);
grp->layout()->setSpacing(spacingHint());
grp->layout()->setMargin(marginHint());
TQGridLayout *l = new TQGridLayout(grp->layout());
ln_name = new TQLineEdit( grp );
connect( ln_name, TQT_SIGNAL( textChanged( const TQString & ) ),
TQT_SLOT( slotTextChanged() ) );
TQLabel* lb_name = new TQLabel( ln_name, i18n( "Description:" ), grp );
ln_path = new KURLRequester(grp);
connect( ln_path, TQT_SIGNAL( textChanged( const TQString & ) ),
TQT_SLOT( slotTextChanged() ) );
TQLabel* lb_path = new TQLabel( ln_path, i18n( "Path:" ), grp );
l->addWidget(lb_name, 0, 0);
l->addWidget(ln_name, 0, 1);
l->addWidget(lb_path, 1, 0);
l->addWidget(ln_path, 1, 1);
ml->addWidget( grp, 1);
slotTextChanged();
setMinimumSize( 400, 150 );
}
void KTemplateEditDlg::slotTextChanged()
{
TQString name = ln_name->text(), path = ln_path->url();
enableButtonOK(name.length() && path.length());
}
void KTemplateEditDlg::setName(const TQString & name)
{
ln_name->setText(name);
}
TQString KTemplateEditDlg::name()
{
return ln_name->text();
}
void KTemplateEditDlg::setPath(const TQString & path)
{
ln_path->setURL(path);
}
TQString KTemplateEditDlg::path()
{
return ln_path->url();
}
KTemplateConfig::KTemplateConfig(TQWidget *parent) : TQWidget(parent)
{
kdDebug(4640) << "KTemplateConfig constructor" << endl;
btadd = btremove = btedit = 0L;
TQGroupBox* grp = new TQGroupBox( i18n( "Templates" ), this );
grp->setColumnLayout( 0, Qt::Horizontal );
templates = new TDEIconListBox( grp );
connect( templates, TQT_SIGNAL( highlighted( int ) ),
TQT_SLOT( checkSelection( int ) ) );
connect( templates, TQT_SIGNAL(doubleClicked( TQListBoxItem * ) ),
TQT_SLOT( edit() ) );
TQVBoxLayout* ml = new TQVBoxLayout( this );
ml->addWidget( grp );
TQVBoxLayout* l = new TQVBoxLayout( grp->layout(), KDialog::spacingHint() );
l->addWidget( templates );
for( unsigned int i = 0; i < TDEIconTemplateContainer::self()->count(); i++ )
templates->insertItem( new TDEIconListBoxItem( *TDEIconTemplateContainer::self()->at( i ) ) ) ;
KButtonBox *bbox = new KButtonBox( grp );
btadd = bbox->addButton( i18n( "&Add..." ) );
connect( btadd, TQT_SIGNAL( clicked() ), TQT_SLOT( add() ) );
btedit = bbox->addButton( i18n( "&Edit..." ) );
connect( btedit, TQT_SIGNAL( clicked() ), TQT_SLOT( edit() ) );
btedit->setEnabled( false );
btremove = bbox->addButton( i18n( "&Remove" ) );
connect( btremove, TQT_SIGNAL( clicked() ), TQT_SLOT( remove() ) );
btremove->setEnabled( false );
bbox->addStretch( 1 );
bbox->layout();
l->addWidget( bbox );
}
KTemplateConfig::~KTemplateConfig()
{
}
void KTemplateConfig::saveSettings()
{
kdDebug(4640) << "KTemplateConfig::saveSettings" << endl;
TDEIconTemplateContainer::self()->clear();
for(int i = 0; i < (int)templates->count(); i++)
{
TDEIconTemplateContainer::self()->append(templates->iconTemplate(i));
}
TDEIconTemplateContainer::self()->save();
kdDebug(4640) << "KTemplateConfig::saveSettings - done" << endl;
}
void KTemplateConfig::checkSelection(int)
{
kdDebug(4640) << "KTemplateConfig::checkSelection" << endl;
if(templates->currentItem() != -1)
{
if(btremove) btremove->setEnabled(true);
if(btedit) btedit->setEnabled(true);
}
else
{
if(btremove) btremove->setEnabled(false);
if(btedit) btedit->setEnabled(false);
}
kdDebug(4640) << "KTemplateConfig::checkSelection - done" << endl;
}
void KTemplateConfig::remove()
{
templates->removeItem(templates->currentItem());
}
void KTemplateConfig::add()
{
KTemplateEditDlg dlg(this);
if(dlg.exec())
{
TDEIconTemplate it;
it.path = dlg.path();
it.title = dlg.name();
templates->insertItem(new TDEIconListBoxItem(it));
}
}
void KTemplateConfig::edit()
{
KTemplateEditDlg dlg(this);
dlg.setPath(templates->path(templates->currentItem()));
dlg.setName(templates->text(templates->currentItem()));
templates->item(templates->currentItem());
if(dlg.exec())
{
//Edit the entry
TDEIconTemplate &it=templates->iconTemplate(templates->currentItem());
it.path = dlg.path();
it.title = dlg.name();
static_cast<TDEIconListBoxItem*>(templates->item(templates->currentItem()))->reloadIcon();
templates->update();
}
}
KBackgroundConfig::KBackgroundConfig( TQWidget* parent )
: TQWidget( parent )
{
kdDebug(4640) << "KBackgroundConfig - constructor" << endl;
lb_ex = 0L;
TDEIconEditProperties *props = TDEIconEditProperties::self();
pixpath = props->bgPixmap();
pix.load(pixpath);
if(pix.isNull())
{
kdDebug(4640) << "BGPIX: " << pixpath << " not valid!" << endl;
TQPixmap pmlogo((const char**)logo);
pix = pmlogo;
}
TQVBoxLayout *mainLayout = new TQVBoxLayout( this );
TQGroupBox *grp1 = new TQGroupBox( i18n( "Select Background" ), this );
grp1->setColumnLayout(0, Qt::Vertical );
grp1->layout()->setSpacing( KDialog::spacingHint() );
grp1->layout()->setMargin( KDialog::marginHint() );
mainLayout->addWidget( grp1 );
TQGridLayout *grp1Layout = new TQGridLayout( grp1->layout(), 3, 2 );
TQButtonGroup* btngrp = new TQButtonGroup( grp1 );
btngrp->setExclusive( true );
btngrp->setFrameStyle( TQFrame::NoFrame );
connect( btngrp, TQT_SIGNAL( clicked( int ) ), TQT_SLOT( slotBackgroundMode( int ) ) );
grp1Layout->addWidget( btngrp, 0, 0 );
TQVBoxLayout *bgl = new TQVBoxLayout( btngrp, 5 );
TQRadioButton *rbc = new TQRadioButton( i18n( "Use co&lor" ), btngrp );
btngrp->insert( rbc, 0 );
bgl->addWidget( rbc );
TQRadioButton *rbp = new TQRadioButton( i18n( "Use pix&map" ), btngrp );
btngrp->insert( rbp, 1 );
bgl->addWidget( rbp );
bgl->addStretch( 1 );
TQVBox *bbox = new TQVBox( grp1 );
grp1Layout->addWidget( bbox, 0, 1 );
btcolor = new KColorButton(props->bgColor(), bbox) ;
connect(btcolor, TQT_SIGNAL(changed(const TQColor &)),
TQT_SLOT( selectColor(const TQColor &)));
btpix = new TQPushButton(i18n( "Choose..." ), bbox);
connect( btpix, TQT_SIGNAL( clicked() ), TQT_SLOT( selectPixmap() ) );
TQGroupBox *grp2 = new TQGroupBox( i18n( "Preview" ), this );
mainLayout->addWidget( grp2, 1 );
TQBoxLayout *l2 = new TQVBoxLayout( grp2, 15 );
l2->addSpacing( 10 );
lb_ex = new TQLabel( grp2 );
lb_ex->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
l2->addWidget( lb_ex );
/*
l1->addWidget( btngrp, 0, AlignLeft );
l1->addLayout( l1r );
*/
bgmode = props->bgMode();
if( bgmode == TQWidget::FixedPixmap )
{
btngrp->setButton( 1 );
btcolor->setEnabled( false );
lb_ex->setBackgroundPixmap( pix );
}
else
{
btngrp->setButton( 0 );
btpix->setEnabled( false );
lb_ex->setBackgroundColor(btcolor->color());
}
}
KBackgroundConfig::~KBackgroundConfig()
{
}
void KBackgroundConfig::slotBackgroundMode(int id)
{
if(id == 0)
{
bgmode = TQWidget::FixedColor;
btpix->setEnabled(false);
btcolor->setEnabled(true);
if(lb_ex)
lb_ex->setBackgroundColor(btcolor->color());
}
else
{
bgmode = TQWidget::FixedPixmap;
btpix->setEnabled(true);
btcolor->setEnabled(false);
if(lb_ex)
lb_ex->setBackgroundPixmap(pix);
}
}
void KBackgroundConfig::saveSettings()
{
kdDebug(4640) << "KBackgroundConfig::saveSettings" << endl;
TDEIconEditProperties *props = TDEIconEditProperties::self();
props->setBgMode( bgmode );
props->setBgPixmap( pixpath );
props->setBgColor( btcolor->color() );
kdDebug(4640) << "KBackgroundConfig::saveSettings - done" << endl;
}
void KBackgroundConfig::selectColor(const TQColor & newColor)
{
lb_ex->setBackgroundColor(newColor);
}
void KBackgroundConfig::selectPixmap()
{
// KURL url = KFileDialog::getOpenURL("/", "*.xpm");
KURL url = KFileDialog::getImageOpenURL("/");
if( url.isEmpty() )
return;
if( !url.isLocalFile() )
{
KMessageBox::sorry( 0L, i18n( "Only local files are supported yet." ) );
return;
}
TQPixmap p(url.path());
if( !p.isNull() )
{
lb_ex->setBackgroundPixmap( p );
pixpath = url.path();
}
}
KMiscConfig::KMiscConfig(TQWidget *parent) : TQWidget(parent)
{
kdDebug(4640) << "KMiscConfig - constructor" << endl;
TDEIconEditProperties* props = TDEIconEditProperties::self();
TQBoxLayout *ml = new TQVBoxLayout( this, 0, 5 );
TQCheckBox *cbp = new TQCheckBox( i18n( "Paste &transparent pixels" ), this );
connect( cbp, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( pasteMode( bool ) ) );
ml->addWidget(cbp);
TQCheckBox *cbr = new TQCheckBox( i18n( "Show &rulers" ), this );
connect( cbr, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( showRulers( bool ) ) );
ml->addWidget(cbr);
TQButtonGroup* btngrp = new TQButtonGroup( i18n( "Transparency Display" ), this);
btngrp->setExclusive( true );
connect( btngrp, TQT_SIGNAL( clicked( int ) ), TQT_SLOT( slotTransparencyDisplayType( int ) ) );
ml->addWidget( btngrp );
TQVBoxLayout *tgl = new TQVBoxLayout( btngrp, KDialog::marginHint(), KDialog::spacingHint() );
tgl->insertSpacing(0, 10);
TQHBoxLayout *hl = new TQHBoxLayout(tgl);
TQRadioButton *solidColorRButton = new TQRadioButton( i18n( "&Solid color:" ), btngrp );
btngrp->insert( solidColorRButton, 0 );
hl->addWidget( solidColorRButton );
m_solidColorButton = new KColorButton(props->transparencySolidColor(), btngrp);
btngrp->insert( m_solidColorButton, 2 );
hl->addWidget(m_solidColorButton);
//connect(btcolor, TQT_SIGNAL(changed(const TQColor &)),
// TQT_SLOT( selectColor(const TQColor &)));
TQRadioButton *checkerboardRButton = new TQRadioButton( i18n( "Checker&board" ), btngrp );
btngrp->insert( checkerboardRButton, 1 );
tgl->addWidget( checkerboardRButton );
TQGridLayout *grid = new TQGridLayout(tgl, 3, 3);
grid->addColSpacing(0, 40);
grid->setColStretch(1, 1);
grid->setColStretch(2, 1);
m_checkerboardSizeCombo = new TQComboBox(btngrp);
m_checkerboardSizeCombo->insertItem( i18n( "Small" ) );
m_checkerboardSizeCombo->insertItem( i18n( "Medium" ) );
m_checkerboardSizeCombo->insertItem( i18n( "Large" ) );
m_checkerboardSizeCombo->setCurrentItem(props->checkerboardSize());
TQLabel *label = new TQLabel(m_checkerboardSizeCombo, i18n("Si&ze:"), btngrp);
grid->addWidget(label, 0, 1);
grid->addWidget(m_checkerboardSizeCombo, 0, 2);
m_checkerboardColor1Button = new KColorButton(props->checkerboardColor1(), btngrp);
label = new TQLabel(m_checkerboardColor1Button, i18n("Color &1:"), btngrp);
grid->addWidget(label, 1, 1);
grid->addWidget(m_checkerboardColor1Button, 1, 2);
m_checkerboardColor2Button = new KColorButton(props->checkerboardColor2(), btngrp);
label = new TQLabel(m_checkerboardColor2Button, i18n("Color &2:"), btngrp);
grid->addWidget(label, 2, 1);
grid->addWidget(m_checkerboardColor2Button, 2, 2);
if(props->transparencyDisplayType() == TDEIconEditGrid::TRD_CHECKERBOARD)
{
checkerboardRButton->setChecked(true);
m_checkerboardColor1Button->setEnabled(true);
m_checkerboardColor2Button->setEnabled(true);
m_checkerboardSizeCombo->setEnabled(true);
solidColorRButton->setChecked(false);
m_solidColorButton->setEnabled(false);
}
else
{
checkerboardRButton->setChecked(false);
m_checkerboardColor1Button->setEnabled(false);
m_checkerboardColor2Button->setEnabled(false);
m_checkerboardSizeCombo->setEnabled(false);
solidColorRButton->setChecked(true);
m_solidColorButton->setEnabled(true);
}
ml->addStretch(1);
cbp->setChecked( props->pasteTransparent() );
cbr->setChecked( props->showRulers() );
}
KMiscConfig::~KMiscConfig()
{
}
void KMiscConfig::saveSettings()
{
kdDebug(4640) << "KMiscConfig::saveSettings" << endl;
TDEIconEditProperties* props = TDEIconEditProperties::self();
props->setPasteTransparent( pastemode );
props->setShowRulers( showrulers );
if(m_solidColorButton->isEnabled())
{
props->setTransparencyDisplayType(TDEIconEditGrid::TRD_SOLIDCOLOR);
props->setTransparencySolidColor(m_solidColorButton->color());
}
else
{
props->setTransparencyDisplayType(TDEIconEditGrid::TRD_CHECKERBOARD);
props->setCheckerboardColor1(m_checkerboardColor1Button->color());
props->setCheckerboardColor2(m_checkerboardColor2Button->color());
props->setCheckerboardSize((TDEIconEditGrid::CheckerboardSize)m_checkerboardSizeCombo->currentItem());
}
}
void KMiscConfig::pasteMode(bool mode)
{
pastemode = mode;
}
void KMiscConfig::showRulers(bool mode)
{
showrulers = mode;
}
void KMiscConfig::slotTransparencyDisplayType(int id)
{
if(id == 0)
{
m_checkerboardColor1Button->setEnabled(false);
m_checkerboardColor2Button->setEnabled(false);
m_checkerboardSizeCombo->setEnabled(false);
m_solidColorButton->setEnabled(true);
}
else
if(id == 1)
{
m_checkerboardColor1Button->setEnabled(true);
m_checkerboardColor2Button->setEnabled(true);
m_checkerboardSizeCombo->setEnabled(true);
m_solidColorButton->setEnabled(false);
}
}
TDEIconConfig::TDEIconConfig(TQWidget *parent)
: KDialogBase(KDialogBase::IconList, i18n("Configure"),
KDialogBase::Help |
KDialogBase::Ok |
KDialogBase::Apply |
KDialogBase::Cancel,
KDialogBase::Ok,
parent, "configDialog", true, true)
{
setHelp(TQString());
//KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
connect(this, TQT_SIGNAL(finished()), this, TQT_SLOT(finis()));
TQVBox* page = addVBoxPage(i18n("Icon Templates"), TQString(), loadIcon("icons"));
temps = new KTemplateConfig(page);
page = addVBoxPage(i18n("Background"), TQString(), loadIcon("background"));
backs = new KBackgroundConfig(page);
page = addVBoxPage(i18n("Icon Grid"), TQString(), loadIcon("tdeiconedit"));
misc = new KMiscConfig(page);
TQSize min(300, 400);
if (300 < sizeHint().width()) { min.setWidth(sizeHint().width()); }
if (400 < sizeHint().height()) { min.setHeight(sizeHint().height()); }
resize(min);
}
TDEIconConfig::~TDEIconConfig()
{
//delete dict;
}
void TDEIconConfig::slotApply()
{
kdDebug(4640) << "TDEIconEditConfig::saveSettings" << endl;
temps->saveSettings();
backs->saveSettings();
misc->saveSettings();
for (TDEIconEdit* window = TDEIconEdit::windowList.first();
window;
window = TDEIconEdit::windowList.next())
{
window->updateProperties();
}
}
void TDEIconConfig::slotOk()
{
slotApply();
KDialogBase::slotOk();
}
void TDEIconConfig::finis()
{
delayedDestruct();
}
#include "tdeiconconfig.moc"