MapView::MapView(QWidget *parent) : QGraphicsView(parent) { outlinePen.setBrush(Qt::white); setInteractable(true); //NYI: limit maximum number of current downloads to 2 as specified in the CycleMap tileserver terms, // this would severely degrade download performance, though. Maybe keep limit at ~5? requestLimit = 5; maxReqStackSize = 30; networkManager = new QNetworkAccessManager(this); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setScene(new QGraphicsScene(this)); //no delete necessary, parent set setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); lastTileUpdate = QTime(0,0); currentTime = new QTime(QTime::currentTime()); //tile size: 256px x 256px, in coordinates: 2*PI x 2*PI scale(128/PI,128/PI); //default zoom == 0 setSceneRect(-PI, -PI, 2*PI, 2*PI); mapSources.insert(OCM,{OCM,"OpenCycleMap", "http://tile.opencyclemap.org/cycle/", 0, 17}); mapSources.insert(Mapnik,{Mapnik,"OpenStreetMap Mapnik", "http://tile.openstreetmap.org/", 0,18}); mapSources.insert(None,{None,"None","",0,20}); MapSource = {None, "None", "", 0 , 20}; currentZoom = 0; zoomTo(MapSource.minzoom); connectSignalsAndSlots(); }
void Scene::setNodesInteractable(bool interactable) { _nodesInteractable = interactable; for (auto item : items()) { auto nodeItem = dynamic_cast<Node *>(item); if (nodeItem) { nodeItem->setInteractable(interactable); } } }
void UpdateDialog::setState(UpdaterState newState) { ui->progressBar->setValue(0); state = newState; switch (state) { case CanCheck: resetUpdateData(); ui->updateButton->setText( tr("Check for updates") ); setInteractable(true); break; case Checking: setInteractable(false); doCheck(); break; case CanUpdate: ui->updateButton->setText( tr("Update client") ); setInteractable(true); break; case Updating: setInteractable(false); doUpdate(); break; case CanClose: ui->updateButton->setText( tr("Close updater") ); setInteractable(true); break; default: log( tr("Error! Updater tool swithed to unknown state!") ); break; } }
void Scene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { auto hoverItem = itemAt(e->scenePos(), QTransform()); if (!hoverItem && _nodesInteractable) { auto node = new Node; node->setInteractable(_nodesInteractable); node->setSelected(true); node->setPos(e->scenePos()); addItem(node); } else if (!_nodesInteractable && _currentEdge) { auto nodeItem = dynamic_cast<Node *>(hoverItem); if (nodeItem) { _currentEdge->setEndNode(nodeItem); } else { removeItem(_currentEdge); delete _currentEdge; } _currentEdge = nullptr; } QGraphicsScene::mouseReleaseEvent(e); }