You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(63) |
Aug
(41) |
Sep
(6) |
Oct
(28) |
Nov
(22) |
Dec
(7) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(23) |
Feb
|
Mar
(26) |
Apr
(2) |
May
(12) |
Jun
(12) |
Jul
(6) |
Aug
(20) |
Sep
(52) |
Oct
(4) |
Nov
(26) |
Dec
(71) |
2004 |
Jan
(300) |
Feb
(380) |
Mar
(216) |
Apr
(231) |
May
(273) |
Jun
(300) |
Jul
(156) |
Aug
(153) |
Sep
(145) |
Oct
(166) |
Nov
(297) |
Dec
(263) |
2005 |
Jan
(242) |
Feb
(168) |
Mar
(223) |
Apr
(340) |
May
(288) |
Jun
(183) |
Jul
(169) |
Aug
(82) |
Sep
(229) |
Oct
(185) |
Nov
(48) |
Dec
(9) |
From: <tim...@us...> - 2005-12-12 14:28:46
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26389 Modified Files: omggdal.cpp Log Message: Small memory leak repair Index: omggdal.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omggdal.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** omggdal.cpp 19 Aug 2005 14:29:25 -0000 1.1 --- omggdal.cpp 12 Dec 2005 14:28:37 -0000 1.2 *************** *** 99,102 **** --- 99,103 ---- myFile.close(); std::cout << "The output ascii file is: " << myOutFileName << std::endl; + GDALClose(gdalDataset); return myOutFileName; } *************** *** 140,142 **** return myHeader; ! } \ No newline at end of file --- 141,143 ---- return myHeader; ! } |
From: <tim...@us...> - 2005-12-12 11:27:41
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12883 Modified Files: openmodellergui.cpp Log Message: More mem leak squiching fixes from Renato Index: openmodellergui.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/openmodellergui.cpp,v retrieving revision 1.86 retrieving revision 1.87 diff -C2 -d -r1.86 -r1.87 *** openmodellergui.cpp 9 Dec 2005 23:49:22 -0000 1.86 --- openmodellergui.cpp 12 Dec 2005 11:27:14 -0000 1.87 *************** *** 820,824 **** //txtbLogs->append( "Commission error: %7.2f\%\n", matrix.getCommissionError() * 100 ); txtbLogs->append(QString( "Percentage of cells predicted present: %1\%\n").arg( ! stats->getAreaPredictedPresent() / (double) stats->getTotalArea() * 100 )); txtbLogs->append( QString( "Total number of cells: %1\n").arg( stats->getTotalArea() )); --- 820,824 ---- //txtbLogs->append( "Commission error: %7.2f\%\n", matrix.getCommissionError() * 100 ); txtbLogs->append(QString( "Percentage of cells predicted present: %1\%\n").arg( ! stats->getAreaPredictedPresent() / (double) stats->getTotalArea() * 100 )); txtbLogs->append( QString( "Total number of cells: %1\n").arg( stats->getTotalArea() )); *************** *** 826,829 **** --- 826,834 ---- //if all went ok, send notification to the parent app that we are finished (qgis plugin mode) std::cout << "emitting drawRasterLayer" << std::endl; + delete matrix; + matrix = 0; + delete stats; + stats = 0; + emit drawRasterLayer(outputFileNameQString + QString("-") + myUnderscoreTaxonNameQString + QString(".tif")); |
From: <tim...@us...> - 2005-12-09 23:49:31
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15170 Modified Files: openmodellergui.cpp Log Message: Commit patch for localities file parsing and other small cleaups submitted by Renato Index: openmodellergui.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/openmodellergui.cpp,v retrieving revision 1.85 retrieving revision 1.86 diff -C2 -d -r1.85 -r1.86 *** openmodellergui.cpp 7 Dec 2005 15:19:37 -0000 1.85 --- openmodellergui.cpp 9 Dec 2005 23:49:22 -0000 1.86 *************** *** 740,743 **** --- 740,745 ---- { //Filename is valid + myQFile.close(); + myQFile.remove(); std::cout << "Filename '" << outputFileNameQString.ascii() << "' is valid" << std::endl; settings.writeEntry("/openmodeller/outputDirectory",leOutputDirectory->text()); *************** *** 773,778 **** --- 775,786 ---- txtbLogs->append( "<h3>" + taxonNameQString + "</h3>"); txtbLogs->append( "<h2>Log of model run:</h2>"); + + QString myUnderscoreTaxonNameQString = taxonNameQString; + myUnderscoreTaxonNameQString.replace(" ","_"); + try { + txtbLogs->append( QString("Library version %1\n").arg( mOpenModeller->getVersion() ) ); + RequestFile myRequestFile; int myResult = myRequestFile.configure( mOpenModeller, strdup(theParametersFileNameQString)); *************** *** 790,801 **** myRequestFile.makeModel( mOpenModeller ); myRequestFile.makeProjection( mOpenModeller ); //save a nice looking png of the image to disk ! createModelImage(outputFileNameQString + "-" + taxonNameQString); // and a smaller version for this report ! QString mySmallImage = createResizedImage(outputFileNameQString + "-" + taxonNameQString); txtbLogs->append("<img src=\""+mySmallImage+"\">"); //Create ascii grid file ! QString myAsciiFilename = OmgGdal::Gdal2Ascii(outputFileNameQString + "-" + taxonNameQString+".tif"); txtbLogs->append( "Converted output to ESRII ASCII grid file\n" ); --- 798,810 ---- myRequestFile.makeModel( mOpenModeller ); myRequestFile.makeProjection( mOpenModeller ); + //save a nice looking png of the image to disk ! createModelImage(outputFileNameQString + "-" + myUnderscoreTaxonNameQString); // and a smaller version for this report ! QString mySmallImage = createResizedImage(outputFileNameQString + "-" + myUnderscoreTaxonNameQString); txtbLogs->append("<img src=\""+mySmallImage+"\">"); //Create ascii grid file ! QString myAsciiFilename = OmgGdal::Gdal2Ascii(outputFileNameQString + "-" + myUnderscoreTaxonNameQString+".tif"); txtbLogs->append( "Converted output to ESRII ASCII grid file\n" ); *************** *** 817,821 **** //if all went ok, send notification to the parent app that we are finished (qgis plugin mode) std::cout << "emitting drawRasterLayer" << std::endl; ! emit drawRasterLayer(outputFileNameQString +QString("-") + taxonNameQString+QString(".tif")); } --- 826,830 ---- //if all went ok, send notification to the parent app that we are finished (qgis plugin mode) std::cout << "emitting drawRasterLayer" << std::endl; ! emit drawRasterLayer(outputFileNameQString + QString("-") + myUnderscoreTaxonNameQString + QString(".tif")); } *************** *** 832,837 **** } txtbLogs->append(makeConfigReport()); ! QString myLogFileName = outputFileNameQString + "-" + taxonNameQString+".html"; ! QString myImageFileName = outputFileNameQString + "-" + taxonNameQString+".png"; //write teh logs to a file too QFile myQFile(myLogFileName); --- 841,846 ---- } txtbLogs->append(makeConfigReport()); ! QString myLogFileName = outputFileNameQString + "-" + myUnderscoreTaxonNameQString + ".html"; ! QString myImageFileName = outputFileNameQString + "-" + myUnderscoreTaxonNameQString + ".png"; //write teh logs to a file too QFile myQFile(myLogFileName); *************** *** 843,847 **** myQFile.close(); } ! emit modelDone(myImageFileName, myLogFileName, taxonNameQString); // done(1); --- 852,862 ---- myQFile.close(); } ! else ! { ! //Problem creating log file ! std::cout << "Filename '" << myLogFileName.ascii() << "' is invalid" << std::endl; ! QMessageBox::warning( this, "Error creating log file!", QString("The filename and/or directory is invalid: %1").arg(myLogFileName.ascii()) ); ! } ! emit modelDone(myImageFileName, myLogFileName, myUnderscoreTaxonNameQString); // done(1); *************** *** 958,966 **** myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# Output model name (serialized model)\n"); ! myQTextStream << tr("Output model = ") << outputFileNameQString + "-" + taxonNameQString << ".xml\n"; myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# Output file name (should end in .tif)\n"); ! myQTextStream << tr("Output file = ") << outputFileNameQString + "-" + taxonNameQString << ".tif\n"; myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# A layer that specifies the format (cell size and coordinate system) for the generated map\n"); --- 973,981 ---- myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# Output model name (serialized model)\n"); ! myQTextStream << tr("Output model = ") << outputFileNameQString + "-" + myUnderscoreName << ".xml\n"; myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# Output file name (should end in .tif)\n"); ! myQTextStream << tr("Output file = ") << outputFileNameQString + "-" + myUnderscoreName << ".tif\n"; myQTextStream << tr("\n\n##\n"); myQTextStream << tr("# A layer that specifies the format (cell size and coordinate system) for the generated map\n"); *************** *** 1440,1443 **** --- 1455,1459 ---- { //make sure there are only single spaces separating words. + myTaxonQString=myTaxonQString.replace( "\t", " " ); myTaxonQString=myTaxonQString.replace( QRegExp(" {2,}"), " " ); myTaxonQStringList.append(myTaxonQString); *************** *** 1485,1488 **** --- 1501,1505 ---- { //make sure there are only single spaces separating words. + myTaxonQString=myTaxonQString.replace( "\t", " " ); myTaxonQString=myTaxonQString.replace( QRegExp(" {2,}"), " " ); myTaxonQStringList.append(myTaxonQString); |
From: <tim...@us...> - 2005-12-07 17:32:02
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17546 Modified Files: omguimain.cpp Log Message: Load project files works Index: omguimain.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** omguimain.cpp 7 Dec 2005 17:18:43 -0000 1.13 --- omguimain.cpp 7 Dec 2005 17:31:48 -0000 1.14 *************** *** 352,354 **** --- 352,379 ---- myQSettings.writeEntry("/openmodeller/lastSavedProject",myFileName); + QFile myFile( myFileName ); + if ( myFile.open( IO_ReadOnly ) ) + { + mModelVector.clear(); + QTextStream myStream( &myFile ); + while ( !myStream.atEnd() ) + { + QString myText = myStream.readLine(); // line of text excluding '\n' + //see if we are at the start of the record + if (myText.compare(QString("---"))==0) + { + QString myImageFileName = myStream.readLine(); + QString myLogFileName = myStream.readLine(); + QString myTaxonName = myStream.readLine(); + ModelResult myModelResult; + myModelResult.imageFileName=myImageFileName; + myModelResult.logFileName=myLogFileName; + myModelResult.taxonName=myTaxonName; + mModelVector.push_back(myModelResult); + + } + } + myFile.close(); + } + btnFirst_clicked(); } |
From: <tim...@us...> - 2005-12-07 17:18:55
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14266 Modified Files: omguimain.cpp Log Message: Write project logic implemented Index: omguimain.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** omguimain.cpp 7 Dec 2005 16:13:26 -0000 1.12 --- omguimain.cpp 7 Dec 2005 17:18:43 -0000 1.13 *************** *** 28,33 **** //om includes #include <openmodeller/om.hh> ! OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner --- 28,33 ---- //om includes #include <openmodeller/om.hh> ! OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner *************** *** 70,74 **** connect(myOpenModellerGui, SIGNAL(modelDone(QString, QString, QString)), this, SLOT(modelDone(QString, QString, QString))); connect(myOpenModellerGui, SIGNAL(jobComplete()), this, SLOT(btnFirst_clicked())); ! myOpenModellerGui->exec(); show(); --- 70,74 ---- connect(myOpenModellerGui, SIGNAL(modelDone(QString, QString, QString)), this, SLOT(modelDone(QString, QString, QString))); connect(myOpenModellerGui, SIGNAL(jobComplete()), this, SLOT(btnFirst_clicked())); ! myOpenModellerGui->exec(); show(); *************** *** 76,87 **** /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) --- 76,87 ---- /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) *************** *** 138,149 **** //create a file dialog using the filter list generated above std::auto_ptr < QFileDialog > myQFileDialog( ! new QFileDialog( ! myLastUsedDir, ! myFilters, ! 0, ! QFileDialog::tr("Save file dialog"), ! tr("Choose a filename to save the map image as") ! ) ! ); --- 138,149 ---- //create a file dialog using the filter list generated above std::auto_ptr < QFileDialog > myQFileDialog( ! new QFileDialog( ! myLastUsedDir, ! myFilters, ! 0, ! QFileDialog::tr("Save file dialog"), ! tr("Choose a filename to save the map image as") ! ) ! ); *************** *** 190,194 **** myModelResult.logFileName=theLogFileName; myModelResult.taxonName=theTaxonName; ! mModelVector.push_back(myModelResult); qDebug("Model done " + theTaxonName + " : " + QString::number(mModelVector.count())); --- 190,194 ---- myModelResult.logFileName=theLogFileName; myModelResult.taxonName=theTaxonName; ! mModelVector.push_back(myModelResult); qDebug("Model done " + theTaxonName + " : " + QString::number(mModelVector.count())); *************** *** 214,218 **** } ! showModel(); } --- 214,218 ---- } ! showModel(); } *************** *** 229,233 **** btnPrevious->setEnabled(true); } ! showModel(); } --- 229,233 ---- btnPrevious->setEnabled(true); } ! showModel(); } *************** *** 237,241 **** { qDebug ("The current value is " + QString::number(mCurrentModel)); ! mCurrentModel++; if (mCurrentModel==mModelVector.count()) --- 237,241 ---- { qDebug ("The current value is " + QString::number(mCurrentModel)); ! mCurrentModel++; if (mCurrentModel==mModelVector.count()) *************** *** 250,254 **** btnPrevious->setEnabled(true); } ! showModel(); } --- 250,254 ---- btnPrevious->setEnabled(true); } ! showModel(); } *************** *** 268,272 **** btnNext->setEnabled(true); } ! showModel(); } --- 268,272 ---- btnNext->setEnabled(true); } ! showModel(); } *************** *** 280,286 **** { ! //Set log file text txtbLog->clear(); ! QString myText; assert(mCurrentModel<=mModelVector.count()); QString myLogFileName = mModelVector.at(mCurrentModel-1).logFileName; --- 280,289 ---- { ! if (mModelVector.count()==0) ! { ! return; ! }//Set log file text txtbLog->clear(); ! QString myText; assert(mCurrentModel<=mModelVector.count()); QString myLogFileName = mModelVector.at(mCurrentModel-1).logFileName; *************** *** 323,327 **** "Choose a filename to save under" ); myQSettings.writeEntry("/openmodeller/lastSavedProject",myFileName); ! } void OmGuiMain::loadProject() --- 326,342 ---- "Choose a filename to save under" ); myQSettings.writeEntry("/openmodeller/lastSavedProject",myFileName); ! QFile myFile(myFileName ); ! if ( myFile.open( IO_WriteOnly ) ) ! { ! QTextStream myStream( &myFile ); ! for (int i=0;i<mModelVector.count();i++) ! { ! myStream << "---\n"; ! myStream << mModelVector.at(i).imageFileName << "\n"; ! myStream << mModelVector.at(i).logFileName << "\n"; ! myStream << mModelVector.at(i).taxonName << "\n"; ! } ! myFile.close(); ! } } void OmGuiMain::loadProject() |
From: <tim...@us...> - 2005-12-07 16:13:45
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31443 Modified Files: main.cpp omguimain.cpp omguimain.h omguimainbase.ui omguimainbase.ui.h Log Message: Fix overrun bug in vcr controls Make Main app window appear first instead of wizard Add save and open project menu entries (still to be wired up) Index: main.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/main.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** main.cpp 19 Jan 2005 09:09:05 -0000 1.4 --- main.cpp 7 Dec 2005 16:13:26 -0000 1.5 *************** *** 11,16 **** a.setMainWidget(myOmGui); ! //only show the main gui once the model has run! ! //myOmGui->show(); --- 11,15 ---- a.setMainWidget(myOmGui); ! myOmGui->show(); Index: omguimain.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** omguimain.cpp 7 Dec 2005 15:19:37 -0000 1.11 --- omguimain.cpp 7 Dec 2005 16:13:26 -0000 1.12 *************** *** 42,45 **** --- 42,49 ---- mCurrentModel = 0; + btnFirst->setEnabled(false); + btnPrevious->setEnabled(false); + btnLast->setEnabled(false); + btnNext->setEnabled(false); //show(); // *************** *** 50,54 **** // AlgorithmFactory::searchDefaultDirs(); ! runWizard(); } --- 54,58 ---- // AlgorithmFactory::searchDefaultDirs(); ! //runWizard(); } *************** *** 241,245 **** } ! if (mCurrentModel>0) { btnFirst->setEnabled(true); --- 245,249 ---- } ! if (mCurrentModel>1) { btnFirst->setEnabled(true); *************** *** 254,258 **** { mCurrentModel--; ! if (mCurrentModel==mModelVector.count()) { btnFirst->setEnabled(false); --- 258,262 ---- { mCurrentModel--; ! if (mCurrentModel==1) { btnFirst->setEnabled(false); *************** *** 308,309 **** --- 312,339 ---- } + void OmGuiMain::saveProject() + { + QSettings myQSettings; // where we keep last used filter in persistant state + QString myLastFileName = myQSettings.readEntry("/openmodeller/lastSavedProject"); + QString myFileName = QFileDialog::getSaveFileName( + myLastFileName, + "OmGui Project (*.omg)", + this, + "Save project as...", + "Choose a filename to save under" ); + myQSettings.writeEntry("/openmodeller/lastSavedProject",myFileName); + + } + void OmGuiMain::loadProject() + { + QSettings myQSettings; // where we keep last used filter in persistant state + QString myLastFileName = myQSettings.readEntry("/openmodeller/lastSavedProject"); + QString myFileName = QFileDialog::getOpenFileName( + myLastFileName, + "OmGui Project (*.omg)", + this, + "Load Project", + "Choose a previously saved omgui project" ); + myQSettings.writeEntry("/openmodeller/lastSavedProject",myFileName); + + } Index: omguimain.h =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** omguimain.h 7 Dec 2005 15:19:37 -0000 1.6 --- omguimain.h 7 Dec 2005 16:13:26 -0000 1.7 *************** *** 39,50 **** void runWizard(); void saveMapAsImage(); ! public slots: ! void drawModelImage (QString theFileName); ! void btnFirst_clicked (); ! void btnLast_clicked (); ! void btnNext_clicked (); ! void btnPrevious_clicked (); ! void setTaxonName(); ! //! Log emitted from wizard when model is done --- 39,51 ---- void runWizard(); void saveMapAsImage(); ! public slots: ! void drawModelImage (QString theFileName); ! void btnFirst_clicked (); ! void btnLast_clicked (); ! void btnNext_clicked (); ! void btnPrevious_clicked (); ! void setTaxonName(); ! void saveProject(); ! void loadProject(); //! Log emitted from wizard when model is done Index: omguimainbase.ui =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimainbase.ui,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** omguimainbase.ui 7 Dec 2005 15:19:37 -0000 1.10 --- omguimainbase.ui 7 Dec 2005 16:13:26 -0000 1.11 *************** *** 140,143 **** --- 140,145 ---- <separator/> <separator/> + <action name="fileSaveProjectAction"/> + <action name="flieLoadProjectAction"/> <action name="runWizardAction"/> <action name="fileSave_asAction"/> *************** *** 257,270 **** </property> </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="9788">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb0000200049444154789ced7d7fac254775e69775dbaa2bf588be8891ba1420b72423332f3b91670c593c0a221ee4c8f608223c21ecceac2dd6b362658c4994250416c728ac592cc3222418af821812c59a1189197b17ff426bf6792db3338809334883ee05d9da7a22417db5efc9b7112df591a72cf68f53555dddafef7b7ddfbc5ff3a3fe29d57bf747dfaefabef39d53a74effc6af7ffd6b5c6d576efb175b7d0157dbd6b6ab0be00a6f5717c015deae2e802bbc455b7d019bd1ce9ec30d3ad7b18c5364c5f82619a7c8f231649c421763a83885ce3564ac0a9deb9fa95841e77a7ce40373bfd8ea6bdfe8f61b979317f0cc69dca062bc4717e5f52aee5daff352c9b87763569490710f3a2fa1624017808c812ce75edb3e2b083216d0b9062f022ad318c385223b3f88a55ec8f14a1ae3c583b7f72f9b8571492f80e1084ae7fa5695a85b75aedfa362b553171a3256c818d13c99490a6d119fe563483b0e90cfaf4ff8f5692c31ce33a4b1c442ae91c60ae3827b3dd100e42b30d9bc847c5e9becc507eed9bbb8d5f762aded925b007a84dd6581438871d7b8c06fa631801c400ce8a284b24897710f21f23de21346bc8a114c3e412635e4234d80853cc3209658c8813406c6138d748782fe1541ee10d0130db543424ff023b90327f4449f78e823fbc65b7d8f666997c402d02f63a7ceb3bbd258de352eb21b19a11aa945acb5d990491df975c407af8b15b2226008dba7c9cac85750d04643424223838004998cc7464340818c7e46429ed0267bf24b1fdf576ef5bd5bad6deb05303c839b7a09fe4ce738a412a0b4481f178c488ffcbc844a2ae4b3adaf90af0b877867f3355462911e83273d61a40fe200f9f67b18e90a7a42907d816ca22119f9903b806c9241f625ff3f166e11163aa7afa7311efec43d6adb9a886db900f4cbb859e7d9832a91b7698bc871c1bd476ccdd6af6ee357447aa298511cd2fb75c4239280477a061155c8cf8c0618f99091b263fe7fcacc50f6a01e2b8d7ef8e827f7ebadbeb7cdb6ad16c0fc19fc9e4af05099e33d3d67ab43e45b5b5ca9f8161b1faa7a2fec02a45b9b3e4850d1fc8490f64585746be319e90ad9af087207a0271954bf1df9ca7a0fd26a08661cb7680199e0f52cd78fc9587dfe818faa57b6fa5ebbb62d16807e196fd579f61595c80fe83c834a24da90df54f7357fbe0de9b1643a4f2a9bee910d46aa477660d355c44807248000e991028c86b4ef175390afac2600144adb031a400a32e31248bf4c463f7cfcc103c5d6dd756e5bba008667704d2fc19feb020faa18bd32077a814a2f7300091a363db0ed0d35ef90de54ef351bbe03d0bfca9c7a87ea5b64ef90d0bf72c8d6907d856c6219a57066a742bad310321681a0b4c8b78bd63396bf3e1b87e045fb0b9de3fee39f9b7b72cb26005bb800e6cf64bb55228feb3cdbdd8ef80cca23bfb2f16db63d158cf43496cbd57ac366076a1d2a6ada7885cc3103a63383fb3c3f8604816dfed8324569020dc1c887b03d8fbd76f8b680fce8f1ffb235b1842d5900c333b8b797e0bfea1c3d67e37bd6b637d57d13f15200594e481a363d158c7419203d9b54c8948908cc478554656d749a54dec0783dc6b53883f346ec225e729147bf887f91c6f25f1ffd4f7bbfbfd973b1a90b6038423c2eb2bf5189fc23ed6f56bbbad74b2d365e544cb1906ba41742a45b4411db64467a4d8da3b7cc26b34d47c48c20228bd4657df0fab0b79aa06212fb79759bcfc8c7b83e0ebc07180932d9eb22929f3df9c8decf6fda8460137703f5cbb80905cef1e4032a91400e6f2b95b5915228e8a5122a4e91e5405fa4182d6924426194038990182d6a2491c28808fd9ec48834fa91425e101221a10b8d349298142592486254f0a2981425fa220591463f4a91db715e684891222f60fb31a4484104db6bfb3efb7ea32185025109192b8c88172dec18c68e0da0629e7c15a7d5d8ff9f173d906190c86bc8640f1d79f0ecff3cf0f1933b376b5e3685018623bc7f5c64df4a63d973367e45752f021bbf64d5fca24602054d566d5365e301899202444d419ab3fdcee63b5b3fb5b7af1311db7811558c016808cf1c0ac0188852c0b4f7cdeb41e035847d69347a903f2f4df6def9470f6eb8bbb8e10ca0473882024fa858f6c605a0620914b0935f42791bc9c8e7c9672433f225461921e949e8620429a447fab0d0482cd219d143db6b2451627b19f423fb7afb3ed2ed63e2efa582fb9c32a4c27e8ee0c5c77fe7454a467b6691b1658e98275dd6903fb688e7f80421439a7806f08c509aecad48d4a9fd1f3df9bb1b3d3f1bca00c3113e332eb287a6ab7b15a87ca6d54ad56b941724883248c3369c4c80747248d78071c897f6efced633b258a587c85320e7c737fad0b633d20306b0ccd08b144a68f482ff7bc640567d5e9b7608bedfc521f83af97734aebb2093dd79ea9b079fdfa839da3006188ef055e478a8f287d9e62b8b7ce7177b552c14f41221f5365e820aa01fb18d4f22893244ba485b915d0a46b014bc782024726fb33548a8ca861b0d34c6645f2763bbc82ce2a5b034ed3f5fa1245eac9e312c5390e1a053f8b95e1b243cf92a5680615090c9905a66509611542241c86224f2e97df71c3fb451f3b4210c303c8fafea22fb18fbf795ba5735c48fbdad4f84c4c212df8cd1a255c5a49118c936dfa4c8cd1830a945783bd21d922a5b5fd95a67dbc9da741846ecd4718b2610510b53040c506786a646c85ab5475d134cfd3daf93d187cffedde1bf5fefb95a7706189ec71750e0632a09d47d11a8fc58597fbea2fd852530f2330d19591b6fd57b3f4ad9d63adb6e11d78674225e64643410aa71643c46e611866495b17d7df87e32f5cf676457df5f670685093926b04827ee810af903fb7d69c28b4726cc0c22e6c562bfef1ac4eaeff6de7dfcfdeb3d5febca0067cfe3deacd08f2e47fcf2d8fd68c9dafa4546fa881cf233949601a881f8d2d94c5321878298fc9a903eeb1819aa3880f312426608bd86166608bc88300ee190bfecf7859a20922519fdfbc313477eb85e73b66e0c303c8ff76705beca935f3610efd47ee5d7f3e4b3ba1f59e44c085ebd3b55ed109fc4aa42bac9bcfaae90b846a4cf3a762adedaf01a33400316d9caf688d9b56375cf8c00df5be49b4a1320e6c523977dbf044cd613b17a7aeed0b1ebd76bded68501ce9ec30d59a1ff51262a765bb0cd5d3b6ff3ad6ba71735fad6c63b75ef104f960960646513c922bba1a611aae9f5447ac7713d6ec0d7b59a5670ccd173c80fb481b3fd686300a709a2744866fc8ee13f1cb9e88ca38b6680b3e7d0cb8af2719efc32887d072adfd97c1bd4d18b1cc1d316e195bab7eadfaae932b4b1b10cd4b3ae23712390de715c639e402308cb083244b6c920ad6df7cc606d7e0de9f6f32bef218348ecef4f14c88ce7449c7ee562e70e58070638f982fe6b95a88fb0cd0f76ebfcc607ff0847fb0ef923d20031bdc3b0d073eabf0c10df44c286dbf84dd0083e5e10bc2fec2bef4002e43e5ffbdd448114746101b836bd7bf80f071fbb98f9bb280638f942794825ea23a18de7c977884715ce1515f2472e564fa557f9a955f1a5b5f5ca23a5b2b19b62e3d75b23248deb4f9cbab7939e58cd60fb50fdf3fb436f600c91a4202c40f507c085f1a37bef3979c3c5cce19a19e0e40bfa7a15a7e7743176276e5a33746ac827467e6938cc1adafcd2ef8ab5c4ee2f05e4af358ee0e3154e1b848ce7ee43c000580090021778771146ff1891fa57c3270fbeb696795c3303c838fd862e10ab58212b60271f95cd6f43be477ab52be76c7da8eed90fde6475bf214c30258e80204e91d491eed4bf487891a860ccbb8a03e0c218a29f02d0482375238cfed45ae7714d0c70ea4c7924cbc7df90493defdeefea098551deb0f905237c421a4401f29d9fef62fa35957f09227f8ddec2b2be4dfd3bdb0f9efce03ebd5642efd14f3d309c752e67668053a7cb37ea1c8ff0e4578857ee848d75fd06a2aef63966ce36bf86fc38403e18f91715c1dba6e365de4252f71654f0fba9867c09c7048431447f00600c5507c9750aeaaf679d4b600d0c70fcb9e1a32a51f7364ed57abfbf897c4d1a14aafda261f3c37dfc3076bf4d90bba14cd0d0026eef20bc0fa116aa3180fd7f098d1e044a43e841de397ceec84c49a63331c0f1e78637b0ea4763f2c91fac1cc4f684cc0edec29542a234bccf9f13c70110dafcd0e699adf7eb3795091cd28d661b6faa7193f9bc06b00ce0824bcc04841e244a648fecbffdd875b3cce94c0c30ff52f9adacd01f5a7eb64e629473f0464f3464c3cf27aafcfc89f3f7a7d9fc6d82d4ad61021711b4e3860660f5bf808a01e090cf9944914069e83fe8e71ffa7ad739edcc00f32f95bbb39cfea89ebe4536e6cf79f8e30941f62434651cdb3736a7ceed8f9353c32bd8fc6d82d44d6782206e104638430d804003a4910200bbd1944145ca2d8607d5ad0f746681ce0c70eca9e17115ab43bad0b59cbe8506f235691024a8c8509ac4db7c2246fc2454fd5720f2576682e5fdaa1ac068f450670244a2330b746280634f4ddeaa62f521b7c53b2e5c36af433ef8e48d4536116c86ccd88e33a4c2ed7a49efe75f89c85f9909968f57d6009c920ed4990086fe64eed6a3d77499db4e0cf0ccf39347c645f6e7f553b536bb771264eb1a4e944cad0668fafb64ea2bfa72f2f3d79b096a7b041d350000c010ff1fe33fd42f7ce93babcdedaa0cf0ccf393ebc645f6e1eac48bc442c159ace3025c31c3f0797932c4bb7d4657b65ff0e4cb00f99774846f9398a01e0770e3160d60279fbd018005e41840fa91d5e616e8c000471f3ffba141a2bed53c653b9e68a4501805febc341243b7af6f6dbf57fd6e3fff2af2671fb745029b1a80c8de57c704e5eb80fa2dfdd227562c68b52a030c12f5613e4fef685f613ca990af7648c0d8d87fa0015cc68eb2aa1f89acfcdcabc89f616c3792966900eb1d40b21988dce4a78e09ae01f45dabcdef8a0c70f2b9c91bc713fdffd2bebaa6b57286cdd5eb5b0d5092f4b97c7931b27e7f03f9e62af2671e4f6500ab018c4469463c690670e72504705e9f3efa3b6b5e00474f64f7a67df1e878a291f66d250d5b1dcbd7c811e02ddf58428f4bf4ed388924f4928df805e961881584c970dfedfb804860ff8d7d4c0c30a7565babcb5b360210035901e885094ebf9c63fea719e0cac71436a2d632feccbfb903fb067dc85db37fefcc6d11c80878e207139c3c33423e5efdfaaab10472ce24d2b9868853d0640129523e8a6efa5603487f14bd72ad3500f5dbfaf4f44da29519e0c4e4690d7dc057d2882432b722892b65380d504eb1fd39d555ff91f725b8ef837bd7fb16fb962d9638f6548e27be373f1559fff9ae3b70f0f6fe865dc34aad2c817fff852146af9c9b890988a6680072c867f56f910f32647b7c3a3b73ece169d73355031c7f6ad2d346ef573b585dcabe426632abf679ac7d36abb3f9d6ef37998ff8b91cb92455f83f7fb57f43271f00e4ce1e1eb847e2e45f1e861093561bbb6fb035930f00bd1e70fcfeb9d9348199a2014c3d0e008c39d9c4c0820e10913cb0d2f54c5d007a51ef07644f4f346bcb455e717a92419a60bca4511a30dd1bde208291a025fbff9c53babf76ef2ef4d640f36b6d6a1770f22f0f22cbad56b17d966b20debceb686d3b81fd6f47753dcdeb6b8e23092ab87e819e2c8019200322016db27a1cc07a01647c7fb37ae791374ebb94a90b40f5e57b00d85dbd0caa6f91bf4342c39d8a85dfdde353b0ac0538db55fa957be47d09e6d4e6a34ebe05f8cc5d77a089ac6ccb4b330187debd0fddbc01be8fcc048d388055ff550410e0c33204619941405d4386a69e329ece0093ece6be81ab8d0bbda82be41b46760a2e8342486d2fb1b054310320d18f321cbe7d6e7deeda1ada1dbfdf476237b01cb2e456330000f9e612ab221f1294b316d0b906a214542c004e00fa1345b0154a9c06108116d000f07bd3aea375013cf4f5ec3ab943de9421830c3480f6fbd7f694af71397cf0b97ca9b5592e1bf6a3b7ee5fd71b376bebf580fdef5075646d0306903b7bd8352867d700f1007e2f20d00055528904402c1c6d0fd06c0b4002737aa27b3076970f95cd1f2df17898574c00c0f68c7c722b399290035aa75bb6f676c7ee647b6900dbeebc795f770d90b317a02d037036b1b0b58f9ccbd763018e9a0600801ba75d43eb02d046efe6ec55bbdfefb357b9b68fb6ea1e286d258c30e26757ae6584bdbbe4baddb0b5b6bd83deb6d30000b0eb4dfd1923846308cb009506b0bb80e0f9e00d24786f80b7dcf106b9e7beb7b65dc3140d2077eb5c4342d4902d0da097380ec06adf215ff9d7d152c50c2add8c284b87b613db4e0300c0dc3bd14103386f2a03a0a66b0054b99522aa18c0450c891676b75d43fb23630cae97896a54c0945c013391d5891f57fcc115725a62f5af9778e5a66fcabbdd891238fab8c6d047c85cbdff95c710133c704fc7b842c211b65934c0debb8f43c60a77dcb20bf77d70752fe6be47e6b1b020509a0cf35f3fd8e93beebb6d3f8e7d6fbe767d59a1978d45c28b41c50376052305d0a82a516753c57df24864c3ef510ad00244346875c25b17800494cef9440aab7d59217d29447cea91bf90f399be496ef7b5730dbc794fa79b902d0147bf7bca46c04e3522622b8fef786786bdbb57373394f34d610db0afd3753924a67157264b91e51ce13b7bbedb7589fe040ee9fefaa2b6710601055d8c506900f8aa691ee970eadf6981053b5e685d00533440f69b2a9620d8cc1fe32a58c067add623801906fe448f0cf6fbbbb5acc09a77cd64d24d63ac4d03f0ebc7855efda5aed9efd1ff2c3abdfcc86d73e8fe7b35443240a5016c04d0648c74d808a053ff061018800008a4dd16c07d5f9ebf06903b75ae919ababa87e18d9e0af9a8310002f59f15ac4abb3457dabd9b5f5c1f6779d6e93bd6a601f8f569e7c5dcf3d7f7c4e953ddde722d20dfb4abe3ef55a07c01cb3440848a0196f58e01746bf1c9650b40c56a6709706975b8ca16b0f9fbee840a2af56f5768ea116957a4cd76edd40aac3d93a62303ac2d0ec0af1f777e7d753f464b7da063f9e79bffa5ec16118486b20c50db0b3064e300f0c8e7cc2080cbdd961040b705a073fd46afee8daa901ec6fa818626901553f895ea844987167757c3cbc7dd18606d7100a701babe3ead5ddfd9856e053ceebcb96344100ada3200ac8df735923de2edfdf0e3b1db1d6cdd0f58b60064acaea9b275abdab775e48fbd1648ddf9f6e0546f85846eed72d4002a513871badb03c4e606dd7fbf8f03807f77cfa681f19173b2c52cc19ac0903d520e8848b59e1568638037b8d8be6302426a91ce63e13580c2380fe202e05dab6ae55eb91a20cb35cefeb4dbb5a107a46f2674fafd2e0e60732acb658877feff426d4c46b74e468b0648adba77b56ded38e1c2c7caee024a7b8ad5d5bd6386c85055c2b8b235001285bcd02827ddde79f8dd3763e5df2bed29e20138ebd7ed023ac4db0860c44c00affea54d1641370618e54c5bcecff7e3a9eabfce00bab672af6c0d00487cf37b67bbbdd332c04a1a80e3000b00529f0d5c3d9164aafae72f30f47adbf7b631404901d25560f3c9effa5567d97c956b67a36a2bb75bbb5c35009041eb6ef18039d5472226abc701e201dc89a0d2c7019c06003828045b50aa8488ecf747aaf557b76980d796237d39f2ebfebf6a20ffaa0670dff7ec8fcf75fd321c7ed7be15f602acda9f2c0080df052c97d9fe2613901b77630019ab57ab275ed4fbaac60def09106c04107acacabdb235807bffc917bab983894aa6ab7f77aea23ff011c012f644109cffefe2013623c8d8c3229c20fa6adb772e678025fdaa8bfc11aacc9e9abf6fb8bab70818801acc70550354df97eb6e9b62076fe9adf87bab9c4059cf04c27406a8c6d46d019c7ce44049262b5d668ff3f3c331c0b69f4c55e5dad7b8b9aa01965defb11f740c0b03d87fe39e65eff75e9671d5c132286beb390d8c7c1c00484128ab780084f30e5ae392eddbc1907a6149cf8988b77845a46c1f8c1bb6bf4d030cd06dd76def2e60d7db8101edb35b997b40668c41b4f2f88e641fe45bbaddd870974dceb01bc81ae08e8eafef81f273cb76f510490cf5a45362ac5204fc64f9aea08bbfd084cf01f89359665853fb64160053d700f6ffad67045b170099ece78358cef12960153c7eb51aa7313f70d99584e7fd6a5ea93a674db0301e02e8c6045ffab89b14f7fab98ee38e2d5133e703ac5503b4ede78f7ebaa7d3e9a73bdfb517c79e3a5e7f7f6eab89e5237b2c6f640b4d8faaa3e39104dce1117f40947c5e80005a1f40352d23e8959153f94bedfdb24c20170f28f8ef2834b2a56e5ec086b7726b350020f1ecb96ede807c0bb8347eabe6493df2b9be227cf62f8231f754fb3f19fcbcedfb5a174069f430ac6f5f1a6d3540d52b67fbbd8db2a758ad57e0cebb778d846d649bffc9d66a0020c3f89f05d0b1b8fbdeb787d71bd407b8c0bb803e02684a9b0114a87fa0e60508c0ed059c6ffbae690c70dea9fd5a3e80ddfd2bedb857d300f6cca0db0b28668b846d643b753edbb23840381e2e74fb944337ef991207485152180104c89e0aae7a8b7ccf0880005e23a37fd6f65ded0bc064e711cbd781aa766f5b7dfb32a8f4e12b59342a5d0c47dd7ef446b6f91f9cdad238801b3f71ba1b1876bda9573f11043e155c4500dd415004bb8003bbefefe2001ef920e07cb938ec16080280f9470ffe92723d2453f9fdcec68fac06a0461e805fa985663ab20c70faa723ccbf74d10fb658733bfaf859e4d4df720d40b9c6e99f74fb949e42fd4410f848384ca8fe3504886dbe696102f2ea1f02383dedbba61e0d93b13aed90cffbfd3611b359dfbe2d1f20ac0194283cf0d8b35ba2054a0d1c7b81d044e2a8cb36fd0560560db0309e1611e571b634ea741f861a9e69853d75adfa1c5473874058fd0355a4cf45fe04bb7e8c7cc704539f4a3efd6c60ae5f0c57f2c831818f0c5a9bdf8c03143ac809e4ff13f5f1debf38b9a98b60a82738f0c553ad489c3fb3fa841efdef67fdeb9f3dcde7fa576a67cf67c89656d6005d35d1e8a7936511557732ab1efba74af59363803c44bed300b3338088d577c9e8d79508aa5afbbd81ead46af8648c5ac5cb460d208a24defb172771f2b9496735bcd676f4f109feed1747c88b769bfcec0f4ee1ec0a5e5936aa3347b634c213df5d21e4bc081c7b32c334e487e3536708e50aebefec39e0f38f3d1b3c23c89686b309a01c01b491be60d70f109e0902e44344eafc241bb6ba80c02a1542f6de3dff8f30d94db5bc7c6458b1debdcd565da902689228ec7f0770c7ee3d80c83be5cf4f6bd96209500fcffe7808fd4f3d3cfbfde63982e995376eb9710f0eded2c7fe77f2f767ff041c7bfe2c9ef8df79ebeb55ba0bf7bcaf8f83ef52400f2827c037bf7716275f208c6dc4ae4bcd9f2451b8ef8312076fa9bc8ba19ee0891728a86ce29e11b4005c4851d2083d435c0dcc9420ca011028180b63237f91453ef70f978bc34faf6d011c3afe2012f957c839e69ee516f945e66bd8884481dc43220b17b19aa506ced5f1aa358116477c388746804940c508027d903d2442c405b9c88c2abfdf8312ef9e64c3a91a60950530af08faff2e7ba245f88c1b9b9b1632831fa31b12af8ec3714b6d6053a2a49c279f462cf6880043209a582f20af6c7ec500bf2083df9ae60202abd4093c7b62bf56b17a114e03d4aa5a071ac0f9fda1fa8fdb6de0d5f1b471c3ef4f78f21538bbb752ff0a5529382e32d188f8851ae0db2b4d3ed0a152e8dc1f1f3b22907e83609f5787b13d6c30ae3440a4b601722e8f71d3f6c39582a31140d6f63be403801bd791effa774cb2e18f569adf552b858a24fd36615caad84ebecf11e48b737ebfab09545fc98d58f6b640da761bbbfb25eb7e7f3cf0e6b4f4899f3675dcd8fc7fb2615f2c433e44a47eb4dae4031dab85cffdf1c9e3b8303e846bedf3eaae1d0058b0070f576684ed82aced3eae57514f810b2cec4a6bf3d9d69355fba555ffec05b4201f64f0d17271f8df569bdb6e4f0cb930feb2e8f3e4ab3efba522b636ca328248aa4a215cd3a6beb29733c195ce0ceef787c8e7c7ef724978d9e2f713844979f2e15cbe65c807016311e16fbb4c6de72786cc7de04b4f03ea807fd2a57bd60fc610d70e40ab3242dd7bd82ec8dbea3199acb51a785953fb2588c6acf64326402bf221227c72920dbfd8655e3b3f3348413d8c20c893fa071b3926b08b203c3b08a711b26017f1aa46f063cb942ee2e71f0beb914f001290c9f93edbc907b546fcdcf8550256a57ed7667a6ad8dcfb8effaf12d9fe2acf27f0ff0346608dd0c2042d7184ed82c4ed827c56fd64fd7e17e4c91b11bfa9aa1f64f0d97271f8b9ae733ae39343b38795cf369500b87c8c7be031d7af0f3442d35b80beca04adc8b7d9be86ef67b5dfcf113f10419812a01cc2c869c807018588d4d76699d1999f1caa6e7fe8e91ee48112193fa902f69082e1e7d601a818e15ac50f3abe36d006b6a0f195ea2dd4901f35fc7d6059c48f2887f0fe7f6bac3fec3f3dc986532b83b7b5999f1ddc83fcd31259e998c03fb3a67612c56a04fb946b42e02d34228ae24a62821af26d9ebfcdf44921abc7be180d61a4457ee0ff6359a64f38fe31019d845fd8d6f4f4f0b9db1ffa5469e80b21f2cba068a167829a4608bc8568d0a20d2e6f2668453e52b8bd6146be0499212bff30e2b7b2bfeffa77978bd3377da6b5991900004a435fee45ea15f7b42a3ff935f5dad40881b7e0e206b51345abc50db61192d7e2e78736df21ff4265f339d63f84307dc0383330b18b6245e48380136b997c608d0c0000ea96076e4384e7aa03891ab0c8ef8153c67b91f01a2164025c9b821f6ee0b4c1e5cb049d6c3e248886acee29076826e4bf2a22bc6d920d5bcffeadd6d6c40000a05f78e8bb30f8a23b9fee34402f8860850f350c990017c655dc208c20425f064cd08ced87c867efc8ab7db2c8a721ab7b2276fdec2e5f07e44344f8776b9d7ce022180000d42d47af03f44b007ed71d548419c31f38b38b2364829a46f08c30406bdce0128e20aefcccdfbacd5f23f221227c71920d3fb9e609c445300000e817ee7b0d483f08835779f2b55d044015d1b2952c6ab1ed4aedb6c60d3a4510b71ae9ab21bf8aed8793cfc8e7c977369f9ceb371bf27f48c00317337fc04532806beadd5f7a3f41ff0f3e9604c05dac7b8143bad308ad4c70a9c70dc242cd4ee50ffcb37e4b1a054ff8747e3ed6a2f62122bc4a067bcac5e9c99e5ddb4531806bfaa54f7c47403dcc932fc1d9aad2324160fb89e01e31a78cf57b4d1f30231b3708bd854a2db7c70db64a2304df173293d7303cf92a1ed8c94f001ab1260a269ffdfc99d53e4484d7083820377aa0000005f749444154bc1e930fac1303b8a66ebeef5102dd5bdba502f81936208848d81f617713ac7770297a0b5eddc365f08c577fae5fb88f6f720802c8cc847c90c1e172717862bde66c5d18c03502dd2fa0be639f57c7171d64b0f84c16530226050226e8d9b4a7d438c648800b1aea02df54e19f4ce2f6165a98c04c41ea46aafb90a92ef0133dc3342ee5327728b1b6becf317d2a2df2fb5d910f02fee37a4e3eb0ce0c0000f29d47ae13119e2343fb6153151d03385550fdb88637305523d8886233ff6013228aadaade7a2b40ea6dfcb467f91295fceb5d2cdfe6f275d8d56bf62be6f7afb5ad2b03004076e6d86b6470a780fa214fbe433ec709fcd8fbbd928f321ba71112468ee95bb5dc074807cc1046144366b036d83ec7b03b33b48c9b4877d5d18ccdd32f17a0e284d3b690b086b1d7eb988cf3f72710a6072adcd6aeddcf2f56ddd56b8ebfbe11930f6c0003b826f71cee21c21330749b63827a8f2a5ee09941f81f0df4d8a55c8d194ccb5e83d70c53f21156ea03847316f4024235ef90ee5cd9321c1bb7858b2a6d8b720838db3f357f7fa5fe73e5e2f0b3eb3f43dcd69d015ccbce1d2f61f08702ea044fbab2374da18a03301354cc90f3feb7cd8469f71e2a66282988309a04548e905acd800b89456a0a2a471082274709fb70c5dad8febf1cd9d7dbf75fe0cf43c988065548478074d0c4da7856f78cf80444198449404520fca667f2b48defdfc8c907369001c226f71cfe0a19fa93b0682a596d008099c0c023dd3183885c89b39019b05c3334f71e202ba6b07b152e7fc15e11585354e3121a3d04af375c8983c3d9fcf900507b4ab7db9f07231b40752edfdb7ab2e7f83b239e5d3d83bbcbc5e1df5ff4cd5fa56d1803842d3b77fc4f4594de0fe035d8932e02037f3339bf3dad904f95460899810c3301bc6698b0663023eb4d581b6cb41f3b578c99833c72d3c6d8bfde8f1dd2137b2823407a3182a0be57f5e4d2b78a894dd9b67e3de595fc5d19e9e1784cc01f6cc6e4039bc400aec9dd076f22438f0b40558aa08440afae1022d16008fb9f48d498a21e6708c736572952f07b136eaf02617588b4fe7f5b622d38576faf83910e08c0229d5feffc78d8c5bb66c4bbfe798bfc6e4f9a5887b6290ce05a76fee48f4434d803e0dbc257b454e0da3669d0879930a98d9839a6903c09a6cf37db5886f0e3be9d1469c3ad16b948acb7910054a24abb4a3c939019d53f87f25aacde5d07596f85680241d6cff7a9da33a97b377e5d44f8ec241bfec1664e3eb0c90c10b6fedbf67f0cc01700c40ef9ae2d1b473d5e1c51af620843411c01013334bc0cd3a107aaf719e2bd0c63e317dec6dbaa1616e91ef1feff6b423cc8e0e722c2dd936cf8e2c5dfd5d9dba63240d8262fcf7f0dc06f0be049bef5b271539d77c0828ab540e96dac630a466283298c432c553d1a7dedff8e6172ff79c2faedfefb6c8e1e5f2055b17bcc84f470fc1a010f8b086fdfaac907b69001c2d67fdbfe0330f41500d7fb3f7a8486b6bff146aff2ad26c00accd1d6a3076ad6ab31541b56080f18616d480ffb7932b8bf5c1c0ed7e5065e44db320608dbe4e5f9671089df01f05940feb23ef9aa41bb1553c0aa7c0ec250e52578416699c3bb64c1d890d50a7dff7ef87dfac0a6d7903ef52c5ed7b116913a3cc986efdd0e930f6c1306085bff2d7bdf00888f11e8cf04f0c60a39d59e426d77d134fb06e28029363a789fffdc8b46f6b4fe6764f0b088f0d8245bb960c366b76db7005cebbfe5600ca33f82089f22433b839a3776522f89f18f04f0e549b6be3b78ebd9b6ed0270ad27e77a023840061f16116e23836b3600a1ebd9ff524478920cfeb65cdc3a71d7b56dfb0510b69e9cdb29a0ee22e84302b8691b211d02788680c704d47726d9335b571b77c676492d80b0f576ce5d2f22ec27835b4584f790c1ce4d46bab691bbe745841727d9b0e3a3a2b757bb641740b3f5e581dd047dab007613b05b40dd40d0f13a217d2ca05e21e8a1005e24e0fbe50ad5372fa576d92c80b6d697732919281161b7d50e3706088e45841bc8e07511e1c7c1df4b11614806af8908e7c960582e0e2f194a9fb55dd60be06a5bbd6d8b40d0d5b675edea02b8c2dbd5057085b7ff0f7311cfed6e480a0a0000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="9888">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb0000200049444154789ced7d7fac1d4795e6379b4e54576a8b6a84a56e8d86e1494619bfc1a3d8496637d620361e3202ac30221e869d7889d87895158430a361078188820699250a19841692d5203c3b9aec33cc04275af26ba4cc3c13816c84e119c9d135086bafc50a556b1da51bbd96fa28af22f68f73aabafabebeeff57d7ebf1cbbfe29d57bf747dfaefabef39d53a74effc6af7ffd6b5c6b576ffb375b7d01d7dad6b66b0be02a6fd716c055deae2d80abbc455b7d019bd14e9da96f34551e274aa3a0f2e644691455894469182a91290d531968955579657e96aa0c7965f2231f98fde5565ffb46b7df78237901cf9dae6fcc14de658876654aed3215cd244add541021510aa622640a3004240a282aee4d0568059444d04a21af0c781150ad15863915e752958cf20a17b4c24b87efccde300be38a5e000be7ea1953e57764717a87a9f277652add692847a2521415f7a6ca91c51a46105f5425121907c8475919e838435e196895a0ac0a6895c8384349dc9b450320b9005bcc27485e34b678e9c17bf75ddaea7bb1d676c52d80e1b97a0f11ee86c2874bc26f6a05a002a00043844c909e288510f91ef131233e5308269fa0e316f2a16320af0aa42a41ee1862d1400f32989a900c14cca24136486016f1e344e1b8a9ccf1a3f7edcfb7fa1e4dd3ae8805303c5fefccabf2c35ae90f9754dea4954659e5d0b1205c909ec46de4b7116f90a9ac9974417433e9063a5e19f91932186b90208141018504640b1e5b03850c64cd731afa786ecba71ffdc4fe7aabefdd6a6d5b2f808533f5cd2ac65fe615ee4e638004e92531223df22b421637c8675bdf20df90433cbf2faf0cd25890aec0931e33d25315205fbe87919ec12c12921d0ac5a241c2c817662990c4094c5543ab019b13955579557f5d2b3cfce07db3dbd6446ccb05303c5fdf9657e54369acdf935725b4d228897b8ff896ad5fddc6af88f4387393c693bda38d784409e0915e40450df20b6b00463e7494a1b4068006d9121a1ac6e6f500e913b5cd1f7eec5307465b7d6fc7dbb65a00f367ea3f48e3c151aaea77a9188cc810f982e046c577d8f850d57b6117205d6c7a1aa3a1f94582dea11aa48b8d67a467286a423200cc62816c4737f2333508165b2d4ce2162d90c478bda8f22712957ee1e827662f6cf5bd766d5b2c80e1f9faad79557e258df507f2aa441a6b74217f5cddb7fcf92ea4ab84e93c6e6cba47360c8000d9814dcf22463a900008901e65803548e4fd6a02f25368e4360790a2961ec8ddff6b407f99ac7978eea183d5d6dd756e5bba0016ced4d7a9187f95131e4ad56040550d8f7c25c88f3166d303db3ea6e61dd2c7d57bcb860f0053174ebd23db21c85649c02c06499c358c422220a9417a16678dcda731e4cba2f58ce517adc42178d1fed2547860eef3fb9edeb209c0162e80f933664f1aebb9bc2af77423ded9f0b68defb2ed3a62a46b952c57eb63363b50ebc82267e335604b686428c14806d886e728a11cb2238ddc9650d1d8181a24af2f6d0e448cfc0c298cf5c8f79fc363af1dbead907c6ceebfeddf12a1b8250b60e14cfd5115e36ff20a83341e80aa1a4ac1abee50dd8f235e47405911d4984dd711233d714877485682d4d8abf3165253a5f9fd31505625742cc8bddc7180fcc27b23b2884b1779f48bf8975a25ffe1d843fbbfbfd973b1a90b60e15c1d9754fecf34d67f92fb9bd5adee4dd961e303a4e795815e0a912e8822b6c9b9351e71a2c6315866935340104b36f7c85ede07af0ffb88df9f458274198fd97ccf106d2668bc07d804648bd755947ceec423fbbfb06913824d5c00c3f3f5cd54e15b2ac6ae89eabe1a8bd957808a1ab59e57d420fdfa06e9bc3818d9acf6dda2729fe78245842446b0a8802c669bcce1e2f6b8709a80d8b57491c4824a59ac2efe90238b05e9b162a11ab7919f396fa015810ccc98f28bfbc5b232879ffbef8736c5246cca02583857bfbfa4f25b5ae981b3f12baafb28b0f1a5dc9c826db72156ef44866db4d8d49a1879b4cce6364873b6dff9f54ee54fece5752a4a4028a0c40b4094013050917c6e940128bd96e8eac7af07567e875c87eb6b6b3040f28bda167f38fff8a10d7717373c1f6078ae3e02c253a9d2839280546980e0119a791b99c29424934f5051828ba5818a128c2e11d4f5094c3542122528ab1a2ad218553914348a8a308046598da0a05156060a4afa24e847504850c8b820d33d26fe5eaab82fa9808ee473225e7cfc775ea4bc0834880c12a54104ee2d330d2c90c93853bc78749c815040c71900765561d9dba86df156c4d9a9031f3bf1fb1b3d3f1bca000be7eacf96541e9dacee1b7fbea17167eb0deaa504440512cb369e6c80747248378015640b330019ea00610a090821f23290f3e3c77aa0f1f719e9010308330ca20c350c06c1ff3d63a0683e4f980208fae0fb5d1c82af937fc7d87557648bbb4efddda117376a8e368c0116ced55f4585a38d3fac810a32f9e4fd62af8aa30c7949d0518251c148a40a5048302216747588f4487722bb8e18c149c48b075182d21a24110b448a9ae00dc924876392d7258a7b08e2137125e13f3f434dbc583d630853906d98c17dae563cf98c7c0e56c1b2a0255bf0ffc1f105a0401627201431e2e4d9fdf7ceddbd51f3b4210cb070b6feaaa1f2e32cac1a759fb5105f7a5bafa20479c9376354882a260365350ce580d5286d09582d08ef46ba435263eb1de2d8aff7da60dc36778de5f561afa20ea60818a0cd0ce31aa1e8d41e6d4d30f1f7bc4ed61c5ef887c3ffb8de73b5ee0cb070b6fe22081fcfc41fe6c947a3c255ca6a380a68bf0423ff12bb74655543816dfc009a6dadb3ed82b82ea49344ecc81ac0214e8940933e8d651caf3296d787ef27dbfe7cb206896abebfcd0c190aaf1104e9c43dd0203f15c4eb98174f12333328c58b45beef3aa8ec1ff6dd33f7fef59eaf7565805367eb8f16943fbe1cf1cb63f7a3526c7d61a02cd33c23bc446d358872d018e26b67336d831c0a62f26b42fab46394f0365dfedf6686d06be86086c08bf0c88f1ae42ffb7dc11e838a744d36fff7c3e3477eb85e73b66e0cb070b67e7f41f8aaf78f5b88776a1facdefde4b3ba1f79c440d47bee55b543bc525983745bb08d0e90b866a44f3b762a5e65bc384266800104d999f450ecdab1ba0fb480d30071e6ff0f793da1602640117cbf066c39502a7d76f6ee63bbd66bded685014e9da96f2c28ff5112a771312133c7542574a4918b6b670a83814d60a851f70ef16485566dd2d844129b38a6a6e162f7eb8df49ee396561084afa6159c161838e447a137201aa18b01a05dc47248b6bc65f84f472e3be3e8b219e0d4997a50103dc9934f41ec3b50f915fce46b95c0148441c493afa250dd8bfa17355d873656f1e46782a016123702e93dc72de60934821246484264db0289d876cf0c62f311a87f87fcc67b28a1620d428e344e41b69c554a7fe572e70e580706387172f4b7599cdec7363ff0f3fdc607ff888b42fb0ef923320069144ee553a3feeb00f1e348d8701bbf091ac1c70bc49c8df78d77a001729f9ffbbd0d050d5aca81ebf53dc37f3afcc4e5ccdf6531c08993c5dd599cde17da789e7c51f9259a706ed4207f54b1aa2f88387227fe3491412db63ef348696ceca6d8f8f5d6087178fd05103b752f931e8b66903e54fffc7e5e44a94a79f21d13ec4881a5f2f17df7ccdd783973b86606387172b42b53faaca1d29db8e9ccd069219f18f9b5d5a0aa6df36bbf2bd611bbbf1290bfd638828f57386d10329ebb0f0103c82e2396e473adf909a2ecdf0e9f3efcda5ae671cd0c9028fd0d43883395caae99ec96399bdf857c32d09106117995ef6c7da8eed90fde6475bf214c30218e80264ee1fc7ec70c4efdab981789fb3c15a720301360a984daa10118e828bb09d67c7aadf3b82606983f5d1c29aaf21bbc45dae4ddfb2dce28c3c56acce657ece71794832840bef3f35d4cbfa5f2af40e4afd15b58d677a97f67fbc1931fec2abe56c3ec1d3df3e070dab99c9a01e6bf57bcd95478c4ef8fbb7d7577c2c62566466db5afa3c6e6b790af02e483917f5911bc6d3a5ee62dc46d6f210b7e3ff93d01b6f970ea1f25d48e943f3fd852068a1b32647f3bed5c026b6080b917868f6771f6d1b153b53eb9611cf9860c2854fbd598cda7c0e685b1fb6d82dc0d6582312de0f60ec2fbc0c84f9733804c7e0d8301146a4b1820b96bf8c2fd5325994ec500732f0c6fcce2ec3ee377f5c2b3752e253b91ec5bdec2d591466d799f9ff7cf45e8389b1fda3cbbf57efda6328143ba3550ce5b9071c37c8c78af0184015c70294306f0e4a346f1c8fef73e76c334733a15033c77b2f85649e643cbcfd625b85871f0c62c1a24637e3e51e3e71714a8fd2e9bbf4d90ba354c20ff0f229ca10660f51f32001cf239932852a82dfd97d18b47bfde774e7b33c073278b3d65457fd2ce65233984c179f8e52221b93e81a18263fb96e3017e7f9c9c5fbf82cddf2648dd742608e206618433d4000834808e3200908da6025994c962d00fcddcf1606f16e8cd00c79e19cea52abb3b171a2fc965e7b6916fc880a0415589da2a6ff38918f145a8faaf42e4afcc04cbfb5535803518c03181e6ace748f566815e0c70ec19f3d654651fca893359f8742e1fb064e4834fdeb85d3a82f8f9a547be8edcae57e2fdfcab11f92b33c1f2f1ca1a800fb7008e094a64510a58faf3d93b1ebdaecfdcf66280132f98474a2afeaa7daa96fb7231c8d6b592286935461dfe3ed9b18c9d37909fbfde4cd03a97d0530300002cb9cff9e3d1c947bfb3dadcaeca00275e303794547c84279f919f1367b19604ae98e176ed6ccd899f366f6c7fc4939f04c8bfa2237c9bc4044d0450a3c504e31a40269fbd01800fa59400f47dabcd2dd083011e7b72e143699c7d6bfc946db968a0916114f8f31ef95683c4f67bd54f63bb5cd790df7fdc15091cd700e4902f156a6cfd3a90fdf6e87b0fae58d06a550648e3ec237c92c7d17e8672b1417e3648002bb17f5b22512988e0b3623351fd8893c6cfbd86fc29c60c96e51a2001609021613310b9c9d7c204d97580f9f06af3bb2203cc3d63de5c2e9affa77764d77556ce905c3d850c3919d4a47d2e5f598dc4ef1f43bebd86fca9c713194034804d505b293e6201775e4201e746a71ffbbd352f80c78e8f3eaa77a8c7cb4503bd432a6948752c5f232702e7f8290df30a6120638504a694889f3fa5cb112e850247eed807a514f6bf23430d607666b5b5babc8dce03504041c0f90b06674705e65fce016a0a3c41659de34f7ef000f6efca30b37bfaef9db6d597b8e6c1f33f323871fa3cca5756bfbe66ac0139eb98573994d2a0c55c8ea21bc00e4403687f14ddef11b0abfdbba3d347276e12adcc00c7cdb306e6a0afa41125285cc60a71a50cd600414edf98ed2fa9adfa8fdc99e1fe0fee5bef7bec9bb954e3d833399efa97531391f5d93f3b80c377661b760d2bb5ba06fef3171770fec2f9a9988068820620877cd600827c9025e9f11973e6d8c393ae67a20638f6b419186b0e64035697c98e0c852d900c1290059298cd009f7001db7e5bfa3c7817f1733972fa2d19fef5af0f6ee8e40340b6738007ef9dc1fffacc5d508a3a6decfe5d5b33f900301800df7860df749ac04ed000368c03889720de00830e50517270a5eb99b8004c610e00c9c02c1a243c0690c02c16482c98dec1899eb5054cc9bb7d7925aabf94d74ba1a6af3db017c91a687ead6d76cf00739f3984b29298baf4656500b579d7d1d5063b8103ef50cdf58c5fdff8d83140a4912f3a06288048c1d8a2890002e03d0408e30264cd6d33b71e79f3a46b99b800b21dc9bb00c8ae1e57c7220b242a81813bf12267fe6c2ea760394cccd9aee2f7c7198edc9962762659875b375d9b99013ef96707308eac8236fd5296b5bb6edb8b7ede009b83344e9909c23880e57c8b260208f0611982126650c8ae234b134f194f6680c5e2b68185ab8d0b539806f982740d2e8342e0ad614282dc215ffa441538fcded975ba6dd3b7bbde9df93a800e59c916330000ccbc0d5815f9b2a7828805a063023801e84f14412a94380da0022d6000e00f265d47e70238faf5d10d894a6e2ee072f4c4e6fbfd6b3ee76fc4ef77710077d2c5e5b99335b8f7f6fdeb78dba66f830170e0969936b2b60103643b07d8fd364caf0154b0171068002e4fc3876e00aeafc04ca001d0740b2001664d6506b06cc31334367f5432f24715db7c53b1edc9ab06f90476fd1069ccacdb21a6b5b703bbb7970670ed7db7eeebaf01a418464e81171029186b30009b6160c0021ca106c801e0a649d7d0b9008c357b387bb5e6fa78d608b28134e6b22c994a019054c2606f80c2132eb2bfbd6ff7d6296ed7f6ee4ab69d060080dda99ec21b1095afc63580ec0222055033f2c50bf07b03166fcaf61e796bd7354cd0007a8fa90c34b828a253fbda0279c9912953e58085fc3ff30c40257b01a63298493751f6afd0063bb1ed340000ecbb75d04303c8fdaf4a849551966900e4f0e708a2860120de0151bea7eb1aba1f1963b14bc7d958054ccd1530633ef1e31fc6a03239fec502308b13989299207d4b4fa8d5c0a3df1c62f48a148c2257ef7fe5b18a090fdedb33ae1073846d1a0db0ef9e396895e1d01dbb71ff075767b2fb1f99c7f90b005060feeb877a7dc7bdefde8fe3df3dd5babe92ccb2b18ad90ca42a45be94b306a05153ec5252c5955f04b2851c698072a8a81b8d9d0b40033379c527527239c695575c9bc794d257bc128d203faff84c5f51c999beca00e817671de5c0dffdcb5989809d1d8b88ad3c7edfad06fbf6ac3e395cf0695a0da025fdad6fbc58a3ac38c2b770aedf75253b6b38a4fbeb8bbac6251452e474118d0680544dd30dd2e1d47fc9639bcb38ef5c009d2620b7e56fa64a83c07e7e694be838450d208ba53862a0fec916bee68d524d8d9cbeada09e6ab863cc59c5abb7b569007e7d49a6f76f71d777fe62bf971f79f72cfaffde1c2a0e3500a4e844294925120174eadf82d3c90028e87e0be0fe2fcf5f07e89d7995435b34482fd9e68f4a87fcb6faf71a40562cdfb47e504b14faa9e18e7151f59b9cb569007e7dffc5acfcf53d7f66a1df5b0640f696999ebf3705551d1a2082df1d1c53ff0103989d5d5fbf6c01642a655252290c18e9b5059298cb9f6631af28affe45f5bb7a7789f8adbcdf9f8f7f7c7723ac79bfbc2f03ac2d0e508a0deefbfadc5fdff97c80ba67adcfdbde91f58b0806d9c1adbd004b121700c7017c6690e466da1a0ae8b7004c95bf190ef936f54877b17e3f76ea3f88f9377de6576eafa63035f2694a06585b1cc06980e95eefaeefec85a2d7bbde776bda2f228854b498ec05002200d300f9f29d9e014ab73bd8b91fb06c01242abd8e63fbcecf179bdf427ee94fb06877be3d38d5db9c6aedd7de881a208d333c75a6dffbf6ed1af4febd3e0e00de5b19481a181f3927296609396422673101a828eb3c2bd0c5006fa2969f2fb1feb241bef2ea3f4329aadf310051b872af5e0d5056060b3fed69020753ec0db838005c6d6156fbe31aa06100fff741d7577768002dfbfb827437965da9ccef02f2b12e57f72e8bb9f6adafe4115fdd1a00b20155f4d4016e7770250d40c89bbd003e0b884cd43f5c043062268057ff89248ba01f038c2a5e512e02e8c7b2176004718dfa6f3380195bb9bdda1b5403001ac7bfdbcf1b98795bf7fb430dc071006600970ddc3c9164b91710ec0602965eeffade2e06a829407a16d87cf2bb7e4dad5b5fe55abc00d55ab9fdda1b55030025863feff7b6d999045ad1ea710095c29d08aaad6402595776066081084925afa12259bd51d6f980aa0e0d605e0b91ee10bd1cf9619f351aa0b572af6e0d00689c7cf97cdf2fc3a17fb76f85bd0051fb8ba2c5ac9143216d5bbfdcf6931bf76300adb2579b4a96eddeeffa819fb4499008204cb30bd85ab957b70670ef3f71b29f3b98cee8c9ea3fe6d87eba23f511c01a4676019dff4f92172019419600d1000a78b5eb3b972d80bc34af42327bc20c1fdf5706b05cdd5b050c40d734c0c4ebcd4765af771fba3d59e1f7863981493b13089319a0f10ea8df0238f1c8c19a6c51bbcc1ee7e78763f7840bf7f73aac71734d032cbbdeb91ff40c0b03b8ed1dbb97bddfe503902da53a58810c12f18bb4a4803bf5af41a89b780094780769a73fd2bd1d8c6494976696ebf873ed1a57e3d78fc76c7fb706487bfde87dbb817def50a8692fabd768b7ecf6ad3cdeadf762a667ca41b8cb36bd06e8bb1ba83a77f510690c4745afc4d8d9b703a77fba7c5730978c205ae473006e0b98eca8a5f6c972fc26d400b21bd87946b07301902d7e91aa64964f0167c1e3579bb1ab14e21ec9aee2045415f2444dd60417f311807e09a18f7ec2e50e8ebf7eb571cf166753e703ac550374ede79f7d997a9d7e7adf2dfb70ec99b9f6fb2b03a5525075112932e4762485a6f949295c584af6fd850100881670c7cad0f900aa091941c9859153f9e31aa015fb0fd5bfc403a4ea17c8c0bcd2f7c66d705bdc5a0d0068cc9febe70dcccc801f2bd3a101008ddc9f086afc7e05003449fdbb78007ed1f57d9d0ba0b66618d6b7af7d4e60d367cef67bf52f0590c35ab9287b47c236b2cdffb4de520d0094185d04d0b3b8fbbedf5163bb809213b8c4bb803e02686bc9000ad43fd0f20214207b01e9b9aeef9ac400e78ca87d6fe34b417cc9993fa63418b4344073661070f900fd23611bd94e9dcbb72c0ed0da1bb8d06f05dc75ebeee5c897bea6300208909c0a267b517a41be67084001af91cd7fd6f55ddd0bc016e7a092d781a6766f577d7baee7efd4bfec098c55ba5838b7f529b8f33f58d8d238801b3f7fa69f19d89d26ed1341e053c14d04d01d0445b00b98cabebf203ff2c80701e7ea4bc37e812000987ffcd0afa83243720c601b1b3f120d406379003e0e4046121679059fbd30c2733d03211bd11e7b720125a92dd70054199c7eb9df4a4a66d03e11043e120e1baa7f0305629b6f4326909ebcfa87024e4ffaae8947c312959d0e9f7431b1be7d573ec058f5af2f7c737e4bb44031028ebd58621c89a3577a50710d4cab012ee666c5b8857965d4eb3e0c47684e04c9a9eb740707d50648009b8bfa0738f64f1ef9ecf79343be6382894f259f7c36b0322f85c81e3926f067ffc4e68fc701c8043981522f80140e7ef6c4a62e82e1a8c0a12fcd772271fecc68d5f73ff6ec827ffdf3a709f52a6b66e11c7b3dab4530fb68a2b32f1b89b3041a404e67d75ee51b00d4e4fe9163803244bed300d3338052d93f9335af67eee187ca3d27cf6900291aa11a4dd0aa783956038890e0e0674f60ee19d35b0dafb53df6a4c17ffce2599495e944e2f33f388b5367265fc4e87c9b39cc2b231c7f76f2a2a92f018f3d39c224e487e3f9d3258a15d6dfa93335fee69bf3c13382349786737516e1d47fd2daf5039430410bf950517aae30c34e171058a542c8be7b9efb116c79732b2f1fcdc1c4ce7af792adba520550ad331cb845e1c0eedd5031f5ca9f9fd4cca51a540d30fff210a3ff0b3cfffdf17304cbbfdf8d6fbf69370edd9ee1c0adfcfda311307772014f7dd774be7e269dc1bd77663874cb0cb003282e01c7bfbb8013274b8990aefc7de1efbfff833338747b13191a8e0a3c75b20c2a9bb86704e5c092464d230c2c7135305b83a80440a060acac44fe22413ef70fd797869f59db02b87bee21c4faaf51f189a0b212bf542a80f28995cc3fb1d3b8e7fb55d3d4c0b9365eb52650318246024323c02a5035e223e0d545709a1817e4f26161b8f3003914f0cec20c276a805516c0733384fcff341f267d940687114af0ae5f89cb7a56efb57180fcb1dac0b6464d254f3e8d58ec110196e4f98aa1ed47c800bf248bdf9ee40202abd4095c387e7094aaf42558ce44f13969b6f47eeaf89330ae55005deb78ccef8f79f25351f97c04dc04a77e9dedf7fbfda1dfef34c0b7579a7ca047a5d0d93f3d7644417f8320152b11d4b08d1a46d87ae4bc31c6e3b61fae141c8d0012dbef900f006edc46beeb6f29ccf0c72bcdefaa954255acbf4d286b3e2b58b24db252c152980156d46ac00ccb63d9db0569db6decee976efbfd2a45580e96114fbe5748d80ca013f95051fae3d5261fe8592d7cf64fe7e6b054de8deb356f485c2f3485745546d82ec8daeee3d0f6031a586261578bcd675b4fa2f66b51ff248fe05b867c90c5c7ea4bc3ffb1dadcf67b62c852f965b583273fdda1812551a74b395261049fb3261a418dadece54c70b53383fbfd21f2f97e7249f8a4c3ef2728ab79f2e15cbe65c80701b98af0f77da6b6f71343663ff0e8b34076d03fe9d23deb0725d4f5a197308911dadec37641de568f59bd07b67fc9edfa856abfe61341166d264027f2a1227caa30c32ff599d7decf0c4a913d8c20c8a3c3071b2d31f24976ad5823b85dacb451b7d734427bec9853227efeb1b0d648ce9f8bed977c9f65f2419d113f377e958055a9dfb5a99e1a367be7b17fad511c680e99c9a3cec718813542071374c411b60b12b70bf259f593f8fd2ec8538e45fc26aa7e90c5e7ea4bc3cff79dd3299f1c5a3c9cf96c53ae57af8347bc0386fdd6a5bcdb5b70e7dbaf76265886fc92b37d2ddfcf66bf9f237e2082b23540256b0074221f04542a4abf36cd8c4efde4d099f71e7d7680e4608d829f540139a460f9b975001a46b83ee3071d5f1f6803942d26b8dabc8516f2a3317f1f5816f1232aa1bcffdf19eb0ffbcf1466f8f034f339f5b3830748fea246513b26f0cfac699d44118d204fb9e608a2fcf8b188a2ba9a98a0857c59fc92e9a391348f7db106ca2682fcc0ffc7b24c9f70fc13027a09bfb0ade9e9e1b3ef3dfae9dad21743e4d7be6861d130414b2304de8247fe24ef61eb91ba29c88706ea10f94cfb206a227c5ef5af887c90c53beb4b93377d26b5a91900006a4b5f1e44d905f7b42a3ff92df53aae11026f2144829c775f3d6eb08d90bc163f3fb4f90ef94b8dcde758ff08ca0ef8f75b25939f34b48f4ee48380e36b997c608d0c000033b73ff81e4478a13990980382fc0138657c1029af114226c0f57c731ae4bf7199a097cd972d5d25361f3415f25f5511de5e9861e7d9bfd5da9a18000046278ffe332cbe3490c9972756cac30b3882153ed43064022c954ddc208c20caf8ca6682f6f52b15225fb27b6d63f307d0008da06c22ae9e86dbe5eb817ca808ff69ad930f5c060300c0cced8fde00e4df03f0fbeea02223405e208b2364829646f08c30216e70054710577ee66fdbe6af11f95011be5498e1a7d63c81b80c060080d1c9fffa1aa03f088b5779f2e58c9acf56cd9181eb0c36cc1068043b216ed02b82b8d5485f0df94d6c3f9c7c463e4fbeb3f9e45cbfe990ff43021ebc9cf9032e93015c9b79e7d1f713ccffe6634900dcc5ba1738a43b5ecc65950000065b494441548dd0c904577adc2040bc57f9a97fd66f4da3e0099fcecfc75ad43e548457c9626f7d6972b267df76590ce0dae87b0f7e47217b9827df65abba8a9581ed171b57934166c5efb503c08e246e107a0b8d5aee8e1b6c954608be2f64a640c3784db39483ab5f8cf8099fc1e4b39f5f4eabf6a122bc46c0e1f5987c609d18c0b599dbee7f9c401f6ded52019cc008828a94fc08d94d90479d5d89de8257f770193c6587ad1f7bae5fb88f6f4b2802c84e857c90c5e1fad2f0f87acdd9ba30806b047a4021fb8e3caf8e2fdad9b4a087add906528ecc6a56c356a1a611b4758ca180258374896f2a6b04d92ff76a7a8c09ec04a46ea4ba0f996a899fe819a671658ef948795b0f1fde2dc4f6f7423e08f8e47a4e3eb0ce0c0000d9ad476e50115e204b0720a98a8e019c2a687edc98373051234844713cff6013228a9daa5efe0e11b02d753ff62c5fa29a7fbd8be54b2e5f8f5dbdf17ec5fcfeb5b67565000030678ebd46167729643fe4c9d7f0356c4226f07eaf1c27b34e2330136456895a1e70debced8a2886cc109ca29d2a47b1633c8e743bf67d758e54294edb82620d6307a8a9f44cc6f9fb051fd6a8c4e573fbf9d5aabb7ae3e3af6fc4e4031bc000ae657b0f0f10e129587a8f6382768f265ee09941f91f0d0cd8a55c8d196cc75ec3a4cca4f1f30d5d7d807067e34335ef90ee5cd93a1c3bbf1e68d2b6a88482b3fd13f3f757ea3f5f5f1a7e6e4326091bc000ae99b373352cfe58213dce939eca4d73bd86cb716b98a184c2002e13a6db7b6898a1a620c26815a81e418b66c09212a46a507d5126f5225247e7adb1fcbfbe28af97f72ff1e7a11e89ed6e908e00e9a0426cbc44f42aa7ee0d9455a02a107e933379bac60f6ce4e4031bc80061cbf61efe0a59faf3f0983d893600c04c60e191ee984145aec459c80c58ae19c6f71ea490f220e2039370cce1bfdd698a665cc36080e0f5528b97c3d9fcf900fce2256b9ab37880680234e7f2bdad2739c7df1bf1ecea59dc535f1afee365dffc55da863140d8ccd9b9bf50917e00c06bcd79f68009a86104f80c182d37af6106b2ac19e03503abe8da8ec49b101b6c5d9ca18473c5323bf07187da23b919fbd72fd32082740a905e8da02888e0b9b06e5548cab6f8f55436f27765a487e39c803fda8cc9073689015ccbf61cba992c3da980994611d43cb97eec101f3284fc27522da668c719c2b1e42af9072a017eaf02657045bafd7f68344fdd72d7e310eecc92bcdf72c77e3c64f1ae19f1ae7f5190dfb3c6eee5b74d6100d7ccb9133f5651ba17c0b75d3d3b3e525efb73eede6b083261e062e79e291cf2c49bb0a5c4d4897beb1018d86828f1361440359ab42be599847c6c9e7c8c5ed9b6ff0e97972f113c457242c7a76a4fa5eeddf87515e1738519fed1664e3eb0c90c10b6e4ed073e0ee08b0062877cd7968da3012f8e68d03084a5208e808019c6bc0cdba3079af759e2bd0c2bf10b6fe39be28b61dffc7f4d880759fc4245b8a730c3972effae4edf369501c256fc7cfe6b007e57014ff3ad4fc66e6a70ea950ad102b5b7b18e291c13b498c23ac452d363ac6ffddf314cc82cecb7fbefb3cd593ce795f8c9c75436de8d5f23e06115e177b66af2812d6480b0256f3f701096be026097ffa3476868fbc7dee855be6802acc01c5d3d06a0f17a35965ac306e10123ac0de9613f4f160fd49786c375b98197d1b68c01c256fc7cfe3944eaf7007c0e487ed59efc6c8c761ba680a87c0ec250e325784126cce15db2606c49b4c2c0bf9f1920f83c9787ef913ef12c5edff14845e9e1c20cff703b4c3eb04d18206cc96fed7b13a03e4ea0bf54c09b1be4347b0aaddd453bde8f210e9860a383f7f9cfbd6c644fea7f46160fab084f1466e5820d9bddb6dd02702df9ad8331acb90f113e4d967606356f6452af88f18f15f0e5c2acef0ede7ab66dbb005c1b64b303051c248b8fa808ef218beb3600a1ebd9ff4a45789a2cfebebeb475e2ae6fdbf60b206c836c76a742fa61427eb7026ede464887029e23e00985f43b8599dfe04a88ebd7aea80510b6c1ced95d2ac201b2b84345781759ecdc64a48f2472f7a28af0526186dba030fef4ed8a5d00e32dc90eec21e47728600f017b14d21b0979bc4e48cf15d20b847ca8809708f87ebd42f5cd2ba9bd611640574bb2d9942c6654843da21d6e0a101cab083792c5eb2ac24f82bfd72ac2902c5e5311ce91c5b0be34bc62287ddaf6865e00d7daea6d5b0482aeb5ad6bd716c055deae2d80abbcfd7f11e0ce37042910330000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="562">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000001f949444154388dc593316b144114c77f976ce01d6c6426ec6216cfe88145ae4c61914e0f6c839da43e2c0cd8e503a804bf80d8258d72b51f218d6065bd16c21e28ee2121f3420e768873598bdd98287616bee6f7e6cdf07fffc7ccc03f46a7a501866d7ede3200f32bb5d0b2039c021f81f3a83d7077737df319090852fbe0b1d8e0829b13810ffedc041334680d748aafc589aa3e06be5d3879b9ff7abfaeebbaaecfeabf475b3ffe7e5cef3cd9a98187000b0044a404c0b5465d2b7bfa071dd8c892e73940ef978020aba59610839b3910a84eabdfe8d44104e5ac24ff9403ac5d75b06ac542006b2c00dde5ee2503d8b4d937621011805b970e2259a9a8a00b2cd19036e7cada0231f4eff4016e34bd0189c5e61f72f65eec21081a944c324a5f92c519e5acc44406f54a1667e891628c5955d5e61d0cd6073fdccc4578183e18b2d1db601aa6482c10208b325ce4c83fe71445819f799cba93c964622200939868900c28b460b43d62fc6ecca03760f7e92ec4edcd2cc3f8cd9883b707d8d89249766d3299342364490640dff471de31fd32c57b8f9b39caa3660c9d2ae205005916881af78b0095afee0d3787b7d3eb29a34723929b095bf7b758ebad919a1402a42b293a57e44c588a97e8677d0edf1f3ebff80b2222db2636d62676c1c46651bdd28ad3a54b152a7cf04155e7043adefb00bce2bfc74f7fa4f16dac918de90000000049454e44ae426082</data> </image> </images> --- 259,288 ---- </property> </action> + <action> + <property name="name"> + <cstring>fileSaveProjectAction</cstring> + </property> + <property name="text"> + <string>Save Project</string> + </property> + </action> + <action> + <property name="name"> + <cstring>flieLoadProjectAction</cstring> + </property> + <property name="text"> + <string>Load Project</string> + </property> + </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="9803">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb0000200049444154789ced7d7f8c244795e6b7e7b41525954536aa96bab486ad908cbc51cbac3c63b3b71e6171ee9557c09c59e181459a395be0b9f30906b32bec5d81ce0782f51e96e17c48303e819865b56846ec9ab175f8a7ce7b3d6719d91c035d48b3ca3864eba28f1faad675c995685bca277758dc1f2f2233b22aab3baba77fcd8ff827fb5565556567c4f7bdefbd8878f95bbff9cd6f70a55dbeed5fecf6055c69bbdbae0c80cbbc5d19009779bb32002ef316edf605ec444bcee3063d304d194b98d4dc246309333090b1844e0d542ca1070964dc5dd583e4672aee420f92e5631fecfe6ab7af7dbbdb6f5d4a51c033afe0866e8cf72429aeefc6b83e1940ca18379a149031a007808a01ed6c33285e973160d20c326e400f12f020c8321923d1a939af6269f400af7562bc78e8f6c62533302eea01605e854c06e6f66e4bde9e0ccc7bbab19c4d5246768ef081816af1317fddd901f261060964abebecf0f31a9d586129e5a35ed100e46bb0664142bea0ad79f1c17b0eacecf6bdd86cbbe80640ff55eca3144710e32e93e2b7650c600020069214e8c64092237a04e10340b60226c83b3f836c9590efcef38304e8c4c0d28a466746410f09724640af68a81909bd829fc8199cd62bfaf443f71e5cdeed7b344dbb280640df60560ffa77c9b87d9749fb37cab89d2339191874633eca5619f965c4fbce759d9ef2b1f47a6b7de42b2868ab2121a161202041d6b06d350414c8ea6724e4696dcd935ff9d4c16cb7efdd466d4f0f00730e3789163ead0738a25a0039a47b64e7c81f00dd5681fc02e1ce4e47ec4102d572488f110c127f9e437ecac867a42be815829c15302b1a92910f3903981503392bf9fd19f77eac56f580be29633c7cfceef69e75117b320cec1bdcb270aeff9c68e1c77ad03fc29dd6779d6d209b7cccbc1d038bcb06ed26a097d9eeb9d7f520816c02bd653eea65f6f13ab735e66209bdacd169028b7d8d4e2cb1b8a2d15903745f0390d02b1a12a16d2001981567f7352444610f7453029f4e06faff3ef068ff1bc71f5990bb794f27b53dc5000be7f06ed5c24334c07b84f7d521f21d8293492a7eccf6c22e40baf3e9aa8582e657089d5951207d18207946c10c097206d02b066ab61af9ca6902192be801e54c2263c9ccd4c29b66a0bf2363f5d70fdcdb7e6db7efb56f7b6200f40ddeae07fdafaa56fb837ad0876ab5a1077dc8b80d93f231198cabfbb25de1d34b51c0882f072315de87073e5d4512da1a7e1ffcbeb11a88146035a4fbbcf3f99091e2f7fde79d260014327704f2f733403e4a3679f8d4e70eadeede5de7b6ab03c09cc355a285bfd0293ea7623468008840a5d30080f3eda1bad763bede777ee65e2fabf7920f9f01f4d078f50e35eb903d23a1871ed91a7256c138a4eb61c10c1ee96ad67d5f2c60d211e4e7a1a863ac412533fc4a0f70dfa92fca2777ad03b08b0360e15c7f9f6ab54fe9417f5f35e2fbe806c8d7615c3f8278d9e4d73bb11c57ebd64044956a1d2ae2f310792650309e19309919fcf7e5362468842932abd18542123083ff1eb613005d904dbe27203f71ea3f75774528ee8a0834e7f071d56aff2f3dc03ed56a8306808adb4eddb781015ce723f7d9f9b129a19733b49b5ec839a4379d10bb56a14784f6b5129a34e4b512e96a6037155222c8a6448f3464538256c1df471aeda60491b70dbf4feef78907e1986dd936d640b61460816ecc9d2f63b655ec0649cb9fdf059040b5ba1f2298de038f24efde8dbed8510630afa269d2feb755abfd213de843b6da3083c2c77763099fc963353fe2e39b21136874d642a4b3af25629fcc482f909f588dc6984f669f8e8819c1237bfc189c1f1e9d26e8460ee9ce1ef1f939439499206700c04a90356f8a487efecc23ddbfdeb10ec10e3240dfe026a4e871e703aac548e7a40e5c32c7239c1163068cc4de728276b38bde00986b4a2cf635e64481f41e69b48562a43725f4aa861412c355c29c90585cd5904261e8de27d2680b999f9fae3213a4ab70c700f9fefca60491fbbc65262122c85861911cd29d8d0ae4ab5816b665f705cb821530502d791559f3d0f12f26fffdd0a7ceccee54bfec08039857f10193f6bf2be376c3fbf875d57d33f0f13e6eef6bcc4141934316153e1e90c8c831c098cf2d90263ce29ccff7be7ee2d19d2722ee441171a72162fa1691fbdea85b3abfea387a3db0497e9de131b31a0dc89f67d6fcd1c26387b73d5cdc7606e8bf8a6348f1848adb0d93b2af87f3f58943bef13e7ed931c020cb913fd79458fc0561ee5a09bdda2b7c7a93913de790ce885e74c7046d31e78e6ccfb9f7f97cf739d2d53669cc352568958fa9d302e96ae298808f29f120255bbc1e6a04b23ca80be41b8778ce4fb026c81900b01a2a56c8ac793b5aeae5f94f9cf983edee9f6d6500f32afe8349fb0fd553f709643354f51ad99a049181b4ece3c90648f74c6013c03a643b6628e2efd007073e1f0ae4e3f89163e8db1129000103386668440a19341ac1fb3903c030d3c03383433c42e4f3fb3e0fc1d7a9013b76ddab64cd9d2fffcde117b6ab8fb68d01ccabf81a0678c8fbf875d5fd32b8f39733c8dcc73b752ebc8f97c842a47b448e203b6b3282d9771ba02991e63e5b839aaaf0e156032336b9f364ec0699d300b2e9683aff7e858c343acd80317cd4600b6690cd6ec9e733f29defb726678a4ecc834fb57850a99604c134d1924f1fbce7d491edeaa76d6100a3f1b524ed7fb2db2aabfb7cd66ec4d77348c7717cafaf59159346db4a24c4766a8d7b7d32d23d927c9c5fa8f2c2b77b755ff2cd5576852610510553040c506606cde75beda20853a93dc8969969c2fff326597d74f1ef8efefd56f7d5963380d1f812527cb2db0ad47d1aa8fc309ef7b4bfcc717cef171ab2e17cbc53ef6de17cadf7e50e71554827621f4a5603a11a87611b2647185a1bd8eefcf0f364cbdf4f563b9f5fc50c0a43e2f4b3d702e4f206fcbd4e13b8dfebb478f0701ec140c43c58dcef5d8558fddd81bb4f7d60abfb6b4b1920d1f8b849cd6313111fa8fd9e4fe2f435e62cd33c23dc20730c402388cfbccfb4057228c8c96f0ae9d3da3028f2003e4a0899218c1a2a9821d716e53c8447fed8ff176a82486664f5bf4a4e1ffbd156f5d9963180d1f88049f1b549881f8debb9f359ddf71c728604cc8936d2559dab6a8ff8b9581548b78ccc32123789f4696de7ab39ce1f6106682057fb8ec6630eed58dd3323203f3ae4bbf7e1cee7e860f4f725604d43c4eae9ee9193d76f55bf6d090324e7718349cd8f654b36fde28ad159bbdce7bbd04ef7d9c76b2ad4bd473c39268095854f2487ec11358f60566f4b915ed32ee70df8ba36d20a9e391a1ef98136f0be1f550ce035412413b2e6e6e41f8e5df08aa30b6680e43c1a26c5e3dcf90866c1aa72f83ea953e4e6dbcd50ddb3aa2732e834b9f3731f1b73e72b87a01212b703e935ed12f3041a4138469021b2f3bc40c00ccee79790eebe3f67366b205aeeff6f2990355d11cbaf5e68df015bc00067ce9a6fa896bcb7585fef9753f99c3e8740bde5249fb0697b9f4f4cefb02cf4bcfacf02c48f2261db7dfc0e68843c5f3061eea1880e2440fefb8bb90d01095ad3c0d59dbb937f38f49d0be9bf0b628033677144b5e4bda18ff76be97c4edfa7733bcd02f93d9fab272a54be53f199f3f52a474ae16377c4c76fb546688d5c7fcbab7bd7992d1f0d383b50fffcf9301a08986056016b4b8f1db8f7991b2ea40f37cd0067ce9aeb552c7b3acd77dc54aed029219f18f999e5346be8f333abc7d4ef8eaafb6d61821a79843c5fe1b541c8782a40be0e329a1d606d898f56ff1491fa97c99387ded84c3f6e9a01642cbfa55334552cdd3cfea8efaf407e1eb753913b77be3e54f71c07efb0badf16269890474090a7689591eed5bf68f1205181cdb38a0a585b8298ed00d09091ba11567f66b3fdb8290658ece19819986fe56abf35b2c3a6d9456f30e2f35719e143d2200a909fe7f439175e56f91721f237192d8c1dabd4bff7fde0ce0feed31b19f47ef3d483c9b47d3935032c9ec35bf5008f70e78771bedb61e3176636cb6a5f360b9f5f427e1c201f8cfc0bcae0ed517b2c5a6895a30515fcff5442be846702828198550096a0ca20b9a60bf58d69fb12d804039c7a2e794cb5ba1f1fd955cbc88fc791af1de273b5bf3ae2f3c379fc3077bf4790bbad4c30a205fcdc41781f422d546200f77e068d0604324b6840de993c7774aa45a65331c0a9e7921b54ab9babfef2de3abf24dbef90e1295c463aafc14bdd7c39429f1ffa3cbbfb71fd8e328147bad5ece36d618f325fae011c03f8e452170ae0ce4706f3c8a1f79dba669a3e9d8a015e7e05df3569f291f1bd7512bd01276ff48a861c89f3898a38df33c1449fbf4790ba3b4ce03382ce1ed10080044a0c008f7c5e4914096496febd79e1a16fd6edd3da0cf0f22bd86706d98742bad783cc6dc26077b0b44290d7fad5b40a438bf2fc387935bc8ecfdf2348dd712608f206618633d4000834808c1400b88926836ea4fc60f89cbcfdc1da2c509b014e3e959c5271f7884eddfef9b4c8f187c8d7a44190a05583ccb6739f4fc4881f86aaff3244fefa4c307edc5003588d06ca4c8048d466815a0c70f2a9eced2aee7e44a7bc92a588fb3df2c13b67ac819c512042b142c621bfd3f4b35e328ff32f47e4afcf04e3f6fa1a8097a403652680a53febde7ef2aa3a7d5b8b0116ce668f98d4fcc5e82c5f2796585a0956eb5a89949809162be27db2e5117d29c5f95bcd04a539829a1a000060c97fcf9f98b35ff9fe467dbb21032c9ccdae31a9f96829ee4f3977bd94822b6658de2f4f962063de8491fbfe2677be0c907f5167f8768809ca7980c01ed500aef3391a00e0279c20efdda86f811a0c70e2f1c58fa896faeee82edba5158d0e147a413c9f23df4a90f3fdb9eaf7f3f957903fbd5d95091cd500e491ef99207b13e8fe8e79e9f8ba05ad366400d5521fe59d3c9ef61596560ae4ab190958f0ee57a7ee795d7cb7c87d5b03b46411e75e41fe143683655c03706777c1799646e43b5f3a26e85e0524776dd4bfeb32c0332f646f5d5ad1ffaf33abae2ab64417bb6ffd5abdb6d30019c97c2d5fbabae8e2fe11e4db2bc89fda9ec8004e035889ccf6b8d32ce0f74b08e0bc79e5c4ef6f7a009c383dfc7867563cb6b4a2d1997595347c250c5f23e75aa0d7671f9ffc92d076e558e604975d415382f2fdf19ce1126470ff1df32008bcffe606fa0474e5466375bc0d35f29a41fd5f6638ab532cbcd607dc7e7d93ba8c5a85fd5777dd8983d73530a3a6ffdda9db0a30b4c0e91f6438d3d3487fb9f1f515b604820db12296a0150d890e6f45b76da70164be15dd6f3b7353cbbf675e7960e224d1fa0c703a7b5a431ff2c895116f812ef6e6151a209be0fb532aabfe6377081cfff081adbec579ebaf6438f914e1897f7c7622b2befcb13b71e8f6c6b65dc37a2dcb807ffb2503fddacb533101d1040d401ef9ac011cf24196dc119fed9f3bf9f0a4eb99a801ce3c9735b4d5f36a86d5a59c55bcff7d46829cadf3d5ac70ab745ddc6f4d9ef1f36be4e2eb1416bf70705b3b1f00dab30d3c78cf0c9ef9c25108d1aff4b107afdb9dce0780460338759f9c4e13d8091ac096f30080814017b070a00344240fad773d130780eeeb7940362aab63d9c05ed6c82c57db82e5092258095a76ef0f34e2a6c2d7ff9d6491ba43adfd0ee0992f1c861938ade28e66a08178e7aea3b2cd02f3d753713da3d7376a47129472fd02ae54da710c21905853ce0380d99e9c4d56df22df75ecad932e65e20050b3f23d00dcac9e819a75c89f91d02e57ed2b63c0fa389fd3c4bcda55e623f7d81d025d3973e1376eca36d306feea637762145926ddf14b196bf7dc7610f5a201be8f3913847900a7fe8b0c20c01b4f09c2318380ba8a2c4ddc653c990156cc2d6d0b5f1b97cbaf78e45b46b60417402230f2c9310282e30c0c8ebeafbb45b76dfa36ffee06e2a62a214bee3603009899cbb021f2214103d6023a6002780198ef2882ab50e23580705143ce0413cbcf540e8087be39bc46cec89b0c38b7ef3580f6ab51dd7ef7c4fa357c70bb5f79a78b9fd522ab71fffbdebfb5776ecad66800f3378ff8dc3dc000edd906546738bd0688bd0650250dc076e216a4120b47770468ba012081ae5ed10dd8f10a99bd3edb8b838209002ed5e6914f7e244712f175bb7fb7efdc3fb3b734806b476e9dafaf01061c05e834880222e16a1ff990afc1021c250d0000374eba86ca01a0addea7661408e466f9b86e1eaccb085a836eac0090dbe5cab384648391ebe6b70fa8f696ddb0cdb6ee75d8731a0000ba7163ea0ca1884735809b05840290b909248e02f2b9018bb7b4f73ff0f6aa6b98a001e43e46be18d700cb9c0748061ab01ef9dd9c0168b9600639b77f6befd866db2cf69c060000f92ed4d0003e9a3200d4640d000dae85a421a282017cc69048efabba86ea47c6585c2f5b6aa402a6dbeed59248969167f65458c86999d5bf5ee6913bd75a069747d9a065c0c927fb58cc3364e50a9c936c8afa78f09e9a79851667d8720d5083980edc7d0a325698bf55e1f88737ce1d1c7f6401cbbf8c312483856f1eae7559f7ffebf7e3c4f3cf96aecfa47acc162d1e0c2a760fad881440bda2441d4bf262f148e4d2ef9104484344aa3208af1c001290dafb9c81abc635e0153cc9321f753e329def1ff09e3e1ea912186860ee60ad9b304c81fffcf4024424f18a5d002289b32e03b691fdfe77f57160dfc6bd4903be29ac01ea26a3f87c2edf52f77ccef02d9eaf775db8b60f8ff4fcfaa22adb404041a73d141a005c4125d70070fb0a50d2022e1aa81c00133480f96dae6fe756fe585ebd9b01e8b6587daa40fdfb8c1fcff7cb60bebf5e3329363d6b265bf534c6e634009fbf94ea8d4ff5cdfd4e7fb99e9f397687af1256e7ffd56ec790d7002e03982f2a711940affe7d46108040a7de0038fee8c255809cd503f6f989437ab2cc3e7f31c8f001283140eeb322c9340651eb267029f71a6ab8c236837eaddfd89c06e0f3eb3380c8afeff44b0b757f04edd6fe9affaf72f6880688e02680c6d47fc80095c527c706403756b319d8c727d0e8c60a99855bbfef77a8a050ffaece5d2747a41b916eb56bad9662f32b696a32c0e6f2007cfe52edf38bf50e3a6d0335cb3fdff2ce76bd8c60fefd4be5b9004b40e4e6002259a87f0022ea806c0601d41b00c940bf151ef95639060873fd21f25900860ca04b23b566f23faeaf86c7ed7a0cb0b93c80d700d39defaf2ff965bd4f1dbd75a6c6ffcb51801e0473017019402850ce00fc7aae09ec929f1dac9c0f181b0032565715ab758bdab765e41b46be4d5cf5eb5003144c51b75d8a1a40b514fee6a57a83535e57ffffcff3000e5c0db70c4ca00b805c314b3886200874580344aa72afc0d800d003fd16f248b6fc589522c7cfc817b9faefc238d59f6b80341cb997af0630038dc5ff5defdad000e2b914b5fe7f9f07706b2ab31cf1650d80712d5019c78e0d005fd53a47bab7f34a155df87af78424af7ba74ab96a3f722f5f0d809642baaa817faef7c963b7cd63fdff5706bb889700f859c002f13cffcfcc8d5cfd4bb75804f518a037e011e5d57d6ee7be3e29bdaf4718408f8cdc5aed12d50080c489e7176b7d329e1b567e3ed4009c076006f0ab818b27924c54fffc0396deacfadd2a06c82840ba0a7c7efea40b5bd4bacdab5c7b1f551ab9f5daa5aa010083fe2feaad83e8ca19c4a2bf711ec0692cde0be8f300892b3b03705208ecfb6d061139371ca9ca0754556880e48d6aa457d985ea1f45fe150dc0c7277efc72dd1fc3b13f9c5f672ec0a9fd151e8c7e16301b41feb8ef276fd7630019775f4758dd3a38e6b37e70cfbec97dbe9e30722f6f0de03f7fe66cbd4f0b393359fdfb7d15b345063083db11041fff935b17e05604f96d62bc40f4f5aadf1c6780e5e47580ebfb913b223cba357f7ad9e4730561dc7f45038c5f2f9961ad4f1fbe6d7d262cd604caf24a204c6680c2a67a03e0cc238732b226932d57cfdec5f9a1cd23935fefb47824e6356eae6880b1eb3df1c3fa69e1f7df7c70ecf37994658dab0e66d075be9ed53f390de09686232bf201103e3aa8cc4b4e5a0f600ae43b648fda83eae36634c00105c8eb09b7bc731efbe752dcf2ce8388e7d20dede37f388f999a1e60b734000d3488da486ab240fb6dd5d1809f9d0d3500abffa4a4f6b9f24a5903b8f72bf708564e0793353f57b1ecf22e60153c7eb5b03bb1c2d2c0cd4f0ffc7cb57f9f35c1d2f222807597a5e7ed2b9ff253c7be47654dbb666ba9a9d7036c560354cde79bd7f6d7dafd74e4dd0770f2a953e5cf0f5c35b141cf6dcbebb942d3bd62ebb89ff747c795dd81d3027e5b192a1f403589015e5bf4236f79c2714cfdbb7c40caaf23d5e80f767e2978655bdb5d0d00483c71ee955adf30d306e2a69aa0793af99e4caeaf58c4fb086c3e52e97db2f879d5ef550e80ccea24ac6f9f59ed56fb1647e57d7feea3dc2ed6d12ade353361dbd9167ebabb1a003048976320abf715077e97466601ddf7ad2d01519001b4995b0114a87fa0140508c0cf059caffaad490c709ee702021fef57022dbb953fcbfc24ce4203b83d837e2e209d2e13b69dede5f3c35dd500de36356707efb9f5e0843c40071985194080dcaee0e2e8909f3302208037c8ea9f55fd56f500b0e63c62f92650d4eeadaa6f9f05953ef24a1623952eccabf584e076b6851f2eec6a1ec0dba75eaa07866e8cf28e20f0aee02203e837822257ffcc04995b0d4cbc30143c3740c0f96c25a99708028085c70eff9a063a21cf00b6f0f13da70168241ac8476aaa998e1c032cfc530f2fd7737fdbd24e3cbe8894dabbae0168a0f1ca3fd504834479479057ff7654fd53a0fa7970e54c40b9fa870026f6c0c4ad613256af78e4fb5941b266bcbe7dd57a8091ea5f0f7cfbccee6801039c7c89ff0891d8ab49c5d36a80a5e564ddbc457fd0ab751f1283624790df653ddb01807c1388700c5064fa7ce64f70e817b9d94066821f4cfaadc97b0307fac57024f73c13e4d180f3f9a3798054076b028b38f8e0fd3b3b081233c4fc97172b91b8706ee3ece189c717f3f39f7d4520db40c02d9eefa33fd878654f1d4d645ecbc699b55fce00b2daa742f593d70069887caf01a6670011abe7c9ea375533a86aed916d8b5dabe193314a152f476a0091903878ff193cf342565b0d6fb69d783cc3bff92f06e96ab54f7ef6870b482a3531b7a12e33477fd0c3b3ffb84e22670538fdd41093901fda8b3d3627b5e43cf01fbffd44f08c20c9a5e1dc0250ce00ba4c9f8563820c80c89920403e44a4ce0ffb496508086c5021e4c0dd2fff18d6dc54aa5c018375ebddbbd5aaeb55008d6385f99b0977ee3f088a6aae9f9fd0fa2b19846de0891f2730bf98c1b33f58a85d79e3b61b0fe2f06d02f3efe2df1ff68113cf2de289ff4995e7cbb9fdb8e78e060ebf5b025703f867e0c4f38b3873165876fbf7ebd4fc896385e31f9ec1e1db8acc50628678e22c82ca26c59342b0d641463d342c7135309b81280540a0c016d665fe22877c3e3e9cad249fdddc003872ea7368c92f2078141c5a12484d5ec346b478bb928a79b10267aca6a98173c5deb026507f11121209f500db06ad2e42a00d5ae54d22443d76cfb657c4fd392871ebb09f4cd4001b0c80972541ff9fb1275a943623b89d400133e436ea21f18a1dda15b5816d868c52ee7c5a64b147045802d1d0450169e1f30b06f81559fccea41010d8a04ee0e2e98346c5ea45780d50aa6a1d68001ff75fa9007a01f648dcdfe2ce57e8c03f0f205ff9939782cb10ccf78771bfd700df5baff3811a9542bb7f7af29880fc16c155ac4450c3362a1861f7917369d8a3be1fbe141cf50072bedf231f00bc5d46be3fde3cec273f59af7f37a... [truncated message content] |
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18471 Modified Files: omguimain.cpp omguimain.h omguimainbase.ui omguimainbase.ui.h openmodellergui.cpp openmodellergui.h Log Message: Implement VCR style controls for browsing model results in multispecies model runs Index: omguimain.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** omguimain.cpp 19 Aug 2005 09:19:20 -0000 1.10 --- omguimain.cpp 7 Dec 2005 15:19:37 -0000 1.11 *************** *** 2,6 **** // C++ Implementation: %{MODULE} // ! // Description: // // --- 2,6 ---- // C++ Implementation: %{MODULE} // ! // Description: // // *************** *** 22,34 **** #include <qlayout.h> #include <qframe.h> //om includes #include <openmodeller/om.hh> OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner QGridLayout *myLayout = new QGridLayout(frameImage,1,1); QScrollView *myScrollView = new QScrollView(frameImage); ! myLayout->addWidget(myScrollView,0,0,0); QVBox * myVBox = new QVBox (myScrollView->viewport()); --- 22,38 ---- #include <qlayout.h> #include <qframe.h> + #include <qpushbutton.h> + #include <qfile.h> + #include <qtextstream.h> + //om includes #include <openmodeller/om.hh> OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner QGridLayout *myLayout = new QGridLayout(frameImage,1,1); QScrollView *myScrollView = new QScrollView(frameImage); ! myLayout->addWidget(myScrollView,0,0,0); QVBox * myVBox = new QVBox (myScrollView->viewport()); *************** *** 36,43 **** mPictureWidget = new QLabel(myVBox); myScrollView->setResizePolicy(QScrollView::AutoOneFit); //show(); // ! // Note this function searches for om plugins - and should only ! // ever be run once in the life of the qgis session (the om // plugin registry is a singleton), so we do it here // rather than in the ctor of the plugin. --- 40,49 ---- mPictureWidget = new QLabel(myVBox); myScrollView->setResizePolicy(QScrollView::AutoOneFit); + + mCurrentModel = 0; //show(); // ! // Note this function searches for om plugins - and should only ! // ever be run once in the life of the qgis session (the om // plugin registry is a singleton), so we do it here // rather than in the ctor of the plugin. *************** *** 49,54 **** OmGuiMain::~OmGuiMain() ! { ! } void OmGuiMain::fileExit() --- 55,59 ---- OmGuiMain::~OmGuiMain() ! {} void OmGuiMain::fileExit() *************** *** 59,65 **** { OpenModellerGui * myOpenModellerGui = new OpenModellerGui(this,"openModeller Wizard",true,0); ! connect(myOpenModellerGui, SIGNAL(drawModelImage(QString)), this, SLOT(drawModelImage(QString))); ! connect(myOpenModellerGui, SIGNAL(modelDone(QString)), this, SLOT(modelDone(QString))); ! myOpenModellerGui->exec(); show(); --- 64,70 ---- { OpenModellerGui * myOpenModellerGui = new OpenModellerGui(this,"openModeller Wizard",true,0); ! connect(myOpenModellerGui, SIGNAL(modelDone(QString, QString, QString)), this, SLOT(modelDone(QString, QString, QString))); ! connect(myOpenModellerGui, SIGNAL(jobComplete()), this, SLOT(btnFirst_clicked())); ! myOpenModellerGui->exec(); show(); *************** *** 67,82 **** /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) { ! return longName + " (" + glob.lower() + " " + glob.upper() + ");;"; } // createFileFilter_ --- 72,87 ---- /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) { ! return longName + " (" + glob.lower() + " " + glob.upper() + ");;"; } // createFileFilter_ *************** *** 85,93 **** void OmGuiMain::drawModelImage(QString theFileName) { ! //set the image label on the calculating variables screen to show the last //variable calculated std::cout << "drawModelImage Called" << std::endl; QPixmap myPixmap(theFileName); ! mPictureWidget->setPixmap(myPixmap); mPictureWidget->show(); //make sure the main gui windows shows (its off when app starts!) --- 90,98 ---- void OmGuiMain::drawModelImage(QString theFileName) { ! //set the image label on the calculating variables screen to show the last //variable calculated std::cout << "drawModelImage Called" << std::endl; QPixmap myPixmap(theFileName); ! mPictureWidget->setPixmap(myPixmap); mPictureWidget->show(); //make sure the main gui windows shows (its off when app starts!) *************** *** 98,178 **** void OmGuiMain::saveMapAsImage() { ! //create a map to hold the QImageIO names and the filter names ! //the QImageIO name must be passed to the pixmap saveas image function ! typedef QMap<QString, QString> FilterMap; ! FilterMap myFilterMap; ! //find out the last used filter ! QSettings myQSettings; // where we keep last used filter in persistant state ! QString myLastUsedFilter = myQSettings.readEntry("/openmodeller/saveAsImageFilter"); ! QString myLastUsedDir = myQSettings.readEntry("/openmodeller/lastSaveAsImageDir","."); ! // get a list of supported output image types ! int myCounterInt=0; ! QString myFilters; ! for ( ; myCounterInt < QImageIO::outputFormats().count(); myCounterInt++ ) ! { ! QString myFormat=QString(QImageIO::outputFormats().at( myCounterInt )); ! QString myFilter = createFileFilter_(myFormat + " format", "*."+myFormat); ! myFilters += myFilter; ! myFilterMap[myFilter] = myFormat; ! } ! ! std::cout << "Available Filters Map: " << std::endl; ! FilterMap::Iterator myIterator; ! for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator ) ! { ! std::cout << myIterator.key() << " : " << myIterator.data() << std::endl; ! } ! //create a file dialog using the filter list generated above ! std::auto_ptr < QFileDialog > myQFileDialog( ! new QFileDialog( ! myLastUsedDir, ! myFilters, ! 0, ! QFileDialog::tr("Save file dialog"), ! tr("Choose a filename to save the map image as") ! ) ! ); - // allow for selection of more than one file - myQFileDialog->setMode(QFileDialog::AnyFile); ! if (myLastUsedFilter!=QString::null) // set the filter to the last one used ! { ! myQFileDialog->setSelectedFilter(myLastUsedFilter); ! } - //prompt the user for a filename - QString myOutputFileNameQString; // = myQFileDialog->getSaveFileName(); //delete this - if (myQFileDialog->exec() == QDialog::Accepted) - { - myOutputFileNameQString = myQFileDialog->selectedFile(); - } ! QString myFilterString = myQFileDialog->selectedFilter()+";;"; ! std::cout << "Selected filter: " << myFilterString << std::endl; ! std::cout << "Image type to be passed to pixmap saver: " << myFilterMap[myFilterString] << std::endl; ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageFilter" , myFilterString); ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageDir", myQFileDialog->dirPath()); ! if (!myOutputFileNameQString.isEmpty()) ! { ! mPictureWidget->pixmap()->save( myOutputFileNameQString, myFilterMap[myFilterString], -1); ! } ! } ! void OmGuiMain::modelDone(QString theText) { // clean up the loggin stuff g_log.setCallback( 0 ); // remove the GUI ! txtbLog->setText(theText); } --- 103,309 ---- void OmGuiMain::saveMapAsImage() { ! //create a map to hold the QImageIO names and the filter names ! //the QImageIO name must be passed to the pixmap saveas image function ! typedef QMap<QString, QString> FilterMap; ! FilterMap myFilterMap; ! //find out the last used filter ! QSettings myQSettings; // where we keep last used filter in persistant state ! QString myLastUsedFilter = myQSettings.readEntry("/openmodeller/saveAsImageFilter"); ! QString myLastUsedDir = myQSettings.readEntry("/openmodeller/lastSaveAsImageDir","."); ! // get a list of supported output image types ! int myCounterInt=0; ! QString myFilters; ! for ( ; myCounterInt < QImageIO::outputFormats().count(); myCounterInt++ ) ! { ! QString myFormat=QString(QImageIO::outputFormats().at( myCounterInt )); ! QString myFilter = createFileFilter_(myFormat + " format", "*."+myFormat); ! myFilters += myFilter; ! myFilterMap[myFilter] = myFormat; ! } ! std::cout << "Available Filters Map: " << std::endl; ! FilterMap::Iterator myIterator; ! for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator ) ! { ! std::cout << myIterator.key() << " : " << myIterator.data() << std::endl; ! } + //create a file dialog using the filter list generated above + std::auto_ptr < QFileDialog > myQFileDialog( + new QFileDialog( + myLastUsedDir, + myFilters, + 0, + QFileDialog::tr("Save file dialog"), + tr("Choose a filename to save the map image as") + ) + ); ! // allow for selection of more than one file ! myQFileDialog->setMode(QFileDialog::AnyFile); + if (myLastUsedFilter!=QString::null) // set the filter to the last one used + { + myQFileDialog->setSelectedFilter(myLastUsedFilter); + } ! //prompt the user for a filename ! QString myOutputFileNameQString; // = myQFileDialog->getSaveFileName(); //delete this ! if (myQFileDialog->exec() == QDialog::Accepted) ! { ! myOutputFileNameQString = myQFileDialog->selectedFile(); ! } ! QString myFilterString = myQFileDialog->selectedFilter()+";;"; ! std::cout << "Selected filter: " << myFilterString << std::endl; ! std::cout << "Image type to be passed to pixmap saver: " << myFilterMap[myFilterString] << std::endl; ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageFilter" , myFilterString); ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageDir", myQFileDialog->dirPath()); ! if (!myOutputFileNameQString.isEmpty()) ! { ! mPictureWidget->pixmap()->save( myOutputFileNameQString, myFilterMap[myFilterString], -1); ! } ! } ! ! void OmGuiMain::modelDone(QString theImageFileName, QString theLogFileName, QString theTaxonName) { // clean up the loggin stuff g_log.setCallback( 0 ); // remove the GUI ! ! ModelResult myModelResult; ! ! myModelResult.imageFileName=theImageFileName; ! myModelResult.logFileName=theLogFileName; ! myModelResult.taxonName=theTaxonName; ! ! mModelVector.push_back(myModelResult); ! qDebug("Model done " + theTaxonName + " : " + QString::number(mModelVector.count())); ! } ! ! void OmGuiMain::btnFirst_clicked () ! { ! mCurrentModel = 1; ! ! if (mModelVector.count()==1) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! } ! else if (mModelVector.count()>1) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! btnLast->setEnabled(true); ! btnNext->setEnabled(true); ! } ! ! showModel(); ! } ! ! ! void OmGuiMain::btnLast_clicked () ! { ! mCurrentModel = mModelVector.count(); ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! ! if (mModelVector.count()>1) ! { ! btnFirst->setEnabled(true); ! btnPrevious->setEnabled(true); ! } ! showModel(); ! } ! ! ! ! void OmGuiMain::btnNext_clicked () ! { ! qDebug ("The current value is " + QString::number(mCurrentModel)); ! ! mCurrentModel++; ! if (mCurrentModel==mModelVector.count()) ! { ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! } ! ! if (mCurrentModel>0) ! { ! btnFirst->setEnabled(true); ! btnPrevious->setEnabled(true); ! } ! showModel(); ! } ! ! ! ! void OmGuiMain::btnPrevious_clicked () ! { ! mCurrentModel--; ! if (mCurrentModel==mModelVector.count()) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! } ! if (mCurrentModel<mModelVector.count()) ! { ! btnLast->setEnabled(true); ! btnNext->setEnabled(true); ! } ! showModel(); ! } ! ! ! void OmGuiMain::setTaxonName() ! { ! } ! ! ! void OmGuiMain::showModel() ! { ! ! //Set log file text ! txtbLog->clear(); ! QString myText; ! assert(mCurrentModel<=mModelVector.count()); ! QString myLogFileName = mModelVector.at(mCurrentModel-1).logFileName; ! qDebug ("Loading log file: " + myLogFileName); ! QFile myFile( mModelVector.at(mCurrentModel-1).logFileName ); ! if ( myFile.open( IO_ReadOnly ) ) ! { ! QTextStream myStream( &myFile ); ! while ( !myStream.atEnd() ) ! { ! myText += myStream.readLine(); // line of text excluding '\n' ! } ! myFile.close(); ! } ! txtbLog->setText(myText); ! ! //Set taxon name ! QString myTaxonName = mModelVector.at(mCurrentModel-1).taxonName; ! qDebug("Fetching taxon name : "+ myTaxonName); ! lblCurrentTaxon->setText(mModelVector.at(mCurrentModel-1).taxonName); ! ! //Set image ! QString myImageFileName = mModelVector.at(mCurrentModel-1).imageFileName; ! qDebug("Fetching image file name : " + myImageFileName); ! drawModelImage(mModelVector.at(mCurrentModel-1).imageFileName); ! ! //Set gui label ! lblPosition->setText(QString::number(mCurrentModel) + " of " + QString::number(mModelVector.count())); } + Index: omguimain.h =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** omguimain.h 19 Aug 2005 09:19:20 -0000 1.5 --- omguimain.h 7 Dec 2005 15:19:37 -0000 1.6 *************** *** 15,18 **** --- 15,19 ---- #include <qlabel.h> #include <qstring.h> + #include <qvaluevector.h> #ifdef WIN32 *************** *** 25,28 **** --- 26,32 ---- @author Tim Sutton */ + + struct ModelResult {QString imageFileName; QString logFileName; QString taxonName;}; + class OmGuiMain :public OmGuiMainBase { *************** *** 37,45 **** public slots: void drawModelImage (QString theFileName); ! //! Log emitted from wizard when modek is done ! void modelDone(QString); private: QLabel * mPictureWidget; }; --- 41,60 ---- public slots: void drawModelImage (QString theFileName); ! void btnFirst_clicked (); ! void btnLast_clicked (); ! void btnNext_clicked (); ! void btnPrevious_clicked (); ! void setTaxonName(); ! ! ! //! Log emitted from wizard when model is done ! void modelDone(QString theImageFileName, QString theLogFileName, QString theTaxonName); ! void showModel(); ! private: QLabel * mPictureWidget; + QValueVector <ModelResult> mModelVector; + uint mCurrentModel; }; Index: omguimainbase.ui =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimainbase.ui,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** omguimainbase.ui 25 Aug 2005 10:19:25 -0000 1.9 --- omguimainbase.ui 7 Dec 2005 15:19:37 -0000 1.10 *************** *** 9,14 **** <x>0</x> <y>0</y> ! <width>476</width> ! <height>385</height> </rect> </property> --- 9,14 ---- <x>0</x> <y>0</y> ! <width>469</width> ! <height>367</height> </rect> </property> *************** *** 23,26 **** --- 23,78 ---- <cstring>unnamed</cstring> </property> + <widget class="QLayoutWidget" row="1" column="0"> + <property name="name"> + <cstring>layout18</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>lblCurrentTaxon</cstring> + </property> + <property name="font"> + <font> + <family>FreeSans</family> + <bold>1</bold> + <italic>1</italic> + </font> + </property> + <property name="text"> + <string>Taxon name</string> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>spacer19</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>111</width> + <height>21</height> + </size> + </property> + </spacer> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout15</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + </hbox> + </widget> + </hbox> + </widget> <widget class="QTabWidget" row="0" column="0"> <property name="name"> *************** *** 79,134 **** </widget> </widget> - <widget class="QLayoutWidget" row="1" column="0"> - <property name="name"> - <cstring>layout18</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="QLabel"> - <property name="name"> - <cstring>lblCurrenTaxon</cstring> - </property> - <property name="font"> - <font> - <family>FreeSans</family> - <bold>1</bold> - <italic>1</italic> - </font> - </property> - <property name="text"> - <string>Taxon name</string> - </property> - </widget> - <spacer> - <property name="name"> - <cstring>spacer19</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>111</width> - <height>21</height> - </size> - </property> - </spacer> - <widget class="QLayoutWidget"> - <property name="name"> - <cstring>layout15</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - </hbox> - </widget> - </hbox> - </widget> </grid> </widget> --- 131,134 ---- *************** *** 160,167 **** <action name="fileSave_asAction"/> <separator/> ! <action name="firstTaxon"/> ! <action name="previousTaxon"/> ! <action name="nextTaxon"/> ! <action name="lastTaxon"/> </toolbar> </toolbars> --- 160,204 ---- <action name="fileSave_asAction"/> <separator/> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnFirst</cstring> ! </property> ! <property name="text"> ! <string><<</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnPrevious</cstring> ! </property> ! <property name="text"> ! <string><</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnNext</cstring> ! </property> ! <property name="text"> ! <string>></string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnLast</cstring> ! </property> ! <property name="text"> ! <string>>></string> ! </property> ! </widget> ! <separator/> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>lblPosition</cstring> ! </property> ! <property name="text"> ! <string>0 of 0</string> ! </property> ! </widget> </toolbar> </toolbars> *************** *** 220,292 **** </property> </action> - <action> - <property name="name"> - <cstring>firstTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image3</iconset> - </property> - <property name="text"> - <string>View first taxon</string> - </property> - <property name="menuText"> - <string>First taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>lastTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image4</iconset> - </property> - <property name="text"> - <string>View last taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>nextTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image5</iconset> - </property> - <property name="text"> - <string>View next taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>previousTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image6</iconset> - </property> - <property name="text"> - <string>View previous taxon</string> - </property> - </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="9404">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb0000200049444154789ced7d7f8c5dc775de9772289c0b30f0bd420868e1c6e90214246eca82a4acb4226cc8da42817ec06e65464d4156822a1602644949ead4868d1212ec323521cb82515b2a62986e1081ac1399546bfd32a0761941c2d23023ae00168f3242740d27c65d948666023d600eb823b87f9c99b973efbb6fdf7dcbfdc51ff3cfc5ec7b6fdf7d77cef79d6fce9c39f36bbffad5af70ad5dbded1facf70d5c6bebdbae19c055deae19c055deae19c055ded47adfc05ab49953fa26cd660b29023bbe85148199418a601c235704c31aa48abe61fdd35c1530ac170edc37f58bf5bef7d56ebf7625cd025e3da56f2a146ed78eb7158ab669e6c94cd14eeb1899226866140ad00e200530cbd5f82b3b6f14ac2146c096147ac6d9b3b9cae60de33c29bc79e0bec92bc6302e6b03989dd3939acd9d05e5776a36b7172adfaa9d41a6725896ab66838264f023f28960b8867c306b1015be9f81d9825456bdeee4aaad0640e7e1782603bda11dbf79f0e1dd17d6fb592cb75d760670664eef60877d5078801d3e4a0a00035080768cc2233d538414f911f12488cf1592c10f461191efdf6791abac6208ab419b0be8458b6c73066db5ff3ebc430ac70c9b63871ed9b3b0decf689c765918c099b37aab617e80143dc08e770a920d883cc23dd233aa23bf8ef830b87544d7fe4e4b23bf4001ed34321034180412b701827106841cecccab043a661cbff4cc1fecb1ebfdec46b50d6d00b3a7f52d44f8bc61eccb49100c05b0f7e111f9cc91e62b5f5f21dfb880f8e0f33572f248579041a72c61068f7cff3dda6a149b0b686b916519acd5fe7b8296a8dc4a344e95f70df37748e1f0a1cf6d5c17b1210de0cc597d9b617e3227ba2b3e542fd022e26bbe7eb48f5f12e9e43540407a56473c14018e05f92eb91f10d81940900f52b9ef57af6b676c86fc05ebcce1e7be383dbfdecfb6d9369401cc9cd69fc8890e31f3edd157a7c8f788d30ec81460b9c5c7a7aa3e0abb04e9dea7e79468006b41595621ddfb78417a01eb2cb21ad30c225f8c4d8c40fa888ca019c8081f5a362f642aff93673ebffbfc7a3febd03684019c39ab3f6698bf9913dd679891a7749a20bfa9ee6bf3f936a4ab4ce89c2a9f1e910d0d204176e2d30b254807084082749503ded71b449f3f80fcdc6b022087f55720be6e017a969d3e7cf4c97bfbebf7d4a5adab01cc9ed69b88f005e3f064ae28e3a8bec517b31f83d4a7a7886faa7913ff5e57ef351f5e9b2d0045faff637c40046664146790ab3c091a19e4942746da407e7013e1fba3d1fa38847cee1786f1c4d1afee7969dd0600eb680033a7cb1d39d151c3bca31df16190ea3ebecdb71304e9a4b241b5def0d9895af7836aa28f27e4608fd4807c933043ee2387e1ffc53e08dc600aeb0c0a88564935017b6661a7011460a77f40c83e77f43f4faf8b505c1703983dad1f25c2370c23cb29d038a2ea4ed57d13f104f1bd68f87482203d530534db0ac91e994454eb07a48a31497c80e3fb56a09f205fb40aa2319a7e883c4623fe05a9ec5f1ffdeaf4db6b3d166b6a00b3737a0b3bfe6f39d1ef5583d2aeee75bfc5c7274837ac418b29d2bd1a0f83ec4c6d9eae9d4136e093c5a743055f5e3150fd9abc3fbd7a4d10ee3bf41b3e3f32449d092203002e033bfb21a9eca9e34f4fffc99a0d08d6d000ce9cd5b730e3fb44d83654dd732366cff2d99a8f87473a2aa41bf6c22caafdca8d64a971798d511955980d04e159ef877803bb06d21dfb410fb30283823cd28944a8521df94173904a2390891b53d1b8df60d6fb5ffd2f7bd7c425ac8901cccee9cfb0e3ef93a2ac89b056758fc4c7f7fdc3f94010a359d43b87f7799f6ab99a8f0f431a05c4a90c701640066089ab7f1fa90c0c0b5205e034a00a00f54821c0514bb45d9bf703a70164607f1fe16a85d17e6e1dfff399e7f7aefa7471d5f301cecce9037038912bcad801b922c021117a01293974df0b2f66001916faf2904a6d011074bf94d7fb32e865df008ea0fb0c3882e997feaa01077fcd926b09b80cdaf735ebf63efbc1f1df6fd88afbf17de6f0f7ca08c42875a2fe2b2387ffdd221cbdf150214645050099aac26914aa8075fc3150313bfdb9e3bfb3dae3b3aa0c303ba7ff233b3e345cdd57f379f1f1a9aad7b08b5e033851efec12a47340ba065c18843038056c1894e883139fefd53eb55c53df0e9503f08ce5553ec0121c82084e4018223206ac300d023378c42345bebc0e544c147e47e3befbecf8b3b3dfdbfbc66a8dd1aa31c0ec9cfe16188752448091cce7f36a6ad7870c7e9f41c8507ea0814502f70138c2020bd26d8a74502bb22d089a4518b20f24c4a91f1b7008de447751ef732224a39171252811ff7f01eb8d353286678ae01652b713dc87205f8255d1bd381b8da5207127051118bc0544afec79f8e8bed51aa7556180d9d3fa5bdaf1e3512079951c57edc2d4cefb7a2083e9cbc3283fd08093870e279f87f3bede51a4df36a4c3cfc3e3e046552ec88dc86afae6b63eb8f639618216a640f5fe3a333435826dd51e754d30f4f77cc8ceec3ff3e7fbff62a5c76ac51960f6b4fe1a1c1e2fbc6a96c14754e1827c54420f8567800ca5d642f71ee9c1c71b0e7f97c1d7dc8e746609eed4c2b67e90c260e5e4fb34a21f07b7ea87e01137a78edcc60c2258c5083cd2b9721701f9b9d70044de78a890a094374aff7d9ba0f23fdffde0d1cfacf478ad2803cc9cd68f5a679e1f44fc60ec7ea1ef7dbd477ce991ceccb09e01b88178eb63f770c92a1c523a5f06d2c7ed8351c5017c04b1c60c896668638664161191af2ae40ffcbe7456a3c8b2339fea1d3bf093951ab3156380d9d3fa33d6e15b717e5c43bcf49901201d7c51f7a59fc76b8657efc1f7568887cfdca91e461389cb44fab87d1f1422957be34898c11b455850626f3c36aafb440b040d40457c3d1a1b1834f0fd0438ce48e5af4ced3bb26da5c66d451860e694bec93af3d719e55baa204853e57b9f1f68dc23df70a5ee03e2d9095dc265954f0c83df50f321e2b6e248efd8af6985c4ed2ca515627e41407ef87f89ef471b03044da0a8c78e3fdefbcb03979c7174c90c30734a67d6f18b32f89cc4be13951f7cbe0fea688f7ce35576a5ee7d58d4ab69eb24f34662ff32f8796d8a96207fa591deb15f639e44234423884c21839825c6639d57fd8e8144fd87ff1f992d442221ab90ec788a147df352c70e580106387e72fe4f0bca1f119f9fccf3e3c287d05da0fd80fc053600272a9fc3e08baf0f886f2261d57dfc1a6884c01cc3d61e82fa077cbc5c85d940c2048b06d84c0ff6fef2c00b97327e97c400c74f96fb0aca1fa9227aa8d6d51156bd7c381715f217fa06e4c458a2ca0f42cffbfa223edccac7ae898f5f698d408dfb175f1e350291d70c5437aa3c7e3e9d0d244c90e5c0223fbf7bdf919b2e650c97cd00c74fce6f2b14cd69c75b6a16dcc8d0a9219f05f9d611b85ff7f9d6e901f5bba6ea7e5598a0431c214e59833648192f4f906f928826018b8121f5bb50c53fedbd74e0e272c671d90c408abeab1db6142a07fbd87e88f849264e0bf243442dcedb75f4f5a9ba8fb4b996ea7e559860481c21197ca23ad283fa97ab89ff8f2807c333c3228332820f36ed84d35f5aee382e8b015e7dab3cc0ccdf8debf9d4d86183020bdcf0f961e1860d9813e487d53d670017327282cabf0c91bfccd9c2c0b54dfd07df0f19fc6455f1a285de35fff2c1deb863393603bc7ab2bcde309eae325ffc3a7ad8611312335157fb84cae7d790af12e407c45ccec8ef3a5ba0fa6c214f7e3fd7904f084cc06050e6ff7fb2a40cd8eb0a147f3aee5802cb6080a3aff79ecfa978b4b1ab36263734916f3ce2a3daef377c7eba8e9fc6ee3708725795091a5a200d6e213240927d9c32801f7c0b09875bc7c8409fedbdfe1fc64a321d8b018ebedebb29a7e211417c3af81c3756e62af3d9b714d3b2acab167e4865fee6830a4e7c9e5bff79fd9a324140bad702ecaa7e93f9a206c8c2e7650da180c41132102cf8e9dd773f73ddaa1900a9e22b86f526aaa5626b904295bcf18146e6200b392c0b3accfe7597a1eceb18eb8f0c81c00457cf3520dca4f90daaea57af73ed73c6a60c00d9b90482750619b04d3bf3d0aa18c0f137ca1dccfc7bf55c36f69b30240f9fad95044d66106415300321ae8fb39598fe523e7f832075cd9920891ba411ce540320d100b2c40cbfd0e4e330c2044f4ede79b0330b743600c3fa4ba4689361c9a98bc8e70af97080ee1b30fc828e6394dee74b124748b3ba7a913f940962e4cfbfeed2f7e55148b30daf7b0de03432c0673d13ac331f05f0d08a1ac09197e73f96abe2f78d934c1699f74bcc5e900fd97913e6ef0c7ff31c914f08ab5e5578f46a44fed24c30d85f5a03f8554440d6603c13c0f11f4edd7968d38a1900018f8beff7c80760fa92d122d9ba88993c12e6954d11dc48e2e0b0ee9f22c135fa57e93555fd359fbfa406a09a06001076224d5967ee5d110338faf2fc75ecec43b2a55a906f9c64b1b28354cc70bab6a0a163f8d2cff759c755b0cb3ec2b7464c508f0324fda606f0835f20071c80b0e0047aa48b018c8c033cf7e299dfcfa9f87e73972d5b89f895c97c9e3cc2d911d8fb7e49b5a62afc7b8545f8d6a4ef9f5b6b1cc06b001b564f214c00673f048adf9a7febd09205ad4632404ec543b26326ec5c29c0b642bef87440b663491e8030852444165ef583a89ae75e43fe187dbf9034a00132001a05aa5a4855720c00149b00fdc0a8f15d92018ebc347f3d5bfdff282b36b556ce68a854cbd2e76493866e22df5d43fed8fda10c00197c47b06e4106cd0188ee1767e74f3df74f966d00cf1deb3d4a59f63c5b0dca7c250d5f1d2bd6c80144f82982360ca00afae87eb28d4b899140e520c5d8ffa9edc87f3dc3ae9b6f00143035998d32d681d63b67116a06cdbdb780737fab31f36ed91a566df61fbb6f0f6ebbf9064c6dcb80cd637ff5584d5f004a6371f2dd051c7fab076346df5fd597a41052a102894c05e3363307af01286e458f6b04926afedbf3a79e19ba48b434031c9b7f4543df1b901b4aafc541458e05678034a7afe1fbc3c6cdc000073e3d89c7fee5ee557be8e5058b232fcfe3c4ff9a1b8aac3fbe7f0f0edc37b93a3730a2590bfcbbafcde2dcf9f9b198206e4e696a002ee51f47a690599a6807801dbe5c9e3e7278d8fd0cd500cfbd389f69a7a78bcd05e0802c2ba2af610710e5b172069ccc43e566250f3e44fc428e5c9ee778f52bf7e0b1fb576ff00160626b86830f4fe1bb5fb8074468f5b1b7dd7cc3eaddc0889665c0b79fd8339e2670433480d332ef873c7f804190f1921d4900295a723a38d400f4077a1aa04cb6624356f7e0c3bc49eab6e91b581f01ace5f62511bf7c4b8e6ffffb3d985806cd2fb7edde55e0bb5fb8a77ddebdce15928badc0f4ce62f0be865d95d7002a8d03584049ee65980a4a136dc02e5ccd6d93b71eb87ed8bd0c358082e87600e2eb5dc85983dc04828f82a72be3afb2da27d9ae5586cb814f4f626ab2588147375e9bba31c363f7ef411359ecd6fc5606da3db76e47b7d9803cc7c804691c20b8e518010464e369152720e49bd8f1d05dc6c31980f936f8881e4052b123203ffa761ff183209fe3166a793f4028b630f6df3db5428f6dfcb6efae49e45b1a1b3d37408df4eddb08dd1880ab554295440ae38e2241be76e1759d04e1e0df8f4f0cbb8f560338f49dde75a4e8160e11aae0f3e3fab5e403683fef973840b5d325cd86ddf7c9dd2bfbe4c66c59064c7f7cb2e153d7f596008856d9fe8f687c0d102386454d03c8ecc1e75bc00b47c404d5f10c808029c3264b911e7cfe425ffa612f9f3004e22e5fdd978a7bc1776dbf9956ea992dbbedb9b1d8501a20b4e95d53dd3500878a28c92c40515c0594b584506924223f5c770ebb87560330ceec90ec558ea5d428209f64ab76916c77e2b84a681176b884f5eddddb2756ee892db3edba7962c3690000d8fe0ff3b12384551e45d0007e151039aa5dc700a56b030e1f99d8b5ff636df7304403d08eb0fe1cb66f99a80164be29397e01f9456400ee57f3ffc91bd67ff00151dd1b4d0300c09e5b8b6e0c105705f3e11a0006b11692aa18008109d8ec68bb87f647e1b02de4a85575f57c514422e8becc3bb533b5b2accca2fe755f2cf786dfe8f8242c70e88533288d2f1815834e4bf7f31c38f870478d4112611b4703ec7ef02848e5d87ff7141ebb7f74e0e8b1a76730f79e0529c6cc77f676fa8e7d9fda85136fcfd5ee8f9d19e8873a87b9ca61168d68002eab1275f0fb04a211501249342095b7fe8056032060d2243ea76282dcfbfc3cce0e62858fe69e3e168becd27a7f6771ecafcef9a964d988882dddbfe7d609ecde319a69388451c7d200e3320681b9042bc299b365a7fb9a9848bfa7e1f36b7d49b3336e019506a8666911e9a8228100fc1a02c0ceb41ac0100dc01fcd15c9826d78d894c30228bc651689fa67677dcd1b8e9647419d7668ecda23769d7c2275fb9ee56980f07eddf9b784fb9b3bcf9ddebeef5353e8fe7b4d9545ad8a1881ad52ce7d0430a87faf050492d4cd001e7b766613405b0d57993d715e1fb27d31a8fe4d52bf2f9daf767a660a9d7d61fb75745b9e0608efef1ac4aaee6b66aedb269decd78189df98e8f83b1bd5d182065088ab834904305e8501f4d6b6ef1f308042e55b2d005239348ccf3605326f8105e50933c8c91b88f5ee427e7f58efef363870181bf918930196170760ef83bbbebfca7738f777b20ad8a5ddf68f6fe81611449a4f91ac05b810174044be64068571b220a09b016836d7c708a0cb23d275b2b70f48d47f92f31762ffa9a5766a6bcc00abab01aaef997bafecf4a9e95d5d184066016156063fdf8f359223f2bdeb890c105605b9753d60c00032956f8257db4088f43591cf827ce78f5f7136d6b8098595f3aec8c495a90172caf1da5c3703d87373317e1c00b2b09649984e560121e96300108b532068b9a275af401b037c8493797e88f54b6cdfef088aeadf6ff64818a099d5dae9995d811a80d9e04c470640066cdf960d7cbef51a9e2f64e3ad8d88affbfe8a01a236685d8a6dd100147d093baefab1524558670ee550a5ee5d41453d564d57b70600e5307d83b2a30d84d5c1a53440ba8b583686faf1018010018caf07f59ff9641174638052767544551ffb717d5f27af4ba2e8a006188f01ae540d00104ebc7da6d32747af0e863880f4d31d4171568056f52f5fe0f8c3b6ef1d30805c91e504e979e2f303f2e1aa5ab7b1ca753a0b8896dbad5da91a00609c39d72d1e30355920a7c1cf0fc401548eb023c8c63880f61a00108108f1fdcefad540002a6f3da06ac0000ceb8b83486f437e7aadd7f1bfa601aaeba9f7e681c56e9fbee79f6d5f622dc0ab7d2bbf379c94621bbe7ed0f7c7886037062055bc5f55b2ac5fe3aa1fe4a44d868df5efe32a60cd72af6e0d103e7ffced6e42607272f86c80c2be8a2cf711c002167e4710902492e67e3656c44451990de0fdb6ef1c6480be7e1f3eb3a7caf049ae1c4ab4fb4314e26ce09a0618767ff3f3dd5cc8de4f2c1d0fa872024361ada00186abff241ed0cd008e3f7daf6567ad64f6d838cf4ffbe1848bf0771b77a95ed3006df77be2c7e7ba7d7633b0ebe6c981cf574cc4be3a9845e17d7db57d2ca87f992286388108448054de1a971c62dbd9bce9eb295259acf419cfeee957954152dfdfae01bae503ecde9661cfce029627fc42522822b1747f329fc0d48ddd328debab6c9d3e820a795d731adb57f5a008bd79dd293176f776c2dcf9c155c1aa3e80b8934afd974872ffe4eaea1ac0bfdeba47b0f551b0b33fcf5536657c3dfb6a6368d50f95420ae5ebe2fb927139f97025e5f8d942c749f066e0993fd8d3edbdcb6d948f9d0fb05c0dd0b69e7fea5dd3c900eed8b91d475e3e57ff3c872cec05e428605ce9f3221620279470b583280689505f9d055a0fa01a9211949d2fb9e1fb1b573da0fe857ec299b97006e52fbb4d8156bb59bdbe1a0020cc9eeb7670f8d48dd94016736d3610ea0170e5eb090092be5c9bf900f879dbf7b51a8075ba97d6b7b7feac1b24d722f8fe4695ebb0161022525d2361abd94e9dd7ebaa0100c6b9f316e858dc7d776d6d20a90fb028ab803102e8fc0155a9fa07aa359940ff0048e567dbbe6b584ee0d9b0b72ffaf8be477c3898a91f0e6fac760c218d55fb6bd748d86ab6d9b3e5bac501d2ebec7bdd0ce99e5d9343e20024c53690aaffd25f17fcd5233f320240c04576e6a76ddfd56e008ecf42d18700fb634ec4c734ebdb4b3dffa0febda5362a5dccce758c05ac565b04667e7c6e5de300a13f33d7cd0d48b670b223087ee7558c0006b021aa7fd9802b8c200c10910f06ceda0bbd6e81200098797eefdf339b1e0706482a7c9461cb77bf5dfd9b46a5cb733f2b71fc8df5f303cffd8f3330bcfe1a80d9e0d4ffe9068689c90cb51d41208900baaa2ea0f87e4e547f60027fe5a8fe41c0a961df35746b18a9fc54ba4579687dfbd04faa7c37ab7f7de3c5d975d102e5bcc591d74b3491b860468b53fb0130ae06f8d9825e326e51feb2ecf41c7af3b6da11e4775de79904d5c2261051ff4015e9ab227fa10ea33000c0c0d053c9871a8061f3666ac1f154af9013e8f70784d743ee6048454ef3029881bd4f1d5f5323e8cd6becfffa4c2b12674e8fa6e2effde84c7cff6ba70cec080177e66c89f2973c3272d945139d7a776120a22ad5d8b246ec9fabf93f07063029f28306581603fc889df9300f858ad3ea5eaedab59a9e8c51ab78d9a801c48eb0f7a9e338f2d27c6735bcacb6083cf7e23cfecd7f9a85e9b7fbe4d77e7c0e33a786a3ba77aece1ce52f4b7cefa5e1499efa02f08dff7e0ec3909ff65f7bab44393ffc01cc9cd278eec5d9e48c2002fc3e00ebb48f005a10eaab7e1513d4900f52f9595df65aa780c0880a21bb1f3cfed7707ccbc049184bd5bb6f6880b6ca17799e63fae305f6dc38893c0776df3cb1eca211e5050b6d8053efcd63fe6f19afbd7dae73e58d3b764e62ef1d9398de29dfdffb1b8b136f9dc389bf9a6f7dffe40d1378f8d393b867e724b202284be0c4db6770fc64890563467e5ffafb1fbb7f0a7b3f31197f776f5ee3c4c932a96c529d14824582e5129963a906e6ac670616ade0fbe47ce4cf97cdf1d7c3f642efcbcb33807d479f04d157e00f8560ae239f5d52e53aec215469e4ca60740d9c6bfd9135813e282167149722f8fa3efcdb974d22cc52908bdd4235ef8fa0c42775d91baa014618c0f14986f9bf03275ad43623f825c7841990dcc686aab67559f45bce077056227fcefb7ac70033e05856615dc3e7570cf00b76f8ad61534060449dc033c7f6cee72a7f33a5fbe66956cd9330ae55005d6ebf31ef2719fcdcbb5151ff3ef32796824b7d7f6dde1f34c00f961afc9106000086cd0b713eecc2bc1471366038d0d0d2eaf7da75d4b531ef6fc6fec37cdf3300c7ea600622b2d1a6fe479e2938d20088e8070cb6795271427204a942bcf36ad5352db911cbde1048db68fdf0bc526d15ea2ba4533ff2615eef3690891b402bf2412a7f4797bd77468d6fa73383a6fed591a358e47dd84cb220b1d9d314f29a51a4c7a5c6fa76ebee532f8ffec039898b25e07c1dc0e8ebd933b1f5ea5f66010dd51fae9fb3177aff75d4d8763b3062919fa54c063fcf645e4acafba85a84b0d208d4b0ec4126b8da9921fcfefaac2a577edeefd3beeaf37e06c5b03cda227ea1bf400a7fd665683b9f1a3675df33af00c5bde1bcfb786e1d18b4399d250c6384faec61a3206fbdfb42e7c9bcdf5702b535b56fc1bce03540c20468453e48e18bbaec7dbdcbb8763e32264771380e7ecc43f70b138bd589989546f06ec20f7a886d5fd308493f30a78ff8c5636123f203d28330d4d1285a227ea1ff3e0323a93fb4b1ce0d9cfaf473ffdbc24e5759789220da6404d1082d4cd01247d82848dc28c8879341b661ed85a5f8753de2c7c3900f7678ca5ee87db5eb988e7972a83d5cc46c53a9574f55556a005ae6ad8b291324b3855867f02a678201e4b364fb8613565c50fb12f10333c859c04fc587201f0cf449e5df1e6744c73e3974f2ee43af64a07b2d38e05f3629387f2c0c5031c2e6420e3ade9c6803708d09aeb6d9420df95efd63d1231f1888f8311b10fbd87f7bac3fbd7e5997bdc3e38ce7d8670767a03fb2605b886dfaed493ad6070875ea09453ce55a2288757730385bb80a98a086fccaf80393c6635f9c0639f2c84fe6ffe061c807a9fc5d063a09bfb42debf4f0a9bb0f7dc93afe9aa4269b788e40285a1899a0a61192d94244feb0d9c3fa23754d900f929465a0f2f9ae14e5cfa631ff5f12f960874fda0bc3177d86b5b1190000ace36733959f0fa755c5c1772651af4d8d90cc165224848a1723e3061b08c99dfa8d797eeaf383912c563e5f62fd25c80188615f9f8ee796443e1838b69cc10796c900003079c7c1bba0f0ba587a2e37ad825bc861e19901f089a3151360b33c9c0af9572e1374f2f97e4997bccf078f85fcf749e1465df65af7fe8d6acb620000983f79e84770f87aac21e47d7a758e5d3cd25cf615244c8045aee2066904d1f72f6f26a8dfbf08df80fc903452f9fc0c047009723e11d411c22a5f07e48314feed72071fb804060080c93b0e5d0798b700fc4ed8a82808f06ff0c65131414323a8117183cb3882d8baae8f06f2bdcf5f26f2410a5fd765ef8bcb1e405c020300c0fcc9831701ba1f0eefc35bb65ce17f6cd008a831433a5b688d1b748a20ae37d24721bf8aeda7832fc897c10f3ebf9ae28d85fc9f3070f052c60fb84406086df293073fc3d0ff930019fc70b3e10d01e94123b432c1e51e3748101f557eee17767c4e1fc2099ff0f37c2c47ed8314de67875df6c2f064cfaeed921820b4f9b70efd90501c96c1cf20d9aa996782c4f77b1f67d9a070e4131c214840012ca6b385844e5be306eba51192ef4b9929d13051d32c1a79405c8a264a065fe6f963ab7d90c24506f6afc4e0032bc400a14ddef6d8f30c7e9490582c203e30221a90d27240481bbb1c670b51dd2364ef728baf6f9ceb97aee33b036280dd58c8073becb7177ac7566acc5684014263f01384e287e134318e79eb9c5c33c059f1810913640eb05e0d07a184458d7c511e6aa0d55c89b60883b276994843d47d6a148bc6afdbfb133d3df225b053f97ac4f06e48e8ec847c30f0c72b39f8c00a3300004cdc7ae03a52789d1d4f8b0ae0c8004115543fae311b18aa11c2aac3da47145b55bdaac2b31871962fb3955f9fd23dd06555af795d32bf7fb96d45190000cad3472eb2c36709f94fe2e03ba171a44c10325b5c167d20bc26b0bc80c2550b23609d30431a514c99c1fb60cf10dd99a1a5df44ba6b7c9f35c815246d0b886adeb2f14cb62083ddd732c8bed0765ccfef8f5cd56bf6bfb31a830fac020ac9770d0000047749444154038436b16b7f068513707c576082fa1555bc203243f55080cc33c20866702d6b0dc332939afb1bdaae09c2838f4fd57c744f9e01e2899d2e0471fca68d28f80c08c1f70343f2f797ba7ed55ee83db52a8384556080d0cab9a3160eff82901f9341f7aa395e3dc21c25cc200f475ec790d943c50c969308a303d89620af19b0088f5402db05ffff1790a74918b1ef5fb70bfefdfef38bf2ff60c394ad423a12a483b5f7f1a2eeb91fe8decff3fb89f01b9ec9d3d67f6235071f58450648dbc4aefddf64c77f48c9dfd8bb0700c204219218fa4884648d1930a8199a6b0f8239610ac7802a60613190c994f42db45f90f1eff7b578259c2dff1f40345e76bada8b07a0daa5ebfbd1d7b36880ee8897a99ec383f642ef2f2ef9e18f68abc600692be78efe11297a02c0c588fc9409b862040088ebe05c670676a21910358357db6ec1cf26bc0f7626f64310469823688c80e4aa1fdf1ffb0da4332aa4f74b99c24561e77d7c5ffb94ed5054c354f27769a4a7fd05067e772d061f582306086d62c7de5bd8f18b044c568a408a1ad614428c00064648b440c214f53843da4ff2101c371886933ba2faeb2054a76e85fbe1caf87c781b08ef0ff37844e35d26e2c3f50d8ffc85157ff843da9a304068e5d9e3ef90ca7701f841a8672755ae2c6275eb74961019c254b3843008ce3f6ce71922f6c3a06449b835d0b11f2cb6d147c7d71dfcc24cf27fc296eb64fe1ecbe5f8291db1dfa1e342aaf658ea3ef43f2485a774d9fbddb51c7c608d19206dc58dd38f03f81a802d2db8acf7952f4babb28a21c2bc1d684178f3ef23ae40f539cf08f5e01510cee4ad04aa477c7c7d5988073bfc9c141ed465efcd4b7faae3b7356580b4e9bf99f93680df26e0a548dbb5879a79ade091e60f460e3e360c4e60821a53b88058aeae685c6baf078669300b573e9d5cd6f87c621c18cbc787fe45060e93c2cdeb35f8c03a3240da8a1ba7ef85e36f02d816ff18119afafec60793c81d308239daae9092f7b5e6b8d6ad109e30c2f2909e5e67d8e1097ba1d7ed70c1556c1bc20000a0b8713a83e32f00f47938fe4835f8396a4527d2f4b3f07a6dd8fdd2b20a913c39e760a01f5b6236214ee1a77c2182e92b6d78277149fd79427e5097b32b1acfbf94b6610c20b4e237777f04a0c719fc7902aeaf9053ad29d456170762f60dc401437c747355ef927df952d79fb2c361527841974b176c58ebb6e10c20b4e237a7b7c09947a0f02576bc758591b856fd77087856972bbb82b7926dc31a4068d9c45446c0bdecf01029dcc50e9b5601a12b79fd7b5278891dfecc5e583f71d7b56d7803485b3631b595903fc030fb08b86503211d04bccac00b84fc87ba9c5dcd4a882bda2e2b03485bb6756a1b294cb3c39da4703b3b6c5d63a4cffbc8dd1ba4f0a62e7b1d8f8ade58edb23580662b26f6ec60983b09d8c1c00e427e13c36c5921a42f10f2f30cd323e04d06deb64b54dfbc9cda1563006dad9898ba811d26496187d70e3b13046f21859bd8e143527837f9bb25851e3b5c2485b3ecd0b3177a970da58fdbae6803b8d646b7750b055f6b1ba35d3380abbc5d3380abbcfd7f2b16e87ff4d2e7e90000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="8193">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb00001fc849444154789ced9d7fa85dd775e73f1d1d997d40603d13811f21c60f641cbdea8125db9d48d878fc06831b27196cc59d624d826b959454763a4d9de232c221aedd98c4359e69e4a1216e4a8d445b47161357761897a71a1bc944f653409eab84113c93d65c818cef0d23d80bbd6d327f9cfdfb9e7befb9efb77e2c105bfbbef373af5fdfb5d6defbfcc6af7ffd6baed0e54bff6eb51fe00aad2e5d1180cb9cae08c0654e5704e032a762b51f6025e8c89bed1bc5c806dbbd19005375045080180d94e7c5e85f284ac4e8b37bee9dfc60151e7745e9372ea528e0c8f1f68d25dca191cd256ab3363201ea26c766315231db9de084c0b81f3454ccc70a81065a02a714cc89e10cf0c6defb2f1dc1b8a80560e6447b421bb9ab2cd45ddac81d256a93763a6d22a61711930d60fb91e683d15094b64f241cde46000a3d2f006730cc00af8be18d7d0f6d3fb7726fbdb474d109c0b113ed298107802f019f043cb334428942674cab984823e65bcdcf8eb3379fb742905b14c3bbc0413172f0c9afec3cbb2203b144745108c0b193ed4d62f81215d36f022a0d2f2a667ba617a9e657c76199193197921a735f21a2019a1f842bc60ee17855ddf70870500c879ff9da4ebdfca3b3385ad3023073a27db32af8ba181e48ccb823a7f946288ba0f91133803a6669546eee338d8fb142c27c2f64756e25713fe7c5c8f781a79ff9dace35eb22d6a4001c3bd9de2186c755c1dd39d3bdc627be7eb88f1fa8e991e5d0f342b93ed3f8e478324c11599c1ae1d04674897a511b797aff9f4ecf2dfd682d8ed69400cc9c68dfa60af5a418b9c30d720f80a332de55bfc6dc131fdf0fd8b9eb5a219a1788999e0149670b6a9fa720b3380936a89eb73aee638cbc08eaa9fd7fbaf3cc920dda22694d08c0b193edebc4f09c2ab8b767902de9d4bcd630bd46d3e96576cae4e87c22f35feb6e328c41c4f44cf3abebd8fbf50a91069e15a39f3ef0f83de79762fc1643ab2a003327daeb54c137041e57a8320ed9bc0615a4402ff6ed35663efdbdbacf200097dccf3d98672af678cbec88e9aa081a3f2ccfa0eb2dc3076278e4c013d38797785847a25513809913ed295570400c53f51a6fb17ae6536b996e06303bd3e8d85c7b267a1f9fb0af3a9e1a61c95b7a852715da5ea18c9eff470afef0c05fdcb32a4071550460e644fbabaae02fc5503a260cd31cb0836700630d78ecf3e77b8faf0768e9fd624bc352b6e46e2bbc9ff817f542f001f0bb87fee29eb71638a40ba61515809913ed0dc00f55c117a566b06200266e94628d31a926331f6b58745e5107c4ea93444e6313f7d3d326e2125a2b543e048d842c018e44ccef6fc13e5605df3cf49d7b9e5aea711f442b2600c74eb66f16c3dfab82cd7dd17d8dafacfea583a5e7054c6c19d27efdf572733fc4ace765b258c321608222b893042816a9e6d7997f6ab00bf03a46761ff91fbb56c425ac8800cc9c687f01f87b2ab79e502dba8f992e7670b4a023cbe05bc76c190e10ebf20003c91ea70acbc422a48d212493545126c7d7b5b5e96762a108e351c22fb5e13fce3cbf6bd9c3c56517806327da7b04fe5ac1bad438d6a07bcf54edb51f035ac74c5774ed7109d3734b0135798190cb2fe3d699f1f8f75893a9b10cce121421ad1c8422129a682c823b889f3312068942c7429dc3c8e7669edff5d345b260202dab00cc9c68ff37e0c9f8b714ddc71aabc1c43e51d0f31630d9be9888e952731ed920120f7a6669f2d0ceb6b16f4f984f60a61796e8ef40e41e4a04dd231c89d92717d2ca8d65cf7d5e0cf71dfb9b5daf2f8a110368d90460e644fbaf303c3c081d7be65b93e0cc7d475b8d168701aabe164931810c617a1ec7e70070409bf87622617047d9dffb0b83b508b130d4551da3e7f4162a0d7d2f60e4f78efdcdee830be7467f5a16019839defe2b0d0f97458aeef3b8d8996d31410802f3238d37d075c70f607ad5d667e81c79331efbe6ba7e0da9a2c652108e4f852117226ab1475640eaf73e1f8b91ddb37fb7fb1f9af2a0292db900cc1c6f7f1b782cd1786accbed36453d2150df3d071ccb6adeb27c7b9eb98bae44a7d866e29db98a92e0a4881627fcb900b571e0d79402cbd4200ea02c8fdb37fb7fbc78b6652444b2a00478eb7bf0af27cafc6f786685db1be5e0b3a62ba4885139c0588355ebbf38d1f94ccbc076aace9a3f6819007c0323fb60cb130544727c2e0b1459a87d0f1f8c4ef976634b518f90fad837b960c182e9900cc1c6f7f41c3cb25acab63be6392f7e13dcc5795c68bd08d308118922821d7f8dee4cbeab48d8520019ad4d43a624c6023a65479ce09b2b37570cf9284884b220047de6cdf08f20e85dad05335cb7dbe63aa761a1e7cbd447f77e8df0f8a138a3ea5da25d7f486fd84ec7b0fc30ace72840c227d43d6debc86a00a5a62b8a5f58f7b163de368d1eb028ebcd92e415ef2cccf933aa4cc871ae69f1744a07b5e638d405fe6ab1ee63b80e5067965fb2138b4cc8f2d9e1756c238409afef69620179208cb788ce13008930a9eebc3929168d10220469e033595a66509ccb7bebe6b35bbf3ff2aa677a5627ae7bceb6b8ffeb5113a1284a4f6ba49c167edf41dd3f3e7f4cf2fe0935c58a04bfc9e84e30b7b7d3fe9246ae7e52b93bfb3ff4b8378d38416e5020e1d9d7b4015ea40920bc7f9ade86532b3df3d1f507e352011f3fbf8fa44a32ea636720b404d7a39b895baa8063b967e1ce21948f3725eade796d97fdcfb8b0531904508c0a1a3739b159c14d890fcc13f6c15fc39cdd6da9a79a9809f9c4f7d7e08ed7a81634c2bede317172da4548b0d3c6622683c2a1b8748f31de69977e3ad7f4651fefbd6e1bd1746e360458b71013f10d8e0506ff53055534970e9cdbfd77c1fea45219e49e37aeff388e3797cbbd23e7ec17d7adb5e6c90333fbf4eb01c95f054e3c23ca8f5001a8af2268c7e8c05d2822cc0a1a3737b30fc20ad7645b96e53d23519f373b3ef343ff1f1d9e044b466347b99a285ba6967febd497cbfbd485248baa0916d73afec6b8dcacb912dc0a1d7e7ae11c3777aeaea597d5b9914ede7cc4f50bed37cc8507ef4fb5ad1eca58a168ad422a8e8fd25d17c70964000b5de1d17aa88c05525eaaf59008d2c0062f4930aae49263778735e06b41f877a12a575dddf4d7007de2db076d0fc72f52d444e7c7c6fd450df8f2d802b24b9d9cddac86d93bffde4bd8c4823b98003afb56e5445f97fc4b04ee566bf08d53957d0e98a8004cd4f43bd80769392e86aa3f6156e93da42d486e3d2f149dc809ff7608500ce94f09badd7f6350684235a80f25b62f4baea61d2c917b1e60f627ec7333fa0fecb41f31b5982225782a024de2264cc776ed4ce24daac8d3cc808d458000ebc363785d15fcce7b255756debe1e69d39078ca2632099a923d89785be3e7f8df8ec15c5043ec3e9fe1ec623c600103000761a5a55630869e5121e9fb86bdf5534a4c60220463f06e53ab153b2bde69ba0f9be8a8758df2ede328874aaeb44a8ff72d4fcbe96803ebff7c100b10528d3f693c08334a44602f0c22badeb14e57f163bc3c593d77c2823cd0e255df09a6fa73b297fdee5a9f9832d416fdb9307482c40986f105b028cfcd1e45dfbd6d1809a5900c3c389ef8f73dabaaad3e793397ce9379ac42106bab926b03a9ab7d6fa1ef065e3311803a8040344eda436720f0d68a800bc70b87515f06012f7e37c13f4862c7166cfc6fbd1228f8b3ec3b7429620cd0344fd1c0310e61360e2ebf0151ad050011023f7029b7c49d631574b358dcbf5ade6c7757d5cbc8f730757347ff43efef75a0c4034afa03ad2fdfdee89db1ffd244368a800a8423d98ce5d53b61091fa74320c50450912b081ab6215f592be563471edf5f1bfa71800200280b60f587e94eb400f2d170f1480fd2fb5ae112d77818defc1ed92154dd60868de4501005de9f8b81ffbf710e7ae05cdba58faf87e6a01002cf0239b538877bf0f3084066602f71f9cfd2aebd5f36e070dbf4b566c9e1cf0c3ceec31362924614a779ef6540aeebb6d82f131c596cde32805931363c39eb587664f77fcff8fbfd766aedd65e69d360cc8bcb976cfe7b7b163eb385bae1fa3ec59b0b6b4d43ea7697f281c7fafcda1a3a7abc258e38c2103844083912414f4bf838bb27e73eef8febe45a22102d0fa278d459371c912a7e9aa42f5b1ef3f6ff30251541057b7f67c7e0b0f7d6efbb20d7afb9ce685574ef3f23f9fee5ba5db7bef36f6de3fb93c0f3084b486dffff60ca7cfb447aa2afa4932390690aeed3ba5d469f5d0f067ed132f3cddef79faba80670eb64a6d64daa3cb42459258f5ab9b04f4e9e701447dc7fc8d1b1487bef559f6debf7ccc0718df54b2efa1ed7cef8fa7514ad5fad81d5bc797ef01865059c2338fec180d13983e18c0a47900c05609ddb8832a18180ef61500119906cad8d74330fbf12a5deffba3d02fcef86ddca0f8de37a6995880995f28edbc759ceffdf1f480b87bf5687c53c9f42d56089b60023f2134c30085ead949c56da11561ad1d13b7eeb9a6dfb3f41500557087fb7fbe82254c7c2479e8383de9cc982a147b3ebf65413e7eb1b47dcb187beedd06d4c5ddab4b776e9ba8fe33d412e0c71193e5012cfa0f1940a8169e46b503d43a31f25bfd9ea3bf0530ec1013495254b78f67e76ae3a2005b23c866b98e6d84ddbfbd3afe16e0a1cf4db27183ead5ac55a6ed9fde0834cc03b8e8a970ca47a56c4596092c1c0648e71202b7f57b8e5a0178f2fbb357e1b6558f3040b2160ebbff1d41f212ac6031c27d3bb68c3c384b496509d3b74cf46ad62ad3f8a6922dd76f1c1d03905b80e878a3a3ea61701b20a309003029464a720b4008f97c0630429f60a30182c46edbbaf2a63fa76d13636b0a0338da3935d11c03388daeb100a53fafa4a77650b537f57b865a011023533d1314bd245666a98ce2d4785e00c1f78081ed5b560f713bdabef5da35870100b65c3f367286b0ce02b86450b543093efa2258e8abc7b7edbaaeee19fa5980a93479136380ea80a4e043b64387b50c13d76e5cc0b02c3d8d6f2ad71c060098be75bc7146d087d6fd3000ce0284c523c97544a6ea9ea17e098361b35fb410030a7b469515761622de9327fa3843a1b8f613cd027eade1a91f1ea33352864c31fe09c5be87b637ba879b69330a06d8fee5034015c534491cedfdce0cc7dfebb051c1ccf77735bac77db76de1d5b74f67cf273dfd644510525900e96485a0080046c0111154a126eaeedf670d0b13b9cf7116a1766f1ffb774d081547f1b5a7dfeff0f25b738d326279ffb3b78eb37d6ab89b718332320658c0f15d81d953ed46cf35f129056f67cf57d4f56d720797f9d35619b3743175cbea408cd40a401f0cc027a34c74483ae0679c443ea624f63921f418cdd72ebe9e3edaf51b53918c44c3e3e1f8cf3b430eace8bedb2acbd2ec7de3358655d4155617573f877505848c20a0a09900ec7d76661db0c9d5fdbd8f89b76da117fd27a8d397264718ec0556cd1a6be80231c068c21c2ce3b153cd3e0d303606e39fd8d8f07de39d56220c5000757c20b6007a53ddfd7b04a0faf052f53261a70f129fe48630dd24318e47abf317a239236b7e538d5e601e60b4e383869e7e5f689f6bb67fc38eade3cd3282890520e4018c788be0dda49f6fe10b44cd04401bb9262cd85449ddbf37ee2f93397fd5ef99a436a4c5d6cf47bd7e635ae0f16284d9f7ce363a65e754936800520b50350193d56d39e7b0038891da7a400d0650ebc26c5ddb9a5cf321ec7b17e5051c1618116dc3a5870154a1387aaadde8941d5bc747cf0358aaec6f158d610160751e16ab592e16aa76ad408f008891ab7d26cfcdee25caf1fb7ab35b16569d173ec690faacc6748961008c30fbf366025096b0edd363e9f3f57bff4c18b5d7785d7f7cf8bd3626ef11000549dddff73daa74e9c668bb532a345a0d552cb9972f06a05074cf0b73ffda0c074cdbeae0200c10af2206570524fcdd550d5db516c73f01686601baf19cb2b8eff6eb33796b1fa6067d8e4297220600aa244f03da66ab83833040d85c829e6960fdd1bfbfcec775f7adb3005a224d774905b70bb65b1be8679e643353d46235ed12c20000c74e751b9d363931c646a586e7016ccebfca00ba3c804eb181e79b8eaf53fb81aa1a0ca02fd896666d65687249bc8201aaf6e49936bae16e7ed39f9918500bb0667d7eb005a8f1fdae6d6601a0fc080ff0b22dce5dd50fac4f0aa8bf5e722f6f0ce0ce7ff5ed6649a12d1363fdd1bf4b0faf573e0318761e0d96d8d5705451264aa2e0a3ba7bf65a00d11fd9d6a27f57e58b34df5605838fe9b32fde0874a962008c707aae595af8b39f193c3f209e1398af09ec6701a2f39b09c0a1efdca3c5a05d66c9a1cbb80f615e005612c31eb95730407ebfa616a02c61cbe6f19ef35d5f0c7677301bff47d3c5bc2506aa55dc8edcec6055fb0da27ed5c039113de9e7a3170a113bd9c0f5fbf8fe8560802dd78f317dcb385a224977d3a006f4c7372ab66f6938e3c848985b37022d0403e4553d045a739d461363774e6de4f4fbed9eaaa047f5f379e655479638cddfb8befdfb0775f7ab150031fc52c16418743226542f8b09bb5ce74ca250bc7fb699e92b4b78e66b3b1b1dbb6072287a45308064f7138ebed36e24003bb64ef0c22bd9fc00e3e601746d74e6e6017443e9b7a86e9bd8ab5478ced4ddafdf8ca03361556f7dab7b2c801b02a73142fbc36621d07253e7dcea620080d9ff7bb6d1e9dbb78cb171436f3491575fe3fd151580a47fefb500fcb2ee7eb502a08db4e2fdfe938f22dab6dfb772822faa7e6f9a095b4e3af97e7b553100c0c99f771a8783db3f1dd70608d79baffa3e03184d01f7e81f7ced26ab059caabb573f0b70cacdf94be603a0d0f6cb1d5aea3f721072d5a365c296938e9d6aaf5a1e20ee1f7faf596de0cea9f13e790037ee3106e8666d66b1aba4d0053152bba174bd00184e011fbb978a0b3ef1fef63a1a9cd402e07f9f39d1eca5978d34ccbc3db7aa7900d73fd6b03a3879fdc6507bf119400819c098b92143e8168578df6fef2f704a9f6b354d04c1ccf3bb7e25465a7e6590091adebbbf7dd646000860eedfba1c78ad5918b41cb4ff9f66ab6f13ac320690112cc0c4c49807767e5ce7538b5c315b22fed85dd89c25f05bee0b0a8ef7bbd7800d22d4f1bc2a984603591bcf0788cd66a1d87f787655b0c0dc5c87175ea9842fafd20da38e0b6046c000ef9fd503f316ed0fbb8dc6a135d721acc0aa8bffd3899f55bff4e32e26da5bb8b2046ff5bbd780b581f2866d01fc3e00211af0c7a52d12cd09ac7e171176fff9ab2b2a04adb90e7bbe3b53ab893327865ba483ff3ceb8f7ff5f8f07cfeeca936ed0fbb4333964d30d1d177dabde3aaeb665e05cbe6f761f4a161109205590085fa8918f95899fce30d0e0340b4f224c4ad1e33a49a2002bbfffc55f6bfd46a8c8617441af6bfd4e2bf7c7386eef9feb9f9236ff637c7b3a753cbd1feb0cbfe9766fb1edf3ea779eac5597f7c7ebfb87fe8e81c730352c347de6cf3c2e193246bfbe6058a325a06a6fd3c8d8ac9d59671215f408c014e75daadda101086ec10b2fdcb07dec17073cf97307cc1a1cf3ef72e64b40f99cfebdfb851317dcb38db26c619ff44b54dcc42378d70dbaf9c3cd366ee5fbbbcfad65ccffdfaf5efbc699c5d776e61c7d6eafeb3a73bbc7a7c8e97ffe574edf113d76ee4a1cf4f32bd7582b14d5588fbeadba73974748eb35d197abff8fdf7debf9dcf7e66c2bf776baec3cb47e7a29d4da27afe3c68e9501ab1b3b335225dc0edc85af595c933a92086a7f5b9d69f2d4c001e38f03805df4a34dee70e43a6aafe6307713ee04adbbc259a916585405716434b178c20e73bd5689f7780af63816037ba9ae307b777daadd13180a517fb56f96a73cff16ce001c75fe90fed87dc7fd5f7cc970e5ef3a9617eb43847c10762fafb7f182200b30777cf29d41bc1b7c4bb5a93f87ae783923ec37de295beeb93c6fdb6f45bf9fad8f7abc842446b32f13e3fc6003fea17ff3b6ab253e88bb6f53e2691c02c03b5da9a73f1f649e37edf46e8df50f97e6f09dcf9926bbeebbfc8106ab053283f12d089a78ae602c699a764f6705d2e1bd680a6adb53ec42b7a7cdc8f22ff2844ee1e7c01881ecd4715eadd4ebbf52e4368a800cc1edcf32b90c3952f92e89b3559db7747507ba135a3696bad4fbde6cf67c0cff97ed345a1134b5ca3f98891176840cdb68b9fe759b59ef0bdbaf90050628be0f205894467d1c315cb90bf3f91e65bcdce267e86b8dfbae1b814dcabf9089c55057f4b036a2400adc37bdf95797d04f0192937332508413c0f5dfa5a8444f293fe6a6be22a687ed2e6a85fc048d86e57ba841d59aa7e1fcd47c1b39d76ab51baadf1276314e5d3eeeb607eb630b110f8b89378854ab008ea0a46c8fbce723ad4eff3003adaf84907a02d9dea37b7fd2e3d9a8f2af848e07fd2901a0bc0ece1bd6f0133da871ed5ec60bf266dbe03f3f4c708711bedd471b95a82183b2983fffe82df00da69bcb50469f555fa693e62f8efbaddaa5d045247a37e38f2e934631b24d65904e7c36aa3053fc78dcbdb12f468bec5563da8bfcaf82182321a5cba975acd47e0bc2ad4f71881461280d62b8fbeae8d1cc108bd33865c462ab2084825d9f4b704975bb49068beebcf4ba8f6c5a8df085de9e273ff2ed74fade6a3e0a94e7bb676fe7f3f1af9d3b125fc570dba0cfd68a65066116cd49060832ca3a82e274b9068bef24c74582a6cf8547d7b19e71e9cd0c416a317fdff4ce0bb8c48230b40ebb57d674a7822fb62a5dfb73ef96881d19564cfc7d14240afd4b6f6466b4c73975ef36d354fbb0f6b05cdafbeb79c5a82705eade623461ed1edc169df3a1a590000b49167cb429d715fab721620ddb614528c10450bb126f89a0143f2066b48931bf5ddf3438fcf779a1f2df2a8c6ad8332022666be65767fcd47e0a03ed7bfe2378846fa78744c1377eebb9b82d7304232651cfb0d1b24fd9821e03e75869dde144299b8a44c18a486f5f5b5dc4f34d6611e87f6099653a462be481724d3fc7ed3f0aaf623557043a7dd1ac9f73b5a900500983bfae44f307cd7f97edf52fb39d3ea241742ce475820ce20ba193017b525489fbf7aab74795760bed57ce9840c5f0ca4876b3eaae0f716ca7c58840058daa78dfcd4bd4c68258a0eba76264bd7c6b71d8b0d6cde208f12866610d77a9f9edc7e1ce7e768bfe335fd2c481739dfb66d6d7d3fef7fb7d36efdb81f739ad0825d80a3893b1fbd0ec3490aae099942bce656ee80f4cb1610694e69e3e020e115a51a15da4aa79c6ead9d367b4e22a6d57de8c900c631dff97cedfbe1ea518635edff54e076dd6e5d68caab3a5ab400004cdcfee81704fdbf2af30661f3084bd96692f5d840c37a173a66e6cebb8b7ca16a74bf55ef87e97061b76e150a3bd2b1d15265211dc0a30eed0ff6f955bad7b04d9feb3fd9b3292d8900004cdcfee8b731fab15e8db50778cb900b813da618c3da08a05e08aaebf4b9fe4a6ababb9f75534ee3dddfbd30cc4bf54e997b14eff373b4df48f32f08fc27dd6efda4296f06d1920900c0c48ebdcf0bf255efabea3498caec03432c026b3a5af0be98cc370ffaae9fd121b76fba28013123693e62d8adcfb50e2e15cf160b021312e41185fa716d0814b5be902442692c1a3612f9460d6898d7a8248914ad7e85de686159338ae9fd8632dfbe4f85f205447b8d47ba28d1c1ec3743fb08fcc952321f96d802008cdfbae72a55f09a189976c314f6b773831a5e0e688011dcd563f7106382e5b30cf96497e0e3ed23e51a6fac50fb12ae5dc3e7ab7b76058f74abb87fb8c6bb76e0fcfe85d2920b00c0f8ad7bae56f0bf05f9ade00ee2356b9299f5d82d544daf10a4c2e28520ba4ee2ab6deebd377a7034a09fa37922e6632dd27afca498cabcc769f1caf757e9db7c0ab7784cd0c7c7d7f5bfafdbad3f58002b86d2b20800c0f8b6dd25052f63e4ee7a404506e0527307650420075806c300a1a0c6420c69230d77663e46f3e98799e32497e056e92a88986ee7f0f9244f14df37d3fc27f4b9d63797842935b46c020030be6df7550a7e28c8030135476d8f25e85dcbd71b3d847c42220c8e9c25b1a4d62babb19970402ff3dd718ed92e2aa9617a4f86d34458c7a5774d94e143821b69aef98fe8766ba4fafea8b4ac02e0687cdbeee7c4c81fc5ac4a363e4ecc3409800b1aec2c03bd9881acf640fc39d54ad84280594f7ed345777c92ce56f6ab5c44193f1dd6e251693610aa76ded75b37d05ce3510517c4f0657daef50f230ff688b422020030be6dd7c318fe12b8aac7124485a418cde79621cd0758365b61e81582a8efab95d682f4ed4b101e620d776f91697a9e06964ef8bd795c9ff7cf0afcae6eb7de58164664b4620200303eb5eb6631f29282896086c3f6b37e30229f0d0400e7815d164dc43e1f5044c2519b348aa807f0b97df7f250cf3ea1e986f370713c91102c48e35dfbbad5fcb34b33e2c369450500607c6ad7d518f901f045cf7cfbed21df920a436a215220591b02126b54109e7ee95b77464f5c9fa475e9cdf1476e60813edef53f56f044a7dd7a6239c7be8e565c001c8ddd30fd30f06d60c3d0002d178e28a404fa148a48357f500be1bca80a997e853b058271357044549fb7bf54055feeac90c9cf69d5040060ec86e9eb143c2770af37b356e393bc81893180b30c832c4524048e6a996e29c622d1d9f136ac61f30b1612c7d7f52f08f2acd5fc55db4c715505c0d1d80dd3f760e43960b3ffd1332b4beac494b9878196a3aecd3e7b53dd57926e9ac6cef2040b6f67c4f0883ed76a2dc9002e82d68400008cdd305d62e41bc0d7315c9d323fcff0d5440f9ed2e39c05e9e9d7517c1f22a62f4ed3e3fe9c42edebb46797349fbf185a3302e068ec53dbaf06f5b0205f57704d4f2e3e4eded4b9895ce370e6bc26b7efcecb01e0e2353c6f7f2186a755c18b9d05ccdc5d4e5a7302e068ec533b3760e42b143c2646362db126ae54ff5d552dd45c331a9fd39a150047e5f864a9e01e313ca80aee16c3ba65d0d0a56c7fa50a0e8be16ff5b9d541f6a3d09a178098caf1c94d0af525411e5070f31ad274141c117851a17edc69cfaefe16e90de9a2128098ca4d939b55c1b418ee5205778861d30a6bfa9ccddcbdae0adee8b45bb59f6459eb74d10a404e63e3dba704b94bc194c09442dd28c88625d2f4b30a75469096823704ded20376dfbc98e89211803a1a1b9fbc560c13aa60ca62879b220ddea00a6e14c3c7aae067d1ef5a15b4c47041159c12434b9f5bbd44cd72d3252d005768382de9a4d02b74f1d11501b8cce98a005ce6f4ff010d8c41baf5d21c7f0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="544">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000001e749444154388dbd93316b544110c77f175798072fb22b27bcc3a01c58e495823657c98185a9349d1fc0c28055be8048f00b885dd228f90ab1b5bbca60f75208f740914342de060fde10f7ee59ecbbdc15e904ffb0cc32ccccfeff33b3f08fe8b4d602c3f63e6f6d00662bbed0da0ef01bf802cc4d1bf030dfcc5fdbae45904683c60281190634e89c4020d0009df18ff1b9f7fe05f073c1e4edfefbfda6699aa6b968aec6453c67bfce9a9d973b0df014203230dcaaa615555521482c2991746212ea5003a04121405114001b006b31563255458cd0d28f8a6199ac315983529c140077561964ad4544c0c49717a8438d4b1d9556919c08c0ddcb0262e4a6889024cba45524d7a3dfe1a8a5a67faf4f5996b797055271a3d188bd377b91aa0141505664b592c408fed463adcdbcf7710ff2cdfc4f35ad0c0ac3c743fa1b7d3428920a84988481e25bc1783c46a74ae5abf3b22cad01b05d6bb26e86f79eed67db1c7d3aa... [truncated message content] |
From: <tim...@us...> - 2005-12-05 20:11:03
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32591 Modified Files: openmodellergui.cpp Log Message: Parse for tabs in localities file delimeters too Index: openmodellergui.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/openmodellergui.cpp,v retrieving revision 1.83 retrieving revision 1.84 diff -C2 -d -r1.83 -r1.84 *** openmodellergui.cpp 5 Dec 2005 14:26:49 -0000 1.83 --- openmodellergui.cpp 5 Dec 2005 20:10:45 -0000 1.84 *************** *** 1418,1422 **** // Code snarffled from setSpeciesList... //first build a regex to match text at the beginning of the line ! QRegExp myQRegExp( "^[^#][ a-zA-Z]*" ); //seconf caret means 'not' QStringList myTaxonQStringList;; QFile myQFile( theFileNameQString ); --- 1418,1422 ---- // Code snarffled from setSpeciesList... //first build a regex to match text at the beginning of the line ! QRegExp myQRegExp( "^[^#][ \ta-zA-Z]*" ); //second caret means 'not' QStringList myTaxonQStringList;; QFile myQFile( theFileNameQString ); |
From: <tim...@us...> - 2005-12-05 14:27:06
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21402 Modified Files: openmodellergui.cpp Log Message: Apply patch from Renato to fix some comparison logic Index: openmodellergui.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/openmodellergui.cpp,v retrieving revision 1.82 retrieving revision 1.83 diff -C2 -d -r1.82 -r1.83 *** openmodellergui.cpp 25 Nov 2005 12:49:48 -0000 1.82 --- openmodellergui.cpp 5 Dec 2005 14:26:49 -0000 1.83 *************** *** 360,363 **** --- 360,364 ---- QString myQString; QSettings settings; + if (thePageNameQString==tr("Step 1 of 9")) //we do this when arriving at the mode selection page { *************** *** 385,389 **** cboModelAlgorithm_highlighted(tr(myModelName)); } ! if (thePageNameQString==tr("Step 2 of 9")) { settings.writeEntry("/openmodeller/modelName",cboModelAlgorithm->currentText()); --- 386,390 ---- cboModelAlgorithm_highlighted(tr(myModelName)); } ! else if (thePageNameQString==tr("Step 2 of 9")) { settings.writeEntry("/openmodeller/modelName",cboModelAlgorithm->currentText()); *************** *** 406,410 **** } ! if (thePageNameQString==tr("Step 3 of 9")) { setNextEnabled(currentPage(),false); --- 407,411 ---- } ! else if (thePageNameQString==tr("Step 3 of 9")) { setNextEnabled(currentPage(),false); *************** *** 491,497 **** } ! ! ! if (thePageNameQString==tr("Step 4 of 9")) { //MODEL CREATION LAYERSET --- 492,496 ---- } ! else if (thePageNameQString==tr("Step 4 of 9")) { //MODEL CREATION LAYERSET *************** *** 545,549 **** } } ! if (thePageNameQString==tr("Step 5 of 9")) { //MODEL PROJECTION LAYERSET --- 544,548 ---- } } ! else if (thePageNameQString==tr("Step 5 of 9")) { //MODEL PROJECTION LAYERSET *************** *** 587,591 **** } ! if (thePageNameQString==tr("Step 6 of 9")) { //MASK AND FORMAT LAYERS --- 586,590 ---- } ! else if (thePageNameQString==tr("Step 6 of 9")) { //MASK AND FORMAT LAYERS *************** *** 599,603 **** { //loop through combo entries and check there is not already one for ! //the prefferred one - not that setDupliactesAllowed is only applicable to //editable combo boxes for (i=0; i <= cboInputMaskLayer->count(); i++) --- 598,602 ---- { //loop through combo entries and check there is not already one for ! //the preferred one - note that setDupliactesAllowed is only applicable to //editable combo boxes for (i=0; i <= cboInputMaskLayer->count(); i++) *************** *** 605,609 **** cboInputMaskLayer->setCurrentItem(i); ! if (cboInputMaskLayer->currentText().compare(myInputMask)) { myFlag=true; --- 604,608 ---- cboInputMaskLayer->setCurrentItem(i); ! if (cboInputMaskLayer->currentText().compare(myInputMask) == 0) { myFlag=true; *************** *** 620,624 **** { //loop through combo entries and check there is not already one for ! //the prefferred one - not that setDupliactesAllowed is only applicable to //editable combo boxes myFlag = false; --- 619,623 ---- { //loop through combo entries and check there is not already one for ! //the preferred one - note that setDupliactesAllowed is only applicable to //editable combo boxes myFlag = false; *************** *** 626,630 **** { cboOutputMaskLayer->setCurrentItem(i); ! if (cboOutputMaskLayer->currentText().compare(myOutputMask)) { myFlag=true; --- 625,629 ---- { cboOutputMaskLayer->setCurrentItem(i); ! if (cboOutputMaskLayer->currentText().compare(myOutputMask) == 0) { myFlag=true; *************** *** 641,645 **** { //loop through combo entries and check there is not already one for ! //the prefferred one - not that setDupliactesAllowed is only applicable to //editable combo boxes myFlag = false; --- 640,644 ---- { //loop through combo entries and check there is not already one for ! //the preferred one - note that setDupliactesAllowed is only applicable to //editable combo boxes myFlag = false; *************** *** 647,651 **** { cboOutputFormatLayer->setCurrentItem(i); ! if (cboOutputFormatLayer->currentText().compare(myOutputMask)) { myFlag=true; --- 646,650 ---- { cboOutputFormatLayer->setCurrentItem(i); ! if (cboOutputFormatLayer->currentText().compare(myOutputMask) == 0) { myFlag=true; *************** *** 660,671 **** } } ! ! if (thePageNameQString==tr("Step 8 of 9")) { - //persist values for masks and output format settings.writeEntry("/openmodeller/inputMaskFile",cboInputMaskLayer->currentText()); settings.writeEntry("/openmodeller/outputMaskFile",cboOutputMaskLayer->currentText()); settings.writeEntry("/openmodeller/outputFormatFile",cboOutputFormatLayer->currentText()); // // Extract parameters and their values from map and add to QStringList ready for reading --- 659,671 ---- } } ! else if (thePageNameQString==tr("Step 7 of 9")) { //persist values for masks and output format settings.writeEntry("/openmodeller/inputMaskFile",cboInputMaskLayer->currentText()); settings.writeEntry("/openmodeller/outputMaskFile",cboOutputMaskLayer->currentText()); settings.writeEntry("/openmodeller/outputFormatFile",cboOutputFormatLayer->currentText()); + } + else if (thePageNameQString==tr("Step 8 of 9")) + { // // Extract parameters and their values from map and add to QStringList ready for reading *************** *** 1463,1467 **** // //first build a regex to match text at the beginning of the line ! QRegExp myQRegExp( "^[^#][ a-zA-Z]*" ); //seconf caret means 'not' QStringList myTaxonQStringList;; QFile myQFile( theFileNameQString ); --- 1463,1467 ---- // //first build a regex to match text at the beginning of the line ! QRegExp myQRegExp( "^[^#][\t a-zA-Z]*" ); //seconf caret means 'not' QStringList myTaxonQStringList;; QFile myQFile( theFileNameQString ); |
From: <tim...@us...> - 2005-11-25 12:49:56
|
Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32489 Modified Files: openmodellergui.cpp Log Message: Replace spaces in output file names generated from taxon names with underscores Index: openmodellergui.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/openmodellergui.cpp,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -d -r1.81 -r1.82 *** openmodellergui.cpp 31 Aug 2005 15:24:11 -0000 1.81 --- openmodellergui.cpp 25 Nov 2005 12:49:48 -0000 1.82 *************** *** 904,908 **** void OpenModellerGui::makeConfigFile() { ! QFile myQFile( outputFileNameQString +"-" + taxonNameQString + ".cfg"); std::cout << "Config file name: " << outputFileNameQString.ascii() << std::endl; if ( myQFile.open( IO_WriteOnly ) ) { --- 904,910 ---- void OpenModellerGui::makeConfigFile() { ! QString myUnderscoreName=taxonNameQString; ! myUnderscoreName.replace(" ","_"); ! QFile myQFile( outputFileNameQString +"-" + myUnderscoreName + ".cfg"); std::cout << "Config file name: " << outputFileNameQString.ascii() << std::endl; if ( myQFile.open( IO_WriteOnly ) ) { *************** *** 1056,1061 **** taxonNameQString=lstTaxa->text(mySpeciesInt); makeConfigFile(); ! parseAndRun(outputFileNameQString +"-" + taxonNameQString + ".cfg"); ! QString myOutputThumbnail = outputFileNameQString +"-" + taxonNameQString + ".png"; pixModelOutputImage->setPixmap(QPixmap (myOutputThumbnail)); } --- 1058,1065 ---- taxonNameQString=lstTaxa->text(mySpeciesInt); makeConfigFile(); ! QString myUnderscoreName=taxonNameQString; ! myUnderscoreName.replace(" ","_"); ! parseAndRun(outputFileNameQString +"-" + myUnderscoreName + ".cfg"); ! QString myOutputThumbnail = outputFileNameQString +"-" + myUnderscoreName + ".png"; pixModelOutputImage->setPixmap(QPixmap (myOutputThumbnail)); } *************** *** 1074,1079 **** localitiesFileNameQString = lstLocalitiesFiles->text(myFileInt); makeConfigFile(); ! parseAndRun(outputFileNameQString +"-" + taxonNameQString + ".cfg"); ! QString myOutputThumbnail = outputFileNameQString +"-" + taxonNameQString + ".png"; pixModelOutputImage->setPixmap(QPixmap (myOutputThumbnail)); } --- 1078,1085 ---- localitiesFileNameQString = lstLocalitiesFiles->text(myFileInt); makeConfigFile(); ! QString myUnderscoreName=taxonNameQString; ! myUnderscoreName.replace(" ","_"); ! parseAndRun(outputFileNameQString +"-" + myUnderscoreName + ".cfg"); ! QString myOutputThumbnail = outputFileNameQString +"-" + myUnderscoreName + ".png"; pixModelOutputImage->setPixmap(QPixmap (myOutputThumbnail)); } |
From: <mco...@us...> - 2005-11-10 22:32:31
|
Update of /cvsroot/qgis/qgis/providers/ogr In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8356/providers/ogr Modified Files: Tag: multiple-layers-branch qgsogrprovider.cpp qgsogrprovider.h Log Message: - data provider capabilities(), select(), getNextFeature(), and getProjectionWKT() now accept (or force) use of data provider layer number No loads all SDTS layers without bombing. Except it doesn't draw anything. And it _does_ bomb when you ask for layer properties. Index: qgsogrprovider.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/providers/ogr/qgsogrprovider.cpp,v retrieving revision 1.38.2.12 retrieving revision 1.38.2.13 diff -C2 -d -r1.38.2.12 -r1.38.2.13 *** qgsogrprovider.cpp 9 Nov 2005 20:41:05 -0000 1.38.2.12 --- qgsogrprovider.cpp 10 Nov 2005 22:32:13 -0000 1.38.2.13 *************** *** 459,463 **** ! QString QgsOgrProvider::getProjectionWKT() { #ifdef QGISDEBUG --- 459,463 ---- ! QString QgsOgrProvider::getProjectionWKT(size_t dataSourceLayerNum) { #ifdef QGISDEBUG *************** *** 465,469 **** #endif ! OGRSpatialReference * mySpatialRefSys = imp_->layers[0].ogrLayer->GetSpatialRef(); if (! mySpatialRefSys ) --- 465,470 ---- #endif ! OGRSpatialReference * mySpatialRefSys = ! imp_->layers[dataSourceLayerNum].ogrLayer->GetSpatialRef(); if (! mySpatialRefSys ) *************** *** 1613,1622 **** ! int QgsOgrProvider::capabilities() const { int ability = NoCapabilities; // collect abilities reported by OGR ! if (imp_->layers[0].ogrLayer) // XXX first layer only? { // Whilst the OGR documentation (e.g. at --- 1614,1623 ---- ! int QgsOgrProvider::capabilities(size_t dataSourceLayerNum) const { int ability = NoCapabilities; // collect abilities reported by OGR ! if (imp_->layers[dataSourceLayerNum].ogrLayer) // XXX first layer only? { // Whilst the OGR documentation (e.g. at *************** *** 1627,1631 **** // the #defines we want to test for here. ! if (imp_->layers[0].ogrLayer->TestCapability("RandomRead")) // TRUE if the GetFeature() method works for this layer. { --- 1628,1632 ---- // the #defines we want to test for here. ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("RandomRead")) // TRUE if the GetFeature() method works for this layer. { *************** *** 1633,1637 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("SequentialWrite")) // TRUE if the CreateFeature() method works for this layer. { --- 1634,1638 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("SequentialWrite")) // TRUE if the CreateFeature() method works for this layer. { *************** *** 1639,1643 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("RandomWrite")) // TRUE if the SetFeature() method is operational on this layer. { --- 1640,1644 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("RandomWrite")) // TRUE if the SetFeature() method is operational on this layer. { *************** *** 1653,1657 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("FastSpatialFilter")) // TRUE if this layer implements spatial filtering efficiently. // Layers that effectively read all features, and test them with the --- 1654,1658 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("FastSpatialFilter")) // TRUE if this layer implements spatial filtering efficiently. // Layers that effectively read all features, and test them with the *************** *** 1663,1667 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("FastFeatureCount")) // TRUE if this layer can return a feature count // (via OGRLayer::GetFeatureCount()) efficiently ... ie. without counting --- 1664,1668 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("FastFeatureCount")) // TRUE if this layer can return a feature count // (via OGRLayer::GetFeatureCount()) efficiently ... ie. without counting *************** *** 1672,1676 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("FastGetExtent")) // TRUE if this layer can return its data extent // (via OGRLayer::GetExtent()) efficiently ... ie. without scanning --- 1673,1677 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("FastGetExtent")) // TRUE if this layer can return its data extent // (via OGRLayer::GetExtent()) efficiently ... ie. without scanning *************** *** 1681,1685 **** } ! if (imp_->layers[0].ogrLayer->TestCapability("FastSetNextByIndex")) // TRUE if this layer can perform the SetNextByIndex() call efficiently. { --- 1682,1686 ---- } ! if (imp_->layers[dataSourceLayerNum].ogrLayer->TestCapability("FastSetNextByIndex")) // TRUE if this layer can perform the SetNextByIndex() call efficiently. { Index: qgsogrprovider.h =================================================================== RCS file: /cvsroot/qgis/qgis/providers/ogr/qgsogrprovider.h,v retrieving revision 1.14.2.4 retrieving revision 1.14.2.5 diff -C2 -d -r1.14.2.4 -r1.14.2.5 *** qgsogrprovider.h 20 Oct 2005 21:13:45 -0000 1.14.2.4 --- qgsogrprovider.h 10 Nov 2005 22:32:13 -0000 1.14.2.5 *************** *** 54,58 **** /** Used to ask the layer for its projection as a WKT string. Implements * virtual method of same name in QgsDataProvider. */ ! QString getProjectionWKT(); /** --- 54,58 ---- /** Used to ask the layer for its projection as a WKT string. Implements * virtual method of same name in QgsDataProvider. */ ! QString getProjectionWKT(size_t dataSourceLayerNum = 0); /** *************** *** 115,119 **** * @param useIntersect Use geos functions to determine the selected set */ ! void select(QgsRect * mbr, bool useIntersect = false, size_t dataSourceLayerNum = 0); /** --- 115,119 ---- * @param useIntersect Use geos functions to determine the selected set */ ! void select(QgsRect * mbr, bool useIntersect, size_t dataSourceLayerNum = 0); /** *************** *** 184,188 **** See the OGRLayer::TestCapability API for details. */ ! int capabilities() const; void setEncoding(const QString& e); --- 184,188 ---- See the OGRLayer::TestCapability API for details. */ ! int capabilities(size_t dataSourceLayerNum = 0) const; void setEncoding(const QString& e); |
From: <mco...@us...> - 2005-11-10 22:32:22
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8356/src Modified Files: Tag: multiple-layers-branch qgsdataprovider.h qgsvectordataprovider.h qgsvectorlayer.cpp Log Message: - data provider capabilities(), select(), getNextFeature(), and getProjectionWKT() now accept (or force) use of data provider layer number No loads all SDTS layers without bombing. Except it doesn't draw anything. And it _does_ bomb when you ask for layer properties. Index: qgsdataprovider.h =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsdataprovider.h,v retrieving revision 1.27.2.4 retrieving revision 1.27.2.5 diff -C2 -d -r1.27.2.4 -r1.27.2.5 *** qgsdataprovider.h 20 Oct 2005 21:13:45 -0000 1.27.2.4 --- qgsdataprovider.h 10 Nov 2005 22:32:14 -0000 1.27.2.5 *************** *** 92,96 **** * */ ! virtual QString getProjectionWKT() = 0 ; /** --- 92,96 ---- * */ ! virtual QString getProjectionWKT(size_t dataSourceLayerNum = 0) = 0 ; /** Index: qgsvectordataprovider.h =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsvectordataprovider.h,v retrieving revision 1.40.2.3 retrieving revision 1.40.2.4 diff -C2 -d -r1.40.2.3 -r1.40.2.4 *** qgsvectordataprovider.h 20 Oct 2005 21:13:45 -0000 1.40.2.3 --- qgsvectordataprovider.h 10 Nov 2005 22:32:14 -0000 1.40.2.4 *************** *** 77,81 **** * */ ! virtual void select(QgsRect *mbr, bool useIntersect=false, size_t dataSourceLayerNum = 0)=0; /** * Update the feature count based on current spatial filter. If not --- 77,81 ---- * */ ! virtual void select(QgsRect *mbr, bool useIntersect, size_t dataSourceLayerNum = 0)=0; /** * Update the feature count based on current spatial filter. If not *************** *** 223,234 **** } ! /**Creates a spatial index on the datasource (if supported by the provider type). Returns true in case of success*/ virtual bool createSpatialIndex(size_t dataSourceLayerNum = 0); ! /** Sets filter based on attribute values. Returns false when input string contains errors */ virtual bool setAttributeFilter(const QgsSearchString& attributeFilter, size_t dataSourceLayerNum = 0); /** Returns current attribute filter */ ! virtual QgsSearchString getAttributeFilter(size_t dataSourceLayerNum = 0) { return mAttributeFilter; } /** Returns a bitmask containing the supported capabilities --- 223,237 ---- } ! /**Creates a spatial index on the datasource (if supported by the ! * provider type). Returns true in case of success*/ virtual bool createSpatialIndex(size_t dataSourceLayerNum = 0); ! /** Sets filter based on attribute values. Returns false when input ! * string contains errors */ virtual bool setAttributeFilter(const QgsSearchString& attributeFilter, size_t dataSourceLayerNum = 0); /** Returns current attribute filter */ ! virtual QgsSearchString getAttributeFilter(size_t dataSourceLayerNum = 0) ! { return mAttributeFilter; } /** Returns a bitmask containing the supported capabilities *************** *** 237,241 **** be prudent to check this value per intended operation. */ ! virtual int capabilities() const {return QgsVectorDataProvider::NoCapabilities;} /** --- 240,245 ---- be prudent to check this value per intended operation. */ ! virtual int capabilities(size_t dataSourceLayerNum = 0) const ! { return QgsVectorDataProvider::NoCapabilities; } /** Index: qgsvectorlayer.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsvectorlayer.cpp,v retrieving revision 1.228.2.9 retrieving revision 1.228.2.10 diff -C2 -d -r1.228.2.9 -r1.228.2.10 *** qgsvectorlayer.cpp 9 Nov 2005 21:22:33 -0000 1.228.2.9 --- qgsvectorlayer.cpp 10 Nov 2005 22:32:14 -0000 1.228.2.10 *************** *** 257,261 **** if (valid) { ! return dataProvider()->getProjectionWKT(); } else --- 257,261 ---- if (valid) { ! return dataProvider()->getProjectionWKT(dataSourceLayerNum()); } else *************** *** 389,393 **** // and sets up the selection set for retrieval dataProvider()->reset(); ! getDataProvider()->select(viewExtent); try --- 389,393 ---- // and sets up the selection set for retrieval dataProvider()->reset(); ! getDataProvider()->select(viewExtent,false,dataSourceLayerNum()); try *************** *** 396,400 **** QgsFeature *fet; ! while((fet = getDataProvider()->getNextFeature(attributes))) { // Render label --- 396,400 ---- QgsFeature *fet; ! while((fet = getDataProvider()->getNextFeature(attributes,dataSourceLayerNum()))) { // Render label *************** *** 793,797 **** mCachedGeometries.clear(); ! getDataProvider()->select(viewExtent); int featureCount = 0; // QgsFeature *ftest = dataProvider()->getFirstFeature(); --- 793,797 ---- mCachedGeometries.clear(); ! getDataProvider()->select(viewExtent,false,dataSourceLayerNum()); int featureCount = 0; // QgsFeature *ftest = dataProvider()->getFirstFeature(); *************** *** 828,832 **** try { ! while (fet = getDataProvider()->getNextFeature(attributes, updateThreshold)) // while((fet = getDataProvider()->getNextFeature(attributes))) { --- 828,834 ---- try { ! while (fet = getDataProvider()->getNextFeature(attributes, ! updateThreshold, ! dataSourceLayerNum())) // while((fet = getDataProvider()->getNextFeature(attributes))) { *************** *** 1450,1454 **** popMenu->insertSeparator(); // XXX should this move to QgsMapLayer::initContextMenu()? ! int cap=getDataProvider()->capabilities(); if((cap&QgsVectorDataProvider::AddFeatures) --- 1452,1456 ---- popMenu->insertSeparator(); // XXX should this move to QgsMapLayer::initContextMenu()? ! int cap=getDataProvider()->capabilities(dataSourceLayerNum()); if((cap&QgsVectorDataProvider::AddFeatures) *************** *** 1771,1775 **** if(getDataProvider()) { ! if(!(getDataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0, tr("Layer cannot be added to"), --- 1773,1777 ---- if(getDataProvider()) { ! if(!(getDataProvider()->capabilities(dataSourceLayerNum()) & QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0, tr("Layer cannot be added to"), *************** *** 1979,1983 **** bool QgsVectorLayer::deleteSelectedFeatures() { ! if(!(getDataProvider()->capabilities() & QgsVectorDataProvider::DeleteFeatures)) { QMessageBox::information(0, tr("Provider does not support deletion"), --- 1981,1985 ---- bool QgsVectorLayer::deleteSelectedFeatures() { ! if(!(getDataProvider()->capabilities(dataSourceLayerNum()) & QgsVectorDataProvider::DeleteFeatures)) { QMessageBox::information(0, tr("Provider does not support deletion"), *************** *** 2069,2073 **** if(getDataProvider()) { ! if(!(getDataProvider()->capabilities()&QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0,"Start editing failed","Provider cannot be opened for editing",QMessageBox::Ok); --- 2071,2075 ---- if(getDataProvider()) { ! if(!(getDataProvider()->capabilities(dataSourceLayerNum())&QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0,"Start editing failed","Provider cannot be opened for editing",QMessageBox::Ok); *************** *** 2788,2792 **** if (getDataProvider()) { ! if(!(getDataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0, tr("Layer cannot be added to"), --- 2790,2794 ---- if (getDataProvider()) { ! if(!(getDataProvider()->capabilities(dataSourceLayerNum()) & QgsVectorDataProvider::AddFeatures)) { QMessageBox::information(0, tr("Layer cannot be added to"), *************** *** 2943,2947 **** selectrect = inverseProjectRect(selectrect); getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, dataSourceLayerNum()); while ((fet = getDataProvider()->getNextFeature(false, dataSourceLayerNum()))) { --- 2945,2949 ---- selectrect = inverseProjectRect(selectrect); getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, false, dataSourceLayerNum()); while ((fet = getDataProvider()->getNextFeature(false, dataSourceLayerNum()))) { *************** *** 3016,3020 **** getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, dataSourceLayerNum()); origPoint = point; --- 3018,3022 ---- getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, false, dataSourceLayerNum()); origPoint = point; *************** *** 3132,3136 **** getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, dataSourceLayerNum()); #ifdef QGISDEBUG --- 3134,3138 ---- getDataProvider()->reset(dataSourceLayerNum()); ! getDataProvider()->select(&selectrect, false, dataSourceLayerNum()); #ifdef QGISDEBUG *************** *** 3367,3371 **** #endif mCoordinateTransform->sourceSRS().createFromWkt(mySourceWKT); ! //mCoordinateTransform->sourceSRS()->createFromWkt(getProjectionWKT()); } else --- 3369,3373 ---- #endif mCoordinateTransform->sourceSRS().createFromWkt(mySourceWKT); ! //mCoordinateTransform->sourceSRS()->createFromWkt(getProjectionWKT(())); } else *************** *** 3436,3440 **** if(getDataProvider()) { ! if(getDataProvider()->capabilities()&QgsVectorDataProvider::DeleteAttributes) { //delete attributes in all not commited features --- 3438,3442 ---- if(getDataProvider()) { ! if(getDataProvider()->capabilities(dataSourceLayerNum())&QgsVectorDataProvider::DeleteAttributes) { //delete attributes in all not commited features *************** *** 3453,3457 **** } ! if(getDataProvider()->capabilities()&QgsVectorDataProvider::AddAttributes) { //add attributes in all not commited features --- 3455,3459 ---- } ! if(getDataProvider()->capabilities(dataSourceLayerNum())&QgsVectorDataProvider::AddAttributes) { //add attributes in all not commited features *************** *** 3470,3474 **** } ! if(getDataProvider()->capabilities()&QgsVectorDataProvider::ChangeAttributeValues) { //change values of the not commited features --- 3472,3476 ---- } ! if(getDataProvider()->capabilities(dataSourceLayerNum())&QgsVectorDataProvider::ChangeAttributeValues) { //change values of the not commited features |
From: <mh...@us...> - 2005-11-10 22:22:38
|
Update of /cvsroot/qgis/qgis/src/legend In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6765/src/legend Modified Files: qgslegend.cpp qgslegenditem.h Log Message: Changed definition of symbology compatibility for vector layers, some legend cleanups Index: qgslegend.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/legend/qgslegend.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** qgslegend.cpp 3 Nov 2005 20:44:49 -0000 1.25 --- qgslegend.cpp 10 Nov 2005 22:22:28 -0000 1.26 *************** *** 323,368 **** emit zOrderChanged(this); } - - /*QgsLegendItem::DRAG_ACTION daction= dest->accept(origin->type()); - - if(dest && origin && getItemPos(dest) != mItemBeingMovedOrigPos) - { - if( daction == QgsLegendItem::INSERT ) - { - dest->insert(origin); - placeCheckBoxes(); - } - else if( daction == QgsLegendItem::REORDER) - { - if(!yCoordAboveCenter(dest, e->y())) //over bottom of item - { - if (mItemBeingMoved->nextSibling() != destItem) - { - if(origin->parent() != dest->parent()) - { - dest->parent()->insertItem(origin); - mItemBeingMoved->moveItem(destItem); - destItem->moveItem(mItemBeingMoved); - } - else - { - destItem->moveItem(mItemBeingMoved); - } - } - } - else //over top of item - { - if (mItemBeingMoved != destItem->nextSibling()) - { - mItemBeingMoved->moveItem(destItem); - } - } - placeCheckBoxes(); - } - emit zOrderChanged(this); - }*/ } mMousePressedFlag = false; ! mItemBeingMoved = NULL; } --- 323,329 ---- emit zOrderChanged(this); } } mMousePressedFlag = false; ! mItemBeingMoved = NULL; } *************** *** 565,569 **** else { ! cbox->setGeometry(/*3*/2*treeStepSize()-14, ypos, 14, 14); cbox->show(); } --- 526,530 ---- else { ! cbox->setGeometry(2*treeStepSize()-14, ypos, 14, 14); cbox->show(); } Index: qgslegenditem.h =================================================================== RCS file: /cvsroot/qgis/qgis/src/legend/qgslegenditem.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** qgslegenditem.h 3 Nov 2005 20:44:49 -0000 1.6 --- qgslegenditem.h 10 Nov 2005 22:22:28 -0000 1.7 *************** *** 78,82 **** virtual bool insert(QgsLegendItem* theItem, bool changesettings = true) {return false;} void print(QgsLegendItem * theItem); ! /**Returns the younger sibling or 0 if this item is the first child*/ QgsLegendItem* findYoungerSibling(); protected: --- 78,82 ---- virtual bool insert(QgsLegendItem* theItem, bool changesettings = true) {return false;} void print(QgsLegendItem * theItem); ! /**Returns the younger sibling or 0 if this item is the first child of its parent*/ QgsLegendItem* findYoungerSibling(); protected: |
From: <mh...@us...> - 2005-11-10 22:22:38
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6765/src Modified Files: qgsvectorlayer.cpp Log Message: Changed definition of symbology compatibility for vector layers, some legend cleanups Index: qgsvectorlayer.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsvectorlayer.cpp,v retrieving revision 1.231 retrieving revision 1.232 diff -C2 -d -r1.231 -r1.232 *** qgsvectorlayer.cpp 9 Nov 2005 01:48:59 -0000 1.231 --- qgsvectorlayer.cpp 10 Nov 2005 22:22:25 -0000 1.232 *************** *** 2858,2899 **** bool QgsVectorLayer::isSymbologyCompatible(const QgsMapLayer& other) const { ! const QgsVectorLayer* vl = dynamic_cast<const QgsVectorLayer*>(&other); ! if(!vl) ! { ! return false; ! } ! ! //vector type must be the same ! if(vectorType() != vl->vectorType()) ! { ! return false; ! } ! //attributes must be the same ! if(dataProvider && vl->dataProvider) { ! const std::vector<QgsField> fields1 = dataProvider->fields(); ! const std::vector<QgsField> fields2 = vl->dataProvider->fields(); ! ! if(fields1.size() != fields2.size()) ! { ! return false; ! } ! //compare if equal ! std::vector<QgsField>::const_iterator it1; ! std::vector<QgsField>::const_iterator it2; ! for(it1 = fields1.begin(), it2 = fields2.begin(); (it1 != fields1.end())&&(it2 != fields2.end()); ++it1, ++it2) ! { ! if( *it1 != *it2) ! { ! return false; ! } ! } ! return true; ! } ! else ! { ! return false; } } --- 2858,2918 ---- bool QgsVectorLayer::isSymbologyCompatible(const QgsMapLayer& other) const { ! //vector layers are symbology compatible if they have the same sequence of numerical/ non numerical fields and the same field names ! ! const QgsVectorLayer* otherVectorLayer = dynamic_cast<const QgsVectorLayer*>(&other); ! if(otherVectorLayer) { ! const std::vector<QgsField> fieldsThis = dataProvider->fields(); ! const std::vector<QgsField> fieldsOther = otherVectorLayer ->dataProvider->fields(); ! if(fieldsThis.size() != fieldsOther.size()) ! { ! return false; ! } ! ! //fill two sets with the numerical types for both layers ! const std::list<QString> numAttThis = dataProvider->numericalTypes(); ! std::set<QString> numericalThis; //the set of numerical types for this vector layer ! for(std::list<QString>::const_iterator it = numAttThis.begin(); it != numAttThis.end(); ++it) ! { ! numericalThis.insert(*it); ! } ! ! const std::list<QString> numAttOther = otherVectorLayer ->dataProvider->numericalTypes(); ! std::set<QString> numericalOther; //the set of numerical types for the other vector layer ! for(std::list<QString>::const_iterator it = numAttOther.begin(); it != numAttOther.end(); ++it) ! { ! numericalOther.insert(*it); ! } ! ! std::set<QString>::const_iterator thisiter; ! std::set<QString>::const_iterator otheriter; ! ! for(int i = 0; i < fieldsThis.size(); ++i) ! { ! if(fieldsThis[i].name() != fieldsOther[i].name())//field names need to be the same ! { ! return false; ! } ! thisiter = numericalThis.find(fieldsThis[i].name()); ! otheriter = numericalOther.find(fieldsOther[i].name()); ! if(thisiter == numericalThis.end()) ! { ! if(otheriter != numericalOther.end()) ! { ! return false; ! } ! } ! else ! { ! if(otheriter == numericalOther.end()) ! { ! return false; ! } ! } ! } ! return true; //layers are symbology compatible if the code reaches this point } + return false; } |
From: <tel...@us...> - 2005-11-10 07:23:51
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5317 Modified Files: qgsmapcanvas.cpp Log Message: Minor revision to merge from 0.7.4 Index: qgsmapcanvas.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsmapcanvas.cpp,v retrieving revision 1.169 retrieving revision 1.170 diff -C2 -d -r1.169 -r1.170 *** qgsmapcanvas.cpp 9 Nov 2005 22:43:47 -0000 1.169 --- qgsmapcanvas.cpp 10 Nov 2005 07:23:42 -0000 1.170 *************** *** 255,258 **** --- 255,260 ---- << "Setting extents to untransformed extents" << std::endl; #endif + mCanvasProperties->fullExtent = lyr->extent(); + mCanvasProperties->fullExtent.scale(1.1); } } |
From: <tel...@us...> - 2005-11-10 07:14:49
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3683 Modified Files: qgslayerprojectionselectorbase.ui qgsnewconnectionbase.ui qgsoptionsbase.ui Log Message: Three more files merged from 0.7.4 Index: qgslayerprojectionselectorbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgslayerprojectionselectorbase.ui,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** qgslayerprojectionselectorbase.ui 15 May 2005 00:08:55 -0000 1.5 --- qgslayerprojectionselectorbase.ui 10 Nov 2005 07:14:41 -0000 1.6 *************** *** 57,60 **** --- 57,68 ---- <cstring>textEdit1</cstring> </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> <string><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:12pt;font-family:Bitstream Vera Sans"> Index: qgsnewconnectionbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsnewconnectionbase.ui,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** qgsnewconnectionbase.ui 20 Dec 2004 07:13:18 -0000 1.8 --- qgsnewconnectionbase.ui 10 Nov 2005 07:14:41 -0000 1.9 *************** *** 79,83 **** </property> <property name="enabled"> ! <bool>false</bool> </property> <property name="text"> --- 79,83 ---- </property> <property name="enabled"> ! <bool>true</bool> </property> <property name="text"> Index: qgsoptionsbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsoptionsbase.ui,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** qgsoptionsbase.ui 21 Sep 2005 21:46:14 -0000 1.19 --- qgsoptionsbase.ui 10 Nov 2005 07:14:41 -0000 1.20 *************** *** 560,564 **** <item> <property name="text"> ! <string>firebird</string> </property> </item> --- 560,569 ---- <item> <property name="text"> ! <string>firefox</string> ! </property> ! </item> ! <item> ! <property name="text"> ! <string>mozilla-firefox</string> </property> </item> |
From: <tim...@us...> - 2005-11-10 01:52:27
|
Update of /cvsroot/qgis/qgis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29526 Modified Files: configure.in ChangeLog Log Message: Minor bump to version number Index: configure.in =================================================================== RCS file: /cvsroot/qgis/qgis/configure.in,v retrieving revision 1.283 retrieving revision 1.284 diff -C2 -d -r1.283 -r1.284 *** configure.in 6 Nov 2005 22:24:58 -0000 1.283 --- configure.in 10 Nov 2005 01:52:16 -0000 1.284 *************** *** 30,34 **** MINOR_VERSION=7 MICRO_VERSION=9 ! EXTRA_VERSION=0 if test $EXTRA_VERSION -eq 0; then VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION} --- 30,34 ---- MINOR_VERSION=7 MICRO_VERSION=9 ! EXTRA_VERSION=1 if test $EXTRA_VERSION -eq 0; then VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION} Index: ChangeLog =================================================================== RCS file: /cvsroot/qgis/qgis/ChangeLog,v retrieving revision 1.252 retrieving revision 1.253 diff -C2 -d -r1.252 -r1.253 *** ChangeLog 16 Oct 2005 18:30:03 -0000 1.252 --- ChangeLog 10 Nov 2005 01:52:16 -0000 1.253 *************** *** 2,5 **** --- 2,7 ---- ------------------------------------------------------------------------------ Version 0.8 'Joesephine' .... development version + 2005-11-10 [timlinux] 0.7.9.1 + ** Merged in 0.7 branch changes with Tom Elwertowskis help 2005-10-13 [timlinux] 0.7.9 ** Added capability to generate point and polygon based graticules to the |
From: <tim...@us...> - 2005-11-10 00:18:52
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5284/src Modified Files: qgsabout.ui qgsbookmarksbase.ui qgscomposerbase.ui qgsdlgvectorlayerpropertiesbase.ui Log Message: Final (hopefully) parts of merge from 0.7 Index: qgsabout.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsabout.ui,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** qgsabout.ui 20 Dec 2004 07:12:34 -0000 1.25 --- qgsabout.ui 10 Nov 2005 00:18:40 -0000 1.26 *************** *** 219,223 **** </property> <attribute name="title"> ! <string>Contributors</string> </attribute> <grid> --- 219,223 ---- </property> <attribute name="title"> ! <string>Developers</string> </attribute> <grid> *************** *** 230,234 **** </property> <property name="text"> ! <string><h2>QGIS Contributors</h2></string> </property> </widget> --- 230,234 ---- </property> <property name="text"> ! <string><h2>QGIS Developers</h2></string> </property> </widget> Index: qgsbookmarksbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsbookmarksbase.ui,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** qgsbookmarksbase.ui 16 May 2005 04:53:28 -0000 1.3 --- qgsbookmarksbase.ui 10 Nov 2005 00:18:41 -0000 1.4 *************** *** 10,14 **** <y>0</y> <width>344</width> ! <height>257</height> </rect> </property> --- 10,14 ---- <y>0</y> <width>344</width> ! <height>263</height> </rect> </property> *************** *** 71,75 **** <widget class="QLayoutWidget" row="0" column="1"> <property name="name"> ! <cstring>layout2</cstring> </property> <vbox> --- 71,75 ---- <widget class="QLayoutWidget" row="0" column="1"> <property name="name"> ! <cstring>layout3</cstring> </property> <vbox> *************** *** 110,113 **** --- 110,141 ---- </property> </widget> + <widget class="QPushButton"> + <property name="name"> + <cstring>btnHelp</cstring> + </property> + <property name="text"> + <string>Help</string> + </property> + <property name="toolTip" stdset="0"> + <string>Close the dialog</string> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>spacer1</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>100</height> + </size> + </property> + </spacer> </vbox> </widget> *************** *** 133,140 **** --- 161,182 ---- <slot>zoomToBookmark()</slot> </connection> + <connection> + <sender>btnHelp</sender> + <signal>clicked()</signal> + <receiver>QgsBookmarksBase</receiver> + <slot>showHelp()</slot> + </connection> + <connection> + <sender>lstBookmarks</sender> + <signal>doubleClicked(QListViewItem*)</signal> + <receiver>QgsBookmarksBase</receiver> + <slot>zoomViaDoubleClick(QListViewItem*)</slot> + </connection> </connections> <slots> <slot>deleteBookmark()</slot> <slot>zoomToBookmark()</slot> + <slot>showHelp()</slot> + <slot>zoomViaDoubleClick(QListViewItem*)</slot> </slots> <layoutdefaults spacing="6" margin="11"/> Index: qgscomposerbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgscomposerbase.ui,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** qgscomposerbase.ui 13 Sep 2005 09:04:48 -0000 1.7 --- qgscomposerbase.ui 10 Nov 2005 00:18:41 -0000 1.8 *************** *** 316,320 **** </property> <property name="text"> ! <string>Action</string> </property> <property name="menuText"> --- 316,320 ---- </property> <property name="text"> ! <string>Zoom to full extent</string> </property> <property name="menuText"> *************** *** 330,334 **** </property> <property name="text"> ! <string>Action</string> </property> <property name="menuText"> --- 330,334 ---- </property> <property name="text"> ! <string>Zoom in</string> </property> <property name="menuText"> *************** *** 344,348 **** </property> <property name="text"> ! <string>Action</string> </property> <property name="menuText"> --- 344,348 ---- </property> <property name="text"> ! <string>Zoom out</string> </property> <property name="menuText"> Index: qgsdlgvectorlayerpropertiesbase.ui =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsdlgvectorlayerpropertiesbase.ui,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** qgsdlgvectorlayerpropertiesbase.ui 22 May 2005 16:21:28 -0000 1.28 --- qgsdlgvectorlayerpropertiesbase.ui 10 Nov 2005 00:18:41 -0000 1.29 *************** *** 22,25 **** --- 22,28 ---- <string>Layer Properties</string> </property> + <property name="icon"> + <pixmap>image0</pixmap> + </property> <grid> <property name="name"> *************** *** 566,569 **** --- 569,577 ---- </grid> </widget> + <images> + <image name="image0"> + <data format="XPM.GZ" length="2878">789c6d55cb521d390cddf315b7a25d6a4a69b7dbaf9a9a45c893100810122053b370b76dde90f04880a9f9f7e93e32a9dc9ee1b2b8e74a96649d23f9d9d3c5fed6c6e2e9b395eb9b78733c2c86a378b5789a6ecfcfeffffceb8fbf579e28bb98fe3bb5689ffcb6f264fb66312c362f2ff204786b04d4e06fc2743ec36f80bbb6625e9fd971de3bef4c98703c5eb6f3eb7a5e557f3d3bbf0d1c8caef8c7ecbc99e15733fc79c2bde98ded811f96ed314d58e74ea9047c3ab39f006be56afeb3597dc30c235edff6adf1c87734e11c728862ef66f57d9d618997dc633fdccc6e11afc98d8db0bf9f709bb55206b899b00a2a3605fe84f3d9d5fa19f666b0b1e2c359fce7132ebae83000f7959faedadf013b651b8d7cabf57c5bfb1581cdf88198a29c8fa6e6a3b7c0c5f5150bff65fc38c4ff86fcaeb888fbf0ed844db1a615fda09fca8ff7133e6f80956a1be9b7473f54eb1ae897ee261c4a0c5d07fb17d85d1b95423ce9b7d58ffcb61376c9954ef243af259410a49fdbb59fa6fac39ebbdc39e9cf279c57ce6bb1bfa87c696b81515faffba193fe424f21f7b6c37d6803f96cb14efaf101fa4ca33e856fe0515e59a1bfa4e0ef8b0f72df9dcaafadf559e14be7ca1ff49dda64ace487be87929493fe24e9a77fe407fd36ca0e2df2c78cfb656fb5e8cd547e2bfff41dfeda8456f401fd79eba3c67c71acf1875a0ff45bfad27ba9e765e5dbb6c2e7fd323f8cf9f1231d5afc83e8c73fea0f7ab6bd6b5be4a322fdb351813fc23ef0c6678dfed2de84a38fa5f6ff02fdf1d91ae937f468a20dadd84f7f9e97fad690afb8d4cabe94fd3898a1117d21bf4fc16a89077db4d15825fdc27c8410b596faf6915f2767456fd8af6d18f990fb5e227e6f2a9ff471996fbeabf8711f5d416f653006fcd29af437e8167a8ce027763118f1c7fc9be09a56f480f3651488977e72d5ffe33ec63c45d32b99175aaffb2f77b82f5f57ec253e63beb4735a493dd8d7a18fb6137b99cd17ce97ae84aa4fe85d35ded7fbae56fd248ffbf05edd1f83cc0f6d22bfea5327fb03f5e7528c033f9cab1e53cdb75bfbf7b8efa0e7c1a4dec8bcc13f0fc55960be58ee07efd478a162ec3be55c6ea47ebc5f2a8ef9e4fed0abe96214bd32f8b49def44ff84f7c177c16b996fecdfc12523f530decba14f4ef8e503e09c46c281719fd4a46c64ff609e52975b23fb65b3622def1561df2693bb8aa1b714b2aff380794b7d8e153ffcc4b28f45bf43ee2bc6fe4b252723fa39a8fb301be899b0bfb3cac5c8fd30ff5997a6e228fb75c4321fd857d994f10142fc8d8a5b2b7ce2bd1c9f1367c1f7f6cdff7d9838723f7dfb7f1f1e3871e6c287fff5e1233ee6133ee5333ee70bbee4af731ffec6577ccd377ccbdff907dff13d3f2cfbf0735ee517fc925ff16b7ec36f798ddff1facce73d6ff0267fe02ddee61dfec8bbfc89b77ef5e1cfbcc7fb7cc05fb861c52deb11756c967c2c3bf8780ec44414799f7a1a7ef5a14479f4d9a542877444c77432fa9cd2d992cf395d8cbf5ed257fa4657744d37744bdfe9c772cd7447f7f440cf69955ed0cbf1db2b7a2d969f71ded05b5aa377b44eef6963f4d9a40f6ce8977bd136edd047daa54ff499f6689f0ee80b35a4a85d8aa3a92343961fc891a7402172a418e75cc43ee2ae31c51c4b3c8c47f178ee43e7f1a47a1fd3593c952e8f3efffcbef22fa916821c</data> + </image> + </images> <connections> <connection> |
From: <tim...@us...> - 2005-11-09 22:44:00
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2227 Modified Files: qgsmapcanvas.cpp qgsmapcanvas.h qgsmapcanvasproperties.h Log Message: Merge of 0.7 mapcanvas goodies into head Thanks to Tom Elwertowski for resolving the conflicts Index: qgsmapcanvas.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsmapcanvas.cpp,v retrieving revision 1.168 retrieving revision 1.169 diff -C2 -d -r1.168 -r1.169 *** qgsmapcanvas.cpp 24 Oct 2005 04:10:19 -0000 1.168 --- qgsmapcanvas.cpp 9 Nov 2005 22:43:47 -0000 1.169 *************** *** 108,111 **** --- 108,112 ---- : QWidget(parent, name), mCanvasProperties( new CanvasProperties(width(), height()) ), + mUserInteractionAllowed(true), // by default we allow a user to interact with the canvas mLineEditing(false), mPolygonEditing(false) { *************** *** 209,216 **** // Adding the first layer. Set the previousOutputSRS to the output // SRS for the layer. [...969 lines suppressed...] + if( projectionsEnabled() ) + { + // Do reverse transformation before saving. If possible! + try + { + transformedPoint = vlayer->coordinateTransform()->transform(point, QgsCoordinateTransform::INVERSE); + } + catch(QgsCsException &cse) + { + //#ifdef QGISDEBUG + std::cout << "Caught transform error when " << whenmsg <<"." + << "Setting untransformed values." << std::endl; + //#endif + // Transformation failed,. Bail out with original rectangle. + return point; + } + return transformedPoint; + } + return point; + } Index: qgsmapcanvas.h =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsmapcanvas.h,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -d -r1.77 -r1.78 *** qgsmapcanvas.h 24 Oct 2005 00:29:36 -0000 1.77 --- qgsmapcanvas.h 9 Nov 2005 22:43:47 -0000 1.78 *************** *** 308,311 **** --- 308,321 ---- protected: + /// implementation struct + class CanvasProperties; + + /// Handle pattern for implementation object + std::auto_ptr<CanvasProperties> mCanvasProperties; + + //! lets us know whether this canvas is being used as an overview canvas or note + bool mIsOverviewCanvas; + + private: /// this class is non-copyable /** *************** *** 322,331 **** QgsMapCanvas(); - /// implementation struct - class CanvasProperties; - - /// Handle pattern for implementation object - std::auto_ptr<CanvasProperties> mCanvasProperties; - /** List to store the points of digitised lines and polygons --- 332,335 ---- *************** *** 350,353 **** --- 354,363 ---- void drawLineToDigitisingCursor(QPainter* paint, bool last = true); + //! Overridden key press event + void keyPressEvent(QKeyEvent * e); + + //! Overridden key release event + void keyReleaseEvent(QKeyEvent * e); + //! Overridden mouse move event void mouseMoveEvent(QMouseEvent * e); *************** *** 381,390 **** void zoomByScale(int x, int y, double scaleFactor); //! determines whether user has requested to suppress rendering bool mRenderFlag; - //! lets us know whether this canvas is being used as an overview canvas or note - bool mIsOverviewCanvas; - /** debugging member invoked when a connect() is made to this object --- 391,412 ---- void zoomByScale(int x, int y, double scaleFactor); + //! Ends pan action and redraws the canvas. + void panActionEnd(QPoint releasePoint); + + //! Called when mouse is moving and pan is activated + void panAction(QMouseEvent * event); + + //! Helper function to inverse project a point if projections + // are enabled. Failsafe, returns the sent point if anything fails. + // @whenmsg is a part fo the error message. + QgsPoint maybeInversePoint(QgsPoint point, const char whenmsg[]); + + //! detrmines whether the user can interact with the canvas using a mouse + //(useful for locking the overview canvas) + bool mUserInteractionAllowed; + //! determines whether user has requested to suppress rendering bool mRenderFlag; /** debugging member invoked when a connect() is made to this object Index: qgsmapcanvasproperties.h =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsmapcanvasproperties.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** qgsmapcanvasproperties.h 9 Nov 2005 01:48:59 -0000 1.2 --- qgsmapcanvasproperties.h 9 Nov 2005 22:43:47 -0000 1.3 *************** *** 10,14 **** #include "qgsmaptopixel.h" #include "qgsvectorlayer.h" ! #include <qgsscalecalculator.h> --- 10,15 ---- #include "qgsmaptopixel.h" #include "qgsvectorlayer.h" ! #include "qgsscalecalculator.h" ! #include "qgsproject.h" *************** *** 32,35 **** --- 33,37 ---- pmCanvas( 0x0 ), bgColor( Qt::white ), + panSelectorDown( false ), dragging( false ), capturing( false ), *************** *** 57,60 **** --- 59,63 ---- pmCanvas( 0x0 ), bgColor( Qt::white ), + panSelectorDown( false ), dragging( false ), capturing( false ), *************** *** 95,98 **** --- 98,102 ---- mMapUnits = u; scaleCalculator->setMapUnits(mMapUnits); + QgsProject::instance()->mapUnits(u); } *************** *** 154,160 **** QRect zoomBox; - //! Beginning point of a rubber band box - QPoint boxStartPoint; - //! Last seen point of the mouse QPoint mouseLastXY; --- 158,161 ---- *************** *** 196,199 **** --- 197,203 ---- QColor bgColor; + //! Flag to indicate the pan selector key is held down by user + bool panSelectorDown; + //! Flag to indicate a map canvas drag operation is taking place bool dragging; *************** *** 202,208 **** bool capturing; - //! Flag to indicate the pan selector key is held down by user - bool panSelectorDown; - //! Vector containing the inital color for a layer std::vector < QColor > initialColor; --- 206,209 ---- |
From: <mco...@us...> - 2005-11-09 21:22:41
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14570 Modified Files: Tag: multiple-layers-branch qgsvectorlayer.cpp Log Message: Need to specify which data provider layer when requesting field data, too. Index: qgsvectorlayer.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsvectorlayer.cpp,v retrieving revision 1.228.2.8 retrieving revision 1.228.2.9 diff -C2 -d -r1.228.2.8 -r1.228.2.9 *** qgsvectorlayer.cpp 9 Nov 2005 20:41:05 -0000 1.228.2.8 --- qgsvectorlayer.cpp 9 Nov 2005 21:22:33 -0000 1.228.2.9 *************** *** 283,287 **** QString idxId=""; ! std::vector < QgsField > fields = getDataProvider()->fields(); if(!fldName.isEmpty()) { --- 283,287 ---- QString idxId=""; ! std::vector < QgsField > fields = getDataProvider()->fields(dataSourceLayerNum()); if(!fldName.isEmpty()) { |
From: <mco...@us...> - 2005-11-09 20:41:13
|
Update of /cvsroot/qgis/qgis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4817/src Modified Files: Tag: multiple-layers-branch qgsvectorlayer.cpp Log Message: - OGR provider now does sanity checking on valid layers for extent() - vector layer now specifies data provider layer when requesting layer extents Index: qgsvectorlayer.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/src/qgsvectorlayer.cpp,v retrieving revision 1.228.2.7 retrieving revision 1.228.2.8 diff -C2 -d -r1.228.2.7 -r1.228.2.8 *** qgsvectorlayer.cpp 4 Nov 2005 00:38:44 -0000 1.228.2.7 --- qgsvectorlayer.cpp 9 Nov 2005 20:41:05 -0000 1.228.2.8 *************** *** 1423,1426 **** --- 1423,1428 ---- case QGis::WKBMultiPolygon: return QGis::Polygon; + default : + QgsDebug( QString( "Got invalid type " + QString::number(type) ).ascii() ); } } *************** *** 1628,1635 **** { // get the extent of the layer from the provider ! layerExtent.setXmin(getDataProvider()->extent()->xMin()); ! layerExtent.setYmin(getDataProvider()->extent()->yMin()); ! layerExtent.setXmax(getDataProvider()->extent()->xMax()); ! layerExtent.setYmax(getDataProvider()->extent()->yMax()); } else --- 1630,1637 ---- { // get the extent of the layer from the provider ! layerExtent.setXmin(getDataProvider()->extent(dataSourceLayerNum())->xMin()); ! layerExtent.setYmin(getDataProvider()->extent(dataSourceLayerNum())->yMin()); ! layerExtent.setXmax(getDataProvider()->extent(dataSourceLayerNum())->xMax()); ! layerExtent.setYmax(getDataProvider()->extent(dataSourceLayerNum())->yMax()); } else *************** *** 2334,2338 **** // get the extent ! QgsRect *mbr = getDataProvider()->extent(); // XXX specify layer num? // show the extent --- 2336,2341 ---- // get the extent ! QgsRect *mbr = ! getDataProvider()->extent(dataSourceLayerNum()); // XXX specify layer num? // show the extent |
From: <mco...@us...> - 2005-11-09 20:41:12
|
Update of /cvsroot/qgis/qgis/providers/ogr In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4817/providers/ogr Modified Files: Tag: multiple-layers-branch qgsogrprovider.cpp Log Message: - OGR provider now does sanity checking on valid layers for extent() - vector layer now specifies data provider layer when requesting layer extents Index: qgsogrprovider.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/providers/ogr/qgsogrprovider.cpp,v retrieving revision 1.38.2.11 retrieving revision 1.38.2.12 diff -C2 -d -r1.38.2.11 -r1.38.2.12 *** qgsogrprovider.cpp 4 Nov 2005 16:07:06 -0000 1.38.2.11 --- qgsogrprovider.cpp 9 Nov 2005 20:41:05 -0000 1.38.2.12 *************** *** 294,297 **** --- 294,319 ---- } + + /** returns true if the given layer is valid + + Some multilayer data sources have non-geospatial layers. These are not + loaded , which can save a lot of memory especially given that some of these + non-geospatial layers contain a lot of feature and attribute data. (E.g., + the GDAL SDTS bug that treats all SDTS files as layers even though most of + the files contain metadata and not geospatial data.) + + */ + bool validLayer( size_t dataSourceLayerNum ) + { + if (layers.find( dataSourceLayerNum ) == layers.end() ) + { + QgsDebug( QString("invalid layer " + + QString::number(dataSourceLayerNum) ).ascii() ); + + return false; + } + return true; + } + /** these are essentially wrappers for OGR layers *************** *** 350,354 **** // try to open for update imp_->ogrDataSource = OGRSFDriverRegistrar::Open((const char *) uri.local8Bit(), ! TRUE, &imp_->ogrDriver); --- 372,376 ---- // try to open for update imp_->ogrDataSource = OGRSFDriverRegistrar::Open((const char *) uri.local8Bit(), ! FALSE, //TRUE, &imp_->ogrDriver); *************** *** 1007,1013 **** // TODO - make this function return the real extent ! QgsRect *QgsOgrProvider::extent(size_t dataSourceLayerNum) { ! // TODO: Find out where this new QgsRect is being lost (as reported by valgrind) return new QgsRect(imp_->layers[dataSourceLayerNum].extent->MinX, --- 1029,1040 ---- // TODO - make this function return the real extent ! QgsRect * QgsOgrProvider::extent(size_t dataSourceLayerNum) { ! // TODO: Find out where this new QgsRect is being lost (as reported by ! // valgrind) ! if ( ! imp_->validLayer( dataSourceLayerNum ) ) ! { ! return 0x0; ! } return new QgsRect(imp_->layers[dataSourceLayerNum].extent->MinX, |
From: <tim...@us...> - 2005-11-06 22:32:14
|
Update of /cvsroot/qgis/qgis/src/xpm In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19091 Added Files: remove_selection.xpm Log Message: Merge in from 0.7 branch |
From: <tim...@us...> - 2005-11-06 22:25:06
|
Update of /cvsroot/qgis/qgis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17681 Modified Files: configure.in Log Message: Added nkids theme Index: configure.in =================================================================== RCS file: /cvsroot/qgis/qgis/configure.in,v retrieving revision 1.282 retrieving revision 1.283 diff -C2 -d -r1.282 -r1.283 *** configure.in 6 Nov 2005 00:16:37 -0000 1.282 --- configure.in 6 Nov 2005 22:24:58 -0000 1.283 *************** *** 446,449 **** --- 446,450 ---- src/themes/Makefile src/themes/default/Makefile + src/themes/nkids/Makefile src/mac/Makefile src/mac/Contents/Makefile |
Update of /cvsroot/qgis/qgis/src/themes/nkids In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17476/nkids Added Files: .cvsignore Makefile.am action.png add_all_to_overview.png add_pg_layer.png add_raster_layer.png add_vector_layer.png attribute_table.png bookmarks.png contexthelp.png custom_projection.png delete_selected.png digitise_vector_layer.png digitising_general.png digitising_line.png digitising_point.png exit.png export_map_server.png file_new.png file_print.png file_save.png file_save_as.png gis_plain_cursor.png help_about.png help_contents.png hide_all_layers.png home_page.png identify.png inline_table.png layers.png measure.png new_bookmark.png over-.png over.png over1.png pan.png plugin_manager.png preferences.png project_open.png project_properties.png qgis32x32.png reload.png remove_all_from_overview.png remove_all_to_overview.png remove_layer.png save_map_image.png select.png show_all_layers.png show_all_layers1.png show_layerReal.png zoom_full.png zoom_in.png zoom_last.png zoom_layer.png zoom_out.png zoom_selected.png Log Message: Merged in from 0.7 branch |