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.
948 lines
28 KiB
948 lines
28 KiB
/* -------------------------------------------------------------
|
|
|
|
options.cpp (part of The KDE Dictionary Client)
|
|
|
|
Copyright (C) 2000-2001 Christian Gebauer <gebauer@kde.org>
|
|
|
|
This file is distributed under the Artistic License.
|
|
See LICENSE for details.
|
|
|
|
-------------------------------------------------------------
|
|
|
|
GlobalData manages all global data of Kdict
|
|
|
|
OptionsDialog the "Preferences" dialog
|
|
|
|
DbSetsDialog dialog for editing the user defined database sets
|
|
|
|
------------------------------------------------------------- */
|
|
|
|
#include <tqcheckbox.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqradiobutton.h>
|
|
#include <tqlayout.h>
|
|
#include <tqlabel.h>
|
|
#include <tqcombobox.h>
|
|
#include <tqbuttongroup.h>
|
|
#include <tqpainter.h>
|
|
|
|
#include <kcolordialog.h>
|
|
#include <kconfig.h>
|
|
#include <klocale.h>
|
|
#include <knumvalidator.h>
|
|
#include <knuminput.h>
|
|
#include <klineedit.h>
|
|
#include <kcharsets.h>
|
|
#include <kfontdialog.h>
|
|
#include <kiconloader.h>
|
|
|
|
#include "options.h"
|
|
|
|
|
|
//********* DictOptions ******************************************
|
|
|
|
|
|
void GlobalData::read()
|
|
{
|
|
KConfig *config=KGlobal::config();
|
|
|
|
// general...
|
|
config->setGroup("General");
|
|
defineClipboard = config->readBoolEntry("Lookup_Clipboard",false);
|
|
headLayout = config->readNumEntry("Heading_Layout",0);
|
|
if ((headLayout > 2)||(headLayout < 0))
|
|
headLayout = 0;
|
|
saveHistory = config->readBoolEntry("Save_History",true);
|
|
maxHistEntrys = config->readNumEntry("Max_History_Entrys",500);
|
|
if ((maxHistEntrys < 10)||(maxHistEntrys >5000))
|
|
maxHistEntrys = 200;
|
|
maxBrowseListEntrys = config->readNumEntry("Max_Browse_Entrys",15);
|
|
if ((maxBrowseListEntrys < 1)||(maxBrowseListEntrys > 50))
|
|
maxBrowseListEntrys = 15;
|
|
maxDefinitions = config->readNumEntry("Max_Definitions",2000);
|
|
if ((maxDefinitions < 100)||(maxDefinitions > 10000))
|
|
maxDefinitions = 2000;
|
|
|
|
//colors
|
|
config->setGroup("Colors");
|
|
useCustomColors=config->readBoolEntry("customColors", false);
|
|
|
|
TQColor defCol=KGlobalSettings::textColor();
|
|
c_olors[Ctext]=config->readColorEntry("textColor",&defCol);
|
|
c_olorNames[Ctext]=i18n("Text");
|
|
|
|
defCol=KGlobalSettings::baseColor();
|
|
c_olors[Cbackground]=config->readColorEntry("backgroundColor",&defCol);
|
|
c_olorNames[Cbackground]=i18n("Background");
|
|
|
|
defCol=KGlobalSettings::highlightedTextColor();
|
|
c_olors[CheadingsText]=config->readColorEntry("headingsTextColor",&defCol);
|
|
c_olorNames[CheadingsText]=i18n("Heading Text");
|
|
|
|
defCol=KGlobalSettings::highlightColor();
|
|
c_olors[CheadingsBackground]=config->readColorEntry("headingsBackgroundColor",&defCol);
|
|
c_olorNames[CheadingsBackground]=i18n("Heading Background");
|
|
|
|
defCol=KGlobalSettings::linkColor();
|
|
c_olors[Clinks]=config->readColorEntry("linksColor",&defCol);
|
|
c_olorNames[Clinks]=i18n("Link");
|
|
|
|
defCol=KGlobalSettings::visitedLinkColor();
|
|
c_olors[CvisitedLinks]=config->readColorEntry("linksColor",&defCol);
|
|
c_olorNames[CvisitedLinks]=i18n("Followed Link");
|
|
|
|
//fonts
|
|
config->setGroup("Fonts");
|
|
useCustomFonts=config->readBoolEntry("customFonts", false);
|
|
|
|
TQFont defFont=KGlobalSettings::generalFont();
|
|
f_onts[Ftext]=config->readFontEntry("textFont",&defFont);
|
|
f_ontNames[Ftext]=i18n("Text");
|
|
|
|
defFont.setBold( true );
|
|
defFont.setPointSize(defFont.pointSize()+2);
|
|
f_onts[Fheadings]=config->readFontEntry("headingsFont",&defFont);
|
|
f_ontNames[Fheadings]=i18n("Headings");
|
|
|
|
// tqgeometry...
|
|
config->setGroup("Geometry");
|
|
TQSize invalid(-1,-1);
|
|
optSize = config->readSizeEntry("Opt_Size",&invalid);
|
|
setsSize = config->readSizeEntry("Sets_Size",&invalid);
|
|
matchSize = config->readSizeEntry("Match_Size",&invalid);
|
|
showMatchList = config->readBoolEntry("Show_MatchList",false);
|
|
splitterSizes = config->readIntListEntry("Splitter_Sizes");
|
|
|
|
config->setGroup("Query Combo");
|
|
queryComboCompletionMode = (KGlobalSettings::Completion)config->readNumEntry("Completion_mode",
|
|
KGlobalSettings::completionMode());
|
|
|
|
config->setGroup("Query_History");
|
|
queryHistory = config->readListEntry("History");
|
|
|
|
config->setGroup("DictServer");
|
|
server = config->readEntry("Server", "dict.org");
|
|
port = config->readNumEntry("Port", 2628);
|
|
if (port < 0)
|
|
port = 2628;
|
|
timeout = config->readNumEntry("Timeout",60);
|
|
if (timeout < 0)
|
|
timeout = 60;
|
|
pipeSize = config->readNumEntry("Pipe_Size",256);
|
|
if (pipeSize < 0)
|
|
pipeSize = 256;
|
|
idleHold = config->readNumEntry("Idle_Hold",30);
|
|
if (idleHold < 0)
|
|
idleHold = 30;
|
|
encoding=config->readEntry("encoding", "utf8");
|
|
authEnabled = config->readBoolEntry("Auth_Enabled",false);
|
|
user = config->readEntry("User");
|
|
secret = encryptStr(config->readEntry("Secret"));
|
|
serverDatabases = config->readListEntry("Server_Databases");
|
|
currentDatabase = config->readNumEntry("Current_Database",0);
|
|
strategies = config->readListEntry("Strategies");
|
|
if (strategies.isEmpty()) {
|
|
strategies.append(i18n("Spell Check"));
|
|
strategies.append(i18n("Exact"));
|
|
strategies.append(i18n("Prefix"));
|
|
} else {
|
|
strategies.remove(strategies.begin());
|
|
strategies.prepend(i18n("Spell Check"));
|
|
}
|
|
|
|
currentStrategy = config->readNumEntry("Current_Strategy",0);
|
|
if (currentStrategy >= strategies.count())
|
|
currentStrategy = 0;
|
|
|
|
config->setGroup("Database_Sets");
|
|
databaseSets.setAutoDelete(true);
|
|
int num = config->readNumEntry("Num_Sets",0);
|
|
TQStringList* temp;
|
|
TQString strNum;
|
|
while (num > 0) {
|
|
temp = new TQStringList();
|
|
strNum.setNum(num);
|
|
*temp = config->readListEntry(strNum);
|
|
if (!temp->isEmpty()) {
|
|
databaseSets.prepend(temp);
|
|
num--;
|
|
} else {
|
|
delete temp;
|
|
num = 0; // stop reading...
|
|
}
|
|
}
|
|
databases = serverDatabases;
|
|
for (int i = databaseSets.count()-1;i>=0;i--)
|
|
databases.prepend(databaseSets.at(i)->first());
|
|
databases.prepend(i18n("All Databases"));
|
|
if (currentDatabase >= databases.count())
|
|
currentDatabase = 0;
|
|
}
|
|
|
|
|
|
void GlobalData::write()
|
|
{
|
|
KConfig *config=KGlobal::config();
|
|
|
|
config->setGroup("General");
|
|
config->writeEntry("Lookup_Clipboard",defineClipboard);
|
|
config->writeEntry("Heading_Layout",headLayout);
|
|
config->writeEntry("Save_History",saveHistory);
|
|
config->writeEntry("Max_History_Entrys",maxHistEntrys);
|
|
config->writeEntry("Max_Browse_Entrys",maxBrowseListEntrys);
|
|
config->writeEntry("Max_Definitions",maxDefinitions);
|
|
|
|
config->setGroup("Colors");
|
|
config->writeEntry("customColors",useCustomColors);
|
|
config->writeEntry("textColor", c_olors[Ctext]);
|
|
config->writeEntry("backgroundColor", c_olors[Cbackground]);
|
|
config->writeEntry("headingsTextColor", c_olors[CheadingsText]);
|
|
config->writeEntry("headingsBackgroundColor", c_olors[CheadingsBackground]);
|
|
config->writeEntry("linksColor", c_olors[Clinks]);
|
|
config->writeEntry("visitedLinksColor", c_olors[CvisitedLinks]);
|
|
|
|
config->setGroup("Fonts");
|
|
config->writeEntry("customFonts", useCustomFonts);
|
|
config->writeEntry("textFont", f_onts[Ftext]);
|
|
config->writeEntry("headingsFont", f_onts[Fheadings]);
|
|
|
|
config->setGroup("Geometry");
|
|
config->writeEntry("Opt_Size",optSize);
|
|
config->writeEntry("Sets_Size",setsSize);
|
|
config->writeEntry("Match_Size",matchSize);
|
|
config->writeEntry("Show_MatchList",showMatchList);
|
|
config->writeEntry("Splitter_Sizes",splitterSizes);
|
|
|
|
config->setGroup("Query Combo");
|
|
config->writeEntry("Completion_mode", (int)queryComboCompletionMode);
|
|
|
|
config->setGroup("Query_History");
|
|
TQStringList copy;
|
|
if (saveHistory)
|
|
copy = queryHistory;
|
|
config->writeEntry("History",copy);
|
|
|
|
config->setGroup("DictServer");
|
|
config->writeEntry("Server", server);
|
|
config->writeEntry("Port", port);
|
|
config->writeEntry("Timeout",timeout);
|
|
config->writeEntry("Pipe_Size",pipeSize);
|
|
config->writeEntry("Idle_Hold",idleHold);
|
|
config->writeEntry("encoding", encoding);
|
|
config->writeEntry("Auth_Enabled",authEnabled);
|
|
config->writeEntry("User", user);
|
|
config->writeEntry("Secret", encryptStr(secret));
|
|
config->writeEntry("Server_Databases",serverDatabases);
|
|
config->writeEntry("Current_Database",currentDatabase);
|
|
config->writeEntry("Strategies",strategies);
|
|
config->writeEntry("Current_Strategy",currentStrategy);
|
|
|
|
config->setGroup("Database_Sets");
|
|
config->writeEntry("Num_Sets",databaseSets.count());
|
|
TQString strNum;
|
|
for (unsigned int i = 0;i<databaseSets.count();i++)
|
|
config->writeEntry(strNum.setNum(i+1),*databaseSets.at(i));
|
|
}
|
|
|
|
|
|
TQColor GlobalData::defaultColor(int i)
|
|
{
|
|
switch(i) {
|
|
case Ctext:
|
|
return KGlobalSettings::textColor();
|
|
break;
|
|
|
|
case Cbackground:
|
|
return KGlobalSettings::baseColor();
|
|
break;
|
|
|
|
case CheadingsText:
|
|
return KGlobalSettings::highlightedTextColor();
|
|
break;
|
|
|
|
case CheadingsBackground:
|
|
return KGlobalSettings::highlightColor();
|
|
break;
|
|
|
|
case Clinks:
|
|
return KGlobalSettings::linkColor();
|
|
break;
|
|
|
|
case CvisitedLinks:
|
|
return KGlobalSettings::visitedLinkColor();
|
|
break;
|
|
|
|
}
|
|
|
|
return KGlobalSettings::baseColor();
|
|
}
|
|
|
|
|
|
TQColor GlobalData::textColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[Ctext];
|
|
else
|
|
return defaultColor(Ctext);
|
|
}
|
|
|
|
|
|
TQColor GlobalData::backgroundColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[Cbackground];
|
|
else
|
|
return defaultColor(Cbackground);
|
|
}
|
|
|
|
|
|
TQColor GlobalData::headingsTextColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[CheadingsText];
|
|
else
|
|
return defaultColor(CheadingsText);
|
|
}
|
|
|
|
|
|
TQColor GlobalData::headingsBackgroundColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[CheadingsBackground];
|
|
else
|
|
return defaultColor(CheadingsBackground);
|
|
}
|
|
|
|
|
|
TQColor GlobalData::linksColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[Clinks];
|
|
else
|
|
return defaultColor(Clinks);
|
|
}
|
|
|
|
|
|
TQColor GlobalData::visitedLinksColor()
|
|
{
|
|
if(useCustomColors)
|
|
return c_olors[CvisitedLinks];
|
|
else
|
|
return defaultColor(CvisitedLinks);
|
|
}
|
|
|
|
|
|
TQFont GlobalData::defaultFont(int i)
|
|
{
|
|
TQFont font = KGlobalSettings::generalFont();
|
|
|
|
if (font.pointSize() < 5)
|
|
font.setPointSize(12);
|
|
|
|
if (i==Fheadings)
|
|
font.setPointSize(font.pointSize()+5);
|
|
|
|
return font;
|
|
}
|
|
|
|
|
|
TQFont GlobalData::textFont()
|
|
{
|
|
if(useCustomFonts)
|
|
return f_onts[Ftext];
|
|
else
|
|
return defaultFont(Ftext);
|
|
}
|
|
|
|
|
|
TQFont GlobalData::headingsFont()
|
|
{
|
|
if(useCustomFonts)
|
|
return f_onts[Fheadings];
|
|
else
|
|
return defaultFont(Fheadings);
|
|
}
|
|
|
|
|
|
// simple password scrambling...
|
|
TQString GlobalData::encryptStr(const TQString& aStr)
|
|
{
|
|
uint i,val,len = aStr.length();
|
|
TQString result;
|
|
|
|
for (i=0; i<len; i++)
|
|
{
|
|
val = aStr[i] - ' ';
|
|
val = (255-' ') - val;
|
|
result += (char)(val + ' ');
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
//********* OptionsDialog::DialogListBox *****************************
|
|
|
|
|
|
OptionsDialog::DialogListBox::DialogListBox(bool alwaysIgnore, TQWidget * tqparent, const char * name)
|
|
: TQListBox(tqparent, name), a_lwaysIgnore(alwaysIgnore)
|
|
{
|
|
}
|
|
|
|
|
|
OptionsDialog::DialogListBox::~DialogListBox()
|
|
{
|
|
}
|
|
|
|
|
|
void OptionsDialog::DialogListBox::keyPressEvent(TQKeyEvent *e)
|
|
{
|
|
if ((a_lwaysIgnore || !(hasFocus()&&isVisible()))&&((e->key()==Key_Enter)||(e->key()==Key_Return)))
|
|
e->ignore();
|
|
else
|
|
TQListBox::keyPressEvent(e);
|
|
}
|
|
|
|
|
|
//********* OptionsDialog::ColorListItem *****************************
|
|
|
|
|
|
OptionsDialog::ColorListItem::ColorListItem( const TQString &text, const TQColor &color )
|
|
: TQListBoxText(text), mColor( color )
|
|
{
|
|
}
|
|
|
|
|
|
OptionsDialog::ColorListItem::~ColorListItem()
|
|
{
|
|
}
|
|
|
|
|
|
void OptionsDialog::ColorListItem::paint( TQPainter *p )
|
|
{
|
|
TQFontMetrics fm = p->fontMetrics();
|
|
int h = fm.height();
|
|
|
|
p->drawText( 30+3*2, fm.ascent() + fm.leading()/2, text() );
|
|
|
|
p->setPen( TQt::black );
|
|
p->drawRect( 3, 1, 30, h-1 );
|
|
p->fillRect( 4, 2, 28, h-3, mColor );
|
|
}
|
|
|
|
|
|
int OptionsDialog::ColorListItem::height(const TQListBox *lb ) const
|
|
{
|
|
return( lb->fontMetrics().lineSpacing()+1 );
|
|
}
|
|
|
|
|
|
int OptionsDialog::ColorListItem::width(const TQListBox *lb ) const
|
|
{
|
|
return( 30 + lb->fontMetrics().width( text() ) + 6 );
|
|
}
|
|
|
|
|
|
//********* OptionsDialog::FontListItem *****************************
|
|
|
|
|
|
OptionsDialog::FontListItem::FontListItem( const TQString &name, const TQFont &font )
|
|
: TQListBoxText(name), f_ont(font)
|
|
{
|
|
fontInfo = TQString("[%1 %2]").tqarg(f_ont.family()).tqarg(f_ont.pointSize());
|
|
}
|
|
|
|
|
|
OptionsDialog::FontListItem::~FontListItem()
|
|
{
|
|
}
|
|
|
|
|
|
void OptionsDialog::FontListItem::setFont(const TQFont &font)
|
|
{
|
|
f_ont = font;
|
|
fontInfo = TQString("[%1 %2]").tqarg(f_ont.family()).tqarg(f_ont.pointSize());
|
|
}
|
|
|
|
|
|
void OptionsDialog::FontListItem::paint( TQPainter *p )
|
|
{
|
|
TQFont fnt = p->font();
|
|
fnt.setWeight(TQFont::Bold);
|
|
p->setFont(fnt);
|
|
int fontInfoWidth = p->fontMetrics().width(fontInfo);
|
|
int h = p->fontMetrics().ascent() + p->fontMetrics().leading()/2;
|
|
p->drawText(2, h, fontInfo );
|
|
fnt.setWeight(TQFont::Normal);
|
|
p->setFont(fnt);
|
|
p->drawText(5 + fontInfoWidth, h, text() );
|
|
}
|
|
|
|
|
|
int OptionsDialog::FontListItem::width(const TQListBox *lb ) const
|
|
{
|
|
return( lb->fontMetrics().width(fontInfo) + lb->fontMetrics().width(text()) + 20 );
|
|
}
|
|
|
|
|
|
//********* OptionsDialog ******************************************
|
|
|
|
|
|
OptionsDialog::OptionsDialog(TQWidget *tqparent, const char *name)
|
|
: KDialogBase(IconList, i18n("Configure"), Help|Default|Ok|Apply|Cancel, Ok, tqparent, name, false, true)
|
|
{
|
|
|
|
//******** Server ************************************
|
|
serverTab = addPage(i18n("Server"),i18n("DICT Server Configuration"), BarIcon("network", KIcon::SizeMedium ));
|
|
TQGridLayout* grid = new TQGridLayout(serverTab,10,3,0,spacingHint());
|
|
|
|
w_server = new KLineEdit(serverTab);
|
|
w_server->setText(global->server);
|
|
TQLabel *l = new TQLabel(w_server, i18n("Host&name:"), serverTab);
|
|
grid->addWidget(l,0,0);
|
|
grid->addMultiCellWidget(w_server,0,0,1,2);
|
|
connect( w_server, TQT_SIGNAL( textChanged ( const TQString & ) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_port = new KLineEdit(serverTab);
|
|
w_port->setValidator(new KIntValidator(0,65536,this));
|
|
w_port->setText(TQString::number(global->port));
|
|
l = new TQLabel(w_port, i18n("&Port:"), serverTab);
|
|
grid->addWidget(l,1,0);
|
|
grid->addWidget(w_port,1,1);
|
|
connect( w_port, TQT_SIGNAL( textChanged ( const TQString & ) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_idleHold = new KIntSpinBox(0,300,5,0,10,serverTab);
|
|
w_idleHold->setSuffix(i18n(" sec"));
|
|
w_idleHold->setValue(global->idleHold);
|
|
l = new TQLabel(w_idleHold, i18n("Hold conn&ection for:"), serverTab);
|
|
grid->addWidget(l,2,0);
|
|
grid->addWidget(w_idleHold,2,1);
|
|
connect( w_idleHold, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_timeout = new KIntSpinBox(5,600,5,5,10,serverTab);
|
|
w_timeout->setSuffix(i18n(" sec"));
|
|
w_timeout->setValue(global->timeout);
|
|
l = new TQLabel(w_timeout, i18n("T&imeout:"), serverTab);
|
|
grid->addWidget(l,3,0);
|
|
grid->addWidget(w_timeout,3,1);
|
|
connect( w_timeout, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_pipesize = new KIntSpinBox(100,5000,2,2,10,serverTab);
|
|
w_pipesize->setSuffix(i18n(" bytes"));
|
|
w_pipesize->setValue(global->pipeSize);
|
|
l = new TQLabel(w_pipesize, i18n("Command &buffer:"), serverTab);
|
|
grid->addWidget(l,4,0);
|
|
grid->addWidget(w_pipesize,4,1);
|
|
connect( w_pipesize, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
TQStringList encodingNames = KGlobal::charsets()->descriptiveEncodingNames();
|
|
int i=0,x=0;
|
|
for ( TQStringList::Iterator it = encodingNames.begin(); it != encodingNames.end(); ++it ) {
|
|
if (KGlobal::charsets()->encodingForName(*it)==global->encoding) {
|
|
x = i;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
w_encoding = new TQComboBox(serverTab);
|
|
w_encoding->insertStringList(encodingNames);
|
|
w_encoding->setCurrentItem(x);
|
|
l = new TQLabel(w_encoding, i18n("Encod&ing:"), serverTab);
|
|
grid->addWidget(l,5,0);
|
|
grid->addMultiCellWidget(w_encoding,5,5,1,2);
|
|
connect( w_encoding, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_auth = new TQCheckBox(i18n("Server requires a&uthentication"),serverTab);
|
|
w_auth->setChecked(global->authEnabled);
|
|
grid->addMultiCellWidget(w_auth,6,6,0,2);
|
|
connect( w_auth, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( slotChanged() ) );
|
|
connect(w_auth,TQT_SIGNAL(toggled(bool)),TQT_SLOT(slotAuthRequiredToggled(bool)));
|
|
|
|
w_user = new KLineEdit(serverTab);
|
|
w_user->setText(global->user);
|
|
l_user = new TQLabel(w_user, i18n("U&ser:"),serverTab);
|
|
grid->addWidget(l_user,7,0);
|
|
grid->addMultiCellWidget(w_user,7,7,1,2);
|
|
connect( w_user, TQT_SIGNAL( textChanged ( const TQString & ) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
w_secret = new KLineEdit(serverTab);
|
|
w_secret->setEchoMode(TQLineEdit::Password);
|
|
w_secret->setText(global->secret);
|
|
l_secret = new TQLabel(w_secret, i18n("Pass&word:"), serverTab);
|
|
grid->addWidget(l_secret,8,0);
|
|
grid->addMultiCellWidget(w_secret,8,8,1,2);
|
|
connect( w_secret, TQT_SIGNAL( textChanged ( const TQString & ) ), this, TQT_SLOT( slotChanged() ) );
|
|
|
|
slotAuthRequiredToggled( w_auth->isChecked() );
|
|
|
|
grid->setColStretch(1,2);
|
|
grid->setColStretch(2,2);
|
|
|
|
//************ Appearance ***************************
|
|
appTab = addPage(i18n("Appearance"),i18n("Customize Visual Appearance"), BarIcon("appearance", KIcon::SizeMedium ));
|
|
|
|
TQGridLayout *topL=new TQGridLayout(appTab, 8, 3, 0, spacingHint());
|
|
|
|
//color-list
|
|
c_List = new DialogListBox(false, appTab);
|
|
topL->addMultiCellWidget(c_List,1,3,0,1);
|
|
connect(c_List, TQT_SIGNAL(selected(TQListBoxItem*)),TQT_SLOT(slotColItemSelected(TQListBoxItem*)));
|
|
connect(c_List, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotColSelectionChanged()));
|
|
|
|
c_olorCB = new TQCheckBox(i18n("&Use custom colors"),appTab);
|
|
topL->addWidget(c_olorCB,0,0);
|
|
connect(c_olorCB, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotColCheckBoxToggled(bool)));
|
|
connect(c_olorCB, TQT_SIGNAL(toggled(bool) ), this, TQT_SLOT( slotChanged()));
|
|
|
|
c_olChngBtn=new TQPushButton(i18n("Cha&nge..."), appTab);
|
|
connect(c_olChngBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotColChangeBtnClicked()));
|
|
topL->addWidget(c_olChngBtn,1,2);
|
|
|
|
c_olDefBtn=new TQPushButton(i18n("Default&s"), appTab);
|
|
connect(c_olDefBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotColDefaultBtnClicked()));
|
|
topL->addWidget(c_olDefBtn,2,2);
|
|
connect(c_olDefBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotChanged()));
|
|
|
|
//font-list
|
|
f_List = new DialogListBox(false, appTab);
|
|
topL->addMultiCellWidget(f_List,5,7,0,1);
|
|
connect(f_List, TQT_SIGNAL(selected(TQListBoxItem*)),TQT_SLOT(slotFontItemSelected(TQListBoxItem*)));
|
|
connect(f_List, TQT_SIGNAL(selectionChanged()),TQT_SLOT(slotFontSelectionChanged()));
|
|
|
|
f_ontCB = new TQCheckBox(i18n("Use custom &fonts"),appTab);
|
|
topL->addWidget(f_ontCB,4,0);
|
|
connect(f_ontCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotFontCheckBoxToggled(bool)));
|
|
connect(f_ontCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
|
|
f_ntChngBtn=new TQPushButton(i18n("Chang&e..."), appTab);
|
|
connect(f_ntChngBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotFontChangeBtnClicked()));
|
|
topL->addWidget(f_ntChngBtn,5,2);
|
|
|
|
f_ntDefBtn=new TQPushButton(i18n("Defaul&ts"), appTab);
|
|
connect(f_ntDefBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotFontDefaultBtnClicked()));
|
|
topL->addWidget(f_ntDefBtn,6,2);
|
|
connect(f_ntDefBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotChanged()));
|
|
|
|
topL->setColStretch(1,2);
|
|
topL->setColStretch(2,0);
|
|
topL->setRowStretch(3,1);
|
|
topL->setRowStretch(7,1);
|
|
topL->setResizeMode(TQLayout::Minimum);
|
|
|
|
//init
|
|
c_olorCB->setChecked(global->useCustomColors);
|
|
slotColCheckBoxToggled(global->useCustomColors);
|
|
for(int i=0; i<global->colorCount(); i++)
|
|
c_List->insertItem(new ColorListItem(global->colorName(i), global->color(i)));
|
|
|
|
f_ontCB->setChecked(global->useCustomFonts);
|
|
slotFontCheckBoxToggled(global->useCustomFonts);
|
|
for(int i=0; i<global->fontCount(); i++)
|
|
f_List->insertItem(new FontListItem(global->fontName(i), global->font(i)));
|
|
|
|
//************ Layout ***************************
|
|
layoutTab = addPage(i18n("Layout"),i18n("Customize Output Format"), BarIcon("text_left", KIcon::SizeMedium ));
|
|
|
|
TQVBoxLayout *vbox = new TQVBoxLayout(layoutTab, 0, spacingHint());
|
|
|
|
TQButtonGroup *bGroup = new TQButtonGroup(i18n("Headings"),layoutTab);
|
|
TQVBoxLayout *bvbox = new TQVBoxLayout(bGroup,8,5);
|
|
|
|
bvbox->addSpacing(fontMetrics().lineSpacing()-4);
|
|
w_layout[0] = new TQRadioButton(i18n("O&ne heading for each database"),bGroup);
|
|
w_layout[0]->setChecked(global->headLayout == 0);
|
|
bvbox->addWidget(w_layout[0],1);
|
|
w_layout[1] = new TQRadioButton(i18n("A&s above, with separators between the definitions"),bGroup);
|
|
w_layout[1]->setChecked(global->headLayout == 1);
|
|
bvbox->addWidget(w_layout[1],1);
|
|
w_layout[2] = new TQRadioButton(i18n("A separate heading for &each definition"),bGroup);
|
|
w_layout[2]->setChecked(global->headLayout == 2);
|
|
bvbox->addWidget(w_layout[2],1);
|
|
connect(w_layout[0], TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
connect(w_layout[1], TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
connect(w_layout[2], TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
|
|
vbox->addWidget(bGroup,0);
|
|
vbox->addStretch(1);
|
|
|
|
//************ Other ***************************
|
|
otherTab = addPage(i18n("Miscellaneous"),i18n("Various Settings"), BarIcon("misc", KIcon::SizeMedium ));
|
|
|
|
vbox = new TQVBoxLayout(otherTab, 0, spacingHint());
|
|
|
|
TQGroupBox *group = new TQGroupBox(i18n("Limits"),otherTab);
|
|
|
|
grid = new TQGridLayout(group,4,2,8,5);
|
|
grid->addRowSpacing(0, fontMetrics().lineSpacing()-4);
|
|
|
|
w_MaxDefinitions = new KIntSpinBox(100,10000,100,100,10,group);
|
|
w_MaxDefinitions->setValue(global->maxDefinitions);
|
|
l = new TQLabel(w_MaxDefinitions, i18n("De&finitions:"), group);
|
|
grid->addWidget(l,1,0);
|
|
grid->addWidget(w_MaxDefinitions,1,1);
|
|
connect(w_MaxDefinitions, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotChanged()));
|
|
|
|
w_Maxbrowse = new KIntSpinBox(1,100,1,1,10,group);
|
|
w_Maxbrowse->setValue(global->maxBrowseListEntrys);
|
|
l = new TQLabel(w_Maxbrowse, i18n("Cached &results:"), group);
|
|
grid->addWidget(l,2,0);
|
|
grid->addWidget(w_Maxbrowse,2,1);
|
|
connect(w_Maxbrowse, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotChanged()));
|
|
|
|
w_Maxhist = new KIntSpinBox(10,5000,10,10,10,group);
|
|
w_Maxhist->setValue(global->maxHistEntrys);
|
|
l = new TQLabel(w_Maxhist, i18n("Hi&story entries:"), group);
|
|
grid->addWidget(l,3,0);
|
|
grid->addWidget(w_Maxhist,3,1);
|
|
connect(w_Maxhist, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotChanged()));
|
|
|
|
grid->setColStretch(1,1);
|
|
|
|
vbox->addWidget(group,0);
|
|
|
|
group = new TQGroupBox(i18n("Other"),otherTab);
|
|
|
|
TQVBoxLayout *vbox2 = new TQVBoxLayout(group, 8, 5);
|
|
|
|
vbox2->addSpacing(fontMetrics().lineSpacing()-4);
|
|
|
|
w_Savehist = new TQCheckBox(i18n("Sa&ve history on exit"),group);
|
|
w_Savehist->setChecked(global->saveHistory);
|
|
vbox2->addWidget(w_Savehist,0);
|
|
connect(w_Savehist, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
|
|
w_Clipboard = new TQCheckBox(i18n("D&efine selected text on start"),group);
|
|
w_Clipboard->setChecked(global->defineClipboard);
|
|
vbox2->addWidget(w_Clipboard,1);
|
|
connect(w_Clipboard, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotChanged()));
|
|
|
|
vbox->addWidget(group,0);
|
|
vbox->addStretch(2);
|
|
|
|
setHelp("preferences");
|
|
|
|
if (global->optSize.isValid())
|
|
resize(global->optSize);
|
|
else
|
|
resize(300,200);
|
|
enableButton( Apply, false );
|
|
configChanged = false;
|
|
}
|
|
|
|
|
|
OptionsDialog::~OptionsDialog()
|
|
{
|
|
global->optSize = size();
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotApply()
|
|
{
|
|
global->server = w_server->text();
|
|
global->port = w_port->text().toInt();
|
|
global->timeout = w_timeout->value();
|
|
global->idleHold = w_idleHold->value();
|
|
global->pipeSize = w_pipesize->value();
|
|
global->encoding = KGlobal::charsets()->encodingForName(w_encoding->currentText());
|
|
global->authEnabled = w_auth->isChecked();
|
|
global->user = w_user->text();
|
|
global->secret = w_secret->text();
|
|
global->useCustomColors=c_olorCB->isChecked();
|
|
for(int i=0; i<global->colorCount(); i++)
|
|
global->c_olors[i] = (static_cast<ColorListItem*>(c_List->item(i)))->color();
|
|
|
|
global->useCustomFonts=f_ontCB->isChecked();
|
|
for(int i=0; i<global->fontCount(); i++)
|
|
global->f_onts[i] = (static_cast<FontListItem*>(f_List->item(i)))->font();
|
|
if (w_layout[0]->isChecked())
|
|
global->headLayout = 0;
|
|
else
|
|
if (w_layout[1]->isChecked())
|
|
global->headLayout = 1;
|
|
else
|
|
global->headLayout = 2;
|
|
global->maxDefinitions = w_MaxDefinitions->value();
|
|
global->maxBrowseListEntrys = w_Maxbrowse->value();
|
|
global->maxHistEntrys = w_Maxhist->value();
|
|
global->defineClipboard = w_Clipboard->isChecked();
|
|
global->saveHistory = w_Savehist->isChecked();
|
|
emit(optionsChanged());
|
|
enableButton( Apply, false );
|
|
configChanged = false;
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotOk()
|
|
{
|
|
if( configChanged )
|
|
slotApply();
|
|
KDialogBase::slotOk();
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotDefault()
|
|
{
|
|
TQStringList encodingNames;
|
|
int i=0,x=0;
|
|
|
|
switch(activePageIndex()) {
|
|
case 0:
|
|
w_server->setText("dict.org");
|
|
w_port->setText("2628");
|
|
w_idleHold->setValue(30);
|
|
w_timeout->setValue(60);
|
|
w_pipesize->setValue(256);
|
|
encodingNames = KGlobal::charsets()->descriptiveEncodingNames();
|
|
for ( TQStringList::Iterator it = encodingNames.begin(); it != encodingNames.end(); ++it ) {
|
|
if (KGlobal::charsets()->encodingForName(*it)=="utf8")
|
|
x = i;
|
|
i++;
|
|
}
|
|
w_encoding->setCurrentItem(x);
|
|
w_auth->setChecked(false);
|
|
w_user->clear();
|
|
w_user->setEnabled(false);
|
|
w_secret->clear();
|
|
w_secret->setEnabled(false);
|
|
break;
|
|
case 1:
|
|
c_olorCB->setChecked(false);
|
|
slotColCheckBoxToggled(false);
|
|
slotColDefaultBtnClicked();
|
|
f_ontCB->setChecked(false);
|
|
slotFontCheckBoxToggled(false);
|
|
slotFontDefaultBtnClicked();
|
|
break;
|
|
case 2:
|
|
w_layout[0]->setChecked(true);
|
|
break;
|
|
case 3:
|
|
w_MaxDefinitions->setValue(2000);
|
|
w_Maxbrowse->setValue(15);
|
|
w_Maxhist->setValue(500);
|
|
w_Savehist->setChecked(true);
|
|
w_Clipboard->setChecked(false);
|
|
}
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotAuthRequiredToggled( bool enable )
|
|
{
|
|
l_user->setEnabled( enable );
|
|
l_secret->setEnabled( enable );
|
|
w_user->setEnabled( enable );
|
|
w_secret->setEnabled( enable );
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotColCheckBoxToggled(bool b)
|
|
{
|
|
c_List->setEnabled(b);
|
|
c_olDefBtn->setEnabled(b);
|
|
c_olChngBtn->setEnabled(b && (c_List->currentItem()!=-1));
|
|
if (b) c_List->setFocus();
|
|
}
|
|
|
|
|
|
// show color dialog for the entry
|
|
void OptionsDialog::slotColItemSelected(TQListBoxItem *it)
|
|
{
|
|
if (it) {
|
|
ColorListItem *colorItem = static_cast<ColorListItem*>(it);
|
|
TQColor col = colorItem->color();
|
|
int result = KColorDialog::getColor(col,this);
|
|
|
|
if (result == KColorDialog::Accepted) {
|
|
colorItem->setColor(col);
|
|
c_List->triggerUpdate(false);
|
|
slotChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotColDefaultBtnClicked()
|
|
{
|
|
ColorListItem *colorItem;
|
|
for(int i=0; i < global->colorCount(); i++) {
|
|
colorItem=static_cast<ColorListItem*>(c_List->item(i));
|
|
colorItem->setColor(global->defaultColor(i));
|
|
}
|
|
c_List->triggerUpdate(true);
|
|
c_List->tqrepaint(true);
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotColChangeBtnClicked()
|
|
{
|
|
if(c_List->currentItem()!=-1)
|
|
slotColItemSelected(c_List->item(c_List->currentItem()));
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotColSelectionChanged()
|
|
{
|
|
c_olChngBtn->setEnabled(c_List->currentItem()!=-1);
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotFontCheckBoxToggled(bool b)
|
|
{
|
|
f_List->setEnabled(b);
|
|
f_ntDefBtn->setEnabled(b);
|
|
f_ntChngBtn->setEnabled(b && (f_List->currentItem()!=-1));
|
|
if (b) f_List->setFocus();
|
|
}
|
|
|
|
|
|
// show font dialog for the entry
|
|
void OptionsDialog::slotFontItemSelected(TQListBoxItem *it)
|
|
{
|
|
if (it) {
|
|
FontListItem *fontItem = static_cast<FontListItem*>(it);
|
|
TQFont font = fontItem->font();
|
|
int result = KFontDialog::getFont(font,false,this);
|
|
|
|
if (result == KFontDialog::Accepted) {
|
|
fontItem->setFont(font);
|
|
f_List->triggerUpdate(false);
|
|
slotChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotFontDefaultBtnClicked()
|
|
{
|
|
FontListItem *fontItem;
|
|
for(int i=0; i < global->fontCount(); i++) {
|
|
fontItem=static_cast<FontListItem*>(f_List->item(i));
|
|
fontItem->setFont(global->defaultFont(i));
|
|
}
|
|
f_List->triggerUpdate(false);
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotFontChangeBtnClicked()
|
|
{
|
|
if(f_List->currentItem()!=-1)
|
|
slotFontItemSelected(f_List->item(f_List->currentItem()));
|
|
}
|
|
|
|
|
|
void OptionsDialog::slotFontSelectionChanged()
|
|
{
|
|
f_ntChngBtn->setEnabled(f_List->currentItem()!=-1);
|
|
}
|
|
|
|
void OptionsDialog::slotChanged()
|
|
{
|
|
enableButton( Apply, true );
|
|
configChanged = true;
|
|
}
|
|
|
|
|
|
//--------------------------------
|
|
|
|
#include "options.moc"
|