Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

tveditview.cpp

Go to the documentation of this file.
00001 /**********************************************************************
00002 ** Copyright (C) 2000 Trolltech AS.  All rights reserved.
00003 **
00004 ** This file is part of Qtopia Environment.
00005 **
00006 ** This file may be distributed and/or modified under the terms of the
00007 ** GNU General Public License version 2 as published by the Free Software
00008 ** Foundation and appearing in the file LICENSE.GPL included in the
00009 ** packaging of this file.
00010 **
00011 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00012 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00013 **
00014 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
00015 **
00016 ** Contact info@trolltech.com if any conditions of this licensing are
00017 ** not clear to you.
00018 **
00019 **********************************************************************/
00020 
00021 
00022 /* The edit view widget.  For each key in the DB display an
00023  * appropriate edit box, and a 'key' button to change that particular
00024  * key information (delete or edit).
00025  *
00026  * Bottem line should be a 'new key' button.  Should be able to scroll
00027  * in both directions.
00028  */
00029 
00030 #include "tveditview.h"
00031 #include "commonwidgets.h"
00032 
00033 #include <qlayout.h>
00034 #include <qgrid.h>
00035 #include <qvbox.h>
00036 #include <qlineedit.h>
00037 #include <qcheckbox.h>
00038 #include <qlist.h>
00039 #include <qlabel.h>
00040 #include <qscrollview.h>
00041 #include <qsignalmapper.h>
00042 
00043 #include <qpe/qpeapplication.h>
00044 
00045 TVEditView::TVEditView(TableState *s, DataElem *d, QWidget* parent,
00046         const char *name, WFlags fl ) : QDialog(parent, name, true, fl)
00047 {
00048     if (!name)
00049         setName("TVEditView");
00050 
00051     QVBoxLayout *layout = new QVBoxLayout(this, 0); /* only so that will resize
00052                                                        correctly in other
00053                                                        widgets */
00054 
00055     toggles = new QSignalMapper(this);
00056     QScrollView *sv = new QScrollView(this, 0);
00057     sv->setResizePolicy(QScrollView::AutoOneFit);
00058 
00059     layout->addWidget(sv);
00060 
00061     editDisplay = new QGrid(3, sv, 0);
00062     editDisplay->setSpacing(3);
00063     sv->addChild(editDisplay);
00064 
00065     connect(toggles, SIGNAL(mapped(int)), this, SLOT(toggleEnabled(int)));
00066 
00067     setData(s, d);
00068 #ifdef Q_WS_QWS
00069     QPEApplication::showDialog( this );
00070 #endif
00071 }
00072 
00073 TVEditView::~TVEditView() 
00074 {
00075 }
00076 
00078 void TVEditView::setData(TableState *t, DataElem *d) 
00079 {
00080 
00081     /* TODO need to somehow clear old children... a delete of each
00082      * child? */
00083     keyIds.clear();
00084 
00085     KeyListIterator it(*t->kRep);
00086 
00087     int i = 0;
00088     while(it.current()) {
00089                 if (t->kRep->validIndex(it.currentKey())) {
00090                         new QLabel(it.current()->name(), editDisplay);
00091                         keyIds.insert(i, it.currentKey());
00092                         if (d->hasValidValue(it.currentKey())) {
00093                                 switch(it.current()->type()) {
00094                                         case TVVariant::String: {
00095                                                 QLineEdit *edit = new QLineEdit(editDisplay, 0);
00096                                                 edit->setText(d->getField(it.currentKey()).toString());
00097                                                 edits.append(edit);
00098                                                 break;
00099                                         }
00100                                         case TVVariant::Int:  {
00101                                             IntEdit *edit = new IntEdit(editDisplay, 0);
00102                                             edit->setValue(d->getField(it.currentKey()).toInt());
00103                                             edits.append(edit);
00104                                                 break;
00105                                         }
00106                                 case TVVariant::Time: {
00107                                                 TimeEdit *edit = new TimeEdit(editDisplay, 0);
00108                                                 edit->setTime(d->getField(it.currentKey()).toTime());
00109                                                 edits.append(edit);
00110                                                 break;
00111                                         }
00112                                 case TVVariant::Date: {
00113                                                 DateEdit *edit = new DateEdit(editDisplay, 0);
00114                                                 edit->setDate(d->getField(it.currentKey()).toDate());
00115                                                 edits.append(edit);
00116                                                 break;
00117                                         }
00118                                         default:
00119                                                 edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
00120                                 }
00121                                 QCheckBox *tb = new QCheckBox(editDisplay);
00122                                 tb->setChecked(TRUE);
00123                                 toggles->setMapping(tb, i);
00124                                 connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
00125                                 buttons.append(tb);
00126                         } else {
00127                                 /* No valid value.. set to null */
00128                                 switch(it.current()->type()) {
00129                                         case TVVariant::String: {
00130                                                 QLineEdit *edit = new QLineEdit(editDisplay, 0);
00131                                                 edit->setEnabled(false);
00132                                                 edits.append(edit);
00133                                                 break;
00134                                         }
00135                                         case TVVariant::Int:  {
00136                                                 IntEdit *edit = new IntEdit(editDisplay, 0);
00137                                                 edit->setEnabled(false);
00138                                                 edits.append(edit);
00139                                                 break;
00140                                         }
00141                                         case TVVariant::Time: {
00142                                                 TimeEdit *edit = new TimeEdit(editDisplay, 0);
00143                                                 edit->setEnabled(false);
00144                                                 edits.append(edit);
00145                                                 break;
00146                                         }
00147                                         case TVVariant::Date: {
00148                                                 DateEdit *edit = new DateEdit(editDisplay, 0);
00149                                                 edit->setEnabled(false);
00150                                                 edits.append(edit);
00151                                                 break;
00152                                         }
00153                                         default:
00154                                                 edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
00155                                 }
00156                                 QCheckBox *tb = new QCheckBox(editDisplay);
00157                                 tb->setChecked(FALSE);
00158                                 toggles->setMapping(tb, i);
00159                                 connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
00160                                 buttons.append(tb);
00161                         }
00162                         i++;
00163                 }
00164         ++it;
00165     }
00166         num_edits = i;
00167 }
00168 
00169 void TVEditView::toggleEnabled(int i) {
00170 
00171     if(edits.at(i)->isEnabled()) {
00172         edits.at(i)->setEnabled(false);
00173         buttons.at(i)->setChecked(FALSE);
00174     } else {
00175         edits.at(i)->setEnabled(true);
00176         buttons.at(i)->setChecked(TRUE);
00177     }
00178 }
00179 
00180 bool TVEditView::openEditItemDialog(TableState *ts, DataElem *d, 
00181                                         QWidget *parent)
00182 {
00183     int i;
00184     int keyId;
00185 
00186     if(!ts) return 0;
00187     if(!d) return 0;
00188     if(!ts->kRep) return 0;
00189 
00190     TVEditView *dlg = new TVEditView(ts, d, parent);
00191 
00192     if (dlg->exec() == QDialog::Accepted ) {
00193         /* update the element, basically for each
00194            edits, if isEnabled, set Value, else unsetField */
00195 
00196         for(i = 0; i < dlg->num_edits; i++) {
00197             keyId = dlg->keyIds[i];
00198             if(dlg->edits.at(i)->isEnabled()) {
00199                 switch(d->getFieldType(keyId)) {
00200                     case TVVariant::String: {
00201                         TVVariant value = TVVariant(
00202                                 ((QLineEdit *)dlg->edits.at(i))->text());
00203                         d->setField(keyId, value);
00204                         break;
00205                     }
00206                     case TVVariant::Int:  {
00207                         TVVariant value = TVVariant(
00208                                 ((IntEdit *)dlg->edits.at(i))->value());
00209                         d->setField(keyId, value);
00210                         break;
00211                     }
00212                     case TVVariant::Time: {
00213                         TVVariant value = TVVariant(
00214                                 ((TimeEdit *)dlg->edits.at(i))->time());
00215                         d->setField(keyId, value);
00216                         break;
00217                     }
00218                     case TVVariant::Date: {
00219                         TVVariant value = TVVariant(
00220                                 ((DateEdit *)dlg->edits.at(i))->date());
00221                         d->setField(keyId, value);
00222                         break;
00223                     }
00224                     default:
00225                         break;
00226                 }
00227             } else {
00228                 /* unset the field */
00229                 d->unsetField(keyId);
00230             }
00231         }
00232         delete dlg;
00233         return TRUE;
00234     }
00235 
00236     return FALSE;
00237 }

Generated on Sat Nov 5 16:17:08 2005 for OPIE by  doxygen 1.4.2