// Refresh plugins (filters) combo void FileSelectorWidget::refreshPlugins(const RefList<FilePluginInterface,KVMap>& filePlugins) { ui.FilterCombo->clear(); for (RefListItem<FilePluginInterface,KVMap>* ri = filePlugins.first(); ri != NULL; ri = ri->next) { FilePluginInterface* plugin = ri->item; // The mode_ of the file selector determines which type of plugin we display if (mode_ == FileSelectorWidget::SaveSingleMode) { if (!plugin->canExport()) continue; } else if (!plugin->canImport()) continue; ui.FilterCombo->addItem(plugin->filterString(), VariantPointer< RefListItem<FilePluginInterface,KVMap> >(ri)); } ui.FilterCombo->addItem("All Files (*)"); }
// Context menu requested for CollectionTree void UChromaWindow::collectionTreeContextMenuRequested(const QPoint& point) { // Build the context menu to display QMenu contextMenu; QAction* action; // -- Main 'edit' functions QAction* deleteAction = contextMenu.addAction("&Delete"); QAction* duplicateAction = contextMenu.addAction("Du&plicate"); // -- "Display..." pane menu contextMenu.addSeparator(); QMenu paneMenu, removeFromPaneMenu, addToPaneMenu; RefList<ViewPane,bool> displayPanes = UChromaSession::viewLayout().panes(ViewPane::StandardRole); RefList<ViewPane,bool> currentPanes = UChromaSession::viewLayout().panes(UChromaSession::currentCollection(), ViewPane::StandardRole); QList<QAction*> addToPaneActions, removeFromPaneActions; // -- ... Populate removeFromPaneMenu first... for (RefListItem<ViewPane,bool>* ri = currentPanes.first(); ri != NULL; ri = ri->next) { action = removeFromPaneMenu.addAction(ri->item->name()); action->setData(VariantPointer<ViewPane>(ri->item)); removeFromPaneActions << action; } // -- ... Now populate addToPaneMenu... for (RefListItem<ViewPane,bool>* ri = displayPanes.first(); ri != NULL; ri = ri->next) { if (currentPanes.contains(ri->item)) continue; action = addToPaneMenu.addAction(ri->item->name()); action->setData(VariantPointer<ViewPane>(ri->item)); addToPaneActions << action; } // -- Construct parent paneMenu for these submenus, and add them to it action = paneMenu.addMenu(&addToPaneMenu); action->setText("Add to pane..."); action = paneMenu.addMenu(&removeFromPaneMenu); action->setText("Remove from pane..."); action = contextMenu.addMenu(&paneMenu); action->setText("Display..."); // -- Analysis contextMenu.addSeparator(); QAction* fitAction = contextMenu.addAction("New &Fit Equation..."); QAction* editFitAction = contextMenu.addAction("&Edit Fit E&quation..."); QAction* updateFitAction = contextMenu.addAction("&Update/Continue Fit"); // Show it QAction* menuResult = contextMenu.exec(QCursor::pos()); // What was clicked? if (menuResult == deleteAction) on_actionCollectionDelete_triggered(false); else if (menuResult == duplicateAction) on_actionCollectionDuplicate_triggered(false); else if (removeFromPaneActions.contains(menuResult)) { ViewPane* pane = VariantPointer<ViewPane>(menuResult->data()); if (pane) pane->removeCollectionTarget(UChromaSession::currentCollection()); // Update the item updateCollectionTreeItem(ui.CollectionTree->currentItem()); updateDisplay(); } else if (addToPaneActions.contains(menuResult)) { ViewPane* pane = VariantPointer<ViewPane>(menuResult->data()); if (pane) pane->addCollectionTarget(UChromaSession::currentCollection()); // Update the item updateCollectionTreeItem(ui.CollectionTree->currentItem()); updateDisplay(); } else if (menuResult == fitAction) on_actionAnalyseNewFit_triggered(false); else if (menuResult == editFitAction) on_actionAnalyseEditFit_triggered(false); else if (menuResult == updateFitAction) on_actionAnalyseUpdateFit_triggered(false); }