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
00031
00032
00033
00034
00035
00036
00037
00038 #include "acfg.h"
00039 #include <stdlib.h>
00040
00041 void eField::init()
00042 {
00043
00044
00045
00046 }
00047
00048
00049
00050 void eField::setData( QWidget *o, aCfg *cfg )
00051 {
00052 md = cfg;
00053 if(!o)
00054 {
00055 reject();
00056 return;
00057 }
00058 if ( o->className() != QString("wField") || !md ) {
00059 reject();
00060 return;
00061 }
00062 wField *f = ( wField*) o;
00063 QString ts = f->getFieldType();
00064
00065 char t=' ';
00066 int w=0, d=0, oid, idx=0;
00067 unsigned int i;
00068
00069
00070 otypes.clear();
00071 eType->clear();
00072
00073 QStringList tlist = md->types();
00074 otypes.clear();
00075 eType->clear();
00076 for ( QStringList::Iterator it = tlist.begin(); it != tlist.end(); ++it ) {
00077 otypes.append( (*it).section( "\t", 0, 0 ) );
00078 eType->insertItem( (*it).section("\t", 1, 1 ), idx++ );
00079 }
00080 if ( !ts.isEmpty() ) {
00081 sscanf( ts, "%c %d %d", &t, &w, &d );
00082 } else {
00083 t = 'N';
00084 w = 10;
00085 }
00086 if ( t=='O' ) {
00087 for( i = 0 ; i < otypes.count(); i++ ) {
00088 if( otypes[i][0] == 'O' ) {
00089 sscanf( (const char *)otypes[ i ], "O %d", &oid );
00090 if ( oid == w ) {
00091 eType->setCurrentItem( i );
00092 break;
00093 }
00094 }
00095 }
00096 } else {
00097 eWidth->setValue( w );
00098 eDec->setValue( d );
00099 if ( t == ' ' ) eType->setCurrentItem( 0 );
00100 if ( t == 'N' ) eType->setCurrentItem( 1 );
00101 if ( t == 'C' ) eType->setCurrentItem( 2 );
00102 if ( t == 'D' ) eType->setCurrentItem( 3 );
00103 if ( t == 'B' ) eType->setCurrentItem( 4 );
00104 }
00105 typeSelect( eType->currentItem() );
00106 }
00107
00108
00109 void eField::getData( QWidget *o )
00110 {
00111
00112 if ( !o ) return;
00113 if ( o->className() != QString("wField") ) return;
00114 wField *f = ( wField*) o;
00115 wField::tEditorType type;
00116 char ntype[40]="";
00117 int idx=eType->currentItem();
00118
00119 if (f) {
00120
00121 sprintf(ntype, (const char *) otypes[idx], eWidth->value(), eDec->value());
00122 f->setFieldType(ntype);
00123 if(otypes[idx][0]==' ') type = wField::Unknown;
00124 if(otypes[idx][0]=='N') type = wField::Numberic;
00125 if(otypes[idx][0]=='C') type = wField::String;
00126 if(otypes[idx][0]=='D') type = wField::Date;
00127 if(otypes[idx][0]=='B') type = wField::Boolean;
00128 if(otypes[idx][0]=='O')
00129 {
00130 QString tmp = otypes[idx].section(' ',1,1);
00131 long tid = atol(tmp);
00132 aCfgItem item = md->find(tid);
00133 if(!item.isNull())
00134 {
00135
00136 tmp = md->objClass(item);
00137 if(tmp == md_catalogue)
00138 type = wField::Catalogue;
00139 if(tmp == md_document)
00140 type = wField::Document;
00141 }
00142 }
00143 f->setEditorType(type);
00144 }
00145 }
00146
00147 void eField::typechanged(const QString &s )
00148 {
00149 }
00150
00151 void eField::typeSelect( int idx )
00152 {
00153 bool w = false, d = false;
00154 if ( otypes[ idx ][0] == 'N' ){
00155 w = true;
00156 d = true;
00157
00158 } else
00159 if ( otypes[ idx ][0] == 'C' ){
00160 w = true;
00161
00162 }
00163 eWidth->setShown( w );
00164 tWidth->setShown( w );
00165 eDec->setShown( d );
00166 tDec->setShown( d );
00167 }