summaryrefslogtreecommitdiff
path: root/noncore/apps/tableviewer/ui/tveditview.cpp
Side-by-side diff
Diffstat (limited to 'noncore/apps/tableviewer/ui/tveditview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tableviewer/ui/tveditview.cpp235
1 files changed, 235 insertions, 0 deletions
diff --git a/noncore/apps/tableviewer/ui/tveditview.cpp b/noncore/apps/tableviewer/ui/tveditview.cpp
new file mode 100644
index 0000000..ba2bd06
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tveditview.cpp
@@ -0,0 +1,235 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** 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.
+**
+**********************************************************************/
+
+
+/* The edit view widget. For each key in the DB display an
+ * appropriate edit box, and a 'key' button to change that particular
+ * key information (delete or edit).
+ *
+ * Bottem line should be a 'new key' button. Should be able to scroll
+ * in both directions.
+ */
+
+#include "tveditview.h"
+#include "commonwidgets.h"
+
+#include <qlayout.h>
+#include <qgrid.h>
+#include <qvbox.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qlist.h>
+#include <qlabel.h>
+#include <qscrollview.h>
+#include <qsignalmapper.h>
+
+TVEditView::TVEditView(TableState *s, DataElem *d, QWidget* parent = 0,
+ const char *name = 0, WFlags fl =0) : QDialog(parent, name, true, fl)
+{
+ if (!name)
+ setName("TVEditView");
+
+ QVBoxLayout *layout = new QVBoxLayout(this, 0); /* only so that will resize
+ correctly in other
+ widgets */
+
+ toggles = new QSignalMapper(this);
+ QScrollView *sv = new QScrollView(this, 0);
+ sv->setResizePolicy(QScrollView::AutoOneFit);
+
+ layout->addWidget(sv);
+
+ editDisplay = new QGrid(3, sv, 0);
+ editDisplay->setSpacing(3);
+ sv->addChild(editDisplay);
+
+ connect(toggles, SIGNAL(mapped(int)), this, SLOT(toggleEnabled(int)));
+
+ setData(s, d);
+#ifdef Q_WS_QWS
+ showMaximized();
+#endif
+}
+
+TVEditView::~TVEditView()
+{
+}
+
+/*! set up the widgets in the grid, Set up initial values */
+void TVEditView::setData(TableState *t, DataElem *d)
+{
+
+ /* TODO need to somehow clear old children... a delete of each
+ * child? */
+ keyIds.clear();
+
+ KeyListIterator it(*t->kRep);
+
+ int i = 0;
+ while(it.current()) {
+ if (t->kRep->validIndex(it.currentKey())) {
+ new QLabel(it.current()->name(), editDisplay);
+ keyIds.insert(i, it.currentKey());
+ if (d->hasValidValue(it.currentKey())) {
+ switch(it.current()->type()) {
+ case TVVariant::String: {
+ QLineEdit *edit = new QLineEdit(editDisplay, 0);
+ edit->setText(d->getField(it.currentKey()).toString());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Int: {
+ IntEdit *edit = new IntEdit(editDisplay, 0);
+ edit->setValue(d->getField(it.currentKey()).toInt());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Time: {
+ TimeEdit *edit = new TimeEdit(editDisplay, 0);
+ edit->setTime(d->getField(it.currentKey()).toTime());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Date: {
+ DateEdit *edit = new DateEdit(editDisplay, 0);
+ edit->setDate(d->getField(it.currentKey()).toDate());
+ edits.append(edit);
+ break;
+ }
+ default:
+ edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
+ }
+ QCheckBox *tb = new QCheckBox(editDisplay);
+ tb->setChecked(TRUE);
+ toggles->setMapping(tb, i);
+ connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
+ buttons.append(tb);
+ } else {
+ /* No valid value.. set to null */
+ switch(it.current()->type()) {
+ case TVVariant::String: {
+ QLineEdit *edit = new QLineEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Int: {
+ IntEdit *edit = new IntEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Time: {
+ TimeEdit *edit = new TimeEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Date: {
+ DateEdit *edit = new DateEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ default:
+ edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
+ }
+ QCheckBox *tb = new QCheckBox(editDisplay);
+ tb->setChecked(FALSE);
+ toggles->setMapping(tb, i);
+ connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
+ buttons.append(tb);
+ }
+ i++;
+ }
+ ++it;
+ }
+ num_edits = i;
+}
+
+void TVEditView::toggleEnabled(int i) {
+
+ if(edits.at(i)->isEnabled()) {
+ edits.at(i)->setEnabled(false);
+ buttons.at(i)->setChecked(FALSE);
+ } else {
+ edits.at(i)->setEnabled(true);
+ buttons.at(i)->setChecked(TRUE);
+ }
+}
+
+bool TVEditView::openEditItemDialog(TableState *ts, DataElem *d,
+ QWidget *parent)
+{
+ int i;
+ int keyId;
+
+ if(!ts) return 0;
+ if(!d) return 0;
+ if(!ts->kRep) return 0;
+
+ TVEditView *dlg = new TVEditView(ts, d, parent);
+
+ if (dlg->exec() == QDialog::Accepted ) {
+ /* update the element, basically for each
+ edits, if isEnabled, set Value, else unsetField */
+
+ for(i = 0; i < dlg->num_edits; i++) {
+ keyId = dlg->keyIds[i];
+ if(dlg->edits.at(i)->isEnabled()) {
+ switch(d->getFieldType(keyId)) {
+ case TVVariant::String: {
+ TVVariant value = TVVariant(
+ ((QLineEdit *)dlg->edits.at(i))->text());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Int: {
+ TVVariant value = TVVariant(
+ ((IntEdit *)dlg->edits.at(i))->value());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Time: {
+ TVVariant value = TVVariant(
+ ((TimeEdit *)dlg->edits.at(i))->time());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Date: {
+ TVVariant value = TVVariant(
+ ((DateEdit *)dlg->edits.at(i))->date());
+ d->setField(keyId, value);
+ break;
+ }
+ default:
+ break;
+ }
+ } else {
+ /* unset the field */
+ d->unsetField(keyId);
+ }
+ }
+ delete dlg;
+ return TRUE;
+ }
+
+ return FALSE;
+}