00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
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);
00052
00053
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
00082
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
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
00194
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
00229 d->unsetField(keyId);
00230 }
00231 }
00232 delete dlg;
00233 return TRUE;
00234 }
00235
00236 return FALSE;
00237 }