summaryrefslogtreecommitdiffstats
path: root/kexi/formeditor/factories/stdwidgetfactory.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/formeditor/factories/stdwidgetfactory.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/formeditor/factories/stdwidgetfactory.cpp')
-rw-r--r--kexi/formeditor/factories/stdwidgetfactory.cpp984
1 files changed, 984 insertions, 0 deletions
diff --git a/kexi/formeditor/factories/stdwidgetfactory.cpp b/kexi/formeditor/factories/stdwidgetfactory.cpp
new file mode 100644
index 00000000..fade100a
--- /dev/null
+++ b/kexi/formeditor/factories/stdwidgetfactory.cpp
@@ -0,0 +1,984 @@
+/***************************************************************************
+ * Copyright (C) 2003 by Lucijan Busch <[email protected]> *
+ * Copyright (C) 2004 Cedric Pasteur <[email protected]> *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Library General Public License as *
+ * published by the Free Software Foundation; either version 2 of the *
+ * License, or (at your option) any later version. *
+ ***************************************************************************/
+
+#include <qlabel.h>
+#include <qpopupmenu.h>
+#include <qcursor.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qslider.h>
+#include <qobjectlist.h>
+#include <qstring.h>
+#include <qvariant.h>
+#include <qheader.h>
+#include <qdom.h>
+#include <qstyle.h>
+#include <qvaluevector.h>
+
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <knuminput.h>
+#include <kcombobox.h>
+#include <klistbox.h>
+#include <ktextedit.h>
+#include <klistview.h>
+#include <kprogress.h>
+#include <kiconloader.h>
+#include <kgenericfactory.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kdeversion.h>
+
+#if KDE_VERSION < KDE_MAKE_VERSION(3,1,9)
+# include <qdatetimeedit.h>
+# define KTimeWidget QTimeEdit
+# define KDateWidget QDateEdit
+# define KDateTimeWidget QDateTimeEdit
+#else
+# include <ktimewidget.h>
+# include <kdatewidget.h>
+# include <kdatetimewidget.h>
+#endif
+
+#include "spring.h"
+#include "formIO.h"
+#include "form.h"
+#include "formmanager.h"
+#include "widgetlibrary.h"
+#include "widgetpropertyset.h"
+#include <koproperty/property.h>
+
+#include "stdwidgetfactory.h"
+
+// Some widgets subclass to allow event filtering and some other things
+KexiPictureLabel::KexiPictureLabel(const QPixmap &pix, QWidget *parent, const char *name)
+ : QLabel(parent, name)
+{
+ setPixmap(pix);
+ setScaledContents(false);
+}
+
+bool
+KexiPictureLabel::setProperty(const char *name, const QVariant &value)
+{
+ if(QString(name) == "pixmap")
+ resize(value.toPixmap().height(), value.toPixmap().width());
+ return QLabel::setProperty(name, value);
+}
+
+Line::Line(Qt::Orientation orient, QWidget *parent, const char *name)
+ : QFrame(parent, name)
+{
+ setFrameShadow(Sunken);
+ if(orient == Horizontal)
+ setFrameShape(HLine);
+ else
+ setFrameShape(VLine);
+}
+
+void
+Line::setOrientation(Qt::Orientation orient)
+{
+ if(orient == Horizontal)
+ setFrameShape(HLine);
+ else
+ setFrameShape(VLine);
+}
+
+Qt::Orientation
+Line::orientation() const
+{
+ if(frameShape() == HLine)
+ return Horizontal;
+ else
+ return Vertical;
+}
+
+// The factory itself
+
+StdWidgetFactory::StdWidgetFactory(QObject *parent, const char *, const QStringList &)
+ : KFormDesigner::WidgetFactory(parent, "stdwidgets")
+{
+ KFormDesigner::WidgetInfo *wFormWidget = new KFormDesigner::WidgetInfo(this);
+ wFormWidget->setPixmap("form");
+ wFormWidget->setClassName("FormWidgetBase");
+ wFormWidget->setName(i18n("Form"));
+ wFormWidget->setNamePrefix(i18n("This string will be used to name widgets of this class. It must _not_ contain white "
+ "spaces and non latin1 characters.", "form"));
+ wFormWidget->setDescription(i18n("A simple form widget"));
+ addClass(wFormWidget);
+
+ KFormDesigner::WidgetInfo *wCustomWidget = new KFormDesigner::WidgetInfo(this);
+ wCustomWidget->setPixmap("unknown_widget");
+ wCustomWidget->setClassName("CustomWidget");
+ wCustomWidget->setName(i18n("Custom Widget"));
+ wCustomWidget->setNamePrefix(i18n("This string will be used to name widgets of this class. It must _not_ contain white "
+ "spaces and non latin1 characters.", "customWidget"));
+ wCustomWidget->setDescription(i18n("A custom or non-supported widget"));
+ addClass(wCustomWidget);
+
+ KFormDesigner::WidgetInfo *wLabel = new KFormDesigner::WidgetInfo(this);
+ wLabel->setPixmap("label");
+ wLabel->setClassName("QLabel");
+ wLabel->setName(i18n("Text Label"));
+ wLabel->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "label"));
+ wLabel->setDescription(i18n("A widget to display text"));
+ addClass(wLabel);
+
+ KFormDesigner::WidgetInfo *wPixLabel = new KFormDesigner::WidgetInfo(this);
+ wPixLabel->setPixmap("pixmaplabel");
+ wPixLabel->setClassName("KexiPictureLabel");
+ wPixLabel->setName(i18n("Picture Label"));
+//! @todo Qt designer compatibility: maybe use this class when QLabel has a pixmap set...?
+ //wPixLabel->addAlternateClassName("QLabel");
+ wPixLabel->setSavingName("KexiPictureLabel");
+ wPixLabel->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "picture"));
+ wPixLabel->setDescription(i18n("A widget to display pictures"));
+ addClass(wPixLabel);
+
+ KFormDesigner::WidgetInfo *wLineEdit = new KFormDesigner::WidgetInfo(this);
+ wLineEdit->setPixmap("lineedit");
+ wLineEdit->setClassName("KLineEdit");
+ wLineEdit->addAlternateClassName("QLineEdit");
+ wLineEdit->setIncludeFileName("klineedit.h");
+ wLineEdit->setName(i18n("Line Edit"));
+ wLineEdit->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "lineEdit"));
+ wLineEdit->setDescription(i18n("A widget to input text"));
+ addClass(wLineEdit);
+
+ KFormDesigner::WidgetInfo *wSpring = new KFormDesigner::WidgetInfo(this);
+ wSpring->setPixmap("spring");
+ wSpring->setClassName("Spring");
+ wSpring->setName(i18n("Spring"));
+ wSpring->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "spring"));
+ wSpring->setDescription(i18n("A spring to place between widgets"));
+ addClass(wSpring);
+
+ KFormDesigner::WidgetInfo *wPushButton = new KFormDesigner::WidgetInfo(this);
+ wPushButton->setPixmap("button");
+ wPushButton->setClassName("KPushButton");
+ wPushButton->addAlternateClassName("QPushButton");
+ wPushButton->setIncludeFileName("kpushbutton.h");
+ wPushButton->setName(i18n("Push Button"));
+ wPushButton->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "button"));
+ wPushButton->setDescription(i18n("A simple push button to execute actions"));
+ addClass(wPushButton);
+
+ KFormDesigner::WidgetInfo *wRadioButton = new KFormDesigner::WidgetInfo(this);
+ wRadioButton->setPixmap("radio");
+ wRadioButton->setClassName("QRadioButton");
+ wRadioButton->setName(i18n("Option Button"));
+ wRadioButton->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "optionButton"));
+ wRadioButton->setDescription(i18n("An option button with text or pixmap label"));
+ addClass(wRadioButton);
+
+ KFormDesigner::WidgetInfo *wCheckBox = new KFormDesigner::WidgetInfo(this);
+ wCheckBox->setPixmap("check");
+ wCheckBox->setClassName("QCheckBox");
+ wCheckBox->setName(i18n("Check Box"));
+ wCheckBox->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "checkBox"));
+ wCheckBox->setDescription(i18n("A check box with text or pixmap label"));
+ addClass(wCheckBox);
+
+ KFormDesigner::WidgetInfo *wSpinBox = new KFormDesigner::WidgetInfo(this);
+ wSpinBox->setPixmap("spin");
+ wSpinBox->setClassName("KIntSpinBox");
+ wSpinBox->addAlternateClassName("QSpinBox");
+ wSpinBox->setIncludeFileName("knuminput.h");
+ wSpinBox->setName(i18n("Spin Box"));
+ wSpinBox->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "spinBox"));
+ wSpinBox->setDescription(i18n("A spin box widget"));
+ addClass(wSpinBox);
+
+ KFormDesigner::WidgetInfo *wComboBox = new KFormDesigner::WidgetInfo(this);
+ wComboBox->setPixmap("combo");
+ wComboBox->setClassName("KComboBox");
+ wComboBox->addAlternateClassName("QComboBox");
+ wComboBox->setIncludeFileName("kcombobox.h");
+ wComboBox->setName(i18n("Combo Box"));
+ wComboBox->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "comboBox"));
+ wComboBox->setDescription(i18n("A combo box widget"));
+ addClass(wComboBox);
+
+ KFormDesigner::WidgetInfo *wListBox = new KFormDesigner::WidgetInfo(this);
+ wListBox->setPixmap("listbox");
+ wListBox->setClassName("KListBox");
+ wListBox->addAlternateClassName("QListBox");
+ wListBox->setIncludeFileName("klistbox.h");
+ wListBox->setName(i18n("List Box"));
+ wListBox->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "listBox"));
+ wListBox->setDescription(i18n("A simple list widget"));
+ addClass(wListBox);
+
+ KFormDesigner::WidgetInfo *wTextEdit = new KFormDesigner::WidgetInfo(this);
+ wTextEdit->setPixmap("textedit");
+ wTextEdit->setClassName("KTextEdit");
+ wTextEdit->addAlternateClassName("QTextEdit");
+ wTextEdit->setIncludeFileName("ktextedit.h");
+ wTextEdit->setName(i18n("Text Editor"));
+ wTextEdit->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "textEditor"));
+ wTextEdit->setDescription(i18n("A simple single-page rich text editor"));
+ addClass(wTextEdit);
+
+ KFormDesigner::WidgetInfo *wListView = new KFormDesigner::WidgetInfo(this);
+ wListView->setPixmap("listview");
+ wListView->setClassName("KListView");
+ wListView->addAlternateClassName("QListView");
+ wListView->setIncludeFileName("klistview.h");
+ wListView->setName(i18n("List View"));
+ wListView->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "listView"));
+ wListView->setDescription(i18n("A list (or tree) widget"));
+ addClass(wListView);
+
+ KFormDesigner::WidgetInfo *wSlider = new KFormDesigner::WidgetInfo(this);
+ wSlider->setPixmap("slider");
+ wSlider->setClassName("QSlider");
+ wSlider->setName(i18n("Slider"));
+ wSlider->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "slider"));
+ wSlider->setDescription(i18n("An horizontal slider"));
+ addClass(wSlider);
+
+ KFormDesigner::WidgetInfo *wProgressBar = new KFormDesigner::WidgetInfo(this);
+ wProgressBar->setPixmap("progress");
+ wProgressBar->setClassName("KProgress");
+ wProgressBar->addAlternateClassName("QProgressBar");
+ wProgressBar->setIncludeFileName("kprogress.h");
+ wProgressBar->setName(i18n("Progress Bar"));
+ wProgressBar->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "progressBar"));
+ wProgressBar->setDescription(i18n("A progress indicator widget"));
+ addClass(wProgressBar);
+
+ KFormDesigner::WidgetInfo *wLine = new KFormDesigner::WidgetInfo(this);
+ wLine->setPixmap("line");
+ wLine->setClassName("Line");
+ wLine->setName(i18n("Line"));
+ wLine->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "line"));
+ wLine->setDescription(i18n("A line to be used as a separator"));
+ addClass(wLine);
+
+ KFormDesigner::WidgetInfo *wDate = new KFormDesigner::WidgetInfo(this);
+ wDate->setPixmap("dateedit");
+ wDate->setClassName("KDateWidget");
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,1,9)
+ wDate->addAlternateClassName("QDateEdit");
+ wDate->setIncludeFileName("kdatewidget.h");
+#endif
+ wDate->setName(i18n("Date Widget"));
+ wDate->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "dateWidget"));
+ wDate->setDescription(i18n("A widget to input and display a date"));
+ addClass(wDate);
+
+ KFormDesigner::WidgetInfo *wTime = new KFormDesigner::WidgetInfo(this);
+ wTime->setPixmap("timeedit");
+ wTime->setClassName("KTimeWidget");
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,1,9)
+ wTime->addAlternateClassName("QTimeEdit");
+ wTime->setIncludeFileName("ktimewidget.h");
+#endif
+ wTime->setName(i18n("Time Widget"));
+ wTime->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "timeWidget"));
+ wTime->setDescription(i18n("A widget to input and display a time"));
+ addClass(wTime);
+
+ KFormDesigner::WidgetInfo *wDateTime = new KFormDesigner::WidgetInfo(this);
+ wDateTime->setPixmap("datetimeedit");
+ wDateTime->setClassName("KDateTimeWidget");
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,1,9)
+ wDateTime->addAlternateClassName("QDateTimeEdit");
+ wDateTime->setIncludeFileName("kdatetimewidget.h");
+#endif
+ wDateTime->setName(i18n("Date/Time Widget"));
+ wDateTime->setNamePrefix(
+ i18n("Widget name. This string will be used to name widgets of this class. It must _not_ contain white spaces and non latin1 characters.", "dateTimeWidget"));
+ wDateTime->setDescription(i18n("A widget to input and display a time and a date"));
+ addClass(wDateTime);
+
+ m_propDesc["toggleButton"] = i18n("Toggle");
+ m_propDesc["autoRepeat"] = i18n("Auto Repeat");
+ m_propDesc["autoDefault"] = i18n("Auto Default");
+ m_propDesc["default"] = i18n("Default");
+ m_propDesc["flat"] = i18n("Flat");
+ m_propDesc["echoMode"] =
+ i18n("Echo mode for Line Edit widget eg. Normal, NoEcho, Password","Echo Mode");
+ m_propDesc["indent"] = i18n("Indent");
+ //line
+ m_propDesc["orientation"] = i18n("Orientation");
+ //checkbox
+ m_propDesc["checked"] = i18n("Checked checkbox", "Checked");
+ m_propDesc["tristate"] = i18n("Tristate checkbox", "Tristate");
+
+ //for EchoMode
+ m_propValDesc["Normal"] = i18n("For Echo Mode", "Normal");
+ m_propValDesc["NoEcho"] = i18n("For Echo Mode", "No Echo");
+ m_propValDesc["Password"] = i18n("For Echo Mode", "Password");
+
+ //for spring
+ m_propDesc["sizeType"] = i18n("Size Type");
+
+ //for labels
+ m_propDesc["textFormat"] = i18n("Text Format");
+ m_propValDesc["PlainText"] = i18n("For Text Format", "Plain");
+ m_propValDesc["RichText"] = i18n("For Text Format", "Hypertext");
+ m_propValDesc["AutoText"] = i18n("For Text Format", "Auto");
+ m_propValDesc["LogText"] = i18n("For Text Format", "Log");
+
+ //KTextEdit
+ m_propDesc["tabStopWidth"] = i18n("Tab Stop Width");
+ m_propDesc["tabChangesFocus"] = i18n("Tab Changes Focus");
+ m_propDesc["wrapPolicy"] = i18n("Word Wrap Policy");
+ m_propValDesc["AtWordBoundary"] = i18n("For Word Wrap Policy", "At Word Boundary");
+ m_propValDesc["Anywhere"] = i18n("For Word Wrap Policy", "Anywhere");
+ m_propValDesc["AtWordOrDocumentBoundary"] = i18n("For Word Wrap Policy", "At Word Boundary If Possible");
+ m_propDesc["wordWrap"] = i18n("Word Wrapping");
+ m_propDesc["wrapColumnOrWidth"] = i18n("Word Wrap Position");
+ m_propValDesc["NoWrap"] = i18n("For Word Wrap Position", "None");
+ m_propValDesc["WidgetWidth"] = i18n("For Word Wrap Position", "Widget's Width");
+ m_propValDesc["FixedPixelWidth"] = i18n("For Word Wrap Position", "In Pixels");
+ m_propValDesc["FixedColumnWidth"] = i18n("For Word Wrap Position", "In Columns");
+ m_propDesc["linkUnderline"] = i18n("Links Underlined");
+
+ //internal props
+ setInternalProperty("Line","orientationSelectionPopup","1");
+ setInternalProperty("Line","orientationSelectionPopup:horizontalIcon","line_horizontal");
+ setInternalProperty("Line","orientationSelectionPopup:verticalIcon","line_vertical");
+ setInternalProperty("Line","orientationSelectionPopup:horizontalText",i18n("Insert &Horizontal Line"));
+ setInternalProperty("Line","orientationSelectionPopup:verticalText",i18n("Insert &Vertical Line"));
+ setInternalProperty("Spring","orientationSelectionPopup","1");
+ setInternalProperty("Spring","orientationSelectionPopup:horizontalIcon","spring");
+ setInternalProperty("Spring","orientationSelectionPopup:verticalIcon","spring_vertical");
+ setInternalProperty("Spring","orientationSelectionPopup:horizontalText",i18n("Insert &Horizontal Spring"));
+ setInternalProperty("Spring","orientationSelectionPopup:verticalText",i18n("Insert &Vertical Spring"));
+}
+
+StdWidgetFactory::~StdWidgetFactory()
+{
+}
+
+QWidget*
+StdWidgetFactory::createWidget(const QCString &c, QWidget *p, const char *n,
+ KFormDesigner::Container *container, int options)
+{
+ QWidget *w=0;
+ QString text( container->form()->library()->textForWidgetName(n, c) );
+ const bool designMode = options & KFormDesigner::WidgetFactory::DesignViewMode;
+
+ if(c == "QLabel")
+ w = new QLabel(text, p, n);
+ else if(c == "KexiPictureLabel")
+ w = new KexiPictureLabel(DesktopIcon("image"), p, n);
+
+ else if(c == "KLineEdit")
+ {
+ w = new KLineEdit(p, n);
+ if (designMode)
+ w->setCursor(QCursor(Qt::ArrowCursor));
+ }
+ else if(c == "KPushButton")
+ w = new KPushButton(/*i18n("Button")*/text, p, n);
+
+ else if(c == "QRadioButton")
+ w = new QRadioButton(/*i18n("Radio Button")*/text, p, n);
+
+ else if(c == "QCheckBox")
+ w = new QCheckBox(/*i18n("Check Box")*/text, p, n);
+
+ else if(c == "KIntSpinBox")
+ w = new KIntSpinBox(p, n);
+
+ else if(c == "KComboBox")
+ w = new KComboBox(p, n);
+
+ else if(c == "KListBox")
+ w = new KListBox(p, n);
+
+ else if(c == "KTextEdit")
+ w = new KTextEdit(/*i18n("Enter your text here")*/text, QString::null, p, n);
+
+ else if(c == "KListView")
+ {
+ w = new KListView(p, n);
+ if(container->form()->interactiveMode())
+ ((KListView*)w)->addColumn(i18n("Column 1"));
+ ((KListView*)w)->setRootIsDecorated(true);
+ }
+ else if(c == "QSlider")
+ w = new QSlider(Qt::Horizontal, p, n);
+
+ else if(c == "KProgress")
+ w = new KProgress(p, n);
+
+ else if(c == "KDateWidget")
+ w = new KDateWidget(QDate::currentDate(), p, n);
+
+ else if(c == "KTimeWidget")
+ w = new KTimeWidget(QTime::currentTime(), p, n);
+
+ else if(c == "KDateTimeWidget")
+ w = new KDateTimeWidget(QDateTime::currentDateTime(), p, n);
+
+ else if(c == "Line")
+ w = new Line(options & WidgetFactory::VerticalOrientation ? Line::Vertical : Line::Horizontal, p, n);
+
+ else if(c == "Spring") {
+ w = new Spring(p, n);
+ if (0 == (options & WidgetFactory::AnyOrientation))
+ static_cast<Spring*>(w)->setOrientation(
+ (options & WidgetFactory::VerticalOrientation) ? Qt::Vertical : Qt::Horizontal);
+ }
+
+ if(w)
+ return w;
+
+ kdDebug() << "WARNING :: w == 0 " << endl;
+ return 0;
+}
+
+bool
+StdWidgetFactory::previewWidget(const QCString &classname, QWidget *widget, KFormDesigner::Container *)
+{
+ if(classname == "Spring") {
+ ((Spring*)widget)->setPreviewMode();
+ return true;
+ }
+ return false;
+}
+
+bool
+StdWidgetFactory::createMenuActions(const QCString &classname, QWidget *, QPopupMenu *menu,
+ KFormDesigner::Container *)
+{
+ if((classname == "QLabel") || (classname == "KTextEdit"))
+ {
+ menu->insertItem(SmallIconSet("edit"), i18n("Edit Rich Text"), this, SLOT(editText()));
+ return true;
+ }
+ else if(classname == "KListView")
+ {
+ menu->insertItem(SmallIconSet("edit"), i18n("Edit Listview Contents"), this, SLOT(editListContents()));
+ return true;
+ }
+
+ return false;
+}
+
+bool
+StdWidgetFactory::startEditing(const QCString &classname, QWidget *w, KFormDesigner::Container *container)
+{
+ setWidget(w, container);
+// m_container = container;
+ if(classname == "KLineEdit")
+ {
+ KLineEdit *lineedit = static_cast<KLineEdit*>(w);
+ createEditor(classname, lineedit->text(), lineedit, container, lineedit->geometry(), lineedit->alignment(), true);
+ return true;
+ }
+ else if(classname == "QLabel")
+ {
+ QLabel *label = static_cast<QLabel*>(w);
+ if(label->textFormat() == RichText)
+ {
+ //m_widget = w;
+// setWidget(w, container);
+ editText();
+ }
+ else
+ createEditor(classname, label->text(), label, container, label->geometry(), label->alignment());
+ return true;
+ }
+ else if(classname == "KPushButton")
+ {
+ KPushButton *push = static_cast<KPushButton*>(w);
+ QRect r = w->style().subRect(QStyle::SR_PushButtonContents, w);
+ QRect editorRect = QRect(push->x() + r.x(), push->y() + r.y(), r.width(), r.height());
+ //r.setX(r.x() + 5);
+ //r.setY(r.y() + 5);
+ //r.setWidth(r.width()-10);
+ //r.setHeight(r.height() - 10);
+ createEditor(classname, push->text(), push, container, editorRect, Qt::AlignCenter, false, false, Qt::PaletteButton);
+ return true;
+ }
+ else if(classname == "QRadioButton")
+ {
+ QRadioButton *radio = static_cast<QRadioButton*>(w);
+ QRect r = w->style().subRect(QStyle::SR_RadioButtonContents, w);
+ QRect editorRect = QRect(radio->x() + r.x(), radio->y() + r.y(), r.width(), r.height());
+ createEditor(classname, radio->text(), radio, container, editorRect, Qt::AlignAuto);
+ return true;
+ }
+ else if(classname == "QCheckBox")
+ {
+ QCheckBox *check = static_cast<QCheckBox*>(w);
+ //QRect r(check->geometry());
+ //r.setX(r.x() + 20);
+ QRect r = w->style().subRect(QStyle::SR_CheckBoxContents, w);
+ QRect editorRect = QRect(check->x() + r.x(), check->y() + r.y(), r.width(), r.height());
+ createEditor(classname, check->text(), check, container, editorRect, Qt::AlignAuto);
+ return true;
+ }
+ else if((classname == "KComboBox") || (classname == "KListBox"))
+ {
+ QStringList list;
+ if(classname == "KListBox")
+ {
+ KListBox *listbox = (KListBox*)w;
+ for(uint i=0; i < listbox->count(); i++)
+ list.append(listbox->text(i));
+ }
+ else if(classname == "KComboBox")
+ {
+ KComboBox *combo = (KComboBox*)w;
+ for(int i=0; i < combo->count(); i++)
+ list.append(combo->text(i));
+ }
+
+ if(editList(w, list))
+ {
+ if(classname == "KListBox")
+ {
+ ((KListBox*)w)->clear();
+ ((KListBox*)w)->insertStringList(list);
+ }
+ else if(classname == "KComboBox")
+ {
+ ((KComboBox*)w)->clear();
+ ((KComboBox*)w)->insertStringList(list);
+ }
+ }
+ return true;
+ }
+ else if((classname == "KTextEdit") || (classname == "KDateTimeWidget") || (classname == "KTimeWidget") ||
+ (classname == "KDateWidget") || (classname == "KIntSpinBox")) {
+ disableFilter(w, container);
+ return true;
+ }
+ return false;
+}
+
+bool
+StdWidgetFactory::clearWidgetContent(const QCString &classname, QWidget *w)
+{
+ if(classname == "KLineEdit")
+ ((KLineEdit*)w)->clear();
+ else if(classname == "KListBox")
+ ((KListBox*)w)->clear();
+ else if(classname == "KListView")
+ ((KListView*)w)->clear();
+ else if(classname == "KComboBox")
+ ((KComboBox*)w)->clear();
+ else if(classname == "KTextEdit")
+ ((KTextEdit*)w)->clear();
+ else
+ return false;
+ return true;
+}
+
+bool
+StdWidgetFactory::changeText(const QString &text)
+{
+ QCString n = WidgetFactory::widget()->className();
+ QWidget *w = WidgetFactory::widget();
+ if(n == "KIntSpinBox")
+ ((KIntSpinBox*)w)->setValue(text.toInt());
+ else
+ changeProperty("text", text, m_container->form());
+
+ /* By-hand method not needed as sizeHint() can do that for us
+ QFontMetrics fm = w->fontMetrics();
+ QSize s(fm.width( text ), fm.height());
+ int width;
+ if(n == "QLabel") // labels are resized to fit the text
+ {
+ w->resize(w->sizeHint());
+ WidgetFactory::m_editor->resize(w->size());
+ return;
+ }
+ // and other widgets are just enlarged if needed
+ else if(n == "KPushButton")
+ width = w->style().sizeFromContents( QStyle::CT_PushButton, w, s).width();
+ else if(n == "QCheckBox")
+ width = w->style().sizeFromContents( QStyle::CT_CheckBox, w, s).width();
+ else if(n == "QRadioButton")
+ width = w->style().sizeFromContents( QStyle::CT_RadioButton, w, s).width();
+ else
+ return;
+ int width = w->sizeHint().width();*/
+
+#if 0 //not needed here, size hint is used on creation in InsertWidgetCommand::execute()
+ if(w->width() < width)
+ {
+ w->resize(width, w->height() );
+ //WidgetFactory::m_editor->resize(w->size());
+ }
+#endif
+ return true;
+}
+
+void
+StdWidgetFactory::resizeEditor(QWidget *editor, QWidget *widget, const QCString &classname)
+{
+ QSize s = widget->size();
+ QPoint p = widget->pos();
+ QRect r;
+
+ if(classname == "QRadioButton")
+ {
+ r = widget->style().subRect(QStyle::SR_RadioButtonContents, widget);
+ p += r.topLeft();
+ s.setWidth(r.width());
+ }
+ else if(classname == "QCheckBox")
+ {
+ r = widget->style().subRect(QStyle::SR_CheckBoxContents, widget);
+ p += r.topLeft();
+ s.setWidth(r.width());
+ }
+ else if(classname == "KPushButton")
+ {
+ r = widget->style().subRect(QStyle::SR_PushButtonContents, widget);
+ p += r.topLeft();
+ s = r.size();
+ }
+
+ editor->resize(s);
+ editor->move(p);
+}
+
+bool
+StdWidgetFactory::saveSpecialProperty(const QCString &classname, const QString &name, const QVariant &, QWidget *w, QDomElement &parentNode, QDomDocument &domDoc)
+{
+ if(name == "list_items" && classname == "KComboBox")
+ {
+ KComboBox *combo = (KComboBox*)w;
+ for(int i=0; i < combo->count(); i++)
+ {
+ QDomElement item = domDoc.createElement("item");
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "text", combo->text(i));
+ parentNode.appendChild(item);
+ }
+ return true;
+ }
+ else if(name == "list_items" && classname == "KListBox")
+ {
+ KListBox *listbox = (KListBox*)w;
+ for(uint i=0; i < listbox->count(); i++)
+ {
+ QDomElement item = domDoc.createElement("item");
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "text", listbox->text(i));
+ parentNode.appendChild(item);
+ }
+ return true;
+ }
+ else if(name == "list_contents" && classname == "KListView")
+ {
+ KListView *listview = (KListView*)w;
+ // First we save the columns
+ for(int i = 0; i < listview->columns(); i++)
+ {
+ QDomElement item = domDoc.createElement("column");
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "text", listview->columnText(i));
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "width", listview->columnWidth(i));
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "resizable", listview->header()->isResizeEnabled(i));
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "clickable", listview->header()->isClickEnabled(i));
+ KFormDesigner::FormIO::savePropertyElement(item, domDoc, "property", "fullwidth", listview->header()->isStretchEnabled(i));
+ parentNode.appendChild(item);
+ }
+
+ // Then we save the list view items
+ QListViewItem *item = listview->firstChild();
+ while(item)
+ {
+ saveListItem(item, parentNode, domDoc);
+ item = item->nextSibling();
+ }
+ return true;
+ }
+
+ return false;
+}
+
+void
+StdWidgetFactory::saveListItem(QListViewItem *item, QDomNode &parentNode, QDomDocument &domDoc)
+{
+ QDomElement element = domDoc.createElement("item");
+ parentNode.appendChild(element);
+
+ // We save the text of each column
+ for(int i = 0; i < item->listView()->columns(); i++)
+ KFormDesigner::FormIO::savePropertyElement(element, domDoc, "property", "text", item->text(i));
+
+ // Then we save every sub items
+ QListViewItem *child = item->firstChild();
+ while(child)
+ {
+ saveListItem(child, element, domDoc);
+ child = child->nextSibling();
+ }
+}
+
+bool
+StdWidgetFactory::readSpecialProperty(const QCString &classname, QDomElement &node, QWidget *w, KFormDesigner::ObjectTreeItem *)
+{
+ QString tag = node.tagName();
+ QString name = node.attribute("name");
+
+ if((tag == "item") && (classname == "KComboBox"))
+ {
+ KComboBox *combo = (KComboBox*)w;
+ QVariant val = KFormDesigner::FormIO::readPropertyValue(node.firstChild().firstChild(), w, name);
+ if(val.canCast(QVariant::Pixmap))
+ combo->insertItem(val.toPixmap());
+ else
+ combo->insertItem(val.toString());
+ return true;
+ }
+
+ if((tag == "item") && (classname == "KListBox"))
+ {
+ KListBox *listbox = (KListBox*)w;
+ QVariant val = KFormDesigner::FormIO::readPropertyValue(node.firstChild().firstChild(), w, name);
+ if(val.canCast(QVariant::Pixmap))
+ listbox->insertItem(val.toPixmap());
+ else
+ listbox->insertItem(val.toString());
+ return true;
+ }
+
+ if((tag == "column") && (classname == "KListView"))
+ {
+ KListView *listview = (KListView*)w;
+ int id=0;
+ for(QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling())
+ {
+ QString prop = n.toElement().attribute("name");
+ QVariant val = KFormDesigner::FormIO::readPropertyValue(n.firstChild(), w, name);
+ if(prop == "text")
+ id = listview->addColumn(val.toString());
+ else if(prop == "width")
+ listview->setColumnWidth(id, val.toInt());
+ else if(prop == "resizable")
+ listview->header()->setResizeEnabled(val.toBool(), id);
+ else if(prop == "clickable")
+ listview->header()->setClickEnabled(val.toBool(), id);
+ else if(prop == "fullwidth")
+ listview->header()->setStretchEnabled(val.toBool(), id);
+ }
+ return true;
+ }
+ else if((tag == "item") && (classname == "KListView"))
+ {
+ KListView *listview = (KListView*)w;
+ readListItem(node, 0, listview);
+ return true;
+ }
+
+ return false;
+}
+
+void
+StdWidgetFactory::readListItem(QDomElement &node, QListViewItem *parent, KListView *listview)
+{
+ QListViewItem *item;
+ if(parent)
+ item = new KListViewItem(parent);
+ else
+ item = new KListViewItem(listview);
+
+ // We need to move the item at the end of the list
+ QListViewItem *last;
+ if(parent)
+ last = parent->firstChild();
+ else
+ last = listview->firstChild();
+
+ while(last->nextSibling())
+ last = last->nextSibling();
+ item->moveItem(last);
+
+ int i = 0;
+ for(QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling())
+ {
+ QDomElement childEl = n.toElement();
+ QString prop = childEl.attribute("name");
+ QString tag = childEl.tagName();
+
+ // We read sub items
+ if(tag == "item")
+ {
+ item->setOpen(true);
+ readListItem(childEl, item, listview);
+ }
+ // and column texts
+ else if((tag == "property") && (prop == "text"))
+ {
+ QVariant val = KFormDesigner::FormIO::readPropertyValue(n.firstChild(), listview, "item");
+ item->setText(i, val.toString());
+ i++;
+ }
+ }
+}
+
+bool
+StdWidgetFactory::isPropertyVisibleInternal(const QCString &classname,
+ QWidget *w, const QCString &property, bool isTopLevel)
+{
+ bool ok = true;
+ if(classname == "FormWidgetBase")
+ {
+ if(property == "iconText"
+ || property == "geometry" /*nonsense for toplevel widget*/)
+ return false;
+ }
+ else if (classname == "CustomWidget")
+ {
+ }
+ else if(classname == "Spring")
+ {
+ return Spring::isPropertyVisible(property);
+ }
+ else if(classname == "KexiPictureLabel")
+ {
+ if((property == "text") || (property == "indent") || (property == "textFormat") || (property == "font") || (property == "alignment"))
+ return false;
+ }
+ else if(classname == "QLabel")
+ {
+ if(property == "pixmap")
+ return false;
+ }
+ else if(classname == "KLineEdit")
+ {
+ if(property == "vAlign")
+ return false;
+ }
+ else if(classname == "KTextEdit")
+ ok = m_showAdvancedProperties ||
+ property!="undoDepth"
+ && property!="undoRedoEnabled" //always true!
+ && property!="dragAutoScroll" //always true!
+ && property!="overwriteMode" //always false!
+ && property!="resizePolicy"
+ && property!="autoFormatting" //too complex
+#ifdef KEXI_NO_UNFINISHED
+ && property!="paper"
+#endif
+ ;
+ else if(classname == "Line")
+ {
+ if((property == "frameShape") || (property == "font") || (property == "margin"))
+ return false;
+ }
+ else if(classname=="QCheckBox")
+ {
+ ok = m_showAdvancedProperties || (property != "autoRepeat");
+ }
+ else if(classname=="QRadioButton")
+ {
+ ok = m_showAdvancedProperties || (property != "autoRepeat");
+ }
+ else if(classname=="KPushButton")
+ {
+//! @todo reenable autoDefault / default if the top level window is dialog...
+ ok = m_showAdvancedProperties || (property != "autoDefault" && property != "default");
+ }
+ return ok && WidgetFactory::isPropertyVisibleInternal(classname, w, property, isTopLevel);
+}
+
+QValueList<QCString>
+StdWidgetFactory::autoSaveProperties(const QCString &classname)
+{
+ QValueList<QCString> l;
+
+ if(classname == "QLabel")
+ l << "text";
+ if(classname == "KPushButton")
+ l << "text";
+ else if(classname == "KexiPictureLabel")
+ l << "pixmap";
+ else if(classname == "KComboBox")
+ l << "list_items";
+ else if(classname == "KListBox")
+ l << "list_items";
+ else if(classname == "KListView")
+ l << "list_contents";
+ else if(classname == "Line")
+ l << "orientation";
+ else if(classname == "KTimeWidget")
+ l << "time";
+ else if(classname == "KDateWidget")
+ l << "date";
+ else if(classname == "KDateTimeWidget")
+ l << "dateTime";
+ else if(classname == "Spring")
+ l << "sizeType" << "orientation";
+ else if(classname == "KTextEdit")
+ l << "textFormat" << "text";
+
+ return l;
+}
+
+void
+StdWidgetFactory::editText()
+{
+ QCString classname = widget()->className();
+ QString text;
+ if(classname == "KTextEdit")
+ text = ((KTextEdit*)widget())->text();
+ else if(classname == "QLabel")
+ text = ((QLabel*)widget())->text();
+
+ if(editRichText(widget(), text))
+ {
+ changeProperty("textFormat", "RichText", m_container->form());
+ changeProperty("text", text, m_container->form());
+ }
+
+ if(classname == "QLabel")
+ widget()->resize(widget()->sizeHint());
+}
+
+void
+StdWidgetFactory::editListContents()
+{
+ if(widget()->inherits("QListView"))
+ editListView((QListView*)widget());
+}
+
+void
+StdWidgetFactory::setPropertyOptions( KFormDesigner::WidgetPropertySet& buf, const KFormDesigner::WidgetInfo& info, QWidget *w )
+{
+ Q_UNUSED( info );
+ Q_UNUSED( w );
+
+ if (buf.contains("indent")) {
+ buf["indent"].setOption("min", -1);
+ buf["indent"].setOption("minValueText", i18n("default indent value", "default"));
+ }
+}
+
+KFORMDESIGNER_WIDGET_FACTORY(StdWidgetFactory, stdwidgets)
+
+#include "stdwidgetfactory.moc"
+