00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "SynapseParametersDialog.h"
00025 #include "Debug.h"
00026 #include "Utilities.h"
00027 #include "SpikeStreamMainWindow.h"
00028
00029
00030 #include <qlayout.h>
00031 #include <qfile.h>
00032 #include <qmessagebox.h>
00033
00034
00035 #include <mysql++.h>
00036 #include <iostream>
00037 using namespace std;
00038 using namespace mysqlpp;
00039
00040
00041
00042 SynapseParametersDialog::SynapseParametersDialog(QWidget *parent, DBInterface* netDBInter, SimulationManager* simMan) : QDialog(parent, "SynParamDlg", false){
00043
00044 networkDBInterface = netDBInter;
00045
00046
00047 simulationManager = simMan;
00048
00049
00050 this->setCaption("Synapse Parameters");
00051
00052
00053 editPixmap = new QPixmap(SpikeStreamMainWindow::workingDirectory + "/images/edit_parameters.xpm");
00054
00055
00056 unsigned int maxTableWidth = 0;
00057
00058
00059 QVBoxLayout *verticalBox = new QVBoxLayout(this, 2, 2);
00060
00061
00062 try{
00063 Query query = networkDBInterface->getQuery();
00064 query.reset();
00065 query<<"SELECT TypeID, Description, ParameterTableName FROM SynapseTypes";
00066 Result synapseTypesResult = query.store();
00067 for(Result::iterator synTypesIter = synapseTypesResult.begin(); synTypesIter != synapseTypesResult.end(); ++synTypesIter){
00068 Row synapseTypesRow(*synTypesIter);
00069 unsigned short synapseTypeID = Utilities::getUShort((std::string) synapseTypesRow["TypeID"]);
00070
00071
00072 paramTableMap[synapseTypeID] = new ParameterTable(this, synapseTypeID, (std::string)synapseTypesRow["ParameterTableName"]);
00073 paramTableMap[synapseTypeID]->setShowGrid(false);
00074 paramTableMap[synapseTypeID]->setSorting(false);
00075 paramTableMap[synapseTypeID]->setSelectionMode(QTable::NoSelection);
00076 paramTableMap[synapseTypeID]->verticalHeader()->hide();
00077 paramTableMap[synapseTypeID]->setLeftMargin(0);
00078 paramTableHeaderMap[synapseTypeID] = paramTableMap[synapseTypeID]->horizontalHeader();
00079
00080
00081 unsigned int tempTotalColumnWidth = 0;
00082
00083
00084 unsigned int insertionPoint = paramTableMap[synapseTypeID]->numCols();
00085 paramTableMap[synapseTypeID]->insertColumns(insertionPoint, 1);
00086 paramTableHeaderMap[synapseTypeID]->setLabel( insertionPoint, "Edit" );
00087 paramTableMap[synapseTypeID]->setColumnWidth( insertionPoint, 30);
00088 editColumn = insertionPoint;
00089 tempTotalColumnWidth += 30;
00090
00091
00092 insertionPoint = paramTableMap[synapseTypeID]->numCols();
00093 paramTableMap[synapseTypeID]->insertColumns(insertionPoint, 1);
00094 paramTableHeaderMap[synapseTypeID]->setLabel(insertionPoint, "ConnGrpID" );
00095 paramTableMap[synapseTypeID]->setColumnWidth(insertionPoint, 70);
00096 connGrpIDColumn = insertionPoint;
00097 tempTotalColumnWidth += 70;
00098
00099
00100 insertionPoint = paramTableMap[synapseTypeID]->numCols();
00101 paramTableMap[synapseTypeID]->insertColumns(insertionPoint, 1);
00102 paramTableHeaderMap[synapseTypeID]->setLabel(insertionPoint, "From");
00103 paramTableMap[synapseTypeID]->setColumnWidth(insertionPoint, 120);
00104 fromGrpColumn = insertionPoint;
00105 tempTotalColumnWidth += 120;
00106
00107
00108 insertionPoint = paramTableMap[synapseTypeID]->numCols();
00109 paramTableMap[synapseTypeID]->insertColumns(insertionPoint, 1);
00110 paramTableHeaderMap[synapseTypeID]->setLabel(insertionPoint, "To");
00111 paramTableMap[synapseTypeID]->setColumnWidth(insertionPoint, 120);
00112 toGrpColumn = insertionPoint;
00113 tempTotalColumnWidth += 120;
00114
00115
00116
00117 paramStartColumn = paramTableMap[synapseTypeID]->numCols();
00118
00119
00120
00121
00122
00123
00124
00125 map<const char*, double, charKeyCompare> tempValueMap;
00126
00127
00128 fieldNamesMap[synapseTypeID] = new QStringList();
00129 valueNamesMap[synapseTypeID] = new QStringList();
00130
00131
00132 query.reset();
00133 query<<"SHOW COLUMNS FROM "<<((std::string)synapseTypesRow["ParameterTableName"]);
00134 Result showResult = query.store();
00135 for(Result::iterator iter = showResult.begin(); iter != showResult.end(); ++iter){
00136 Row showRow(*iter);
00137
00138
00139 QString fieldName((std::string)showRow["Field"]);
00140
00141
00142 if(fieldName.contains("_desc")){
00143
00144 (*fieldNamesMap[synapseTypeID]) += fieldName.section("_", 0, 0);
00145
00146
00147 unsigned int insertionPoint = paramTableMap[synapseTypeID]->numCols();
00148 paramTableMap[synapseTypeID]->insertColumns(insertionPoint, 1);
00149 QString headerText((std::string)showRow["Default"]);
00150 tempTotalColumnWidth += headerText.length() * 7;
00151 paramTableHeaderMap[synapseTypeID]->setLabel( insertionPoint, headerText );
00152 paramTableMap[synapseTypeID]->setColumnWidth( insertionPoint, headerText.length() * 7);
00153
00154
00155 descriptionColumnMap[synapseTypeID][headerText.ascii()] = insertionPoint;
00156
00157
00158 paramDescMap[synapseTypeID][(*fieldNamesMap[synapseTypeID]).last().ascii()] = paramTableHeaderMap[synapseTypeID]->label(insertionPoint).ascii();
00159
00160
00161 descParamMap[synapseTypeID][paramTableHeaderMap[synapseTypeID]->label(insertionPoint).ascii()] = (*fieldNamesMap[synapseTypeID]).last().ascii();
00162
00163 }
00164 else if(fieldName.contains("_val")){
00165
00166 QString valueName = fieldName.section("_", 0, 0);
00167
00168
00169 (*valueNamesMap[synapseTypeID]) += valueName;
00170
00171
00172 QString valueType((std::string)showRow["Type"]);
00173 if(valueType == "tinyint(1)")
00174 checkBoxMap[synapseTypeID][(*valueNamesMap[synapseTypeID]).last().ascii()] = true;
00175 else{
00176
00177 double defaultValue = Utilities::getDouble((std::string)showRow["Default"]);
00178
00179
00180 tempValueMap[valueName.ascii()] = defaultValue;
00181 }
00182
00183 }
00184 }
00185
00186
00187
00188
00189 for(map<const char*, double>::iterator iter = tempValueMap.begin(); iter != tempValueMap.end(); ++iter){
00190 defaultValueMap[synapseTypeID][ paramDescMap[synapseTypeID][iter->first] ] = iter->second;
00191 }
00192
00193
00194 tempTotalColumnWidth += 10;
00195 if(tempTotalColumnWidth > maxTableWidth)
00196 maxTableWidth = tempTotalColumnWidth;
00197
00198
00199 QHBoxLayout *labelBox = new QHBoxLayout();
00200 QString labelString((std::string)synapseTypesRow["Description"]);
00201 labelString += " Parameters";
00202 tableLabelMap[synapseTypeID] = new QLabel(labelString, this);
00203 tableLabelMap[synapseTypeID] ->setPaletteForegroundColor(QColor(0,86,126));
00204 labelBox->addSpacing(5);
00205 labelBox->addWidget(tableLabelMap[synapseTypeID]);
00206 labelBox->addStretch(5);
00207
00208 verticalBox->addLayout(labelBox);
00209
00210
00211 verticalBox->addWidget(paramTableMap[synapseTypeID]);
00212
00213
00214 connect (paramTableMap[synapseTypeID], SIGNAL(parameterTableClicked(int, int, unsigned short)), this, SLOT(parameterTableClicked(int, int, unsigned short)));
00215
00216
00217 connect (paramTableMap[synapseTypeID], SIGNAL(parameterTableValueChanged(int, int, unsigned short)), this, SLOT(parameterTableValueChanged(int, int, unsigned short)));
00218 }
00219 }
00220 catch (const BadQuery& er) {
00221 cerr<<"SynapseParametersDialog: MYSQL QUERY EXCEPTION \""<<er.what()<<"\""<<endl;
00222 QString errorString = "Bad query when loading information about synapse parameters: \"";
00223 errorString += er.what();
00224 errorString += "\"";
00225 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00226 }
00227 catch (const Exception& er) {
00228 cerr<<"SynapseParametersDialog: MYSQL EXCEPTION \""<<er.what()<<"\""<<endl;
00229 QString errorString = "Exception thrown loading information about synapse parameters: \"";
00230 errorString += er.what();
00231 errorString += "\"";
00232 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00233 }
00234 catch(std::exception& er){
00235 cerr<<"SynapseParametersDialog: STD EXCEPTION \""<<er.what()<<"\""<<endl;
00236 QString errorString = "Exception thrown loading information about synapse parameters: \"";
00237 errorString += er.what();
00238 errorString += "\"";
00239 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00240 }
00241
00242
00243
00244 if(maxTableWidth < 1200)
00245 this->resize(maxTableWidth, 200);
00246 else
00247 this->resize(1200, 200);
00248
00249
00250
00251 QHBoxLayout *buttonBox = new QHBoxLayout();
00252 QPushButton *okButton = new QPushButton("Ok", this);
00253 buttonBox->addWidget(okButton);
00254 connect (okButton, SIGNAL(clicked()), this, SLOT(okButtonPressed()));
00255
00256 applyButton = new QPushButton("Apply", this);
00257 buttonBox->addWidget(applyButton);
00258 connect (applyButton, SIGNAL(clicked()), this, SLOT(applyButtonPressed()));
00259
00260 QPushButton *defaultsButton = new QPushButton("Load Defaults", this);
00261 buttonBox->addWidget(defaultsButton);
00262 connect (defaultsButton, SIGNAL(clicked()), this, SLOT(defaultsButtonPressed()));
00263
00264 QPushButton *cancelButton = new QPushButton("Cancel", this);
00265 buttonBox->addWidget(cancelButton);
00266 connect (cancelButton, SIGNAL(clicked()), this, SLOT(cancelButtonPressed()));
00267
00268 verticalBox->addLayout(buttonBox);
00269 }
00270
00271
00272
00273 SynapseParametersDialog::~SynapseParametersDialog(){
00274 #ifdef MEMORY_DEBUG
00275 cout<<"DESTROYING SYNAPSE PARAMETERS DIALOG"<<endl;
00276 #endif//MEMORY_DEBUG
00277
00278
00279 delete editPixmap;
00280
00281
00282 for(map<unsigned short, QStringList*>::iterator iter = fieldNamesMap.begin(); iter != fieldNamesMap.end(); ++iter)
00283 delete iter->second;
00284
00285 for(map<unsigned short, QStringList*>::iterator iter = valueNamesMap.begin(); iter != valueNamesMap.end(); ++iter)
00286 delete iter->second;
00287 }
00288
00289
00290
00291
00292
00293
00294
00295 bool SynapseParametersDialog::loadSynapseParameters(){
00296
00297 for(map<unsigned short, ParameterTable*>::iterator iter = paramTableMap.begin(); iter != paramTableMap.end(); ++iter)
00298 iter->second->setNumRows(0);
00299
00300
00301 parameterValuesChanged = false;
00302
00303
00304 applyButton->setEnabled(false);
00305
00306
00307 try{
00308 Query query = networkDBInterface->getQuery();
00309 query.reset();
00310 query<<"SELECT TypeID, ParameterTableName FROM SynapseTypes";
00311 Result synapseTypesResult = query.store();
00312 for(Result::iterator synTypesIter = synapseTypesResult.begin(); synTypesIter != synapseTypesResult.end(); ++synTypesIter){
00313 Row synapseTypesRow(*synTypesIter);
00314 unsigned short synapseTypeID = Utilities::getUShort((std::string) synapseTypesRow["TypeID"]);
00315
00316
00317 query.reset();
00318 query<<"SELECT ConnGrpID, ";
00319 for(unsigned int i=0; i<fieldNamesMap[synapseTypeID]->size() - 1; ++i){
00320 query<<(*fieldNamesMap[synapseTypeID])[i]<<"_val, ";
00321 }
00322 query<<(*fieldNamesMap[synapseTypeID])[fieldNamesMap[synapseTypeID]->size() - 1]<<"_val FROM "<<((std::string)synapseTypesRow["ParameterTableName"]);
00323 Result valueResult = query.store();
00324
00325
00326 for(Result::iterator iter = valueResult.begin(); iter != valueResult.end(); ++iter){
00327 Row valueRow(*iter);
00328
00329
00330 int currentRowNumber = paramTableMap[synapseTypeID]->numRows();
00331 paramTableMap[synapseTypeID]->insertRows(currentRowNumber, 1);
00332
00333
00334 paramTableMap[synapseTypeID]->setPixmap(currentRowNumber, editColumn, *editPixmap);
00335
00336
00337 paramTableMap[synapseTypeID]->setItem(currentRowNumber, connGrpIDColumn, new QTableItem(paramTableMap[synapseTypeID], QTableItem::Never, (std::string)valueRow["ConnGrpID"]));
00338
00339
00340 query.reset();
00341 query<<"SELECT FromNeuronGrpID, ToNeuronGrpID FROM ConnectionGroups WHERE ConnGrpID = "<<(std::string)valueRow["ConnGrpID"];
00342 Result fromToIDRes = query.store();
00343 Row fromToIDRow(*fromToIDRes.begin());
00344
00345
00346 paramTableMap[synapseTypeID]->setItem(currentRowNumber, fromGrpColumn, new QTableItem(paramTableMap[synapseTypeID], QTableItem::Never, getNeuronGroupName(QString((std::string)fromToIDRow["FromNeuronGrpID"]))));
00347
00348
00349 paramTableMap[synapseTypeID]->setItem(currentRowNumber, toGrpColumn, new QTableItem(paramTableMap[synapseTypeID], QTableItem::Never, getNeuronGroupName(QString((std::string)fromToIDRow["ToNeuronGrpID"]))));
00350
00351
00352 for(unsigned int i=0; i<fieldNamesMap[synapseTypeID]->size(); ++i){
00353 QString valueQueryName = (*fieldNamesMap[synapseTypeID])[i] + "_val";
00354
00355 if(checkBoxMap[synapseTypeID].count((*fieldNamesMap[synapseTypeID])[i])){
00356 unsigned int booleanValue = Utilities::getInt((std::string)valueRow[valueQueryName.ascii()]);
00357 QCheckTableItem *tempCheckTableItem = new QCheckTableItem( paramTableMap[synapseTypeID], QString(""));
00358
00359 if(booleanValue == 0)
00360 tempCheckTableItem->setChecked(false);
00361 else if(booleanValue == 1)
00362 tempCheckTableItem->setChecked(true);
00363 paramTableMap[synapseTypeID]->setItem(currentRowNumber, paramStartColumn + i, tempCheckTableItem);
00364 }
00365 else{
00366 paramTableMap[synapseTypeID]->setItem(currentRowNumber, paramStartColumn + i,
00367 new QTableItem(paramTableMap[synapseTypeID], QTableItem::Never, (std::string)valueRow[valueQueryName.ascii()]));
00368 }
00369 }
00370 }
00371 }
00372 }
00373 catch (const BadQuery& er) {
00374 cerr<<"SynapseParametersDialog: MYSQL QUERY EXCEPTION \""<<er.what()<<"\""<<endl;
00375 QString errorString = "Bad query when loading synapse parameters: \"";
00376 errorString += er.what();
00377 errorString += "\"";
00378 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00379 return false;
00380 }
00381 catch (const Exception& er) {
00382 cerr<<"SynapseParametersDialog: MYSQL EXCEPTION \""<<er.what()<<"\""<<endl;
00383 QString errorString = "Exception thrown loading synapse parameters: \"";
00384 errorString += er.what();
00385 errorString += "\"";
00386 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00387 return false;
00388 }
00389 catch(std::exception& er){
00390 cerr<<"SynapseParametersDialog: STD EXCEPTION \""<<er.what()<<"\""<<endl;
00391 QString errorString = "Exception thrown loading synapse parameters: \"";
00392 errorString += er.what();
00393 errorString += "\"";
00394 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00395 return false;
00396 }
00397
00398
00399
00400 for(map<unsigned short, ParameterTable*>::iterator iter = paramTableMap.begin(); iter != paramTableMap.end(); ++iter){
00401 if(iter->second->numRows() <= 0){
00402 iter->second->hide();
00403 tableLabelMap[iter->first]->hide();
00404 }
00405 else{
00406 iter->second->show();
00407 tableLabelMap[iter->first]->show();
00408 }
00409 }
00410
00411
00412 return true;
00413 }
00414
00415
00416
00417
00418
00419
00420
00421 void SynapseParametersDialog::applyButtonPressed(){
00422
00423 storeSynapseParameters();
00424
00425
00426 simulationManager->setSynapseParameters();
00427
00428
00429 parameterValuesChanged = false;
00430 applyButton->setEnabled(false);
00431 }
00432
00433
00434
00435 void SynapseParametersDialog::cancelButtonPressed(){
00436 this->hide();
00437 }
00438
00439
00440
00441
00442 void SynapseParametersDialog::defaultsButtonPressed(){
00443 }
00444
00445
00446
00447 void SynapseParametersDialog::okButtonPressed(){
00448 if(parameterValuesChanged){
00449
00450 storeSynapseParameters();
00451
00452
00453 simulationManager->setSynapseParameters();
00454 }
00455 this->hide();
00456 }
00457
00458
00459
00460
00461
00462 void SynapseParametersDialog::parameterTableClicked(int row, int col, unsigned short typeID){
00463 if(col == editColumn){
00464
00465 unsigned int connGrpID = 0;
00466
00467
00468 map<const char*, double, charKeyCompare> descValueMap;
00469
00470 try{
00471 connGrpID = Utilities::getUInt(paramTableMap[typeID]->item(row, connGrpIDColumn)->text().ascii());
00472 for(int i=paramStartColumn; i<paramTableMap[typeID]->numCols(); ++i){
00473
00474 if(checkBoxMap[typeID].count(descParamMap[typeID][paramTableHeaderMap[typeID]->label(i).ascii()]) == 0 ){
00475 double tempVal = Utilities::getDouble(paramTableMap[typeID]->text(row, i).ascii());
00476 descValueMap[paramTableHeaderMap[typeID]->label(i).ascii()] = tempVal;
00477 }
00478 }
00479 }
00480 catch(std::exception& er){
00481 cerr<<"SynapseParametersDialog: STD EXCEPTION \""<<er.what()<<"\""<<endl;
00482 QString errorString = "Exception thrown loading information for Edit Parameters Dialog: \"";
00483 errorString += er.what();
00484 errorString += "\"";
00485 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00486 return;
00487 }
00488
00489
00490 EditSynapseParametersDialog *edParamDlg = new EditSynapseParametersDialog(this, descValueMap, &defaultValueMap[typeID], connGrpID);
00491 if ( edParamDlg->exec() == QDialog::Accepted ) {
00492
00493 map<const char*, QLineEdit*, charKeyCompare> *tempMap = edParamDlg->getDescriptionLineEditMap();
00494
00495
00496 for(map<const char*, QLineEdit*>::iterator iter = tempMap->begin(); iter != tempMap->end(); ++iter){
00497
00498 QString parameterText = iter->second->text();
00499
00500
00501 int columnNumber = descriptionColumnMap[typeID][iter->first];
00502
00503
00504 paramTableMap[typeID]->setItem(row, columnNumber, new QTableItem(paramTableMap[typeID], QTableItem::Never, parameterText));
00505 }
00506
00507
00508 parameterValuesChanged = true;
00509
00510
00511 applyButton->setEnabled(true);
00512 }
00513
00514
00515 delete edParamDlg;
00516 }
00517 }
00518
00519
00520
00521 void SynapseParametersDialog::parameterTableValueChanged(int, int, unsigned short){
00522
00523 parameterValuesChanged = true;
00524 applyButton->setEnabled(true);
00525 }
00526
00527
00528
00529
00530
00531
00532
00533 QString SynapseParametersDialog::getNeuronGroupName(QString neuronGrpID){
00534 QString neuronGrpName("");
00535 try{
00536 Query query = networkDBInterface->getQuery();
00537 query.reset();
00538 query<<"SELECT Name FROM NeuronGroups WHERE NeuronGrpID = "<<neuronGrpID;
00539 Result tempResult = query.store();
00540 Row tempFromRow(*tempResult.begin());
00541 neuronGrpName = (std::string)tempFromRow["Name"] + " [";
00542 neuronGrpName += neuronGrpID + "]";
00543 }
00544 catch (const BadQuery& er) {
00545 cerr<<"SynapseParametersDialog: MYSQL QUERY EXCEPTION \""<<er.what()<<"\""<<endl;
00546 QString errorString = "Bad query when getting neuron group name: \"";
00547 errorString += er.what();
00548 errorString += "\"";
00549 QMessageBox::critical( 0, "Neuron Group Error", errorString);
00550 return QString("Unknown");
00551 }
00552 catch (const Exception& er) {
00553 cerr<<"SynapseParametersDialog: MYSQL EXCEPTION \""<<er.what()<<"\""<<endl;
00554 QString errorString = "Exception thrown getting neuron group name: \"";
00555 errorString += er.what();
00556 errorString += "\"";
00557 QMessageBox::critical( 0, "Neuron Group Error", errorString);
00558 return QString("Unknown");
00559 }
00560 catch(std::exception& er){
00561 cerr<<"SynapseParametersDialog: STD EXCEPTION \""<<er.what()<<"\""<<endl;
00562 QString errorString = "Exception thrown getting neuron group name: \"";
00563 errorString += er.what();
00564 errorString += "\"";
00565 QMessageBox::critical( 0, "Neuron Group Error", errorString);
00566 return QString("Unknown");
00567 }
00568 return neuronGrpName;
00569 }
00570
00571
00572
00573 void SynapseParametersDialog::storeSynapseParameters(){
00574 try{
00575 Query query = networkDBInterface->getQuery();
00576
00577
00578 for(map<unsigned short, ParameterTable*>::iterator paramTableIter = paramTableMap.begin(); paramTableIter != paramTableMap.end(); ++paramTableIter){
00579
00580
00581 for(int rowNum=0; rowNum< paramTableIter->second->numRows(); ++rowNum){
00582 QString connGrpIDText = paramTableIter->second->text(rowNum, connGrpIDColumn);
00583 unsigned short synTypeID = paramTableIter->first;
00584
00585
00586 QString queryString = "UPDATE ";
00587 queryString += paramTableIter->second->getParameterTableName();
00588 queryString += " SET ";
00589
00590 for(unsigned int i = 0; i < fieldNamesMap[synTypeID]->size(); ++i){
00591 QString valueName = (*fieldNamesMap[synTypeID])[i] + "_val";
00592 QString valueText = "";
00593
00594
00595 if(checkBoxMap[synTypeID].count((*valueNamesMap[synTypeID])[i])){
00596 QCheckTableItem * item = (QCheckTableItem*)paramTableIter->second->item(rowNum, i + paramStartColumn);
00597 if(item->isChecked())
00598 valueText = "1";
00599 else
00600 valueText = "0";
00601 }
00602 else {
00603 valueText = paramTableIter->second->text(rowNum, i+paramStartColumn);
00604 }
00605
00606 queryString += valueName;
00607 queryString += " = ";
00608 queryString += valueText;
00609 queryString += ", ";
00610 }
00611
00612
00613 queryString.remove(queryString.length() - 2, 2);
00614
00615
00616 queryString += " WHERE ConnGrpID = ";
00617 queryString += connGrpIDText;
00618
00619
00620 query.reset();
00621 query<<queryString;
00622 query.execute();
00623 }
00624 }
00625 }
00626 catch (const BadQuery& er) {
00627 cerr<<"SynapseParametersDialog: MYSQL QUERY EXCEPTION \""<<er.what()<<"\""<<endl;
00628 QString errorString = "Bad query when storing synapse parameters: \"";
00629 errorString += er.what();
00630 errorString += "\"";
00631 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00632 }
00633 catch (const Exception& er) {
00634 cerr<<"SynapseParametersDialog: MYSQL EXCEPTION \""<<er.what()<<"\""<<endl;
00635 QString errorString = "Exception thrown storing synapse parameters: \"";
00636 errorString += er.what();
00637 errorString += "\"";
00638 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00639 }
00640 catch(std::exception& er){
00641 cerr<<"SynapseParametersDialog: STD EXCEPTION \""<<er.what()<<"\""<<endl;
00642 QString errorString = "Exception thrown storing synapse parameters: \"";
00643 errorString += er.what();
00644 errorString += "\"";
00645 QMessageBox::critical( 0, "Synapse Parameters Error", errorString);
00646 }
00647 }
00648
00649
00650