From c2be175d8f3e6cc471d53d3918423b3a3eabbc30 Mon Sep 17 00:00:00 2001 From: deva Date: Mon, 1 Sep 2008 15:34:07 +0000 Subject: Added DBWidget. --- client/client.pro | 2 + client/widgetbuilder.cc | 5 ++ client/widgets.h | 1 + client/widgets/dbwidget.cc | 142 +++++++++++++++++++++++++++++++++++++++++++++ client/widgets/dbwidget.h | 56 ++++++++++++++++++ 5 files changed, 206 insertions(+) create mode 100644 client/widgets/dbwidget.cc create mode 100644 client/widgets/dbwidget.h diff --git a/client/client.pro b/client/client.pro index ae1f8e7..bb4711b 100644 --- a/client/client.pro +++ b/client/client.pro @@ -35,6 +35,7 @@ HEADERS += \ widgets/multilist.h \ widgets/textedit.h \ widgets/button.h \ + widgets/dbwidget.h \ widgets/combobox.h \ widgets/listbox.h \ widgets/frame.h \ @@ -60,6 +61,7 @@ SOURCES += \ widgets/textedit.cc \ widgets/button.cc \ widgets/combobox.cc \ + widgets/dbwidget.cc \ widgets/listbox.cc \ widgets/frame.cc \ widgets/groupbox.cc \ diff --git a/client/widgetbuilder.cc b/client/widgetbuilder.cc index e6dd954..99294f6 100644 --- a/client/widgetbuilder.cc +++ b/client/widgetbuilder.cc @@ -88,6 +88,11 @@ QVector< Widget* > widgetBuilder(QDomNode xml_node, QWidget *parent, MacroWindow widget = combobox; //return; // Don't iterate children + } else if(xml_elem.tagName() == "dbwidget") { + DBWidget *dbwidget = new DBWidget(xml_elem, macrowindow); + widgets.push_back(dbwidget); + widget = dbwidget; + } else if(xml_elem.tagName() == "listbox") { ListBox *listbox = new ListBox(xml_elem, macrowindow); widgets.push_back(listbox); diff --git a/client/widgets.h b/client/widgets.h index 18a2856..34434c1 100644 --- a/client/widgets.h +++ b/client/widgets.h @@ -32,6 +32,7 @@ #include "widgets/lineedit.h" #include "widgets/textedit.h" #include "widgets/button.h" +#include "widgets/dbwidget.h" #include "widgets/combobox.h" #include "widgets/listbox.h" #include "widgets/multilist.h" diff --git a/client/widgets/dbwidget.cc b/client/widgets/dbwidget.cc new file mode 100644 index 0000000..cb331c7 --- /dev/null +++ b/client/widgets/dbwidget.cc @@ -0,0 +1,142 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * dbwidget.cc + * + * Mon Sep 1 16:23:54 CEST 2008 + * Copyright 2008 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Pracro is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "dbwidget.h" + +#include +#include +#include +#include + +#include "common.h" + +#include +#include +class ItemModel : public QAbstractItemModel { +public: + Qt::ItemFlags flags ( const QModelIndex & /*index*/ ) const { + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + } + QVariant data ( const QModelIndex & /*index*/, int /*role*/ ) const { + return QString("fisk"); + } + QVariant headerData ( int /*section*/, Qt::Orientation /*orientation*/, int /*role*/ ) const + { + return QString("ęsel"); + } + int rowCount ( const QModelIndex & /*parent*/ ) const + { + return 10; + } + QModelIndex index ( int /*row*/, int /*column*/, const QModelIndex & /*parent*/ ) const + { + return QModelIndex(); + } + QModelIndex parent(const QModelIndex &/*index*/) const + { + return QModelIndex(); + } + int columnCount(const QModelIndex &/*parent*/) const + { + return 1; + } +}; + +ItemModel itemmodel; + + +DBWidget::DBWidget(QDomNode &node, MacroWindow *macrowindow) + : QComboBox(), Widget(node, macrowindow) +{ + setCommonAttributes(this, node); + + setInsertPolicy(QComboBox::InsertAlphabetically); + + // Make empty default selection. + setCurrentIndex(-1); + + QDomElement elem = node.toElement(); + + setEditable(true); + + QCompleter *completer = new QCompleter(&itemmodel, this); + completer->setCaseSensitivity(Qt::CaseInsensitive); + completer->setCompletionMode(QCompleter::PopupCompletion); + setCompleter(completer); + + connect(this, SIGNAL(editTextChanged(QString)), this, SLOT(changed())); + + changed(); +} + +QString DBWidget::getValue() +{ + QString value; + + int idx = currentIndex(); + + if(idx != -1 && itemText(idx) == currentText()) value = itemData(idx).toString(); + else value = currentText(); + + return value; +} + +void DBWidget::setValue(QString value) +{ + int idx = findData(value); + + if(idx != -1) setCurrentIndex(idx); +} + +bool DBWidget::isValid() +{ + return true;//rx.exactMatch(currentText()); +} + +void DBWidget::changed() +{ + QPalette palette; + + if(isValid() && luaValidator()) { + // valid string + palette.setBrush(QPalette::Base, QBrush(QColor(128, 255, 128))); + } else { + // invalid string + palette.setBrush(QPalette::Base, QBrush(QColor(230, 200, 200))); + } + + setPalette(palette); +} + +void DBWidget::enable() +{ + setEnabled(true); +} + +void DBWidget::disable() +{ + setEnabled(false); +} diff --git a/client/widgets/dbwidget.h b/client/widgets/dbwidget.h new file mode 100644 index 0000000..d0105a8 --- /dev/null +++ b/client/widgets/dbwidget.h @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * dbwidget.h + * + * Mon Sep 1 16:23:53 CEST 2008 + * Copyright 2008 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Pracro is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __PRACRO_DBWIDGET_H__ +#define __PRACRO_DBWIDGET_H__ + +#include "widget.h" +#include +#include +#include + +class DBWidget : public QComboBox, public Widget +{ +Q_OBJECT +public: + DBWidget(QDomNode &node, MacroWindow *macrowindow); + + bool isValid(); + + QString getValue(); + void setValue(QString value); + + void enable(); + void disable(); + +public slots: + void changed(); + +private: + +}; + +#endif/*__PRACRO_DBWIDGET_H__*/ -- cgit v1.2.3