summaryrefslogtreecommitdiffstats
path: root/tools/qtconfig/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qtconfig/mainwindow.cpp')
-rw-r--r--tools/qtconfig/mainwindow.cpp1142
1 files changed, 1142 insertions, 0 deletions
diff --git a/tools/qtconfig/mainwindow.cpp b/tools/qtconfig/mainwindow.cpp
new file mode 100644
index 000000000..35525160f
--- /dev/null
+++ b/tools/qtconfig/mainwindow.cpp
@@ -0,0 +1,1142 @@
+/**********************************************************************
+** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of TQt Configuration.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing retquirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** Licensees holding valid TQt Commercial licenses may use this file in
+** accordance with the TQt Commercial License Agreement provided with
+** the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include "mainwindow.h"
+#include "colorbutton.h"
+#include "previewframe.h"
+#include "paletteeditoradvanced.h"
+
+#include <qlabel.h>
+#include <qapplication.h>
+#include <qcombobox.h>
+#include <qstylefactory.h>
+#include <qinputcontextfactory.h>
+#include <qobjectlist.h>
+#include <qfontdatabase.h>
+#include <qlineedit.h>
+#include <qlistbox.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qfiledialog.h>
+#include <qaction.h>
+#include <qstatusbar.h>
+#include <qsettings.h>
+#include <qmessagebox.h>
+#include <qtextview.h>
+#include <qstyle.h>
+
+#include <stdlib.h>
+
+
+// from qapplication.cpp and qapplication_x11.cpp - These are NOT for
+// external use ignore them
+extern bool Q_EXPORT qt_resolve_symlinks;
+
+
+static const char *appearance_text =
+"<p><b><font size+=2>Appearance</font></b></p>"
+"<hr>"
+"<p>Use this tab to customize the appearance of your TQt applications.</p>"
+"<p>You can select the default GUI Style from the drop down list and "
+"customize the colors.</p>"
+"<p>Any GUI Style plugins in your plugin path will automatically be added "
+"to the list of built-in TQt styles. (See the Library Paths tab for "
+"information on adding new plugin paths.)</p>"
+"<p>When you choose 3-D Effects and Background colors, the TQt Configuration "
+"program will automatically generate a palette for you. To customize "
+"colors further, press the Tune Palette button to open the advanced "
+"palette editor."
+"<p>The Preview Window shows what the selected Style and colors look "
+"like.";
+
+static const char *font_text =
+"<p><b><font size+=2>Fonts</font></b></p>"
+"<hr>"
+"<p>Use this tab to select the default font for your TQt applications. "
+"The selected font is shown (initially as 'Sample Text') in the line "
+"edit below the Family, "
+"Style and Point Size drop down lists.</p>"
+"<p>TQt has a powerful font substitution feature that allows you to "
+"specify a list of substitute fonts. Substitute fonts are used "
+"when a font cannot be loaded, or if the specified font doesn't have "
+"a particular character."
+"<p>For example, if you select the font Lucida, which doesn't have Korean "
+"characters, but need to show some Korean text using the Mincho font family "
+"you can do so by adding Mincho to the list. Once Mincho is added, any "
+"Korean characters that are not found in the Lucida font will be taken "
+"from the Mincho font. Because the font substitutions are "
+"lists, you can also select multiple families, such as Song Ti (for "
+"use with Chinese text).";
+
+static const char *interface_text =
+"<p><b><font size+=2>Interface</font></b></p>"
+"<hr>"
+"<p>Use this tab to customize the feel of your TQt applications.</p>"
+"<p>If the Resolve Symlinks checkbox is checked TQt will follow symlinks "
+"when handling URLs. For example, in the file dialog, if this setting is turned "
+"on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory "
+"will cause the file dialog to change to /var/tmp. With this setting turned "
+"off, symlinks are not resolved or followed.</p>"
+"<p>The Global Strut setting is useful for people who retquire a "
+"minimum size for all widgets (e.g. when using a touch panel or for users "
+"who are visually impaired). Leaving the Global Strut width and height "
+"at 0 will disable the Global Strut feature</p>"
+"<p>XIM (Extended Input Methods) are used for entering characters in "
+"languages that have large character sets, for example, Chinese and "
+"Japanese.";
+// ### What does the 'Enhanced support for languages written R2L do?
+
+static const char *libpath_text =
+"<p><b><font size+=2>Library Paths</font></b></p>"
+"<hr>"
+"<p>Use this tab to select additional directories where TQt should search "
+"for component plugins."
+"<p>These directories should be the base directory of where your plugins "
+"are stored. For example, if you wish to store GUI Style plugins in "
+"$HOME/plugins/styles and TQt Designer plugins in $HOME/plugins/designer, "
+"you would add $HOME/plugins to your Library Path. <p>Notes:"
+"<ul><li>The TQt Configuration program does <i>not</i> support environment "
+"variables, so you must give full path names, for example "
+"<tt>/home/brad/myplugins</tt> not <tt>$HOME/myplugins</tt>"
+"<li> TQt automatically "
+"searches in the directory where you installed TQt for component plugins. "
+"Removing that path is not possible.</ul>";
+
+static const char *printer_text =
+"<p><b><font size+=2>Printer</font></b></p>"
+"<hr>"
+"<p>Use this tab to configure the way TQt generates output for the printer."
+"You can specify if TQt should try to embed fonts into its generated output."
+"If you enable font embedding, the resulting postscript will be more "
+"portable and will more accurately reflect the "
+"visual output on the screen; however the resulting postscript file "
+"size will be bigger."
+"<p>When using font embedding you can select additional directories where "
+"TQt should search for embeddable font files. By default, the X "
+"server font path is used.";
+
+static const char *about_text =
+"<p><b><font size=+2>TQt Configuration</font></b></p>"
+"<p>A graphical configuration tool for programs using TQt</p>"
+"<p>Version 1.0</p>"
+"<p>Copyright (C) 2001-2008 Trolltech ASA. All rights reserved.</p>"
+"<p></p>"
+"<p>This program is licensed to you under the terms of the GNU General "
+"Public License Version 2 as published by the Free Software Foundation. This "
+"gives you legal permission to copy, distribute and/or modify this software "
+"under certain conditions. For details, see the file 'LICENSE.GPL' that came with "
+"this software distribution. If you did not get the file, send email to "
+"info@trolltech.com.</p>\n\n<p>The program is provided AS IS with NO WARRANTY "
+"OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS "
+"FOR A PARTICULAR PURPOSE.</p>";
+
+
+static TQColorGroup::ColorRole centralFromItem( int item )
+{
+ switch( item ) {
+ case 0: return TQColorGroup::Background;
+ case 1: return TQColorGroup::Foreground;
+ case 2: return TQColorGroup::Button;
+ case 3: return TQColorGroup::Base;
+ case 4: return TQColorGroup::Text;
+ case 5: return TQColorGroup::BrightText;
+ case 6: return TQColorGroup::ButtonText;
+ case 7: return TQColorGroup::Highlight;
+ case 8: return TQColorGroup::HighlightedText;
+ default: return TQColorGroup::NColorRoles;
+ }
+}
+
+
+static TQColorGroup::ColorRole effectFromItem( int item )
+{
+ switch( item ) {
+ case 0: return TQColorGroup::Light;
+ case 1: return TQColorGroup::Midlight;
+ case 2: return TQColorGroup::Mid;
+ case 3: return TQColorGroup::Dark;
+ case 4: return TQColorGroup::Shadow;
+ default: return TQColorGroup::NColorRoles;
+ }
+}
+
+
+static void setStyleHelper(TQWidget *w, TQStyle *s)
+{
+ w->unsetPalette();
+ w->setStyle(s);
+
+ const TQObjectList *children = w->children();
+ if (! children)
+ return;
+
+ TQPtrListIterator<TQObject> childit(*children);
+ TQObject *child;
+ while ((child = childit.current()) != 0) {
+ ++childit;
+
+ if (child->isWidgetType())
+ setStyleHelper((TQWidget *) child, s);
+ }
+}
+
+
+MainWindow::MainWindow()
+ : MainWindowBase(0, "main window"),
+ editPalette(palette()), previewPalette(palette()), previewstyle(0)
+{
+ modified = TRUE;
+
+ TQStringList gstyles = TQStyleFactory::keys();
+ gstyles.sort();
+ gstylecombo->insertStringList(gstyles);
+
+ TQSettings settings;
+ TQString currentstyle = settings.readEntry("/qt/style");
+ if (currentstyle.isNull())
+ currentstyle = TQApplication::style().className();
+ {
+ int s = 0;
+ TQStringList::Iterator git = gstyles.begin();
+ while (git != gstyles.end()) {
+ if (*git == currentstyle)
+ break;
+ s++;
+ git++;
+ }
+
+ if (s < gstylecombo->count()) {
+ gstylecombo->setCurrentItem(s);
+ } else {
+ // no predefined style, try to find the closest match
+ // class names usually contain the name of the style, so we
+ // iterate over the items in the combobox, and use the one whose
+ // name is contained in the classname of the style
+ s = 0;
+ git = gstyles.begin();
+ while (git != gstyles.end()) {
+ if (currentstyle.contains(*git))
+ break;
+ s++;
+ git++;
+ }
+
+ if (s < gstylecombo->count()) {
+ gstylecombo->setCurrentItem(s);
+ } else {
+ // we give up
+ gstylecombo->insertItem("Unknown");
+ gstylecombo->setCurrentItem(gstylecombo->count() - 1);
+ }
+ }
+ }
+
+ buttonMainColor->setColor(palette().color(TQPalette::Active,
+ TQColorGroup::Button));
+ buttonMainColor2->setColor(palette().color(TQPalette::Active,
+ TQColorGroup::Background));
+
+ TQFontDatabase db;
+ TQStringList families = db.families();
+ familycombo->insertStringList(families);
+
+ TQStringList fs = families;
+ TQStringList fs2 = TQFont::substitutions();
+ TQStringList::Iterator fsit = fs2.begin();
+ while (fsit != fs2.end()) {
+ if (! fs.contains(*fsit))
+ fs += *fsit;
+ fsit++;
+ }
+ fs.sort();
+ familysubcombo->insertStringList(fs);
+
+ choosesubcombo->insertStringList(families);
+ TQValueList<int> sizes = db.standardSizes();
+ TQValueList<int>::Iterator it = sizes.begin();
+ while (it != sizes.end())
+ psizecombo->insertItem(TQString::number(*it++));
+
+ dcispin->setValue(TQApplication::doubleClickInterval());
+ cfispin->setValue(TQApplication::cursorFlashTime());
+ wslspin->setValue(TQApplication::wheelScrollLines());
+ resolvelinks->setChecked(qt_resolve_symlinks);
+
+ effectcheckbox->setChecked(TQApplication::isEffectEnabled(UI_General));
+ effectbase->setEnabled(effectcheckbox->isChecked());
+
+ if (TQApplication::isEffectEnabled(UI_FadeMenu))
+ menueffect->setCurrentItem(2);
+ else if (TQApplication::isEffectEnabled(UI_AnimateMenu))
+ menueffect->setCurrentItem(1);
+
+ if (TQApplication::isEffectEnabled(UI_AnimateCombo))
+ comboeffect->setCurrentItem(1);
+
+ if (TQApplication::isEffectEnabled(UI_FadeTooltip))
+ tooltipeffect->setCurrentItem(2);
+ else if (TQApplication::isEffectEnabled(UI_AnimateTooltip))
+ tooltipeffect->setCurrentItem(1);
+
+ if ( TQApplication::isEffectEnabled( UI_AnimateToolBox ) )
+ toolboxeffect->setCurrentItem( 1 );
+
+ TQSize globalStrut = TQApplication::globalStrut();
+ strutwidth->setValue(globalStrut.width());
+ strutheight->setValue(globalStrut.height());
+
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(TQApplication::libraryPaths());
+
+ // find the default family
+ TQStringList::Iterator sit = families.begin();
+ int i = 0, possible = -1;
+ while (sit != families.end()) {
+ if (*sit == TQApplication::font().family())
+ break;
+ if ((*sit).contains(TQApplication::font().family()))
+ possible = i;
+
+ i++;
+ sit++;
+ }
+ if (sit == families.end())
+ i = possible;
+ if (i == -1) // no clue about the current font
+ i = 0;
+
+ familycombo->setCurrentItem(i);
+
+ TQStringList styles = db.styles(familycombo->currentText());
+ stylecombo->insertStringList(styles);
+
+ TQString stylestring = db.styleString(TQApplication::font());
+ sit = styles.begin();
+ i = 0;
+ possible = -1;
+ while (sit != styles.end()) {
+ if (*sit == stylestring)
+ break;
+ if ((*sit).contains(stylestring))
+ possible = i;
+
+ i++;
+ sit++;
+ }
+ if (sit == styles.end())
+ i = possible;
+ if (i == -1) // no clue about the current font
+ i = 0;
+ stylecombo->setCurrentItem(i);
+
+ i = 0;
+ while (i < psizecombo->count()) {
+ if (psizecombo->text(i) == TQString::number(TQApplication::font().pointSize())) {
+ psizecombo->setCurrentItem(i);
+ break;
+ }
+
+ i++;
+ }
+
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+
+ rtlExtensions->setChecked( settings.readBoolEntry( "/qt/useRtlExtensions", FALSE ) );
+
+#if defined(Q_WS_X11)
+ inputStyle->setCurrentText( settings.readEntry( "/qt/XIMInputStyle", trUtf8( "On The Spot" ) ) );
+#else
+ inputStyle->hide();
+ inputStyleLabel->hide();
+#endif
+
+#if defined(Q_WS_X11) && !defined(QT_NO_IM_EXTENSIONS)
+ /*
+ This code makes it possible to set up default input method.
+
+ The list of identifier names of input method which can be used
+ is actquired using TQInputContextFactory::keys(). And it is
+ translated to display name and set to inputMethodCombo which
+ displays the list of input method.
+ */
+ inputMethodIdentifiers = TQInputContextFactory::keys();
+ TQStringList imDispNames;
+ {
+ // input method switcher should named with "imsw-" prefix to
+ // prevent to be listed in ordinary input method list.
+ TQStringList::Iterator imIt = inputMethodIdentifiers.begin();
+ while (imIt != inputMethodIdentifiers.end()) {
+ if ((*imIt).find("imsw-") == 0)
+ imIt = inputMethodIdentifiers.remove(imIt);
+ else
+ imIt++;
+ }
+ // we should not sort the list
+ //inputMethodIdentifiers.sort();
+ for (imIt = inputMethodIdentifiers.begin();
+ imIt != inputMethodIdentifiers.end();
+ imIt++) {
+ TQString dispName = TQInputContextFactory::displayName(*imIt);
+ if (dispName.isNull() || dispName.isEmpty())
+ dispName = *imIt;
+ imDispNames << dispName;
+ }
+ }
+ //inputMethodCombo->insertStringList(inputMethodIdentifiers);
+ inputMethodCombo->insertStringList(imDispNames);
+
+ /*
+ input method set up as a default in the past is chosen.
+ If nothing is set up, default input method in the platform is chosen.
+ */
+ // default input method is XIM in X11.
+ TQString currentIM = settings.readEntry("/qt/DefaultInputMethod", "xim");
+ {
+ int index = inputMethodIdentifiers.findIndex(currentIM);
+ // set up Selected input method.
+ if (0 <= index && index < inputMethodIdentifiers.count()) {
+ inputMethodCombo->setCurrentItem(index);
+ } else {
+ // Give up. this part is executed when specified IM is not
+ // installed.
+ TQString dispName = tr("Unknown Input Method") + " (" + currentIM + ")";
+ inputMethodCombo->insertItem(dispName);
+ inputMethodCombo->setCurrentItem(inputMethodCombo->count() - 1);
+ inputMethodIdentifiers << currentIM;
+ }
+ }
+#else
+ inputMethodCombo->hide();
+ inputMethodLabel->hide();
+#endif
+
+ fontembeddingcheckbox->setChecked( settings.readBoolEntry("/qt/embedFonts", TRUE) );
+ fontpaths = settings.readListEntry("/qt/fontPath", ':');
+ fontpathlistbox->insertStringList(fontpaths);
+
+ setModified(FALSE);
+}
+
+
+MainWindow::~MainWindow()
+{
+}
+
+
+void MainWindow::fileSave()
+{
+ if (! modified) {
+ statusBar()->message("No changes to be saved.", 2000);
+ return;
+ }
+
+ statusBar()->message("Saving changes...");
+
+ {
+ TQSettings settings;
+ TQFontDatabase db;
+ TQFont font = db.font(familycombo->currentText(),
+ stylecombo->currentText(),
+ psizecombo->currentText().toInt());
+ TQStringList actcg, inactcg, discg;
+
+ int i;
+ for (i = 0; i < TQColorGroup::NColorRoles; i++)
+ actcg << editPalette.color(TQPalette::Active,
+ (TQColorGroup::ColorRole) i).name();
+ for (i = 0; i < TQColorGroup::NColorRoles; i++)
+ inactcg << editPalette.color(TQPalette::Inactive,
+ (TQColorGroup::ColorRole) i).name();
+ for (i = 0; i < TQColorGroup::NColorRoles; i++)
+ discg << editPalette.color(TQPalette::Disabled,
+ (TQColorGroup::ColorRole) i).name();
+
+ settings.writeEntry("/qt/font", font.toString());
+ settings.writeEntry("/qt/Palette/active", actcg);
+ settings.writeEntry("/qt/Palette/inactive", inactcg);
+ settings.writeEntry("/qt/Palette/disabled", discg);
+
+ TQStringList libpath = TQApplication::libraryPaths();
+ TQString libpathkey =
+ TQString("/qt/%1.%2/libraryPath").arg( QT_VERSION >> 16 ).arg( (QT_VERSION & 0xff00 ) >> 8 );
+ settings.writeEntry(libpathkey, libpath, ':');
+ settings.writeEntry("/qt/fontPath", fontpaths, ':');
+ settings.writeEntry("/qt/embedFonts", fontembeddingcheckbox->isChecked() );
+ settings.writeEntry("/qt/style", gstylecombo->currentText());
+ settings.writeEntry("/qt/doubleClickInterval",
+ dcispin->value());
+ settings.writeEntry("/qt/cursorFlashTime", cfispin->value() == 9 ? 0 : cfispin->value() );
+ settings.writeEntry("/qt/wheelScrollLines", wslspin->value());
+ settings.writeEntry("/qt/resolveSymlinks", resolvelinks->isChecked());
+
+ TQStringList strut;
+ strut << TQString::number(strutwidth->value());
+ strut << TQString::number(strutheight->value());
+ settings.writeEntry("/qt/globalStrut", strut);
+
+ settings.writeEntry("/qt/useRtlExtensions", rtlExtensions->isChecked() );
+
+#ifdef Q_WS_X11
+ TQString style = inputStyle->currentText();
+ TQString str = "On The Spot";
+ if ( style == trUtf8( "Over The Spot" ) )
+ str = "Over The Spot";
+ else if ( style == trUtf8( "Off The Spot" ) )
+ str = "Off The Spot";
+ else if ( style == trUtf8( "Root" ) )
+ str = "Root";
+ settings.writeEntry( "/qt/XIMInputStyle", inputStyle->currentText() );
+
+#if !defined(QT_NO_IM_EXTENSIONS)
+ TQString imSwitcher = settings.readEntry("/qt/DefaultInputMethodSwitcher", "imsw-multi");
+ settings.writeEntry("/qt/DefaultInputMethodSwitcher", imSwitcher);
+ int imIndex = inputMethodCombo->currentItem();
+ settings.writeEntry("/qt/DefaultInputMethod", inputMethodIdentifiers[imIndex]);
+#endif
+#endif
+
+ TQStringList effects;
+ if (effectcheckbox->isChecked()) {
+ effects << "general";
+
+ switch (menueffect->currentItem()) {
+ case 1: effects << "animatemenu"; break;
+ case 2: effects << "fademenu"; break;
+ }
+
+ switch (comboeffect->currentItem()) {
+ case 1: effects << "animatecombo"; break;
+ }
+
+ switch (tooltipeffect->currentItem()) {
+ case 1: effects << "animatetooltip"; break;
+ case 2: effects << "fadetooltip"; break;
+ }
+
+ switch ( toolboxeffect->currentItem() ) {
+ case 1: effects << "animatetoolbox"; break;
+ }
+ } else
+ effects << "none";
+ settings.writeEntry("/qt/GUIEffects", effects);
+
+ TQStringList familysubs = TQFont::substitutions();
+ TQStringList::Iterator fit = familysubs.begin();
+ while (fit != familysubs.end()) {
+ TQStringList subs = TQFont::substitutes(*fit);
+ settings.writeEntry("/qt/Font Substitutions/" + *fit, subs);
+ fit++;
+ }
+ }
+
+#if defined(Q_WS_X11)
+ TQApplication::x11_apply_settings();
+#endif // Q_WS_X11
+
+ setModified(FALSE);
+ statusBar()->message("Saved changes.");
+}
+
+
+void MainWindow::fileExit()
+{
+ qApp->closeAllWindows();
+}
+
+
+void MainWindow::setModified(bool m)
+{
+ if (modified == m)
+ return;
+
+ modified = m;
+ fileSaveAction->setEnabled(m);
+}
+
+
+void MainWindow::buildPalette()
+{
+ int i;
+ TQColorGroup cg;
+ TQColor btn = buttonMainColor->color();
+ TQColor back = buttonMainColor2->color();
+ TQPalette automake( btn, back );
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), automake.active().color( centralFromItem(i) ) );
+
+ editPalette.setActive( cg );
+ buildActiveEffect();
+
+ cg = editPalette.inactive();
+
+ TQPalette temp( editPalette.active().color( TQColorGroup::Button ),
+ editPalette.active().color( TQColorGroup::Background ) );
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), temp.inactive().color( centralFromItem(i) ) );
+
+ editPalette.setInactive( cg );
+ buildInactiveEffect();
+
+ cg = editPalette.disabled();
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), temp.disabled().color( centralFromItem(i) ) );
+
+ editPalette.setDisabled( cg );
+ buildDisabledEffect();
+
+ updateColorButtons();
+
+ setModified(TRUE);
+}
+
+
+void MainWindow::buildActiveEffect()
+{
+ TQColorGroup cg = editPalette.active();
+ TQColor btn = cg.color( TQColorGroup::Button );
+
+ TQPalette temp( btn, btn );
+
+ for (int i = 0; i<5; i++)
+ cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) );
+
+ editPalette.setActive( cg );
+ setPreviewPalette( editPalette );
+
+ updateColorButtons();
+}
+
+
+void MainWindow::buildInactive()
+{
+ editPalette.setInactive( editPalette.active() );
+ buildInactiveEffect();
+}
+
+
+void MainWindow::buildInactiveEffect()
+{
+ TQColorGroup cg = editPalette.inactive();
+
+ TQColor light, midlight, mid, dark, shadow;
+ TQColor btn = cg.color( TQColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( TQColorGroup::Light, light );
+ cg.setColor( TQColorGroup::Midlight, midlight );
+ cg.setColor( TQColorGroup::Mid, mid );
+ cg.setColor( TQColorGroup::Dark, dark );
+ cg.setColor( TQColorGroup::Shadow, shadow );
+
+ editPalette.setInactive( cg );
+ setPreviewPalette( editPalette );
+ updateColorButtons();
+}
+
+
+void MainWindow::buildDisabled()
+{
+ TQColorGroup cg = editPalette.active();
+ cg.setColor( TQColorGroup::ButtonText, darkGray );
+ cg.setColor( TQColorGroup::Foreground, darkGray );
+ cg.setColor( TQColorGroup::Text, darkGray );
+ cg.setColor( TQColorGroup::HighlightedText, darkGray );
+ editPalette.setDisabled( cg );
+
+ buildDisabledEffect();
+}
+
+
+void MainWindow::buildDisabledEffect()
+{
+ TQColorGroup cg = editPalette.disabled();
+
+ TQColor light, midlight, mid, dark, shadow;
+ TQColor btn = cg.color( TQColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( TQColorGroup::Light, light );
+ cg.setColor( TQColorGroup::Midlight, midlight );
+ cg.setColor( TQColorGroup::Mid, mid );
+ cg.setColor( TQColorGroup::Dark, dark );
+ cg.setColor( TQColorGroup::Shadow, shadow );
+
+ editPalette.setDisabled( cg );
+ setPreviewPalette( editPalette );
+ updateColorButtons();
+}
+
+
+void MainWindow::setPreviewPalette( const TQPalette& pal )
+{
+ TQColorGroup cg;
+
+ switch (paletteCombo->currentItem()) {
+ case 0:
+ default:
+ cg = pal.active();
+ break;
+ case 1:
+ cg = pal.inactive();
+ break;
+ case 2:
+ cg = pal.disabled();
+ break;
+ }
+ previewPalette.setActive( cg );
+ previewPalette.setInactive( cg );
+ previewPalette.setDisabled( cg );
+
+ previewFrame->setPreviewPalette(previewPalette);
+}
+
+
+void MainWindow::updateColorButtons()
+{
+ buttonMainColor->setColor( editPalette.active().color( TQColorGroup::Button ));
+ buttonMainColor2->setColor( editPalette.active().color( TQColorGroup::Background ));
+}
+
+
+void MainWindow::tunePalette()
+{
+ bool ok;
+ TQPalette pal = PaletteEditorAdvanced::getPalette(&ok, editPalette,
+ backgroundMode(), this);
+ if (! ok)
+ return;
+
+ editPalette = pal;
+ setPreviewPalette(editPalette);
+ setModified(TRUE);
+}
+
+
+void MainWindow::paletteSelected(int)
+{
+ setPreviewPalette(editPalette);
+}
+
+
+void MainWindow::styleSelected(const TQString &stylename)
+{
+ TQStyle *style = TQStyleFactory::create(stylename);
+ if (! style)
+ return;
+
+ setStyleHelper(previewFrame, style);
+ delete previewstyle;
+ previewstyle = style;
+
+ setModified(TRUE);
+}
+
+
+void MainWindow::familySelected(const TQString &family)
+{
+ TQFontDatabase db;
+ TQStringList styles = db.styles(family);
+ stylecombo->clear();
+ stylecombo->insertStringList(styles);
+ familysubcombo->insertItem(family);
+ buildFont();
+}
+
+
+void MainWindow::buildFont()
+{
+ TQFontDatabase db;
+ TQFont font = db.font(familycombo->currentText(),
+ stylecombo->currentText(),
+ psizecombo->currentText().toInt());
+ samplelineedit->setFont(font);
+ setModified(TRUE);
+}
+
+
+void MainWindow::substituteSelected(const TQString &family)
+{
+ TQStringList subs = TQFont::substitutes(family);
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+}
+
+
+void MainWindow::removeSubstitute()
+{
+ if (sublistbox->currentItem() < 0 ||
+ uint(sublistbox->currentItem()) > sublistbox->count())
+ return;
+
+ int item = sublistbox->currentItem();
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ subs.remove(subs.at(sublistbox->currentItem()));
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+ if (uint(item) > sublistbox->count())
+ item = int(sublistbox->count()) - 1;
+ sublistbox->setCurrentItem(item);
+ TQFont::removeSubstitution(familysubcombo->currentText());
+ TQFont::insertSubstitutions(familysubcombo->currentText(), subs);
+ setModified(TRUE);
+}
+
+
+void MainWindow::addSubstitute()
+{
+ if (sublistbox->currentItem() < 0 ||
+ uint(sublistbox->currentItem()) > sublistbox->count()) {
+ TQFont::insertSubstitution(familysubcombo->currentText(), choosesubcombo->currentText());
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+ setModified(TRUE);
+ return;
+ }
+
+ int item = sublistbox->currentItem();
+ TQFont::insertSubstitution(familysubcombo->currentText(), choosesubcombo->currentText());
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+ sublistbox->setCurrentItem(item);
+ setModified(TRUE);
+}
+
+
+void MainWindow::downSubstitute()
+{
+ if (sublistbox->currentItem() < 0 ||
+ uint(sublistbox->currentItem()) >= sublistbox->count())
+ return;
+
+ int item = sublistbox->currentItem();
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ TQStringList::Iterator it = subs.at(item);
+ TQString fam = *it;
+ subs.remove(it);
+ it = subs.at(item);
+ subs.insert(++it, fam);
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+ sublistbox->setCurrentItem(item + 1);
+ TQFont::removeSubstitution(familysubcombo->currentText());
+ TQFont::insertSubstitutions(familysubcombo->currentText(), subs);
+ setModified(TRUE);
+}
+
+
+void MainWindow::upSubstitute()
+{
+ if (sublistbox->currentItem() < 1)
+ return;
+
+ int item = sublistbox->currentItem();
+ TQStringList subs = TQFont::substitutes(familysubcombo->currentText());
+ TQStringList::Iterator it = subs.at(item);
+ TQString fam = *it;
+ subs.remove(it);
+ it = subs.at(item - 1);
+ subs.insert(it, fam);
+ sublistbox->clear();
+ sublistbox->insertStringList(subs);
+ sublistbox->setCurrentItem(item - 1);
+ TQFont::removeSubstitution(familysubcombo->currentText());
+ TQFont::insertSubstitutions(familysubcombo->currentText(), subs);
+ setModified(TRUE);
+}
+
+
+void MainWindow::removeLibpath()
+{
+ if (libpathlistbox->currentItem() < 0 ||
+ uint(libpathlistbox->currentItem()) > libpathlistbox->count())
+ return;
+
+ int item = libpathlistbox->currentItem();
+ TQStringList paths = TQApplication::libraryPaths();
+ paths.remove(paths.at(libpathlistbox->currentItem()));
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(paths);
+ if (uint(item) > libpathlistbox->count())
+ item = int(libpathlistbox->count()) - 1;
+ libpathlistbox->setCurrentItem(item);
+ TQApplication::setLibraryPaths(paths);
+ setModified(TRUE);
+}
+
+
+void MainWindow::addLibpath()
+{
+ if (libpathlineedit->text().isEmpty())
+ return;
+
+ if (libpathlistbox->currentItem() < 0 ||
+ uint(libpathlistbox->currentItem()) > libpathlistbox->count()) {
+ TQStringList paths = TQApplication::libraryPaths();
+ paths.append(libpathlineedit->text());
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(paths);
+ TQApplication::setLibraryPaths(paths);
+ setModified(TRUE);
+
+ return;
+ }
+
+ int item = libpathlistbox->currentItem();
+ TQStringList paths =TQApplication::libraryPaths();
+ paths.insert(++paths.at(libpathlistbox->currentItem()),
+ libpathlineedit->text());
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(paths);
+ libpathlistbox->setCurrentItem(item);
+ TQApplication::setLibraryPaths(paths);
+ setModified(TRUE);
+}
+
+
+void MainWindow::downLibpath()
+{
+ if (libpathlistbox->currentItem() < 0 ||
+ uint(libpathlistbox->currentItem()) >= libpathlistbox->count() - 1)
+ return;
+
+ int item = libpathlistbox->currentItem();
+ TQStringList paths = TQApplication::libraryPaths();
+ TQStringList::Iterator it = paths.at(item);
+ TQString fam = *it;
+ paths.remove(it);
+ it = paths.at(item);
+ paths.insert(++it, fam);
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(paths);
+ libpathlistbox->setCurrentItem(item + 1);
+ TQApplication::setLibraryPaths(paths);
+ setModified(TRUE);
+}
+
+
+void MainWindow::upLibpath()
+{
+ if (libpathlistbox->currentItem() < 1)
+ return;
+
+ int item = libpathlistbox->currentItem();
+ TQStringList paths = TQApplication::libraryPaths();
+ TQStringList::Iterator it = paths.at(item);
+ TQString fam = *it;
+ paths.remove(it);
+ it = paths.at(item - 1);
+ paths.insert(it, fam);
+ libpathlistbox->clear();
+ libpathlistbox->insertStringList(paths);
+ libpathlistbox->setCurrentItem(item - 1);
+ TQApplication::setLibraryPaths(paths);
+ setModified(TRUE);
+}
+
+
+void MainWindow::browseLibpath()
+{
+ TQString dirname = TQFileDialog::getExistingDirectory(TQString::null, this, 0,
+ tr("Select a Directory"));
+ if (dirname.isNull())
+ return;
+
+ libpathlineedit->setText(dirname);
+}
+
+
+void MainWindow::removeFontpath()
+{
+ if (fontpathlistbox->currentItem() < 0 ||
+ uint(fontpathlistbox->currentItem()) > fontpathlistbox->count())
+ return;
+
+ int item = fontpathlistbox->currentItem();
+ fontpaths.remove(fontpaths.at(fontpathlistbox->currentItem()));
+ fontpathlistbox->clear();
+ fontpathlistbox->insertStringList(fontpaths);
+ if (uint(item) > fontpathlistbox->count())
+ item = int(fontpathlistbox->count()) - 1;
+ fontpathlistbox->setCurrentItem(item);
+ setModified(TRUE);
+}
+
+
+void MainWindow::addFontpath()
+{
+ if (fontpathlineedit->text().isEmpty())
+ return;
+
+ if (fontpathlistbox->currentItem() < 0 ||
+ uint(fontpathlistbox->currentItem()) > fontpathlistbox->count()) {
+ fontpaths.append(fontpathlineedit->text());
+ fontpathlistbox->clear();
+ fontpathlistbox->insertStringList(fontpaths);
+ setModified(TRUE);
+
+ return;
+ }
+
+ int item = fontpathlistbox->currentItem();
+ fontpaths.insert(++fontpaths.at(fontpathlistbox->currentItem()),
+ fontpathlineedit->text());
+ fontpathlistbox->clear();
+ fontpathlistbox->insertStringList(fontpaths);
+ fontpathlistbox->setCurrentItem(item);
+ setModified(TRUE);
+}
+
+
+void MainWindow::downFontpath()
+{
+ if (fontpathlistbox->currentItem() < 0 ||
+ uint(fontpathlistbox->currentItem()) >= fontpathlistbox->count() - 1)
+ return;
+
+ int item = fontpathlistbox->currentItem();
+ TQStringList::Iterator it = fontpaths.at(item);
+ TQString fam = *it;
+ fontpaths.remove(it);
+ it = fontpaths.at(item);
+ fontpaths.insert(++it, fam);
+ fontpathlistbox->clear();
+ fontpathlistbox->insertStringList(fontpaths);
+ fontpathlistbox->setCurrentItem(item + 1);
+ setModified(TRUE);
+}
+
+
+void MainWindow::upFontpath()
+{
+ if (fontpathlistbox->currentItem() < 1)
+ return;
+
+ int item = fontpathlistbox->currentItem();
+ TQStringList::Iterator it = fontpaths.at(item);
+ TQString fam = *it;
+ fontpaths.remove(it);
+ it = fontpaths.at(item - 1);
+ fontpaths.insert(it, fam);
+ fontpathlistbox->clear();
+ fontpathlistbox->insertStringList(fontpaths);
+ fontpathlistbox->setCurrentItem(item - 1);
+ setModified(TRUE);
+}
+
+
+void MainWindow::browseFontpath()
+{
+ TQString dirname = TQFileDialog::getExistingDirectory(TQString::null, this, 0,
+ tr("Select a Directory"));
+ if (dirname.isNull())
+ return;
+
+ fontpathlineedit->setText(dirname);
+}
+
+
+void MainWindow::somethingModified()
+{
+ setModified(TRUE);
+}
+
+
+void MainWindow::helpAbout()
+{
+ TQMessageBox::about(this, tr("TQt Configuration"),
+ tr(about_text));
+}
+
+
+void MainWindow::helpAboutTQt()
+{
+ TQMessageBox::aboutTQt(this, tr("TQt Configuration"));
+}
+
+
+void MainWindow::pageChanged(TQWidget *page)
+{
+ if (page == tab)
+ helpview->setText(tr(appearance_text));
+ else if (page == tab_2)
+ helpview->setText(tr(font_text));
+ else if (page == tab_3)
+ helpview->setText(tr(interface_text));
+ else if (page == tab_4)
+ helpview->setText(tr(libpath_text));
+ else if (page == tab_5)
+ helpview->setText(tr(printer_text));
+}
+
+
+void MainWindow::closeEvent(TQCloseEvent *e)
+{
+ if (modified) {
+ switch(TQMessageBox::warning(this, tr("Save Changes"),
+ tr("Save changes to settings?"),
+ tr("&Yes"), tr("&No"), tr("&Cancel"), 0, 2)) {
+ case 0: // save
+ qApp->processEvents();
+ fileSave();
+
+ // fall through intended
+ case 1: // don't save
+ e->accept();
+ break;
+
+ case 2: // cancel
+ e->ignore();
+ break;
+
+ default: break;
+ }
+ } else
+ e->accept();
+}