bool hasRoute(vector<DirectedGraphNode*> graph, DirectedGraphNode* s, DirectedGraphNode* t) { if (s == NULL) return false; if (vis.find(s) != vis.end()) return false; vis.insert(s); if (s->label == t->label) return true; for (int i = 0; i < s->neighbors.size(); i ++) { if (hasRoute(graph, s->neighbors[i], t)) { return true; } } return false; }
QWidget * DownloadRegionDialog::Private::createSelectionMethodBox() { m_visibleRegionMethodButton = new QRadioButton( tr( "Visible region" ) ); m_specifiedRegionMethodButton = new QRadioButton( tr( "Specify region" ) ); m_routeDownloadMethodButton = new QRadioButton( tr( "Download Route" ) ); m_routeDownloadMethodButton->setToolTip( tr( "Enabled when a route exists" ) ); m_routeDownloadMethodButton->setEnabled( hasRoute() ); m_routeDownloadMethodButton->setChecked( hasRoute() ); m_routeOffsetSpinBox = new QDoubleSpinBox(); m_routeOffsetSpinBox->setEnabled( hasRoute() ); m_routeOffsetSpinBox->setRange( minimumRouteOffset, maximumRouteOffset ); int defaultOffset = 500; m_routeOffsetSpinBox->setValue( defaultOffset ); m_routeOffsetSpinBox->setSingleStep( 100 ); m_routeOffsetSpinBox->setSuffix( " m" ); m_routeOffsetSpinBox->setDecimals( 0 ); m_routeOffsetSpinBox->setAlignment( Qt::AlignRight ); m_routeOffsetLabel = new QLabel( tr( "Offset from route:" ) ); m_routeOffsetLabel->setAlignment( Qt::AlignHCenter ); connect( m_visibleRegionMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod()) ); connect( m_specifiedRegionMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod())); connect( m_routeDownloadMethodButton, SIGNAL(toggled(bool)), m_dialog, SLOT(toggleSelectionMethod()) ); connect( m_routingModel, SIGNAL(modelReset()), m_dialog, SLOT(updateRouteDialog()) ); connect( m_routingModel, SIGNAL(rowsInserted(QModelIndex,int,int)), m_dialog, SLOT(updateRouteDialog()) ); connect( m_routingModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), m_dialog, SLOT(updateRouteDialog()) ); QHBoxLayout *routeOffsetLayout = new QHBoxLayout; routeOffsetLayout->addWidget( m_routeOffsetLabel ); routeOffsetLayout->insertSpacing( 0, 25 ); routeOffsetLayout->addWidget( m_routeOffsetSpinBox ); QVBoxLayout * const routeLayout = new QVBoxLayout; routeLayout->addWidget( m_routeDownloadMethodButton ); routeLayout->addLayout( routeOffsetLayout ); QVBoxLayout * const layout = new QVBoxLayout; layout->addWidget( m_visibleRegionMethodButton ); layout->addLayout( routeLayout ); layout->addWidget( m_specifiedRegionMethodButton ); layout->addWidget( m_latLonBoxWidget ); bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen; m_specifiedRegionMethodButton->setVisible( !smallScreen ); m_latLonBoxWidget->setVisible( !smallScreen ); if ( smallScreen ) { QWidget * const selectionMethodWidget = new QWidget; selectionMethodWidget->setLayout( layout ); return selectionMethodWidget; } else { QGroupBox * const selectionMethodBox = new QGroupBox( tr( "Selection Method" ) ); selectionMethodBox->setLayout( layout ); return selectionMethodBox; } }