void NIXMLConnectionsHandler::myStartElement(int element, const SUMOSAXAttributes& attrs) { if (element == SUMO_TAG_DELETE) { bool ok = true; std::string from = attrs.get<std::string>(SUMO_ATTR_FROM, 0, ok); std::string to = attrs.get<std::string>(SUMO_ATTR_TO, 0, ok); if (!ok) { return; } // these connections were removed when the edge was deleted if (myEdgeCont.wasRemoved(from) || myEdgeCont.wasRemoved(to)) { return; } NBEdge* fromEdge = myEdgeCont.retrieve(from); NBEdge* toEdge = myEdgeCont.retrieve(to); if (fromEdge == 0) { myErrorMsgHandler->inform("The connection-source edge '" + from + "' to reset is not known."); return; } if (toEdge == 0) { myErrorMsgHandler->inform("The connection-destination edge '" + to + "' to reset is not known."); return; } if (!fromEdge->isConnectedTo(toEdge) && fromEdge->getStep() >= NBEdge::EDGE2EDGES) { WRITE_WARNING("Target edge '" + toEdge->getID() + "' is not connected with '" + fromEdge->getID() + "'; the connection cannot be reset."); return; } int fromLane = -1; // Assume all lanes are to be reset. int toLane = -1; if (attrs.hasAttribute(SUMO_ATTR_LANE) || attrs.hasAttribute(SUMO_ATTR_FROM_LANE) || attrs.hasAttribute(SUMO_ATTR_TO_LANE)) { if (!parseLaneInfo(attrs, fromEdge, toEdge, &fromLane, &toLane)) { return; } // we could be trying to reset a connection loaded from a sumo net and which has become obsolete. // In this case it's ok to encounter invalid lance indices if (!fromEdge->hasConnectionTo(toEdge, toLane) && fromEdge->getStep() >= NBEdge::LANES2EDGES) { WRITE_WARNING("Edge '" + fromEdge->getID() + "' has no connection to lane " + toString(toLane) + " of edge '" + toEdge->getID() + "'; the connection cannot be reset."); } } fromEdge->removeFromConnections(toEdge, fromLane, toLane, true); } if (element == SUMO_TAG_CONNECTION) { bool ok = true; std::string from = attrs.get<std::string>(SUMO_ATTR_FROM, "connection", ok); std::string to = attrs.getOpt<std::string>(SUMO_ATTR_TO, "connection", ok, ""); if (!ok || myEdgeCont.wasIgnored(from) || myEdgeCont.wasIgnored(to)) { return; } // extract edges NBEdge* fromEdge = myEdgeCont.retrieve(from); NBEdge* toEdge = to.length() != 0 ? myEdgeCont.retrieve(to) : 0; // check whether they are valid if (fromEdge == 0) { myErrorMsgHandler->inform("The connection-source edge '" + from + "' is not known."); return; } if (toEdge == 0 && to.length() != 0) { myErrorMsgHandler->inform("The connection-destination edge '" + to + "' is not known."); return; } fromEdge->getToNode()->invalidateTLS(myTLLogicCont, true, false); // parse optional lane information if (attrs.hasAttribute(SUMO_ATTR_LANE) || attrs.hasAttribute(SUMO_ATTR_FROM_LANE) || attrs.hasAttribute(SUMO_ATTR_TO_LANE)) { parseLaneBound(attrs, fromEdge, toEdge); } else { fromEdge->addEdge2EdgeConnection(toEdge); } } if (element == SUMO_TAG_PROHIBITION) { bool ok = true; std::string prohibitor = attrs.getOpt<std::string>(SUMO_ATTR_PROHIBITOR, 0, ok, ""); std::string prohibited = attrs.getOpt<std::string>(SUMO_ATTR_PROHIBITED, 0, ok, ""); if (!ok) { return; } NBConnection prohibitorC = parseConnection("prohibitor", prohibitor); NBConnection prohibitedC = parseConnection("prohibited", prohibited); if (prohibitorC == NBConnection::InvalidConnection || prohibitedC == NBConnection::InvalidConnection) { // something failed return; } NBNode* n = prohibitorC.getFrom()->getToNode(); n->addSortedLinkFoes(prohibitorC, prohibitedC); } if (element == SUMO_TAG_CROSSING) { addCrossing(attrs); } if (element == SUMO_TAG_WALKINGAREA) { addWalkingArea(attrs); } }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), dtFormat("MMM dd | hh:mm"), ui(new Ui::MainWindow) { ui->setupUi(this); QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates)); abbrevs << "AK" << "AL" << "AR" << "AZ" << "CA" << "CO" << "CT" << "DE" << "FL" << "GA" << "HI" << "IA" << "ID" << "IL" << "IN" << "KS" << "KY" << "LA" << "MA" << "MD" << "ME" << "MI" << "MN" << "MO" << "MS" << "MT" << "NC" << "ND" << "NE" << "NH" << "NJ" << "NM" << "NV" << "NY" << "OH" << "OK" << "OR" << "PA" << "RI" << "SC" << "SD" << "TN" << "TX" << "UT" << "VA" << "VT" << "WA" << "WI" << "WV" << "WY"; names << "Alaska" << "Alabama" << "Arkansas" << "Arizona" << "California" << "Colorado" << "Connecticut" << "Delaware" << "Florida" << "Georgia" << "Hawaii" << "Iowa" << "Idaho" << "Illinois" << "Indiana" << "Kansas" << "Kentucky" << "Louisiana" << "Massachusetts" << "Maryland" << "Maine" << "Michigan" << "Minnesota" << "Missouri" << "Mississippi" << "Montana" << "North Carolina" << "North Dakota" << "Nebraska" << "New Hampshire" << "New Jersey" << "New Mexico" << "Nevada" << "New York" << "Ohio" << "Oklahoma" << "Oregon" << "Pennsylvania" << "Rhode Island" << "South Carolina" << "South Dakota" << "Tennessee" << "Texas" << "Utah" << "Virginia" << "Vermont" << "Washington" << "Wisconsin" << "West Virginia" << "Wyoming"; // open the database for use QString e; e = validateDatabase(); if( !e.isEmpty() ){ QMessageBox::critical(this, "Critical Error", QString("Error %1") .arg(e) ); db.close(); this->deleteLater(); } // set up the table model to pass the sql data through model = new QSqlTableModel(this,db); model->setTable("States"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->setFilter("Mileage<>0 OR GasAmt<>0"); model->setHeaderData(0, Qt::Horizontal, "Name"); model->setHeaderData(1, Qt::Horizontal, ""); model->setHeaderData(2, Qt::Horizontal, "Mileage"); model->setHeaderData(3, Qt::Horizontal, "Fuel\nPurchased"); model->setHeaderData(4, Qt::Horizontal, "Fuel\nVolume"); model->setHeaderData(5, Qt::Horizontal, "Refuel\nCount"); model->setHeaderData(6, Qt::Horizontal, "Visit\nCount"); // set up the table view ui->tableView->setModel( model ); ui->tableView->setItemDelegateForColumn(2, new FormatDelegate(0, FormatDelegate::TSeparator)); ui->tableView->setItemDelegateForColumn(3, new FormatDelegate(0, FormatDelegate::Currency)); ui->tableView->setItemDelegateForColumn(4, new FormatDelegate(0, FormatDelegate::FixedFloat)); ui->tableView->setItemDelegateForColumn(5, new FormatDelegate(0)); ui->tableView->setItemDelegateForColumn(6, new FormatDelegate(0)); ui->tableView->setColumnWidth(0, 125); ui->tableView->setColumnWidth(1, 50); ui->tableView->sortByColumn(2); // set the widgets updateCombos(); updateStatistics(); setInitialValues(); connect(ui->pushAddCrossing, SIGNAL(clicked()), this, SLOT(addCrossing()) ); connect(ui->pushAddFillup, SIGNAL(clicked()), this, SLOT(addRefuel()) ); connect(ui->action_Reset_Statistics, SIGNAL(triggered()), this, SLOT(resetDatabase()) ); connect(this, SIGNAL(dataUpdated()), this, SLOT(updateStatistics()) ); connect(ui->actionBugReport, SIGNAL(triggered()), this, SLOT(bugReport()) ); connect(ui->actionAbout_MileStat, SIGNAL(triggered()), this, SLOT(aboutMileStat()) ); connect(ui->actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); connect(ui->action_Undo, SIGNAL(triggered()), this, SLOT(undoLastCommand()) ); connect(ui->action_Hide_Unvisited_States, SIGNAL(toggled(bool)), this, SLOT(hideUnvisited(bool)) ); }