summaryrefslogtreecommitdiffstats
path: root/kdict/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdict/options.cpp')
-rw-r--r--kdict/options.cpp947
1 files changed, 947 insertions, 0 deletions
diff --git a/kdict/options.cpp b/kdict/options.cpp
new file mode 100644
index 00000000..a157fbf5
--- /dev/null
+++ b/kdict/options.cpp
@@ -0,0 +1,947 @@
+/* -------------------------------------------------------------
+
+ 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 <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qbuttongroup.h>
+#include <qpainter.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);
+
+ QColor 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);
+
+ QFont 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");
+
+ // geometry...
+ config->setGroup("Geometry");
+ QSize 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);
+ QStringList* temp;
+ QString strNum;
+ while (num > 0) {
+ temp = new QStringList();
+ 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");
+ QStringList 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());
+ QString strNum;
+ for (unsigned int i = 0;i<databaseSets.count();i++)
+ config->writeEntry(strNum.setNum(i+1),*databaseSets.at(i));
+}
+
+
+QColor 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();
+}
+
+
+QColor GlobalData::textColor()
+{
+ if(useCustomColors)
+ return c_olors[Ctext];
+ else
+ return defaultColor(Ctext);
+}
+
+
+QColor GlobalData::backgroundColor()
+{
+ if(useCustomColors)
+ return c_olors[Cbackground];
+ else
+ return defaultColor(Cbackground);
+}
+
+
+QColor GlobalData::headingsTextColor()
+{
+ if(useCustomColors)
+ return c_olors[CheadingsText];
+ else
+ return defaultColor(CheadingsText);
+}
+
+
+QColor GlobalData::headingsBackgroundColor()
+{
+ if(useCustomColors)
+ return c_olors[CheadingsBackground];
+ else
+ return defaultColor(CheadingsBackground);
+}
+
+
+QColor GlobalData::linksColor()
+{
+ if(useCustomColors)
+ return c_olors[Clinks];
+ else
+ return defaultColor(Clinks);
+}
+
+
+QColor GlobalData::visitedLinksColor()
+{
+ if(useCustomColors)
+ return c_olors[CvisitedLinks];
+ else
+ return defaultColor(CvisitedLinks);
+}
+
+
+QFont GlobalData::defaultFont(int i)
+{
+ QFont font = KGlobalSettings::generalFont();
+
+ if (font.pointSize() < 5)
+ font.setPointSize(12);
+
+ if (i==Fheadings)
+ font.setPointSize(font.pointSize()+5);
+
+ return font;
+}
+
+
+QFont GlobalData::textFont()
+{
+ if(useCustomFonts)
+ return f_onts[Ftext];
+ else
+ return defaultFont(Ftext);
+}
+
+
+QFont GlobalData::headingsFont()
+{
+ if(useCustomFonts)
+ return f_onts[Fheadings];
+ else
+ return defaultFont(Fheadings);
+}
+
+
+// simple password scrambling...
+QString GlobalData::encryptStr(const QString& aStr)
+{
+ uint i,val,len = aStr.length();
+ QString 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, QWidget * parent, const char * name)
+ : QListBox(parent, name), a_lwaysIgnore(alwaysIgnore)
+{
+}
+
+
+OptionsDialog::DialogListBox::~DialogListBox()
+{
+}
+
+
+void OptionsDialog::DialogListBox::keyPressEvent(QKeyEvent *e)
+{
+ if ((a_lwaysIgnore || !(hasFocus()&&isVisible()))&&((e->key()==Key_Enter)||(e->key()==Key_Return)))
+ e->ignore();
+ else
+ QListBox::keyPressEvent(e);
+}
+
+
+//********* OptionsDialog::ColorListItem *****************************
+
+
+OptionsDialog::ColorListItem::ColorListItem( const QString &text, const QColor &color )
+ : QListBoxText(text), mColor( color )
+{
+}
+
+
+OptionsDialog::ColorListItem::~ColorListItem()
+{
+}
+
+
+void OptionsDialog::ColorListItem::paint( QPainter *p )
+{
+ QFontMetrics fm = p->fontMetrics();
+ int h = fm.height();
+
+ p->drawText( 30+3*2, fm.ascent() + fm.leading()/2, text() );
+
+ p->setPen( Qt::black );
+ p->drawRect( 3, 1, 30, h-1 );
+ p->fillRect( 4, 2, 28, h-3, mColor );
+}
+
+
+int OptionsDialog::ColorListItem::height(const QListBox *lb ) const
+{
+ return( lb->fontMetrics().lineSpacing()+1 );
+}
+
+
+int OptionsDialog::ColorListItem::width(const QListBox *lb ) const
+{
+ return( 30 + lb->fontMetrics().width( text() ) + 6 );
+}
+
+
+//********* OptionsDialog::FontListItem *****************************
+
+
+OptionsDialog::FontListItem::FontListItem( const QString &name, const QFont &font )
+ : QListBoxText(name), f_ont(font)
+{
+ fontInfo = QString("[%1 %2]").arg(f_ont.family()).arg(f_ont.pointSize());
+}
+
+
+OptionsDialog::FontListItem::~FontListItem()
+{
+}
+
+
+void OptionsDialog::FontListItem::setFont(const QFont &font)
+{
+ f_ont = font;
+ fontInfo = QString("[%1 %2]").arg(f_ont.family()).arg(f_ont.pointSize());
+}
+
+
+void OptionsDialog::FontListItem::paint( QPainter *p )
+{
+ QFont fnt = p->font();
+ fnt.setWeight(QFont::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(QFont::Normal);
+ p->setFont(fnt);
+ p->drawText(5 + fontInfoWidth, h, text() );
+}
+
+
+int OptionsDialog::FontListItem::width(const QListBox *lb ) const
+{
+ return( lb->fontMetrics().width(fontInfo) + lb->fontMetrics().width(text()) + 20 );
+}
+
+
+//********* OptionsDialog ******************************************
+
+
+OptionsDialog::OptionsDialog(QWidget *parent, const char *name)
+ : KDialogBase(IconList, i18n("Configure"), Help|Default|Ok|Apply|Cancel, Ok, parent, name, false, true)
+{
+
+ //******** Server ************************************
+ serverTab = addPage(i18n("Server"),i18n("DICT Server Configuration"), BarIcon("network", KIcon::SizeMedium ));
+ QGridLayout* grid = new QGridLayout(serverTab,10,3,0,spacingHint());
+
+ w_server = new KLineEdit(serverTab);
+ w_server->setText(global->server);
+ QLabel *l = new QLabel(w_server, i18n("Host&name:"), serverTab);
+ grid->addWidget(l,0,0);
+ grid->addMultiCellWidget(w_server,0,0,1,2);
+ connect( w_server, SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotChanged() ) );
+
+ w_port = new KLineEdit(serverTab);
+ w_port->setValidator(new KIntValidator(0,65536,this));
+ w_port->setText(QString::number(global->port));
+ l = new QLabel(w_port, i18n("&Port:"), serverTab);
+ grid->addWidget(l,1,0);
+ grid->addWidget(w_port,1,1);
+ connect( w_port, SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotChanged() ) );
+
+ w_idleHold = new KIntSpinBox(0,300,5,0,10,serverTab);
+ w_idleHold->setSuffix(i18n(" sec"));
+ w_idleHold->setValue(global->idleHold);
+ l = new QLabel(w_idleHold, i18n("Hold conn&ection for:"), serverTab);
+ grid->addWidget(l,2,0);
+ grid->addWidget(w_idleHold,2,1);
+ connect( w_idleHold, SIGNAL( valueChanged(int) ), this, SLOT( slotChanged() ) );
+
+ w_timeout = new KIntSpinBox(5,600,5,5,10,serverTab);
+ w_timeout->setSuffix(i18n(" sec"));
+ w_timeout->setValue(global->timeout);
+ l = new QLabel(w_timeout, i18n("T&imeout:"), serverTab);
+ grid->addWidget(l,3,0);
+ grid->addWidget(w_timeout,3,1);
+ connect( w_timeout, SIGNAL( valueChanged(int) ), this, SLOT( slotChanged() ) );
+
+ w_pipesize = new KIntSpinBox(100,5000,2,2,10,serverTab);
+ w_pipesize->setSuffix(i18n(" bytes"));
+ w_pipesize->setValue(global->pipeSize);
+ l = new QLabel(w_pipesize, i18n("Command &buffer:"), serverTab);
+ grid->addWidget(l,4,0);
+ grid->addWidget(w_pipesize,4,1);
+ connect( w_pipesize, SIGNAL( valueChanged(int) ), this, SLOT( slotChanged() ) );
+
+ QStringList encodingNames = KGlobal::charsets()->descriptiveEncodingNames();
+ int i=0,x=0;
+ for ( QStringList::Iterator it = encodingNames.begin(); it != encodingNames.end(); ++it ) {
+ if (KGlobal::charsets()->encodingForName(*it)==global->encoding) {
+ x = i;
+ break;
+ }
+ i++;
+ }
+ w_encoding = new QComboBox(serverTab);
+ w_encoding->insertStringList(encodingNames);
+ w_encoding->setCurrentItem(x);
+ l = new QLabel(w_encoding, i18n("Encod&ing:"), serverTab);
+ grid->addWidget(l,5,0);
+ grid->addMultiCellWidget(w_encoding,5,5,1,2);
+ connect( w_encoding, SIGNAL( activated(int) ), this, SLOT( slotChanged() ) );
+
+ w_auth = new QCheckBox(i18n("Server requires a&uthentication"),serverTab);
+ w_auth->setChecked(global->authEnabled);
+ grid->addMultiCellWidget(w_auth,6,6,0,2);
+ connect( w_auth, SIGNAL( toggled(bool) ), this, SLOT( slotChanged() ) );
+ connect(w_auth,SIGNAL(toggled(bool)),SLOT(slotAuthRequiredToggled(bool)));
+
+ w_user = new KLineEdit(serverTab);
+ w_user->setText(global->user);
+ l_user = new QLabel(w_user, i18n("U&ser:"),serverTab);
+ grid->addWidget(l_user,7,0);
+ grid->addMultiCellWidget(w_user,7,7,1,2);
+ connect( w_user, SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotChanged() ) );
+
+ w_secret = new KLineEdit(serverTab);
+ w_secret->setEchoMode(QLineEdit::Password);
+ w_secret->setText(global->secret);
+ l_secret = new QLabel(w_secret, i18n("Pass&word:"), serverTab);
+ grid->addWidget(l_secret,8,0);
+ grid->addMultiCellWidget(w_secret,8,8,1,2);
+ connect( w_secret, SIGNAL( textChanged ( const QString & ) ), this, 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 ));
+
+ QGridLayout *topL=new QGridLayout(appTab, 8, 3, 0, spacingHint());
+
+ //color-list
+ c_List = new DialogListBox(false, appTab);
+ topL->addMultiCellWidget(c_List,1,3,0,1);
+ connect(c_List, SIGNAL(selected(QListBoxItem*)),SLOT(slotColItemSelected(QListBoxItem*)));
+ connect(c_List, SIGNAL(selectionChanged()), SLOT(slotColSelectionChanged()));
+
+ c_olorCB = new QCheckBox(i18n("&Use custom colors"),appTab);
+ topL->addWidget(c_olorCB,0,0);
+ connect(c_olorCB, SIGNAL(toggled(bool)), this, SLOT(slotColCheckBoxToggled(bool)));
+ connect(c_olorCB, SIGNAL(toggled(bool) ), this, SLOT( slotChanged()));
+
+ c_olChngBtn=new QPushButton(i18n("Cha&nge..."), appTab);
+ connect(c_olChngBtn, SIGNAL(clicked()), SLOT(slotColChangeBtnClicked()));
+ topL->addWidget(c_olChngBtn,1,2);
+
+ c_olDefBtn=new QPushButton(i18n("Default&s"), appTab);
+ connect(c_olDefBtn, SIGNAL(clicked()), SLOT(slotColDefaultBtnClicked()));
+ topL->addWidget(c_olDefBtn,2,2);
+ connect(c_olDefBtn, SIGNAL(clicked()), SLOT(slotChanged()));
+
+ //font-list
+ f_List = new DialogListBox(false, appTab);
+ topL->addMultiCellWidget(f_List,5,7,0,1);
+ connect(f_List, SIGNAL(selected(QListBoxItem*)),SLOT(slotFontItemSelected(QListBoxItem*)));
+ connect(f_List, SIGNAL(selectionChanged()),SLOT(slotFontSelectionChanged()));
+
+ f_ontCB = new QCheckBox(i18n("Use custom &fonts"),appTab);
+ topL->addWidget(f_ontCB,4,0);
+ connect(f_ontCB, SIGNAL(toggled(bool)), SLOT(slotFontCheckBoxToggled(bool)));
+ connect(f_ontCB, SIGNAL(toggled(bool)), SLOT(slotChanged()));
+
+ f_ntChngBtn=new QPushButton(i18n("Chang&e..."), appTab);
+ connect(f_ntChngBtn, SIGNAL(clicked()), SLOT(slotFontChangeBtnClicked()));
+ topL->addWidget(f_ntChngBtn,5,2);
+
+ f_ntDefBtn=new QPushButton(i18n("Defaul&ts"), appTab);
+ connect(f_ntDefBtn, SIGNAL(clicked()), SLOT(slotFontDefaultBtnClicked()));
+ topL->addWidget(f_ntDefBtn,6,2);
+ connect(f_ntDefBtn, SIGNAL(clicked()), SLOT(slotChanged()));
+
+ topL->setColStretch(1,2);
+ topL->setColStretch(2,0);
+ topL->setRowStretch(3,1);
+ topL->setRowStretch(7,1);
+ topL->setResizeMode(QLayout::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 ));
+
+ QVBoxLayout *vbox = new QVBoxLayout(layoutTab, 0, spacingHint());
+
+ QButtonGroup *bGroup = new QButtonGroup(i18n("Headings"),layoutTab);
+ QVBoxLayout *bvbox = new QVBoxLayout(bGroup,8,5);
+
+ bvbox->addSpacing(fontMetrics().lineSpacing()-4);
+ w_layout[0] = new QRadioButton(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 QRadioButton(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 QRadioButton(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], SIGNAL(toggled(bool)), SLOT(slotChanged()));
+ connect(w_layout[1], SIGNAL(toggled(bool)), SLOT(slotChanged()));
+ connect(w_layout[2], SIGNAL(toggled(bool)), SLOT(slotChanged()));
+
+ vbox->addWidget(bGroup,0);
+ vbox->addStretch(1);
+
+ //************ Other ***************************
+ otherTab = addPage(i18n("Miscellaneous"),i18n("Various Settings"), BarIcon("misc", KIcon::SizeMedium ));
+
+ vbox = new QVBoxLayout(otherTab, 0, spacingHint());
+
+ QGroupBox *group = new QGroupBox(i18n("Limits"),otherTab);
+
+ grid = new QGridLayout(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 QLabel(w_MaxDefinitions, i18n("De&finitions:"), group);
+ grid->addWidget(l,1,0);
+ grid->addWidget(w_MaxDefinitions,1,1);
+ connect(w_MaxDefinitions, SIGNAL(valueChanged(int)), SLOT(slotChanged()));
+
+ w_Maxbrowse = new KIntSpinBox(1,100,1,1,10,group);
+ w_Maxbrowse->setValue(global->maxBrowseListEntrys);
+ l = new QLabel(w_Maxbrowse, i18n("Cached &results:"), group);
+ grid->addWidget(l,2,0);
+ grid->addWidget(w_Maxbrowse,2,1);
+ connect(w_Maxbrowse, SIGNAL(valueChanged(int)), SLOT(slotChanged()));
+
+ w_Maxhist = new KIntSpinBox(10,5000,10,10,10,group);
+ w_Maxhist->setValue(global->maxHistEntrys);
+ l = new QLabel(w_Maxhist, i18n("Hi&story entries:"), group);
+ grid->addWidget(l,3,0);
+ grid->addWidget(w_Maxhist,3,1);
+ connect(w_Maxhist, SIGNAL(valueChanged(int)), SLOT(slotChanged()));
+
+ grid->setColStretch(1,1);
+
+ vbox->addWidget(group,0);
+
+ group = new QGroupBox(i18n("Other"),otherTab);
+
+ QVBoxLayout *vbox2 = new QVBoxLayout(group, 8, 5);
+
+ vbox2->addSpacing(fontMetrics().lineSpacing()-4);
+
+ w_Savehist = new QCheckBox(i18n("Sa&ve history on exit"),group);
+ w_Savehist->setChecked(global->saveHistory);
+ vbox2->addWidget(w_Savehist,0);
+ connect(w_Savehist, SIGNAL(toggled(bool)), SLOT(slotChanged()));
+
+ w_Clipboard = new QCheckBox(i18n("D&efine selected text on start"),group);
+ w_Clipboard->setChecked(global->defineClipboard);
+ vbox2->addWidget(w_Clipboard,1);
+ connect(w_Clipboard, SIGNAL(toggled(bool)), 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()
+{
+ QStringList 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 ( QStringList::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(QListBoxItem *it)
+{
+ if (it) {
+ ColorListItem *colorItem = static_cast<ColorListItem*>(it);
+ QColor 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->repaint(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(QListBoxItem *it)
+{
+ if (it) {
+ FontListItem *fontItem = static_cast<FontListItem*>(it);
+ QFont 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"