|
libsax 7.2
|
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
1.7.3