summaryrefslogtreecommitdiffstats
path: root/kommander/editor/widgetdatabase.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commite9ae80694875f869892f13f4fcaf1170a00dea41 (patch)
treeaa2f8d8a217e2d376224c8d46b7397b68d35de2d /kommander/editor/widgetdatabase.cpp
downloadtdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz
tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kommander/editor/widgetdatabase.cpp')
-rw-r--r--kommander/editor/widgetdatabase.cpp1029
1 files changed, 1029 insertions, 0 deletions
diff --git a/kommander/editor/widgetdatabase.cpp b/kommander/editor/widgetdatabase.cpp
new file mode 100644
index 00000000..4de615d0
--- /dev/null
+++ b/kommander/editor/widgetdatabase.cpp
@@ -0,0 +1,1029 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#if !defined(UIC)
+#include "pixmapchooser.h"
+#endif
+#ifndef KOMMANDER
+#include "widgetinterface.h"
+#endif
+#include "widgetdatabase.h"
+
+#include <qapplication.h>
+//#define NO_STATIC_COLORS
+#include "globaldefs.h"
+#include <qstrlist.h>
+#include <qdict.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qcleanuphandler.h>
+
+#include <qfeatures.h>
+
+#include <stdlib.h>
+
+#include <kommanderfactory.h>
+#include <klocale.h>
+
+const int dbsize = 300;
+const int dbcustom = 200;
+const int dbdictsize = 211;
+static WidgetDatabaseRecord* widget_db[ dbsize ];
+static QDict<int> *className2Id = 0;
+static int dbcount = 0;
+static int dbcustomcount = 200;
+static QStrList *wGroups;
+static QStrList *invisibleGroups;
+static bool whatsThisLoaded = false;
+#ifndef KOMMANDER
+static QPluginManager<WidgetInterface> *widgetPluginManager = 0;
+#endif
+static bool plugins_set_up = false;
+static bool was_in_setup = false;
+
+#ifndef KOMMANDER
+QCleanupHandler<QPluginManager<WidgetInterface> > cleanup_manager;
+#endif
+
+WidgetDatabaseRecord::WidgetDatabaseRecord()
+{
+ isForm = false;
+ isContainer = false;
+ iconSet = 0;
+ nameCounter = 0;
+}
+
+WidgetDatabaseRecord::~WidgetDatabaseRecord()
+{
+ delete iconSet;
+}
+
+
+/*!
+ \class WidgetDatabase widgetdatabase.h
+ \brief The WidgetDatabase class holds information about widgets
+
+ The WidgetDatabase holds information about widgets like toolTip(),
+ iconName(), ... It works Id-based, so all access functions take the
+ widget id as parameter. To get the id for a widget (classname), use
+ idFromClassName().
+
+ All access functions are static. Having multiple widgetdatabases in
+ one application doesn't make sense anyway and so you don't need more
+ than an instance of the widgetdatabase.
+
+ For creating widgets, layouts, etc. see WidgetFactory.
+*/
+
+/*!
+ Creates widget database. Does nothing.
+*/
+
+WidgetDatabase::WidgetDatabase()
+{
+}
+
+/*! Sets up the widget database. If the static widgetdatabase already
+ exists, the functions returns immediately.
+*/
+
+void WidgetDatabase::setupDataBase( int id )
+{
+ was_in_setup = true;
+#ifndef UIC
+ Q_UNUSED(id) if (dbcount)
+ return;
+#else
+ if (dbcount && id != -2)
+ return;
+ if (dbcount && !plugins_set_up)
+ {
+ setupPlugins();
+ return;
+ }
+ if (dbcount && plugins_set_up)
+ return;
+#endif
+
+ wGroups = new QStrList;
+ invisibleGroups = new QStrList;
+ invisibleGroups->append("Forms");
+ invisibleGroups->append("Temp");
+ className2Id = new QDict < int >(dbdictsize);
+ className2Id->setAutoDelete(true);
+
+ WidgetDatabaseRecord *r = 0;
+
+ /* Designer widgets */
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pushbutton.xpm";
+ r->name = "QPushButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Push Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "toolbutton.xpm";
+ r->name = "QToolButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Tool Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "radiobutton.xpm";
+ r->name = "QRadioButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Radio Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "checkbox.xpm";
+ r->name = "QCheckBox";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Check Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "groupbox.xpm";
+ r->name = "QGroupBox";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Group Box");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "buttongroup.xpm";
+ r->name = "QButtonGroup";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Button Group");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "frame.xpm";
+ r->name = "QFrame";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Frame");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QTabWidget";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Tabwidget");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listbox.xpm";
+ r->name = "QListBox";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("List Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listview.xpm";
+ r->name = "QListView";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("List View");
+ append(r);
+
+#if !defined(QT_NO_ICONVIEW) || defined(UIC)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "iconview.xpm";
+ r->name = "QIconView";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("Icon View");
+ append(r);
+#endif
+
+#if !defined(QT_NO_TABLE)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "table.xpm";
+ r->name = "QTable";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("Table");
+ append(r);
+#endif
+
+#if !defined(QT_NO_SQL)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datatable.xpm";
+ r->includeFile = "qdatatable.h";
+ r->name = "QDataTable";
+ r->group = widgetGroup("Database");
+ r->toolTip = i18n("Data Table");
+ append(r);
+#endif
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lineedit.xpm";
+ r->name = "QLineEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Line Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spinbox.xpm";
+ r->name = "QSpinBox";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Spin Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "dateedit.xpm";
+ r->name = "QDateEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Date Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "timeedit.xpm";
+ r->name = "QTimeEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Time Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datetimeedit.xpm";
+ r->name = "QDateTimeEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Date-Time Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "multilineedit.xpm";
+ r->name = "QMultiLineEdit";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Multi Line Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "richtextedit.xpm";
+ r->name = "QTextEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Rich Text Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "combobox.xpm";
+ r->name = "QComboBox";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Combo Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "slider.xpm";
+ r->name = "QSlider";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Slider");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "scrollbar.xpm";
+ r->name = "QScrollBar";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Scrollbar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "dial.xpm";
+ r->name = "QDial";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Dial");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "label.xpm";
+ r->name = "QLabel";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Label");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lcdnumber.xpm";
+ r->name = "QLCDNumber";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("LCD Number");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "progress.xpm";
+ r->name = "QProgressBar";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("Progress Bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "textview.xpm";
+ r->name = "QTextView";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Text View");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "textbrowser.xpm";
+ r->name = "QTextBrowser";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("Text Browser");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spacer.xpm";
+ r->name = "Spacer";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Spacer");
+ r->whatsThis =
+ i18n("The Spacer provides horizontal and vertical spacing to be able to manipulate the behaviour of layouts.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QWidget";
+ r->isForm = true;
+ r->group = widgetGroup("Forms");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDialog";
+ r->group = widgetGroup("Forms");
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QWizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDesignerWizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QLayoutWidget";
+ r->group = widgetGroup("Temp");
+ r->includeFile = "";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QSplitter";
+ r->group = widgetGroup("Temp");
+ r->includeFile = "qsplitter.h";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerTabWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerDialog";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "";
+ r->name = "QMainWindow";
+ r->includeFile = "qmainwindow.h";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+#ifndef QT_NO_SQL
+ r = new WidgetDatabaseRecord;
+ r->name = "QDataBrowser";
+ r->includeFile = "qdatabrowser.h";
+ r->group = widgetGroup("Database");
+ r->toolTip = "Data Browser";
+ r->iconName = "databrowser.xpm";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDataView";
+ r->includeFile = "qdataview.h";
+ r->group = widgetGroup("Database");
+ r->toolTip = "Data View";
+ r->iconName = "dataview.xpm";
+ r->isContainer = true;
+ append(r);
+#endif
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Dialog";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Wizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorDialog";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorWizard";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorTabWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorToolBox";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+
+ /* Kommandr widgets */
+ r = new WidgetDatabaseRecord;
+ r->iconName = "label.xpm";
+ r->name = "Label";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Text Label");
+ r->whatsThis = i18n("The Text Label provides a widget to display static text.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pixlabel.xpm";
+ r->name = "PixmapLabel";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Pixmap Label");
+ r->whatsThis = i18n("The Pixmap Label provides a widget to display pixmaps.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lineedit.xpm";
+ r->name = "LineEdit";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A line edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TextEdit";
+ r->iconName = "textedit.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A rich text edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TextBrowser";
+ r->iconName = "textbrowser.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Text Browser");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listbox.xpm";
+ r->name = "ListBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("List Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "combobox.xpm";
+ r->name = "ComboBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A combo box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TreeWidget";
+ r->iconName = "listview.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A tree widget");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Table";
+ r->iconName = "table.xmp";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A table widget");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pushbutton.xpm";
+ r->name = "ExecButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A button that when clicked, execute a command");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "closebutton.png";
+ r->name = "CloseButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A button that closes the dialog it is in");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Konsole";
+ r->iconName = "konsole.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A listbox showing output of a script");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "FileSelector";
+ r->iconName = "lineedit.xpm";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget made up of a line edit and push button, for selecting files and folders");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "checkbox.xpm";
+ r->name = "CheckBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A check box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "radiobutton.xpm";
+ r->name = "RadioButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A radio button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "buttongroup.xpm";
+ r->name = "ButtonGroup";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget for grouping buttons together");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "groupbox.xpm";
+ r->name = "GroupBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget for grouping other widgets together");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "TabWidget";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget with tabs");
+ r->isContainer = true;
+ append(r);
+
+
+// r = new WidgetDatabaseRecord;
+// r->iconName = "";
+// r->name = "ToolBox";
+// r->group = widgetGroup("Kommander");
+// r->toolTip = "";
+// r->isContainer = true;
+// append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spinbox.xpm";
+ r->name = "SpinBoxInt";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A spin box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Slider";
+ r->iconName = "slider.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Slider");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "RichTextEditor";
+ r->iconName = "richtextedit.xpm";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A small rich text editor");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "StatusBar";
+ r->iconName = "statusbar.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A status bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "ProgressBar";
+ r->iconName = "progress.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A progress bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "ScriptObject";
+ r->iconName = "shellscript.png";
+ r->group = widgetGroup( "Kommander" );
+ r->toolTip = i18n("A hidden script container");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Timer";
+ r->iconName = "timer.png";
+ r->group = widgetGroup( "Kommander" );
+ r->toolTip = i18n("A timer for running scripts periodically");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datepicker.xpm";
+ r->name = "DatePicker";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A date selection widget");
+ append(r);
+
+#ifndef UIC
+ setupPlugins();
+#endif
+}
+
+void WidgetDatabase::setupPlugins()
+{
+ if (plugins_set_up)
+ return;
+ //qDebug("WidgetDatabase::setupPlugins");
+ plugins_set_up = true;
+ FeatureList widgets = KommanderFactory::featureList();
+ //qDebug("num features = %d", widgets.count());
+ for (FeatureList::Iterator it = widgets.begin(); it != widgets.end(); ++it)
+ {
+ if (hasWidget(it.key()))
+ continue;
+ WidgetDatabaseRecord *r = new WidgetDatabaseRecord;
+
+ QString grp = (*it).group;
+ if (grp.isEmpty())
+ grp = "Kommander";
+ r->group = widgetGroup(grp);
+ r->toolTip = (*it).toolTip;
+ r->iconSet = (*it).iconSet;
+ r->whatsThis = (*it).whatsThis;
+ r->isContainer = (*it).isContainer;
+ r->name = it.key();
+ append(r);
+ }
+}
+
+/*!
+ Returns the number of elements in the widget database.
+*/
+
+int WidgetDatabase::count()
+{
+ setupDataBase( -1 );
+ return dbcount;
+}
+
+/*!
+ Returns the id at which the ids of custom widgets start.
+*/
+
+int WidgetDatabase::startCustom()
+{
+ setupDataBase( -1 );
+ return dbcustom;
+}
+
+/*!
+ Returns the iconset which represents the class registered as \a id.
+*/
+
+QIconSet WidgetDatabase::iconSet( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QIconSet();
+#if !defined(UIC) && !defined(RESOURCE)
+ if ( !r->iconSet )
+ r->iconSet = new QIconSet( PixmapChooser::loadPixmap( r->iconName, PixmapChooser::Small ),
+ PixmapChooser::loadPixmap( r->iconName, PixmapChooser::Large ) );
+ return *r->iconSet;
+#else
+ return QIconSet();
+#endif
+}
+
+/*!
+ Returns the classname of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::className( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->name;
+}
+
+/*!
+ Returns the group the widget registered as \a id belongs to.
+*/
+
+QString WidgetDatabase::group( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->group;
+}
+
+/*!
+ Returns the tooltip text of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::toolTip( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->toolTip;
+}
+
+/*!
+ Returns the what's this? text of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::whatsThis( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->whatsThis;
+}
+
+/*!
+ Returns the include file if the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::includeFile( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ if ( r->includeFile.isNull() )
+ return r->name.lower() + ".h";
+ return r->includeFile;
+}
+
+/*! Returns whether the widget registered as \a id is a form.
+*/
+bool WidgetDatabase::isForm( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return false;
+ return r->isForm;
+}
+
+/*! Returns whether the widget registered as \a id can have children.
+*/
+
+bool WidgetDatabase::isContainer( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return false;
+ return r->isContainer || r->isForm;
+}
+
+QString WidgetDatabase::createWidgetName( int id )
+{
+ setupDataBase( id );
+ QString n = className( id );
+ if ( n == "QLayoutWidget" )
+ n = "Layout";
+ if ( n[ 0 ] == 'Q' )
+ n = n.mid( 1 );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return n;
+ n += QString::number( ++r->nameCounter );
+ return n;
+}
+
+/*! Returns the id for \a name or -1 if \a name is unknown.
+ */
+int WidgetDatabase::idFromClassName( const QString &name )
+{
+ setupDataBase( -1 );
+ if ( name.isEmpty() )
+ return 0;
+ int *i = className2Id->find( name );
+ if ( i )
+ return *i;
+ if ( name == "FormWindow" )
+ return idFromClassName( "QLayoutWidget" );
+#ifdef UIC
+ setupDataBase( -2 );
+ i = className2Id->find( name );
+ if ( i )
+ return *i;
+#endif
+ return -1;
+}
+
+bool WidgetDatabase::hasWidget( const QString &name )
+{
+ return className2Id->find( name ) != 0;
+}
+
+WidgetDatabaseRecord *WidgetDatabase::at( int index )
+{
+ if ( index < 0 )
+ return 0;
+ if ( index >= dbcustom && index < dbcustomcount )
+ return widget_db[ index ];
+ if ( index < dbcount )
+ return widget_db[ index ];
+ return 0;
+}
+
+void WidgetDatabase::insert( int index, WidgetDatabaseRecord *r )
+{
+ if ( index < 0 || index >= dbsize )
+ return;
+ widget_db[ index ] = r;
+ className2Id->insert( r->name, new int( index ) );
+ if ( index < dbcustom )
+ dbcount = QMAX( dbcount, index );
+}
+
+void WidgetDatabase::append( WidgetDatabaseRecord *r )
+{
+ if ( !was_in_setup )
+ setupDataBase( -1 );
+ insert( dbcount++, r );
+}
+
+QString WidgetDatabase::widgetGroup( const QString &g )
+{
+ if ( wGroups->find( g ) == -1 )
+ wGroups->append( g );
+ return g;
+}
+
+bool WidgetDatabase::isGroupEmpty( const QString &grp )
+{
+ WidgetDatabaseRecord *r = 0;
+ for ( int i = 0; i < dbcount; ++i ) {
+ if ( !( r = widget_db[ i ] ) )
+ continue;
+ if ( r->group == grp )
+ {
+ // FIXME
+ if(r->group == "Kommander")
+ return false;
+
+ if(r->name[0] != 'Q')
+ return false;
+ }
+ }
+ return true;
+}
+
+QString WidgetDatabase::widgetGroup( int i )
+{
+ setupDataBase( -1 );
+ if ( i >= 0 && i < (int)wGroups->count() )
+ return wGroups->at( i );
+ return QString::null;
+}
+
+int WidgetDatabase::numWidgetGroups()
+{
+ setupDataBase( -1 );
+ return wGroups->count();
+}
+
+bool WidgetDatabase::isGroupVisible( const QString &g )
+{
+ setupDataBase( -1 );
+ return invisibleGroups->find( g ) == -1;
+}
+
+int WidgetDatabase::addCustomWidget( WidgetDatabaseRecord *r )
+{
+ insert( dbcustomcount++, r );
+ return dbcustomcount - 1;
+}
+
+bool WidgetDatabase::isCustomWidget( int id )
+{
+ if ( id >= dbcustom && id < dbcustomcount )
+ return true;
+ return false;
+}
+
+bool WidgetDatabase::isWhatsThisLoaded()
+{
+ return whatsThisLoaded;
+}
+
+void WidgetDatabase::loadWhatsThis( const QString &docPath )
+{
+ QString whatsthisFile = docPath + "/whatsthis";
+ QFile f( whatsthisFile );
+ if ( !f.open( IO_ReadOnly ) )
+ return;
+ QTextStream ts( &f );
+ while ( !ts.atEnd() ) {
+ QString s = ts.readLine();
+ QStringList l = QStringList::split( " | ", s );
+ int id = idFromClassName( l[ 1 ] );
+ WidgetDatabaseRecord *r = at( id );
+ if ( r )
+ r->whatsThis = l[ 0 ];
+ }
+ whatsThisLoaded = true;
+}
+
+
+// ### Qt 3.1: make these publically accessible via QWidgetDatabase API
+#ifndef KOMMANDER
+#if defined(UIC)
+bool dbnounload = false;
+QStringList *dbpaths = 0;
+#endif
+
+QPluginManager<WidgetInterface> *widgetManager()
+{
+ if ( !widgetPluginManager ) {
+#ifndef KOMMANDER
+ widgetPluginManager = new QPluginManager<WidgetInterface>( IID_Widget, QApplication::libraryPaths(), "/designer" );
+#else
+ widgetPluginManager = new QPluginManager<WidgetInterface>( IID_Widget, QApplication::libraryPaths(), "" );
+#endif
+
+ cleanup_manager.add( &widgetPluginManager );
+#if defined(UIC)
+ if ( dbnounload )
+ widgetPluginManager->setAutoUnload( false );
+ if ( dbpaths ) {
+ QStringList::ConstIterator it = dbpaths->begin();
+ for ( ; it != dbpaths->end(); ++it )
+ widgetPluginManager->addLibraryPath( *it );
+ }
+#endif
+ }
+ return widgetPluginManager;
+}
+#endif