📄 datastoreui.cpp
字号:
for (Waypointlist::Waypoints::const_iterator itr = wpl.getList().begin(); itr != wpl.getList().end(); ++itr) { Waypoint wp(*itr); DataStore::WaypointType wpt(wp); ds.waypoints().add(wpt); } // copy the tracks into our format for (Tracklist::Tracks::const_iterator track_itr = tl.getList().begin(); track_itr != tl.getList().end(); ++track_itr) { gpsmgr::Track track(track_itr->getName(), ""); for (::Track::Trackpoints::const_iterator pt_itr = track_itr->getList().begin(); pt_itr != track_itr->getList().end(); ++pt_itr) { track.points().push_back(TrackPoint(LatLon(pt_itr->getLatitude(), pt_itr->getLongitude()), pt_itr->getAltitude(), pt_itr->getUnixTime(), pt_itr->getNewSegment())); } ds.tracks().add(track); } setDataStore(ds); flagChanges(); } void DataStoreUI::gpsUpload() { assert(haveDataStore()); bool ok; QString device = QInputDialog::getText( "GPS Device", "Enter the device for the GPS:", QLineEdit::Normal, QString::null, &ok, this ); if ( !ok || device.isEmpty() ) return; gGPS.setDevice(device); // upload waypoints Waypointlist wpl; for (DataStore::Waypoints::const_iterator itr = dataStore().waypoints().begin(); itr != dataStore().waypoints().end(); ++itr) { wpl.add(Wpt_Type(itr->second.name(), itr->second.position().lon().value(), itr->second.position().lat().value(), itr->second.altitude(), itr->second.comment(), itr->second.symbol(), itr->second.displayOption())); } gGPS.uploadWaypoints(wpl); // upload tracks Tracklist tl; for (DataStore::Tracks::const_iterator trkitr = dataStore().tracks().begin(); trkitr != dataStore().tracks().end(); ++trkitr) { gpspoint2::Track trk(trkitr->second.name()); for (Track::PointList::const_iterator ptitr = trkitr->second.points().begin(); ptitr != trkitr->second.points().end(); ++ptitr) { Trk_Point_Type trkpt(ptitr->position().lon().value(), ptitr->position().lat().value(), ptitr->altitude(), ptitr->newSegment(), ptitr->time()); trk.add(trkpt); } tl.add(trk); } gGPS.uploadTracks(tl); // TODO: Routes } void DataStoreUI::waypointEditorPopup(QListViewItem* item) { ListItemPopup lip(this); lip.setItemEnabled(ListItemPopup::EDIT, item); lip.setItemEnabled(ListItemPopup::DELETE, item); switch(lip.exec(QCursor::pos())) { // Add case 0: addWaypoint(); break; // Edit case 1: editWaypoint(); break; // Delete case 2: deleteWaypoint(); break; } } void DataStoreUI::addWaypoint() { using namespace gpsmgr::exceptions; WaypointEditorUI wpui(this, "WaypointEditorUI"); wpui.mGroupEditorWidget->addAvailableGroups(mGroups.begin(), mGroups.end()); if (!wpui.exec()) return; DataStore::WaypointType wp = wpui.waypoint(); DataStore::Waypoints::ID id = dataStore().waypoints().add(wp); for (GroupObject::Groups::const_iterator gitr = wp.groupsBegin(); gitr != wp.groupsEnd(); ++gitr) { mGroups.insert(*gitr); } if (matchFilterString(wp, mFilterEdit->text())) { new WaypointListItem(dataStore().waypoints(), id, mWaypointListView); } flagChanges(); } void DataStoreUI::deleteWaypoint() { WaypointListItem* curr = dynamic_cast<WaypointListItem*>(mWaypointListView->currentItem()); if (curr == NULL) return; DataStore::Waypoints::ID id = curr->waypointID(); dataStore().waypoints().remove(id); delete curr; flagChanges(); } void DataStoreUI::editWaypoint() { WaypointListItem* curr = dynamic_cast<WaypointListItem*>(mWaypointListView->currentItem()); if (curr == NULL) return; WaypointEditorUI wpui(this, "WaypointEditorUI"); wpui.mGroupEditorWidget->addAvailableGroups(mGroups.begin(), mGroups.end()); DataStore::Waypoints::ID id = curr->waypointID(); wpui.setWaypoint(dataStore().waypoints().get(id)); if (!wpui.exec()) return; DataStore::WaypointType wp = wpui.waypoint(); dataStore().waypoints().get(id) = wp; for (GroupObject::Groups::const_iterator gitr = wp.groupsBegin(); gitr != wp.groupsEnd(); ++gitr) { mGroups.insert(*gitr); } // Remove the track from the list if it no longer matches if (!matchFilterString(dataStore().waypoints().get(id), mFilterEdit->text())) { delete curr; } flagChanges(); } void DataStoreUI::trackEditorPopup(QListViewItem* item) { ListItemPopup lip(this); lip.setItemEnabled(ListItemPopup::EDIT, item); lip.setItemEnabled(ListItemPopup::DELETE, item); switch(lip.exec(QCursor::pos())) { // Add case 0: addTrack(); break; // Edit case 1: editTrack(); break; // Delete case 2: deleteTrack(); break; } } void DataStoreUI::addTrack() { using namespace gpsmgr::exceptions; TrackEditorUI tui(this, "TrackEditorUI"); tui.mGroupEditorWidget->addAvailableGroups(mGroups.begin(), mGroups.end()); if (!tui.exec()) return; DataStore::TrackType trk = tui.track(); DataStore::Tracks::ID id = dataStore().tracks().add(trk); for (GroupObject::Groups::const_iterator gitr = trk.groupsBegin(); gitr != trk.groupsEnd(); ++gitr) { mGroups.insert(*gitr); } if (matchFilterString(trk, mFilterEdit->text())) { new TrackListItem(dataStore().tracks(), id, mTrackListView); } flagChanges(); } void DataStoreUI::deleteTrack() { TrackListItem* curr = static_cast<TrackListItem*>(mTrackListView->currentItem()); if (curr == NULL) return; DataStore::Tracks::ID id = curr->trackID(); dataStore().tracks().remove(id); delete curr; flagChanges(); } void DataStoreUI::editTrack() { TrackListItem* curr = static_cast<TrackListItem*>(mTrackListView->currentItem()); if (curr == NULL) return; TrackEditorUI tui(this, "TrackEditorUI"); tui.mGroupEditorWidget->addAvailableGroups(mGroups.begin(), mGroups.end()); DataStore::Tracks::ID id = curr->trackID(); cerr << dataStore().tracks().get(id).points().size() << endl; tui.setTrack(dataStore().tracks().get(id)); if (!tui.exec()) return; DataStore::TrackType trk = tui.track(); dataStore().tracks().get(id) = trk; for (GroupObject::Groups::const_iterator gitr = trk.groupsBegin(); gitr != trk.groupsEnd(); ++gitr) { mGroups.insert(*gitr); } // Remove the track from the list if it no longer matches if (!matchFilterString(dataStore().tracks().get(id), mFilterEdit->text())) { delete curr; } flagChanges(); } void DataStoreUI::filterChanged() { filterElements(); } void DataStoreUI::filterElements() { assert(haveDataStore()); string filterString = mFilterEdit->text(); // filter waypoints mWaypointListView->clear(); for (DataStore::Waypoints::const_iterator itr = dataStore().waypoints().begin(); itr != dataStore().waypoints().end(); ++itr) { if (matchFilterString(itr->second, filterString)) { new WaypointListItem(dataStore().waypoints(), itr->first, mWaypointListView); } } // filter tracks mTrackListView->clear(); for (DataStore::Tracks::const_iterator itr = dataStore().tracks().begin(); itr != dataStore().tracks().end(); ++itr) { if (matchFilterString(itr->second, filterString)) { new TrackListItem(dataStore().tracks(), itr->first, mTrackListView); } } // TODO: routes } void DataStoreUI::synchronizeInterface() { fileSaveAction->setEnabled(mNeedSave && mSaveFile.size() > 0); } void DataStoreUI::flagChanges(bool ch) { mNeedSave = ch; synchronizeInterface(); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -