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 "wdbfield.h"
00040
00041 void eDBField::init()
00042 {
00043 eName->clear();
00044 onames.clear();
00045 oids.clear();
00046 }
00047
00048
00049
00050 void eDBField::setData( QWidget *o, aCfg *md )
00051 {
00052
00053 if ( o ) {
00054 if ( o->className() != QString("wDBField") || !md ) {
00055 reject();
00056 return;
00057 }
00058 }
00059 else {
00060 reject();
00061 return;
00062 }
00063 int w=0, d=0, idx=0;
00064 unsigned int i;
00065 long oid, widgetId, fieldId;
00066 QString pn;
00067 aWidget *widget;
00068 wDBField *field = (wDBField*)o;
00069 QWidget *pWidget = field->parentWidget();
00070
00071 while ( pWidget ) {
00072 pn = "";
00073 pn = pWidget->className();
00074 if ( pn == QString("wCatalogue") || pn == QString("wDocument") ) break;
00075 pWidget = pWidget->parentWidget();
00076 }
00077 if ( pn == QString("wCatalogue") ) widget = (wCatalogue*)pWidget; else
00078 if ( pn == QString("wDocument") ) widget = (wDocument*)pWidget; else
00079 return;
00080
00081 widgetId = widget->getId();
00082
00083 if ( widgetId ) widget->setMDObject( md->find( widgetId ) );
00084
00085
00086
00087
00088
00089 QStringList tlist = md->types( md_field, widget->getMDObject() );
00090 otypes.clear();
00091 eType->clear();
00092 for ( QStringList::Iterator it = tlist.begin(); it != tlist.end(); ++it ) {
00093 otypes.append( (*it).section( "\t", 0, 0 ) );
00094 eName->insertItem( (*it).section("\t", 1, 1 ), idx++ );
00095 }
00096 for ( i = 0 ; i < otypes.count(); i++ ) {
00097 oid = 0;
00098 if( otypes[i][0] == 'O' ) {
00099 sscanf( (const char *)otypes[ i ], "O %d", &oid );
00100 if ( oid == fieldId ) {
00101 eName->setCurrentItem( i );
00102 break;
00103 }
00104 }
00105 }
00106 }
00107
00108
00109 void eDBField::getData( QWidget *o )
00110 {
00111
00112 if ( !o ) return;
00113 if ( o->className() != QString("wDBField") ) return;
00114 wDBField *f = ( wDBField*) o;
00115
00116 int idx=eName->currentItem();
00117 long oid = 0;
00118 if (f) {
00119 if( otypes[idx][0] == 'O' ) {
00120 sscanf( (const char *)otypes[ idx ], "O %d", &oid );
00121
00122 }
00123 }
00124 }
00125
00126
00127 void eDBField::namechanged( const QString &s )
00128 {
00129 int idx=eName->currentItem();
00130
00131 selotype=otypes[idx];
00132 seloid=oids[idx];
00133 eType->setText(onames[idx]);
00134 }