Search in sources :

Example 1 with ListPickerDialog

use of org.phoebus.ui.dialog.ListPickerDialog in project phoebus by ControlSystemStudio.

the class PhoebusApplication method findApplication.

/**
 * @param resource Resource
 * @param prompt   Prompt if there are multiple applications, or use first one?
 * @return Application for opening resource, or <code>null</code> if none found
 */
private AppResourceDescriptor findApplication(final URI resource, final boolean prompt) {
    // Does resource request a specific application?
    final String app_name = ResourceParser.getAppName(resource);
    if (app_name != null) {
        final AppDescriptor app = ApplicationService.findApplication(app_name);
        if (app == null) {
            logger.log(Level.WARNING, "Unknown application '" + app_name + "'");
            return null;
        }
        if (app instanceof AppResourceDescriptor)
            return (AppResourceDescriptor) app;
        else {
            logger.log(Level.WARNING, "'" + app_name + "' application does not handle resources");
            return null;
        }
    }
    // Check all applications
    final List<AppResourceDescriptor> applications = ApplicationService.getApplications(resource);
    if (applications.isEmpty()) {
        logger.log(Level.WARNING, "No application found for opening " + resource);
        return null;
    }
    // Only one app?
    if (applications.size() == 1)
        return applications.get(0);
    // Pick default application based on preference setting?
    if (!prompt) {
        for (AppResourceDescriptor app : applications) for (String part : Preferences.default_apps) if (app.getName().contains(part))
            return app;
        // , not just the first one, which may be undefined
        logger.log(Level.WARNING, "No default application found for opening " + resource + ", using first one");
        return applications.get(0);
    }
    // Prompt user which application to use for this resource
    final List<String> options = applications.stream().map(app -> app.getDisplayName()).collect(Collectors.toList());
    final Dialog<String> which = new ListPickerDialog(main_stage.getScene().getRoot(), options, default_application);
    which.setTitle(Messages.OpenTitle);
    which.setHeaderText(Messages.OpenHdr + resource);
    which.setWidth(300);
    which.setHeight(300);
    final Optional<String> result = which.showAndWait();
    if (!result.isPresent())
        return null;
    default_application = result.get();
    return applications.get(options.indexOf(result.get()));
}
Also used : Button(javafx.scene.control.Button) JobManager(org.phoebus.framework.jobs.JobManager) Arrays(java.util.Arrays) CheckMenuItem(javafx.scene.control.CheckMenuItem) DockPaneListener(org.phoebus.ui.docking.DockPaneListener) VBox(javafx.scene.layout.VBox) KeyCombination(javafx.scene.input.KeyCombination) Preferences(org.phoebus.ui.Preferences) Application(javafx.application.Application) FullScreenAction(org.phoebus.ui.javafx.FullScreenAction) MenuTreeNode(org.phoebus.ui.application.MenuEntryService.MenuTreeNode) AlertType(javafx.scene.control.Alert.AlertType) Map(java.util.Map) DockPane(org.phoebus.ui.docking.DockPane) URI(java.net.URI) Alert(javafx.scene.control.Alert) MenuEntry(org.phoebus.ui.spi.MenuEntry) ImageCache(org.phoebus.ui.javafx.ImageCache) ResponsivenessMonitor(org.phoebus.ui.monitoring.ResponsivenessMonitor) MenuItem(javafx.scene.control.MenuItem) OpenHelp(org.phoebus.ui.help.OpenHelp) Collection(java.util.Collection) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) Platform(javafx.application.Platform) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) List(java.util.List) SubJobMonitor(org.phoebus.framework.jobs.SubJobMonitor) MenuButton(javafx.scene.control.MenuButton) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) Optional(java.util.Optional) BorderPane(javafx.scene.layout.BorderPane) Welcome(org.phoebus.ui.welcome.Welcome) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) DialogHelper(org.phoebus.ui.dialog.DialogHelper) ButtonType(javafx.scene.control.ButtonType) MouseEvent(javafx.scene.input.MouseEvent) JobMonitor(org.phoebus.framework.jobs.JobMonitor) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) AuthorizationService(org.phoebus.security.authorization.AuthorizationService) ApplicationService(org.phoebus.framework.workbench.ApplicationService) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) StatusBar(org.phoebus.ui.statusbar.StatusBar) ResourceParser(org.phoebus.framework.util.ResourceParser) OpenFileDialog(org.phoebus.ui.dialog.OpenFileDialog) WeakReference(java.lang.ref.WeakReference) Tooltip(javafx.scene.control.Tooltip) DockItemWithInput(org.phoebus.ui.docking.DockItemWithInput) MementoHelper(org.phoebus.ui.internal.MementoHelper) KeyCode(javafx.scene.input.KeyCode) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog) Dialog(javafx.scene.control.Dialog) MenuBar(javafx.scene.control.MenuBar) PlatformInfo(org.phoebus.ui.javafx.PlatformInfo) Iterator(java.util.Iterator) ToolBar(javafx.scene.control.ToolBar) DockStage(org.phoebus.ui.docking.DockStage) Node(javafx.scene.Node) MementoTree(org.phoebus.framework.persistence.MementoTree) DockItem(org.phoebus.ui.docking.DockItem) OpenAbout(org.phoebus.ui.help.OpenAbout) FileInputStream(java.io.FileInputStream) File(java.io.File) Menu(javafx.scene.control.Menu) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) TimeUnit(java.util.concurrent.TimeUnit) ActionEvent(javafx.event.ActionEvent) Stage(javafx.stage.Stage) XMLMementoTree(org.phoebus.framework.persistence.XMLMementoTree) ImageView(javafx.scene.image.ImageView) Window(javafx.stage.Window) Locations(org.phoebus.framework.workbench.Locations) Comparator(java.util.Comparator) Image(javafx.scene.image.Image) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog)

Example 2 with ListPickerDialog

use of org.phoebus.ui.dialog.ListPickerDialog in project phoebus by ControlSystemStudio.

the class ApplicationLauncherService method findApplication.

/**
 * Locate suitable application
 *
 * @param resource
 *            Resource {@link URI}
 * @param prompt
 *            Prompt if there are multiple applications, or use first one?
 * @param stage
 *            If prompt is enabled, a selection dialog will be launched
 *            positioned next to the provided stage. If <code>null</code> then the
 *            default or first application will be used
 * @return Application for opening resource, or <code>null</code> if none
 *         found
 */
public static AppResourceDescriptor findApplication(final URI resource, final boolean prompt, final Stage stage) {
    // Does resource request a specific application?
    final String app_name = ResourceParser.getAppName(resource);
    if (app_name != null) {
        final AppDescriptor app = ApplicationService.findApplication(app_name);
        if (app == null) {
            logger.log(Level.WARNING, "Unknown application '" + app_name + "'");
            return null;
        }
        if (app instanceof AppResourceDescriptor)
            return (AppResourceDescriptor) app;
        else {
            logger.log(Level.WARNING, "'" + app_name + "' application does not handle resources");
            return null;
        }
    }
    // Check all applications
    final List<AppResourceDescriptor> applications = ApplicationService.getApplications(resource);
    if (applications.isEmpty()) {
        logger.log(Level.INFO, "No application found for opening " + resource);
        return null;
    }
    // Only one app?
    if (applications.size() == 1)
        return applications.get(0);
    // Pick default application based on preference setting?
    if (!prompt || stage == null) {
        for (AppResourceDescriptor app : applications) for (String part : Preferences.default_apps) if (app.getName().contains(part))
            return app;
        // , not just the first one, which may be undefined
        final AppResourceDescriptor first = applications.get(0);
        logger.log(Level.WARNING, "No default application found for opening " + resource + ", using first one, \"" + first.getDisplayName() + "\"");
        return first;
    }
    // Prompt user which application to use for this resource
    final List<String> options = applications.stream().map(app -> app.getDisplayName()).collect(Collectors.toList());
    final Dialog<String> which = new ListPickerDialog(stage.getScene().getRoot(), options, null);
    which.setTitle(Messages.OpenTitle);
    which.setHeaderText(Messages.OpenHdr + resource);
    which.setWidth(300);
    which.setHeight(300);
    final Optional<String> result = which.showAndWait();
    if (!result.isPresent())
        return null;
    return applications.get(options.indexOf(result.get()));
}
Also used : ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog) Dialog(javafx.scene.control.Dialog) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) ApplicationService(org.phoebus.framework.workbench.ApplicationService) File(java.io.File) Level(java.util.logging.Level) Preferences(org.phoebus.ui.Preferences) List(java.util.List) Stage(javafx.stage.Stage) ResourceParser(org.phoebus.framework.util.ResourceParser) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) Optional(java.util.Optional) URI(java.net.URI) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog)

Aggregations

File (java.io.File)2 URI (java.net.URI)2 List (java.util.List)2 Optional (java.util.Optional)2 Level (java.util.logging.Level)2 Logger (java.util.logging.Logger)2 Collectors (java.util.stream.Collectors)2 Dialog (javafx.scene.control.Dialog)2 Stage (javafx.stage.Stage)2 AppDescriptor (org.phoebus.framework.spi.AppDescriptor)2 AppResourceDescriptor (org.phoebus.framework.spi.AppResourceDescriptor)2 ResourceParser (org.phoebus.framework.util.ResourceParser)2 ApplicationService (org.phoebus.framework.workbench.ApplicationService)2 Preferences (org.phoebus.ui.Preferences)2 ListPickerDialog (org.phoebus.ui.dialog.ListPickerDialog)2 FileInputStream (java.io.FileInputStream)1 WeakReference (java.lang.ref.WeakReference)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1