libsax 7.2

pointers.cpp

00001 /**************
00002 PROJECT       : SaX2 - library interface
00003               :
00004 AUTHOR        : Marcus Schäfer <ms@suse.de>
00005               :
00006 BELONGS TO    : SaX2 - SuSE advanced X11 configuration 
00007               : 
00008               :
00009 DESCRIPTION   : native C++ class library to access SaX2
00010               : functionality. Easy to use interface for
00011               : //.../
00012               : - importing/exporting X11 configurations
00013               : - modifying/creating X11 configurations 
00014               : ---
00015               :
00016               :
00017 STATUS        : Status: Development
00018 **************/
00019 #include "pointers.h"
00020 
00021 namespace SaX {
00022 //====================================
00023 // Constructor...
00024 //------------------------------------
00025 SaXManipulatePointers::SaXManipulatePointers (SaXImport* in, int ptr) {
00026         // .../
00031         // ----
00032         if ( ! in ) {
00033                 excNullPointerArgument ();
00034                 qError (errorString(),EXC_NULLPOINTERARGUMENT);
00035                 return;
00036         }
00037         if ( in->getSectionID() != SAX_POINTERS ) {
00038                 excPointerImportBindFailed ( in->getSectionID() );
00039                 qError (errorString(),EXC_POINTERIMPORTBINDFAILED);
00040                 return;
00041         }
00042         mImport  = in;
00043         mPointer = ptr;
00044         mImport -> setID ( mPointer );
00045 }
00046 
00047 //====================================
00048 // set card ID
00049 //------------------------------------
00050 bool SaXManipulatePointers::selectPointer (int ptr) {
00051         // .../
00054         // ----
00055         if (! mImport) {
00056                 return false;
00057         }
00058         if (mImport -> setID ( ptr )) { 
00059                 mPointer = ptr;
00060                 return true;
00061         }
00062         return false;
00063 }
00064 
00065 //====================================
00066 // setDriver
00067 //------------------------------------
00068 void SaXManipulatePointers::setDriver (const QString& driver) {
00069         // .../
00072         // ----
00073         if (! mImport) {
00074                 return;
00075         }
00076         mImport -> setItem ( "Driver",driver );
00077 }
00078 
00079 //====================================
00080 // setDevice
00081 //------------------------------------
00082 void SaXManipulatePointers::setDevice (const QString& device) {
00083         // .../
00088         // ----
00089         if (! mImport) {
00090                 return;
00091         }
00092         mImport -> setItem ( "Device",device );
00093 }
00094 
00095 //====================================
00096 // setProtocol
00097 //------------------------------------
00098 void SaXManipulatePointers::setProtocol (const QString& protocol) {
00099         // .../
00102         // ----
00103         if (! mImport) {
00104                 return;
00105         }
00106         mImport -> setItem ( "Protocol",protocol );
00107 }
00108 
00109 //====================================
00110 // setVendor
00111 //------------------------------------
00112 void SaXManipulatePointers::setNamePair (
00113         const QString& vendor , const QString& name
00114 ) {
00115         // .../
00121         // ----
00122         if (! mImport) {
00123                 return;
00124         }
00125         QString val;
00126         QTextOStream (&val) << vendor << ";" << name;
00127         mImport -> setItem ( "Name",val );
00128 }
00129 
00130 //====================================
00131 // setOption
00132 //------------------------------------
00133 void SaXManipulatePointers::setOption (
00134         const QString& keyword, const QString& value
00135 ) {
00136         // .../
00141         // ----
00142         if (! mImport) {
00143                 return;
00144         }
00145         QString key (keyword);
00146         QString val (value);
00147         if (value.isNull()) {
00148                 //====================================
00149                 // set bool option
00150                 //------------------------------------
00151                 mImport->setItem ("Option",key);
00152         } else {
00153                 //====================================
00154                 // set value added option
00155                 //------------------------------------
00156                 mImport->setRawItem ("RawOption",
00157                         "\""+key+"\"","\""+val+"\""
00158                 );
00159         }
00160 }
00161 
00162 //====================================
00163 // addOption
00164 //------------------------------------
00165 void SaXManipulatePointers::addOption (
00166         const QString& keyword, const QString& value
00167 ) {
00168         // .../
00173         // ----
00174         if (! mImport) {
00175                 return;
00176         }
00177         QString key (keyword);
00178         QString val (value);
00179         if ( value.isNull()) {
00180                 //====================================
00181                 // add bool option
00182                 //------------------------------------
00183                 mImport->addItem ("Option",key);
00184         } else {
00185                 //====================================
00186                 // add value added option
00187                 //------------------------------------
00188                 mImport->addRawItem ("RawOption",
00189                         "\""+key+"\"","\""+val+"\""
00190                 );
00191         }
00192 }
00193 
00194 //====================================
00195 // removeOption
00196 //------------------------------------
00197 void SaXManipulatePointers::removeOption (const QString& value) {
00198         // .../
00203         // ----
00204         if (! mImport) {
00205                 return;
00206         }
00207         QString val (value);
00208         QString str = mImport->getItem("RawOption");
00209         if (! str.contains ("\""+val+"\"")) {
00210                 //====================================
00211                 // remove bool option
00212                 //------------------------------------
00213                 mImport->removeItem ("Option",val);
00214         } else {
00215                 //====================================
00216                 // remove value added option
00217                 //------------------------------------
00218                 mImport->removeRawItem ("RawOption","\""+val+"\"");
00219         }
00220 }
00221 
00222 //====================================
00223 // getDevice
00224 //------------------------------------
00225 QString SaXManipulatePointers::getDevice ( void ) {
00226         // .../
00230         // ----
00231         if (! mImport) {
00232                 QString* nope = new QString;
00233                 return *nope;
00234         }
00235         return mImport -> getItem ("Device");
00236 }
00237 
00238 //====================================
00239 // getDriver
00240 //------------------------------------
00241 QString SaXManipulatePointers::getDriver ( void ) {
00242         // .../
00244         // ----
00245         if (! mImport) {
00246                 QString* nope = new QString;
00247                 return *nope;
00248         }
00249         return mImport -> getItem ("Driver");
00250 }
00251 
00252 //====================================
00253 // getProtocol
00254 //------------------------------------
00255 QString SaXManipulatePointers::getProtocol ( void ) {
00256         // .../
00258         // ----
00259         if (! mImport) {
00260                 QString* nope = new QString;
00261                 return *nope;
00262         }
00263         return mImport -> getItem ("Protocol");
00264 }
00265 
00266 //====================================
00267 // getOptions
00268 //------------------------------------
00269 Q3Dict<QString> SaXManipulatePointers::getOptions (void) {
00270         // .../
00276         // ----
00277         if (! mImport) {
00278                 Q3Dict<QString>* nope = new Q3Dict<QString>;
00279                 return *nope;
00280         }
00281         Q3Dict<QString> result;
00282         QString stdOptions = mImport -> getItem ("Option");
00283         QString rawOptions = mImport -> getItem ("RawOption");
00284         //====================================
00285         // handle bool options
00286         //------------------------------------
00287         QStringList stdlist = QStringList::split ( ",", stdOptions );
00288         for ( QStringList::Iterator
00289                 in = stdlist.begin(); in != stdlist.end(); ++in
00290         ) {
00291                 QString item (*in);
00292                 result.insert (item,new QString);
00293         }
00294         //====================================
00295         // handle value added options
00296         //------------------------------------
00297         QStringList rawlist = QStringList::split ( ",", rawOptions );
00298         for ( QStringList::Iterator
00299                 in = rawlist.begin(); in != rawlist.end(); ++in
00300         ) {
00301                 QString item (*in);
00302                 QRegExp itemExp ("\"(.*)\" \"(.*)\"");
00303                 int pos = itemExp.search (item);
00304                 if (pos >= 0) {
00305                         QString key = itemExp.cap(1);
00306                         QString* val = new QString (itemExp.cap(2));
00307                         result.insert (key,val);
00308                 }
00309         }
00310         return result;
00311 }
00312 
00313 //====================================
00314 // Constructor...
00315 //------------------------------------
00316 SaXManipulateMice::SaXManipulateMice (
00317         SaXImport* in, int ptr
00318 ) : SaXManipulateMiceIF (in,ptr) {
00319         // .../
00322         // ----
00323         mCDBMice = 0;
00324 }
00325 
00326 //====================================
00327 // enableWheelEmulation
00328 //------------------------------------
00329 void SaXManipulateMice::enableWheelEmulation (int btn) {
00330         // .../
00334         // ----
00335         if (! mImport) {
00336                 return;
00337         }
00338         QString button;
00339         button.sprintf ("%d",btn);
00340         mImport -> setItem ("EmulateWheel",button);
00341 }
00342 
00343 //====================================
00344 // disableWheelEmulation
00345 //------------------------------------
00346 void SaXManipulateMice::disableWheelEmulation (void) {
00347         // .../
00351         // ----
00352         if (! mImport) {
00353                 return;
00354         }
00355         mImport -> setItem ("EmulateWheel","");
00356 }
00357 
00358 //====================================
00359 // enable3ButtonEmulation
00360 //------------------------------------
00361 void SaXManipulateMice::enable3ButtonEmulation (void) {
00362         // .../
00366         // ----
00367         if (! mImport) {
00368                 return;
00369         }
00370         mImport -> setItem ("Emulate3Buttons","on");
00371 }
00372 
00373 //====================================
00374 // disable3ButtonEmulation
00375 //------------------------------------
00376 void SaXManipulateMice::disable3ButtonEmulation (void) {
00377         // .../
00379         // ----
00380         if (! mImport) {
00381                 return;
00382         }
00383         mImport -> setItem ("Emulate3Buttons","");
00384 }
00385 
00386 //====================================
00387 // enableWheel
00388 //------------------------------------
00389 void SaXManipulateMice::enableWheel  (void) {
00390         // .../
00395         // ----
00396         if (! mImport) {
00397                 return;
00398         }
00399         mImport -> setItem ("ZAxisMapping","4 5");
00400 }
00401 
00402 //====================================
00403 // enableWheel
00404 //------------------------------------
00405 void SaXManipulateMice::enableWheelOn  (int b1, int b2) {
00406         // .../
00409         // ----
00410         if (! mImport) {
00411                 return;
00412         }
00413         QString val;
00414         QTextOStream (&val) << b1 << " " << b2;
00415         mImport -> setItem ("ZAxisMapping",val);
00416 }
00417 
00418 //====================================
00419 // enableXAxisInvertation
00420 //------------------------------------
00421 void SaXManipulateMice::enableXAxisInvertation (void) {
00422         // .../
00425         // ----
00426         if (! mImport) {
00427                 return;
00428         }
00429         mImport -> setItem ("InvX","on");
00430 }
00431                                               
00432 //====================================
00433 // enableYAxisInvertation
00434 //------------------------------------
00435 void SaXManipulateMice::enableYAxisInvertation (void) {
00436         // .../
00439         // ----                                               
00440         if (! mImport) {                                       
00441                 return;                                              
00442         }
00443         mImport -> setItem ("InvY","on");
00444 }                   
00445 
00446 //====================================
00447 // disableWheel
00448 //------------------------------------
00449 void SaXManipulateMice::disableWheel (void) {
00450         // .../
00453         // ----
00454         if (! mImport) {
00455                 return;
00456         }
00457         mImport -> setItem ("ZAxisMapping","");
00458 }
00459 
00460 //====================================
00461 // disableXAxisInvertation
00462 //------------------------------------
00463 void SaXManipulateMice::disableXAxisInvertation (void) {
00464         // .../
00467         // ----
00468         if (! mImport) {
00469                 return;
00470         }
00471         mImport -> setItem ("InvX","");
00472 }
00473 
00474 //====================================
00475 // disableYAxisInvertation
00476 //------------------------------------
00477 void SaXManipulateMice::disableYAxisInvertation (void) {
00478         // .../
00481         // ----
00482         if (! mImport) {
00483                 return;
00484         }
00485         mImport -> setItem ("InvY","");
00486 }
00487 
00488 //====================================
00489 // enableLeftHandMapping
00490 //------------------------------------
00491 void SaXManipulateMice::enableLeftHandMapping  ( void ) {
00492         // .../
00495         // ----
00496         if (! mImport) {
00497                 return;
00498         }
00499         mImport -> setItem ("ButtonMapping","3 2 1");
00500 }
00501 
00502 //====================================
00503 // disableLeftHandMapping
00504 //------------------------------------
00505 void SaXManipulateMice::disableLeftHandMapping ( void ) {
00506         // .../
00509         // ----
00510         if (! mImport) {
00511                 return;
00512         }
00513         mImport -> setItem ("ButtonMapping","");
00514 }
00515 
00516 //====================================
00517 // isMouse
00518 //------------------------------------
00519 bool SaXManipulateMice::isMouse (void) {
00520         // .../
00525         // ----
00526         if (! mImport) {
00527                 return false;
00528         }
00529         QString driver = getDriver();
00530         QString fashion = mImport -> getItem ("InputFashion");
00531         if ((driver == "mouse") || (driver == "evdev")) {
00532                 if (fashion != "MultiSeat") {
00533                         return true;
00534                 }
00535                 return false;
00536         }
00537         if ((fashion != "Tablet")     &&
00538                 (fashion != "Pen")        &&
00539                 (fashion != "Eraser")     &&
00540                 (fashion != "Touch")      &&
00541                 (fashion != "Pad")        &&
00542                 (fashion != "VNC")        &&
00543                 (fashion != "Keyboard")   &&
00544                 (fashion != "Touchpanel")
00545         ) {
00546                 return true;
00547         }
00548         return false;
00549 }
00550 
00551 //====================================
00552 // isWheelEnabled
00553 //------------------------------------
00554 bool SaXManipulateMice::isWheelEnabled (void) {
00555         // .../
00558         // ----
00559         if (! mImport) {
00560                 return false;
00561         }
00562         QString zaxis = mImport -> getItem ("ZAxisMapping");
00563         if (! zaxis.isEmpty()) {
00564                 return true;
00565         }
00566         return false;
00567 }
00568 
00569 //====================================
00570 // isLeftHandEnabled
00571 //------------------------------------
00572 bool SaXManipulateMice::isLeftHandEnabled (void) {
00573         // .../
00576         // ----
00577         if (! mImport) {
00578                 return false;
00579         }
00580         QString mapping = mImport -> getItem ("ButtonMapping");
00581         if (mapping.contains("3 2 1")) {
00582                 return true;
00583         }
00584         return false;
00585 }
00586 
00587 //====================================
00588 // isXAxisInverted
00589 //------------------------------------
00590 bool SaXManipulateMice::isXAxisInverted (void) {
00591         // .../
00594         // ----
00595         if (! mImport) {
00596                 return false;
00597         }
00598         QString xaxis = mImport -> getItem ("InvX");
00599         if (xaxis == "on") {                      
00600                 return true; 
00601         }                                                            
00602         return false;
00603 }
00604 
00605 //====================================
00606 // isYAxisInverted
00607 //------------------------------------
00608 bool SaXManipulateMice::isYAxisInverted (void) {
00609         // .../
00612         // ----
00613         if (! mImport) {
00614                 return false;                 
00615         }
00616         QString yaxis = mImport -> getItem ("InvY");
00617         if (yaxis == "on") {  
00618                 return true;                                   
00619         }
00620         return false;
00621 }
00622 
00623 //====================================
00624 // isWheelEmulated
00625 //------------------------------------
00626 bool SaXManipulateMice::isWheelEmulated (void) {
00627         // .../
00630         // ----
00631         if (! mImport) {
00632                 return false;
00633         }
00634         QString emulate = mImport -> getItem ("EmulateWheel");
00635         if (! emulate.isEmpty()) {
00636                 return true;
00637         }
00638         return false;
00639 }
00640 
00641 //====================================
00642 // isButtonEmulated
00643 //------------------------------------
00644 bool SaXManipulateMice::isButtonEmulated (void) {
00645         // .../
00648         // ----
00649         if (! mImport) {
00650                 return false;
00651         }
00652         QString emulate = mImport -> getItem ("Emulate3Buttons");
00653         if (emulate == "on") {
00654                 return true;
00655         }
00656         return false;
00657 }
00658 
00659 //====================================
00660 // getWheelEmulatedButton
00661 //------------------------------------
00662 int SaXManipulateMice::getWheelEmulatedButton (void) {
00663         // .../
00667         // ----
00668         if (! isWheelEmulated()) {
00669                 return -1;
00670         }
00671         int btn = mImport -> getItem ("EmulateWheel").toInt();
00672         return btn;
00673 }
00674 
00675 //====================================
00676 // getMouseList
00677 //------------------------------------
00678 QList<QString> SaXManipulateMice::getMouseList (void) {
00679         // .../
00683         // ----
00684         mCDBMouseList.clear();
00685         if ( ! mCDBMice ) {
00686                 mCDBMice = new SaXProcess ();
00687                 mCDBMice -> start (CDB_POINTERS);
00688         }
00689         Q3Dict< Q3Dict<QString> > CDBData = mCDBMice -> getTablePointerCDB ();
00690         Q3DictIterator< Q3Dict<QString> > it (CDBData);
00691         for (; it.current(); ++it) {
00692                 mCDBMouseList.append (QString (it.currentKey()));
00693         }
00694         return mCDBMouseList;
00695 }
00696 
00697 //====================================
00698 // getMouseVendorList
00699 //------------------------------------
00700 QList<QString> SaXManipulateMice::getMouseVendorList (void) {
00701         // .../
00704         // ----
00705         QList<QString> mouseList = getMouseList();
00706         mCDBMouseList.clear();
00707         QString it;
00708         foreach (it,mouseList) {
00709                 QStringList vnlist = QStringList::split ( ":", it );
00710                 QString* vendorName = new QString (vnlist.first());
00711                 int hasVendor = false;
00712                 QString io;
00713                 foreach (io,mCDBMouseList) {
00714                 if ( io == *vendorName ) {
00715                         hasVendor = true;
00716                         break;
00717                 }
00718                 }
00719                 if (! hasVendor ) {
00720                         mCDBMouseList.append ( *vendorName );
00721                 }
00722         }
00723         return mCDBMouseList;
00724 }
00725 
00726 //====================================
00727 // getMouseModelList
00728 //------------------------------------
00729 QList<QString> SaXManipulateMice::getMouseModelList (
00730         const QString& vendor
00731 ) {
00732         // .../
00735         // ----
00736         QList<QString> mouseList = getMouseList();
00737         mCDBMouseList.clear();
00738         QString it;
00739         foreach (it,mouseList) {
00740                 QStringList vnlist = QStringList::split ( ":", it );
00741                 QString vendorName = vnlist.first();
00742                 QString* modelName = new QString (vnlist.last());
00743                 if ( vendorName == vendor ) {
00744                         mCDBMouseList.append ( *modelName );
00745                 }
00746         }
00747         return mCDBMouseList;
00748 }
00749 
00750 //====================================
00751 // setMouse
00752 //------------------------------------
00753 void SaXManipulateMice::setMouse ( const QString& group ) {
00754         // .../
00758         // ----
00759         if ( ! mCDBMice ) {
00760                 mCDBMice = new SaXProcess ();
00761                 mCDBMice -> start (CDB_POINTERS);
00762         }
00763         Q3PtrList< Q3Dict<QString> > data;
00764         data = mCDBMice -> getTablePointerCDB_DATA (
00765                 group
00766         );
00767         // .../
00768         // move the data record to the correct position
00769         // refering to the section ID -> mPointer
00770         // ----
00771         Q3Dict<QString>* record = data.take(0);
00772         for (int n=0;n < mPointer;n++) {
00773                 data.append(new Q3Dict<QString>());
00774         }
00775         data.append ( record );
00776         // .../
00777         // merge the data into the current section now
00778         // ----
00779         if (data.isEmpty()) {
00780                 excCDBRecordNotFound (group);
00781                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
00782                 return;
00783         }
00784         mImport -> merge ( data );
00785         // .../
00786         // set vendor and name tag
00787         // ----
00788         QStringList nameList = QStringList::split ( ":", group );
00789         mImport -> setItem ( "Vendor", nameList.first() );
00790         mImport -> setItem ( "Name"  , nameList.last()  );
00791 }
00792 
00793 //====================================
00794 // setMouse
00795 //------------------------------------
00796 void SaXManipulateMice::setMouse (
00797         const QString& vendor, const QString& model
00798 ) {
00799         // .../
00802         // ----
00803         setMouse (vendor+":"+model);
00804 }
00805 
00806 //====================================
00807 // getMouseData
00808 //------------------------------------
00809 Q3Dict<QString> SaXManipulateMice::getMouseData (
00810         const QString& group
00811 ) {
00812         // .../
00815         // ----
00816         mCDBMouseData.clear();
00817         if ( ! mCDBMice ) {
00818                 mCDBMice = new SaXProcess ();
00819                 mCDBMice -> start (CDB_POINTERS);
00820         }
00821         Q3Dict< Q3Dict<QString> > CDBData = mCDBMice -> getTablePointerCDB ();
00822         Q3DictIterator< Q3Dict<QString> > it (CDBData);
00823         for (; it.current(); ++it) {
00824                 if ( it.currentKey() == group ) {
00825                         mCDBMouseData = *it.current();
00826                         break;
00827                 }
00828         }
00829         return mCDBMouseData;
00830 }
00831 
00832 //====================================
00833 // getMouseData
00834 //------------------------------------
00835 Q3Dict<QString> SaXManipulateMice::getMouseData (
00836         const QString& vendor, const QString& name
00837 ) {
00838         // .../
00841         // ----
00842         return getMouseData (vendor+":"+name);
00843 }
00844 
00845 
00846 //====================================
00847 // Constructor...
00848 //------------------------------------
00849 SaXManipulateTablets::SaXManipulateTablets (
00850         SaXImport* pointer, SaXImport* layout, int id
00851 ) : SaXManipulateTabletsIF (pointer,id) {
00852         // .../
00855         // ----
00856         mManipInputDevices = new SaXManipulateDevices (pointer,layout);
00857         mCDBTabletModules = 0;
00858         mCDBTablets = 0;
00859         mCDBPens = 0;
00860         mCDBPads = 0;
00861 }
00862 
00863 //====================================
00864 // setType
00865 //------------------------------------
00866 void SaXManipulateTablets::setType (const QString& type) {
00867         // .../
00870         // ----
00871         if (! mImport) {
00872                 return;
00873         }
00874         mImport -> setItem ("TabletType",type);
00875 }
00876 
00877 //====================================
00878 // setMode
00879 //------------------------------------
00880 void SaXManipulateTablets::setMode (const QString& mode) {
00881         // .../
00884         // ----
00885         if (! mImport) {
00886                 return;
00887         }
00888         mImport -> setItem ("TabletMode",mode);
00889 }
00890 
00891 //====================================
00892 // isTablet
00893 //------------------------------------
00894 bool SaXManipulateTablets::isTablet (void) {
00895         // .../ 
00898         // ----
00899         if (! mImport) {
00900                 return false;
00901         }
00902         QString fashion = mImport -> getItem ("InputFashion");
00903         if (fashion == "Tablet") {
00904                 return true;
00905         }
00906         return false;
00907 }
00908 
00909 //====================================
00910 // isPen
00911 //------------------------------------
00912 bool SaXManipulateTablets::isPen (void) {
00913         // .../
00916         // ----
00917         if (! mImport) {
00918                 return false;
00919         }
00920         QString fashion = mImport -> getItem ("InputFashion");
00921         if (fashion == "Pen") {
00922                 return true;
00923         }
00924         return false;
00925 }
00926 
00927 //====================================
00928 // isEraser
00929 //------------------------------------
00930 bool SaXManipulateTablets::isEraser (void) {
00931         // .../
00935         // ----
00936         if (! mImport) {
00937                 return false;
00938         }
00939         QString fashion = mImport -> getItem ("InputFashion");
00940         if (fashion == "Eraser") {
00941                 return true;
00942         }
00943         return false;
00944 }
00945 
00946 //====================================
00947 // isTouch
00948 //------------------------------------
00949 bool SaXManipulateTablets::isTouch (void) {
00950         // .../
00954         // ----
00955         if (! mImport) {
00956                 return false;
00957         }
00958         QString fashion = mImport -> getItem ("InputFashion");
00959         if (fashion == "Touch") {
00960                 return true;
00961         }
00962         return false;
00963 }
00964 
00965 //====================================
00966 // isPad
00967 //------------------------------------
00968 bool SaXManipulateTablets::isPad (void) {
00969         // .../
00972         // ----
00973         if (! mImport) {
00974                 return false;
00975         }
00976         QString fashion = mImport -> getItem ("InputFashion");
00977         if (fashion == "Pad") {
00978                 return true;
00979         }
00980         return false;
00981 }
00982 
00983 //====================================
00984 // getName
00985 //------------------------------------
00986 QString SaXManipulateTablets::getName (void) {
00987         // .../
00989         // ----
00990         if (! mImport) {
00991                 QString* nope = new QString;
00992                 return *nope;
00993         }
00994         return mImport -> getItem ("Name");
00995 }
00996 
00997 //====================================
00998 // getVendor
00999 //------------------------------------
01000 QString SaXManipulateTablets::getVendor (void) {
01001         // .../
01003         // ----
01004         if (! mImport) {
01005                 QString* nope = new QString;
01006                 return *nope;
01007         }
01008         return mImport -> getItem ("Vendor");
01009 }
01010 
01011 //====================================
01012 // getType
01013 //------------------------------------
01014 QString SaXManipulateTablets::getType (void) {
01015         // .../
01018         // ----
01019         if (! mImport) {
01020                 QString* nope = new QString;
01021                 return *nope;
01022         }
01023         return mImport -> getItem ("TabletType");
01024 }
01025 
01026 //====================================
01027 // getMode
01028 //------------------------------------
01029 QString SaXManipulateTablets::getMode (void) {
01030         // .../
01033         // ----
01034         if (! mImport) {
01035                 QString* nope = new QString;
01036                 return *nope;
01037         }
01038         return mImport -> getItem ("TabletMode");       
01039 }
01040 
01041 //====================================
01042 // getTabletDrivers
01043 //------------------------------------
01044 QList<QString> SaXManipulateTablets::getTabletDrivers (void) {
01045         // .../
01048         // ----
01049         mCDBTabletDrivers.clear();
01050         if ( ! mCDBTabletModules ) {
01051                 mCDBTabletModules = new SaXProcess ();
01052                 mCDBTabletModules -> start (CDB_TABLETMODULES);
01053         }
01054         Q3Dict< Q3Dict<QString> > CDBModules=mCDBTabletModules->getTablePointerCDB();
01055         Q3DictIterator< Q3Dict<QString> > it (CDBModules);
01056         for (; it.current(); ++it) {
01057                 mCDBTabletDrivers.append (QString(it.currentKey()));
01058         }
01059         return mCDBTabletDrivers;
01060 }
01061 
01062 //====================================
01063 // getTabletOptions
01064 //------------------------------------
01065 Q3Dict<QString> SaXManipulateTablets::getTabletOptions (const QString& driver) {
01066         // .../
01072         // ----
01073         mCDBTabletOptions.clear();
01074         if ( ! mCDBTabletModules ) {
01075                 mCDBTabletModules = new SaXProcess ();
01076                 mCDBTabletModules -> start (CDB_TABLETMODULES);
01077         }
01078         Q3PtrList< Q3Dict<QString> > opts;
01079         opts = mCDBTabletModules -> getTablePointerCDB_DATA (
01080                 driver
01081         );
01082         if (opts.isEmpty()) {
01083                 excCDBRecordNotFound (driver);
01084                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
01085                 Q3Dict<QString>* nope = new Q3Dict<QString>;
01086                 return *nope;
01087         }
01088         mCDBTabletOptions = *opts.at(0);
01089         return mCDBTabletOptions;
01090 }
01091 
01092 //====================================
01093 // getTabletList
01094 //------------------------------------
01095 QList<QString> SaXManipulateTablets::getTabletList (void) {
01096         // .../
01100         // ----
01101         mCDBTabletList.clear();
01102         if ( ! mCDBTablets ) {
01103                 mCDBTablets = new SaXProcess ();
01104                 mCDBTablets -> start (CDB_TABLETS);
01105         }
01106         Q3Dict< Q3Dict<QString> > CDBData = mCDBTablets -> getTablePointerCDB ();
01107         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01108         for (; it.current(); ++it) {
01109                 mCDBTabletList.append (QString (it.currentKey()));
01110         }
01111         return mCDBTabletList;
01112 }
01113 
01114 //====================================
01115 // getTabletVendorList
01116 //------------------------------------
01117 QList<QString> SaXManipulateTablets::getTabletVendorList (void) {
01118         // .../
01121         // ----
01122         QList<QString> tabletList = getTabletList();
01123         mCDBTabletList.clear();
01124         QString it;
01125         foreach (it,tabletList) {
01126                 QStringList vnlist = QStringList::split ( ":", it );
01127                 QString* vendorName = new QString (vnlist.first());
01128                 int hasVendor = false;
01129                 QString io;
01130                 foreach (io,mCDBTabletList) {
01131                 if ( io == *vendorName ) {
01132                         hasVendor = true;
01133                         break;
01134                 }
01135                 }
01136                 if (! hasVendor ) {
01137                         mCDBTabletList.append ( *vendorName );
01138                 }
01139         }
01140         return mCDBTabletList;
01141 }
01142 
01143 //====================================
01144 // getTabletModelList
01145 //------------------------------------
01146 QList<QString> SaXManipulateTablets::getTabletModelList (
01147         const QString& vendor
01148 ) {
01149         // .../
01152         // ----
01153         QList<QString> tabletList = getTabletList();
01154         mCDBTabletList.clear();
01155         QString it;
01156         foreach (it,tabletList) {
01157                 QStringList vnlist = QStringList::split ( ":", it );
01158                 QString vendorName = vnlist.first();
01159                 QString* modelName = new QString (vnlist.last());
01160                 if ( vendorName == vendor ) {
01161                         mCDBTabletList.append ( *modelName );
01162                 }
01163         }
01164         return mCDBTabletList;
01165 }
01166 
01167 //====================================
01168 // getTabletData
01169 //------------------------------------
01170 Q3Dict<QString> SaXManipulateTablets::getTabletData ( const QString& group ) {
01171         // .../
01174         // ----
01175         mCDBTabletData.clear();
01176         if ( ! mCDBTablets ) {
01177                 mCDBTablets = new SaXProcess ();
01178                 mCDBTablets -> start (CDB_TABLETS);
01179         }
01180         Q3Dict< Q3Dict<QString> > CDBData = mCDBTablets -> getTablePointerCDB ();
01181         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01182         for (; it.current(); ++it) {
01183                 if ( it.currentKey() == group ) {
01184                         mCDBTabletData = *it.current();
01185                         break;
01186                 }
01187         }
01188         return mCDBTabletData;
01189 }
01190 
01191 //====================================
01192 // getTabletData
01193 //------------------------------------
01194 Q3Dict<QString> SaXManipulateTablets::getTabletData (
01195         const QString& vendor,const QString& name
01196 ) {
01197         // .../
01200         // ----
01201         return getTabletData (vendor+":"+name);
01202 }
01203 
01204 //====================================
01205 // getPenData
01206 //------------------------------------
01207 Q3Dict<QString> SaXManipulateTablets::getPenData ( const QString& group ) {
01208         // .../
01211         // ----
01212         mCDBTabletData.clear();
01213         if ( ! mCDBPens ) {
01214                 mCDBPens = new SaXProcess ();
01215                 mCDBPens -> start (CDB_PENS);
01216         }
01217         Q3Dict< Q3Dict<QString> > CDBData = mCDBPens -> getTablePointerCDB ();
01218         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01219         for (; it.current(); ++it) {
01220                 if ( it.currentKey() == group ) {
01221                         mCDBTabletData = *it.current();
01222                         break;
01223                 }
01224         }
01225         return mCDBTabletData;
01226 }
01227 
01228 //====================================
01229 // getPenData
01230 //------------------------------------
01231 Q3Dict<QString> SaXManipulateTablets::getPenData (
01232         const QString& vendor,const QString& name
01233 ) {
01234         // .../
01237         // ----
01238         return getPenData (vendor+":"+name);
01239 }
01240 
01241 //====================================
01242 // getPenList
01243 //------------------------------------
01244 QList<QString> SaXManipulateTablets::getPenList (void) {
01245         // .../
01249         // ----
01250         mCDBPenList.clear();
01251         if ( ! mCDBPens ) {
01252                 mCDBPens = new SaXProcess ();
01253                 mCDBPens -> start (CDB_PENS);
01254         }
01255         Q3Dict< Q3Dict<QString> > CDBData = mCDBPens -> getTablePointerCDB ();
01256         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01257         for (; it.current(); ++it) {
01258                 mCDBPenList.append (QString (it.currentKey()));
01259         }
01260         return mCDBPenList;
01261 }
01262 
01263 //====================================
01264 // setTablet
01265 //------------------------------------
01266 void SaXManipulateTablets::setTablet (const QString& group) {
01267         // .../
01271         // ----
01272         if ( ! mCDBTablets ) {
01273                 mCDBTablets = new SaXProcess ();
01274                 mCDBTablets -> start (CDB_TABLETS);
01275         }
01276         Q3PtrList< Q3Dict<QString> > data;
01277         data = mCDBTablets -> getTablePointerCDB_DATA (
01278                 group
01279         );
01280         // .../
01281         // move the data record to the correct position
01282         // refering to the section ID -> mPointer
01283         // ----
01284         Q3Dict<QString>* record = data.take(0);
01285         for (int n=0;n < mPointer;n++) {
01286                 data.append(new Q3Dict<QString>());
01287         }
01288         data.append ( record );
01289         // .../
01290         // merge the data into the current section now
01291         // ----
01292         if (data.isEmpty()) {
01293                 excCDBRecordNotFound (group);
01294                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
01295                 return;
01296         }
01297         mImport -> merge ( data );
01298         // .../
01299         // set vendor and name tag
01300         // ----
01301         QStringList nameList = QStringList::split ( ":", group );
01302         mImport -> setItem ( "Vendor", nameList.first() );
01303         mImport -> setItem ( "Name"  , nameList.last()  );
01304 }
01305 //====================================
01306 // setTablet
01307 //------------------------------------
01308 void SaXManipulateTablets::setTablet (
01309         const QString& vendor, const QString& model
01310 ) {
01311         // .../
01314         // ----
01315         setTablet (vendor+":"+model);
01316 }
01317 
01318 //====================================
01319 // addPad
01320 //------------------------------------
01321 int SaXManipulateTablets::addPad (const QString& group) {
01322         // .../
01328         // ----
01329         if ( ! mCDBPads ) {
01330                 mCDBPads = new SaXProcess ();
01331                 mCDBPads -> start (CDB_PADS);
01332         }
01333         Q3PtrList< Q3Dict<QString> > data;
01334         data = mCDBPads -> getTablePointerCDB_DATA (
01335                 group
01336         );
01337         if (data.isEmpty()) {
01338                 excCDBRecordNotFound (group);
01339                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
01340                 return -1;
01341         }
01342         // .../
01343         // set input fashion type for the selected pad
01344         // ----
01345         Q3Dict<QString> penData = *data.at(0);
01346         QString* type = penData["TabletType"];
01347         if (! type) {
01348                 excPointerFashionTypeFailed ("undefined");
01349                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01350                 return -1;
01351         }
01352         if (*type != "pad") {
01353                 excPointerFashionTypeFailed (*type);
01354                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01355                 return -1;
01356         }
01357         QString fashion (SAX_INPUT_PAD);
01358         // .../
01359         // create new input device for the pad and make
01360         // it the current pointer device
01361         // ----
01362         int newPad = mManipInputDevices->addInputDevice (fashion);
01363         if ( ! selectPointer (newPad)) {
01364                 return -1;
01365         }
01366         // .../
01367         // move the data record to the correct position
01368         // refering to the section ID -> mPointer
01369         // ----
01370         Q3Dict<QString>* record = data.take(0);
01371         for (int n=0;n < mPointer;n++) {
01372                 data.append(new Q3Dict<QString>());
01373         }
01374         data.append ( record );
01375         // .../
01376         // merge the pad data now into the current section
01377         // ----
01378         mImport -> merge ( data );
01379         // .../
01380         // set vendor and name tag
01381         // ----
01382         QStringList nameList = QStringList::split ( ":", group );
01383         mImport -> setItem ( "Vendor", nameList.first() );
01384         mImport -> setItem ( "Name"  , nameList.last()  );
01385         return newPad;
01386 }
01387 //====================================
01388 // addPad
01389 //------------------------------------
01390 int SaXManipulateTablets::addPad (
01391         const QString& vendor, const QString& model
01392 ) {
01393         // .../
01399         // ----
01400         return addPad (vendor+":"+model);
01401 }   
01402 
01403 //====================================
01404 // addPen
01405 //------------------------------------
01406 int SaXManipulateTablets::addPen (const QString& group) {
01407         // .../
01413         // ----
01414         if ( ! mCDBPens ) {
01415                 mCDBPens = new SaXProcess ();
01416                 mCDBPens -> start (CDB_PENS);
01417         }
01418         Q3PtrList< Q3Dict<QString> > data;
01419         data = mCDBPens -> getTablePointerCDB_DATA (
01420                 group
01421         );
01422         if (data.isEmpty()) {
01423                 excCDBRecordNotFound (group);
01424                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
01425                 return -1;
01426         }
01427         // .../
01428         // set input fashion type for the selected pen
01429         // ----
01430         Q3Dict<QString> penData = *data.at(0);
01431         QString* type = penData["TabletType"];
01432         if (! type) {
01433                 excPointerFashionTypeFailed ("undefined");
01434                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01435                 return -1;
01436         }
01437         if ((*type != "stylus") && (*type != "eraser") && (*type != "touch")) {
01438                 excPointerFashionTypeFailed (*type);
01439                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01440                 return -1;
01441         }
01442         QString fashion (SAX_INPUT_PEN);
01443         if (*type == "eraser") {
01444                 fashion = SAX_INPUT_ERASER;
01445         }
01446         if (*type == "touch") {
01447                 fashion = SAX_INPUT_TOUCH;
01448         }
01449         // .../
01450         // create new input device for the pen and make
01451         // it the current pointer device
01452         // ----
01453         int newPen = mManipInputDevices->addInputDevice (fashion);
01454         if ( ! selectPointer (newPen)) {
01455                 return -1;
01456         }
01457         // .../
01458         // move the data record to the correct position
01459         // refering to the section ID -> mPointer
01460         // ----
01461         Q3Dict<QString>* record = data.take(0);
01462         for (int n=0;n < mPointer;n++) {
01463                 data.append(new Q3Dict<QString>());
01464         }
01465         data.append ( record );
01466         // .../
01467         // merge the pen data now into the current section
01468         // ----
01469         mImport -> merge ( data );
01470         // .../
01471         // set vendor and name tag
01472         // ----
01473         QStringList nameList = QStringList::split ( ":", group );
01474         mImport -> setItem ( "Vendor", nameList.first() );
01475         mImport -> setItem ( "Name"  , nameList.last()  );
01476         return newPen;
01477 }
01478 //====================================
01479 // addPen
01480 //------------------------------------
01481 int SaXManipulateTablets::addPen (
01482         const QString& vendor, const QString& model
01483 ) {
01484         // .../
01489         // ----
01490         return addPen (vendor+":"+model);
01491 }
01492 
01493 //====================================
01494 // removePen
01495 //------------------------------------
01496 int SaXManipulateTablets::removePen ( int id ) {
01497         // .../
01502         // ----
01503         if (! selectPointer ( id )) {
01504                 return -1;
01505         }
01506         QString fashion (
01507                 mImport->getItem("InputFashion")
01508         );
01509         if (
01510                 (fashion != QString(SAX_INPUT_PEN ))   &&
01511                 (fashion != QString(SAX_INPUT_ERASER))
01512         ) {
01513                 excPointerFashionTypeFailed (fashion);
01514                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01515                 return -1;
01516         }
01517         return mManipInputDevices->removeInputDevice (id);
01518 }
01519 
01520 //====================================
01521 // removeTouch
01522 //------------------------------------
01523 int SaXManipulateTablets::removeTouch ( int id ) {
01524         // .../
01529         // ----
01530         if (! selectPointer ( id )) {
01531                 return -1;
01532         }
01533         QString fashion (
01534                 mImport->getItem("InputFashion")
01535         );
01536         if (fashion != QString(SAX_INPUT_TOUCH)) {
01537                 excPointerFashionTypeFailed (fashion);
01538                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01539                 return -1;
01540         }
01541         return mManipInputDevices->removeInputDevice (id);
01542 }
01543 
01544 //====================================
01545 // removePad
01546 //------------------------------------
01547 int SaXManipulateTablets::removePad ( int id ) {
01548         // .../
01553         // ----
01554         if (! selectPointer ( id )) {
01555                 return -1;
01556         }
01557         QString fashion (
01558                 mImport->getItem("InputFashion")
01559         );
01560         if (fashion != QString(SAX_INPUT_PAD)) {
01561                 excPointerFashionTypeFailed (fashion);
01562                 qError (errorString(),EXC_POINTERFASHIONTYPEFAILED);
01563                 return -1;
01564         }
01565         return mManipInputDevices->removeInputDevice (id);
01566 }
01567 
01568 //====================================
01569 // Constructor...
01570 //------------------------------------
01571 SaXManipulateTouchscreens::SaXManipulateTouchscreens (
01572         SaXImport* in, int ptr
01573 ) : SaXManipulateTouchscreensIF (in,ptr) {
01574         // .../
01578         // ----
01579         mCDBPanels = 0;
01580 }
01581 
01582 //====================================
01583 // isTouchpanel
01584 //------------------------------------
01585 bool SaXManipulateTouchscreens::isTouchpanel (void) {
01586         // .../
01590         // ----
01591         if (! mImport) {
01592                 return false;
01593         }
01594         QString fashion = mImport -> getItem ("InputFashion");
01595         if (fashion == "Touchpanel") {
01596                 return true;
01597         }
01598         return false;
01599 }
01600 
01601 //====================================
01602 // getName
01603 //------------------------------------
01604 QString SaXManipulateTouchscreens::getName ( void ) {
01605         // .../
01609         // ----
01610         if (! mImport) {
01611                 QString* nope = new QString;
01612                 return *nope;
01613         }
01614         QString name = mImport -> getItem ("Name");
01615         QStringList vnlist = QStringList::split ( ";", name );
01616         return vnlist.last();
01617 }
01618 
01619 //====================================
01620 // getVendor
01621 //------------------------------------
01622 QString SaXManipulateTouchscreens::getVendor ( void ) {
01623         // .../
01627         // ----
01628         if (! mImport) {
01629                 QString* nope = new QString;
01630                 return *nope;
01631         }
01632         QString name = mImport -> getItem ("Name");
01633         QStringList vnlist = QStringList::split ( ";", name );
01634         return vnlist.first();
01635 }
01636 
01637 //====================================
01638 // getType
01639 //------------------------------------
01640 QString SaXManipulateTouchscreens::getType (void) {
01641         // .../
01645         // ----
01646         if (! mImport) {
01647                 QString* nope = new QString;
01648                 return *nope;
01649         }
01650         return mImport -> getItem ("TabletType");
01651 }
01652 
01653 //====================================
01654 // getCDBPanelList
01655 //------------------------------------
01656 QList<QString> SaXManipulateTouchscreens::getPanelList (void) {
01657         // .../
01661         // ----
01662         mCDBPanelList.clear();
01663         if ( ! mCDBPanels ) {
01664                 mCDBPanels = new SaXProcess ();
01665                 mCDBPanels -> start (CDB_TOUCHERS);
01666         }
01667         Q3Dict< Q3Dict<QString> > CDBData = mCDBPanels -> getTablePointerCDB ();
01668         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01669         for (; it.current(); ++it) {
01670                 mCDBPanelList.append (QString (it.currentKey()));
01671         }
01672         return mCDBPanelList;
01673 }
01674 
01675 //====================================
01676 // getCDBPanelVendorList
01677 //------------------------------------
01678 QList<QString> SaXManipulateTouchscreens::getPanelVendorList (void) {
01679         // .../
01682         // ----
01683         QList<QString> panelList = getPanelList();
01684         mCDBPanelList.clear();
01685         QString it;
01686         foreach (it,panelList) {
01687                 QStringList vnlist = QStringList::split ( ":", it );
01688                 QString* vendorName = new QString (vnlist.first());
01689                 int hasVendor = false;
01690                 QString io;
01691                 foreach (io,mCDBPanelList) {
01692                 if ( io == *vendorName ) {
01693                         hasVendor = true;
01694                         break;
01695                 }
01696                 }
01697                 if (! hasVendor ) {
01698                         mCDBPanelList.append ( *vendorName );
01699                 }
01700         }
01701         return mCDBPanelList;
01702 }
01703 
01704 //====================================
01705 // getCDBPanelModelList
01706 //------------------------------------
01707 QList<QString> SaXManipulateTouchscreens::getPanelModelList (
01708         const QString& vendor
01709 ) {
01710         // .../
01713         // ----
01714         QList<QString> panelList = getPanelList();
01715         mCDBPanelList.clear();
01716         QString it;
01717         foreach (it,panelList) {
01718                 QStringList vnlist = QStringList::split ( ":", it );
01719                 QString vendorName = vnlist.first();
01720                 QString* modelName = new QString (vnlist.last());
01721                 if ( vendorName == vendor ) {
01722                         mCDBPanelList.append ( *modelName );
01723                 }
01724         }
01725         return mCDBPanelList;
01726 }
01727 
01728 //====================================
01729 // getPanelData
01730 //------------------------------------
01731 Q3Dict<QString> SaXManipulateTouchscreens::getPanelData (
01732         const QString& group
01733 ) {
01734         // .../
01737         // ----
01738         mCDBPanelData.clear();
01739         if ( ! mCDBPanels ) {
01740                 mCDBPanels = new SaXProcess ();
01741                 mCDBPanels -> start (CDB_TOUCHERS);
01742         }
01743         Q3Dict< Q3Dict<QString> > CDBData = mCDBPanels -> getTablePointerCDB ();
01744         Q3DictIterator< Q3Dict<QString> > it (CDBData);
01745         for (; it.current(); ++it) {
01746                 if ( it.currentKey() == group ) {
01747                         mCDBPanelData = *it.current();
01748                         break;
01749                 }
01750         }
01751         return mCDBPanelData;
01752 }
01753 
01754 //====================================
01755 // getPanelData
01756 //------------------------------------
01757 Q3Dict<QString> SaXManipulateTouchscreens::getPanelData (
01758         const QString& vendor,const QString& name
01759 ) {
01760         // .../
01763         // ----
01764         return getPanelData (vendor+":"+name);
01765 }
01766 
01767 //====================================
01768 // setTouchPanel
01769 //------------------------------------
01770 void SaXManipulateTouchscreens::setTouchPanel (const QString& group) {
01771         // .../
01775         // ----
01776         if ( ! mCDBPanels ) {
01777                 mCDBPanels = new SaXProcess ();
01778                 mCDBPanels -> start (CDB_TOUCHERS);
01779         }
01780         Q3PtrList< Q3Dict<QString> > data;
01781         data = mCDBPanels -> getTablePointerCDB_DATA (
01782                 group
01783         );
01784         if (data.isEmpty()) {
01785                 excCDBRecordNotFound (group);
01786                 qError (errorString(),EXC_CDBRECORDNOTFOUND);
01787                 return;
01788         }
01789         // .../
01790         // move the data record to the correct position
01791         // refering to the section ID -> mPointer
01792         // ----
01793         Q3Dict<QString>* record = data.take(0);
01794         for (int n=0;n < mPointer;n++) {
01795                 data.append(new Q3Dict<QString>());
01796         }
01797         data.append ( record );
01798         // .../
01799         // merge the toucher data into the current section
01800         // ----
01801         mImport -> merge ( data );
01802         // .../
01803         // set vendor and name tag
01804         // ----
01805         QStringList nameList = QStringList::split ( ":", group );
01806         setNamePair (
01807                 nameList.first(),
01808                 nameList.last()
01809         );
01810 }
01811 
01812 //====================================
01813 // setTouchPanel
01814 //------------------------------------
01815 void SaXManipulateTouchscreens::setTouchPanel (
01816         const QString& vendor, const QString& model
01817 ) {
01818         // .../
01821         // ----
01822         setTouchPanel (vendor+":"+model);
01823 }
01824 } // end namespace