/* m_groupHash layout * key : index of the group in m_groupMaps * value : a QList of the original rows in sourceModel() for the children of this group * * key = -1 contains a QList of the non-grouped indexes * * TODO: sub-groups */ void QtGroupingProxy::buildTree() { if( !sourceModel() ) return; beginResetModel(); m_groupHash.clear(); //don't clear the data maps since most of it will probably be needed again. m_parentCreateList.clear(); int max = sourceModel()->rowCount( m_rootNode ); //qDebug() << QString("building tree with %1 leafs.").arg( max ); //WARNING: these have to be added in order because the addToGroups function is optimized for //modelRowsInserted(). Failure to do so will result in wrong data shown in the view at best. for( int row = 0; row < max; row++ ) { QModelIndex idx = sourceModel()->index( row, m_groupedColumn, m_rootNode ); addSourceRow( idx ); } // dumpGroups(); endResetModel(); }
// Initialize the dialog widgets and connect the signals/slots void SatellitesDialog::createDialogContent() { ui->setupUi(dialog); ui->tabs->setCurrentIndex(0); connect(&StelApp::getInstance(), SIGNAL(languageChanged()), this, SLOT(retranslate())); // Settings tab / updates group connect(ui->internetUpdatesCheckbox, SIGNAL(stateChanged(int)), this, SLOT(setUpdatesEnabled(int))); connect(ui->updateButton, SIGNAL(clicked()), this, SLOT(updateTLEs())); connect(GETSTELMODULE(Satellites), SIGNAL(updateStateChanged(Satellites::UpdateState)), this, SLOT(updateStateReceiver(Satellites::UpdateState))); connect(GETSTELMODULE(Satellites), SIGNAL(tleUpdateComplete(int, int, int)), this, SLOT(updateCompleteReceiver(int, int, int))); connect(ui->updateFrequencySpinBox, SIGNAL(valueChanged(int)), this, SLOT(setUpdateValues(int))); refreshUpdateValues(); // fetch values for last updated and so on // if the state didn't change, setUpdatesEnabled will not be called, so we force it setUpdatesEnabled(ui->internetUpdatesCheckbox->checkState()); updateTimer = new QTimer(this); connect(updateTimer, SIGNAL(timeout()), this, SLOT(refreshUpdateValues())); updateTimer->start(7000); connect(ui->closeStelWindow, SIGNAL(clicked()), this, SLOT(close())); // Settings tab / General settings group connect(ui->labelsGroup, SIGNAL(toggled(bool)), dynamic_cast<StelGui*>(StelApp::getInstance().getGui())->getGuiAction("actionShow_Satellite_Labels"), SLOT(setChecked(bool))); connect(ui->fontSizeSpinBox, SIGNAL(valueChanged(int)), GETSTELMODULE(Satellites), SLOT(setLabelFontSize(int))); connect(ui->restoreDefaultsButton, SIGNAL(clicked()), this, SLOT(restoreDefaults())); connect(ui->saveSettingsButton, SIGNAL(clicked()), this, SLOT(saveSettings())); // Settings tab / orbit lines group ui->orbitLinesGroup->setChecked(GETSTELMODULE(Satellites)->getOrbitLinesFlag()); ui->orbitSegmentsSpin->setValue(Satellite::orbitLineSegments); ui->orbitFadeSpin->setValue(Satellite::orbitLineFadeSegments); ui->orbitDurationSpin->setValue(Satellite::orbitLineSegmentDuration); connect(ui->orbitLinesGroup, SIGNAL(toggled(bool)), GETSTELMODULE(Satellites), SLOT(setOrbitLinesFlag(bool))); connect(ui->orbitSegmentsSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); connect(ui->orbitFadeSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); connect(ui->orbitDurationSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); // Satellites tab filterProxyModel = new QSortFilterProxyModel(this); filterProxyModel->setSourceModel(satellitesModel); filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); ui->satellitesList->setModel(filterProxyModel); connect(ui->lineEditSearch, SIGNAL(textEdited(QString)), filterProxyModel, SLOT(setFilterWildcard(QString))); QItemSelectionModel* selectionModel = ui->satellitesList->selectionModel(); connect(selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), this, SLOT(updateSelectedInfo(QModelIndex,QModelIndex))); connect(ui->satellitesList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(handleDoubleClick(QModelIndex))); connect(ui->groupsCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(listSatelliteGroup(int))); connect(ui->saveSatellitesButton, SIGNAL(clicked()), this, SLOT(saveSatellites())); connect(ui->removeSatellitesButton, SIGNAL(clicked()), this, SLOT(removeSatellites())); connectSatelliteGuiForm(); importWindow = new SatellitesImportDialog(); connect(ui->addSatellitesButton, SIGNAL(clicked()), importWindow, SLOT(setVisible())); connect(importWindow, SIGNAL(satellitesAccepted(TleDataList)), this, SLOT(addSatellites(TleDataList))); // Sources tab connect(ui->sourceList, SIGNAL(currentTextChanged(const QString&)), ui->sourceEdit, SLOT(setText(const QString&))); connect(ui->sourceEdit, SIGNAL(editingFinished()), this, SLOT(sourceEditingDone())); connect(ui->deleteSourceButton, SIGNAL(clicked()), this, SLOT(deleteSourceRow())); connect(ui->addSourceButton, SIGNAL(clicked()), this, SLOT(addSourceRow())); // About tab setAboutHtml(); updateGuiFromSettings(); }
// Initialize the dialog widgets and connect the signals/slots void SatellitesDialog::createDialogContent() { ui->setupUi(dialog); ui->tabs->setCurrentIndex(0); ui->labelAutoAdd->setVisible(false); connect(ui->closeStelWindow, SIGNAL(clicked()), this, SLOT(close())); connect(&StelApp::getInstance(), SIGNAL(languageChanged()), this, SLOT(retranslate())); Satellites* plugin = GETSTELMODULE(Satellites); // Settings tab / updates group // These controls are refreshed by updateSettingsPage(), which in // turn is triggered by setting any of these values. Because // clicked() is issued only by user input, there's no endless loop. connect(ui->internetUpdatesCheckbox, SIGNAL(clicked(bool)), plugin, SLOT(enableInternetUpdates(bool))); connect(ui->checkBoxAutoAdd, SIGNAL(clicked(bool)), plugin, SLOT(enableAutoAdd(bool))); connect(ui->checkBoxAutoRemove, SIGNAL(clicked(bool)), plugin, SLOT(enableAutoRemove(bool))); connect(ui->updateFrequencySpinBox, SIGNAL(valueChanged(int)), plugin, SLOT(setUpdateFrequencyHours(int))); connect(ui->updateButton, SIGNAL(clicked()), this, SLOT(updateTLEs())); connect(ui->jumpToSourcesButton, SIGNAL(clicked()), this, SLOT(jumpToSourcesTab())); connect(plugin, SIGNAL(updateStateChanged(Satellites::UpdateState)), this, SLOT(showUpdateState(Satellites::UpdateState))); connect(plugin, SIGNAL(tleUpdateComplete(int, int, int, int)), this, SLOT(showUpdateCompleted(int, int, int, int))); updateTimer = new QTimer(this); connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateCountdown())); updateTimer->start(7000); // Settings tab / General settings group // This does call Satellites::setFlagLabels() indirectly. QAction* action = dynamic_cast<StelGui*>(StelApp::getInstance().getGui())->getGuiAction("actionShow_Satellite_Labels"); connect(ui->labelsGroup, SIGNAL(clicked(bool)), action, SLOT(setChecked(bool))); connect(ui->fontSizeSpinBox, SIGNAL(valueChanged(int)), plugin, SLOT(setLabelFontSize(int))); connect(ui->restoreDefaultsButton, SIGNAL(clicked()), this, SLOT(restoreDefaults())); connect(ui->saveSettingsButton, SIGNAL(clicked()), this, SLOT(saveSettings())); // Settings tab / orbit lines group connect(ui->orbitLinesGroup, SIGNAL(clicked(bool)), plugin, SLOT(setOrbitLinesFlag(bool))); connect(ui->orbitSegmentsSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); connect(ui->orbitFadeSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); connect(ui->orbitDurationSpin, SIGNAL(valueChanged(int)), this, SLOT(setOrbitParams())); // Settings tab - populate all values updateSettingsPage(); // Satellites tab filterModel = new SatellitesListFilterModel(this); filterModel->setSourceModel(GETSTELMODULE(Satellites)->getSatellitesListModel()); filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); ui->satellitesList->setModel(filterModel); connect(ui->lineEditSearch, SIGNAL(textEdited(QString)), filterModel, SLOT(setFilterWildcard(QString))); QItemSelectionModel* selectionModel = ui->satellitesList->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSatelliteData())); connect(ui->satellitesList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(trackSatellite(QModelIndex))); // Two-state input, three-state display connect(ui->displayedCheckbox, SIGNAL(clicked(bool)), ui->displayedCheckbox, SLOT(setChecked(bool))); connect(ui->orbitCheckbox, SIGNAL(clicked(bool)), ui->orbitCheckbox, SLOT(setChecked(bool))); connect(ui->userCheckBox, SIGNAL(clicked(bool)), ui->userCheckBox, SLOT(setChecked(bool))); // Because the previous signals and slots were connected first, // they will be executed before these. connect(ui->displayedCheckbox, SIGNAL(clicked()), this, SLOT(setFlags())); connect(ui->orbitCheckbox, SIGNAL(clicked()), this, SLOT(setFlags())); connect(ui->userCheckBox, SIGNAL(clicked()), this, SLOT(setFlags())); connect(ui->groupsListWidget, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(handleGroupChanges(QListWidgetItem*))); connect(ui->groupFilterCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterListByGroup(int))); connect(ui->saveSatellitesButton, SIGNAL(clicked()), this, SLOT(saveSatellites())); connect(ui->removeSatellitesButton, SIGNAL(clicked()), this, SLOT(removeSatellites())); importWindow = new SatellitesImportDialog(); connect(ui->addSatellitesButton, SIGNAL(clicked()), importWindow, SLOT(setVisible())); connect(importWindow, SIGNAL(satellitesAccepted(TleDataList)), this, SLOT(addSatellites(TleDataList))); // Sources tab connect(ui->sourceList, SIGNAL(currentTextChanged(const QString&)), ui->sourceEdit, SLOT(setText(const QString&))); connect(ui->sourceList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(saveSourceList())); connect(ui->sourceEdit, SIGNAL(editingFinished()), this, SLOT(saveEditedSource())); connect(ui->deleteSourceButton, SIGNAL(clicked()), this, SLOT(deleteSourceRow())); connect(ui->addSourceButton, SIGNAL(clicked()), this, SLOT(addSourceRow())); connect(plugin, SIGNAL(settingsChanged()), this, SLOT(toggleCheckableSources())); // About tab populateAboutPage(); populateFilterMenu(); populateSourcesList(); }