use of org.phoebus.ui.docking.DockItemWithInput in project phoebus by ControlSystemStudio.
the class PVTableApplication method create.
@Override
public PVTableInstance create(final URI resource) {
PVTableInstance instance = null;
// Handles pv or file/http resource
try {
final List<String> pvs = ResourceParser.parsePVs(resource);
if (pvs.size() > 0) {
instance = create();
for (String pv : pvs) instance.getModel().addItem(pv);
} else {
// Check for existing instance with that input
final DockItemWithInput existing = DockStage.getDockItemWithInput(NAME, resource);
if (existing != null) {
// Found one, raise it
instance = existing.getApplication();
instance.raise();
} else {
// Nothing found, create new one
instance = create();
instance.loadResource(resource);
}
}
} catch (Exception ex) {
logger.log(Level.WARNING, "PV Table cannot open '" + resource + "'", ex);
}
return instance;
}
use of org.phoebus.ui.docking.DockItemWithInput in project phoebus by ControlSystemStudio.
the class PhoebusApplication method createMenu.
private MenuBar createMenu(final Stage stage) {
final MenuBar menuBar = new MenuBar();
// For Mac OS X, use it's menu bar on top of screen
if (PlatformInfo.is_mac_os_x)
menuBar.setUseSystemMenuBar(true);
// File
final MenuItem open = new MenuItem(Messages.Open, ImageCache.getImageView(getClass(), "/icons/fldr_obj.png"));
open.setOnAction(event -> fileOpen(stage, false));
final MenuItem open_with = new MenuItem(Messages.OpenWith, ImageCache.getImageView(getClass(), "/icons/fldr_obj.png"));
open_with.setOnAction(event -> fileOpen(stage, true));
top_resources_menu = new Menu(Messages.TopResources, ImageCache.getImageView(getClass(), "/icons/fldr_obj.png"));
top_resources_menu.setDisable(true);
final MenuItem file_save = new MenuItem(Messages.Save, ImageCache.getImageView(getClass(), "/icons/save_edit.png"));
file_save.setOnAction(event -> JobManager.schedule(Messages.Save, monitor -> active_item_with_input.get().save(monitor)));
final MenuItem file_save_as = new MenuItem(Messages.SaveAs, ImageCache.getImageView(getClass(), "/icons/saveas_edit.png"));
file_save_as.setOnAction(event -> JobManager.schedule(Messages.SaveAs, monitor -> active_item_with_input.get().save_as(monitor)));
final MenuItem exit = new MenuItem(Messages.Exit);
exit.setOnAction(event -> closeMainStage());
final Menu file = new Menu(Messages.File, null, open, open_with, top_resources_menu, new SeparatorMenuItem(), file_save, file_save_as, new SeparatorMenuItem(), exit);
file.setOnShowing(event -> {
final DockItemWithInput input_item = active_item_with_input.get();
if (input_item == null) {
file_save.setDisable(true);
file_save_as.setDisable(true);
} else {
file_save.setDisable(!input_item.isDirty());
file_save_as.setDisable(!input_item.isSaveAsSupported());
}
});
menuBar.getMenus().add(file);
// Application Contributions
final Menu applicationsMenu = new Menu(Messages.Applications);
final MenuTreeNode node = MenuEntryService.getInstance().getMenuEntriesTree();
addMenuNode(applicationsMenu, node);
menuBar.getMenus().add(applicationsMenu);
// Window
show_tabs = new CheckMenuItem(Messages.AlwaysShowTabs);
show_tabs.setSelected(DockPane.isAlwaysShowingTabs());
show_tabs.setOnAction(event -> DockPane.alwaysShowTabs(show_tabs.isSelected()));
show_toolbar = new CheckMenuItem(Messages.ShowToolbar);
show_toolbar.setOnAction(event -> showToolbar(show_toolbar.isSelected()));
show_statusbar = new CheckMenuItem(Messages.ShowStatusbar);
show_statusbar.setOnAction(event -> showStatusbar(show_statusbar.isSelected()));
save_layout = new SaveLayoutMenuItem(this, memento_files);
delete_layouts = new DeleteLayoutsMenuItem(this, memento_files);
final Menu menu = new Menu(Messages.Window, null, show_tabs, show_toolbar, show_statusbar, new SeparatorMenuItem(), selectTabMenu, closeAllTabsMenuItem, new SeparatorMenuItem(), save_layout, load_layout, delete_layouts, new SeparatorMenuItem(), /* Full Screen placeholder */
new FullScreenAction(stage));
// Update Full screen action when shown to get correct enter/exit FS mode
menu.setOnShowing(event -> {
// Last menu item
final int full_screen_index = menu.getItems().size() - 1;
final FullScreenAction full_screen = new FullScreenAction(stage);
if (!AuthorizationService.hasAuthorization("full_screen"))
full_screen.setDisable(true);
menu.getItems().set(full_screen_index, full_screen);
});
menuBar.getMenus().add(menu);
// Help
final MenuItem content = createMenuItem(new OpenHelp());
final MenuItem about = createMenuItem(new OpenAbout());
menuBar.getMenus().add(new Menu(Messages.Help, null, about, content));
selectTabMenu.getParentMenu().setOnShowing(e -> {
List<MenuItem> menuItems = new ArrayList<>();
for (Stage s : DockStage.getDockStages()) {
for (DockPane dockPane : DockStage.getDockPanes(s)) {
for (DockItem dockItem : dockPane.getDockItems()) {
CheckMenuItem menuItem = new CheckMenuItem(dockItem.getLabel());
menuItem.setSelected(dockItem.isSelected());
menuItem.setOnAction(ae -> dockItem.select());
menuItems.add(menuItem);
}
}
}
menuItems.sort(Comparator.comparing(MenuItem::getText));
selectTabMenu.getItems().clear();
selectTabMenu.getItems().addAll(menuItems);
});
closeAllTabsMenuItem.setOnAction(ae -> closeAllTabs());
return menuBar;
}
use of org.phoebus.ui.docking.DockItemWithInput in project phoebus by ControlSystemStudio.
the class MementoHelper method saveDockItem.
/**
* Save state of a DockItem
*
* <p>Store the application name, optionally the resource (input),
* and then allow the application itself to store details.
*
* @param memento
* @param item
*/
private static void saveDockItem(final MementoTree memento, final DockItem item) {
final AppInstance application = item.getApplication();
if (application == null || application.isTransient())
return;
final MementoTree item_memento = memento.getChild(item.getID());
item_memento.setString(DockItem.KEY_APPLICATION, application.getAppDescriptor().getName());
if (item instanceof DockItemWithInput) {
final URI input = ((DockItemWithInput) item).getInput();
if (input != null)
item_memento.setString(INPUT_URI, input.toString());
}
try {
application.save(item_memento);
} catch (Throwable ex) {
logger.log(Level.SEVERE, "Application " + application.getAppDescriptor().getDisplayName() + " memento error", ex);
}
}
use of org.phoebus.ui.docking.DockItemWithInput in project phoebus by ControlSystemStudio.
the class Viewer3dApp method create.
@Override
public AppInstance create(final URI resource) {
// Check for existing instance with that input, i.e. path & macros
final Viewer3dInstance instance;
final DockItemWithInput existing = DockStage.getDockItemWithInput(NAME, resource);
if (existing != null) {
// Found one, raise it
instance = existing.getApplication();
instance.raise();
// Reload the resource.
instance.reload();
} else {
// Nothing found, create new one
instance = new Viewer3dInstance(this, resource);
}
return instance;
}
use of org.phoebus.ui.docking.DockItemWithInput in project phoebus by ControlSystemStudio.
the class DisplayEditorApplication method create.
@Override
public DisplayEditorInstance create(final URI resource) {
// Turn URI into the actual file,
// (which may be a download of a remote URL),
// so that existing instance can be uniquely identified
final URI file_resource = getFileResource(resource);
if (file_resource == null)
return null;
// Check for existing instance with that input
final DisplayEditorInstance instance;
final DockItemWithInput existing = DockStage.getDockItemWithInput(NAME, file_resource);
if (existing != null) {
// Found one, raise it
instance = existing.getApplication();
instance.raise();
} else {
// Nothing found, create new one
instance = create();
if (instance == null)
return null;
instance.loadDisplay(file_resource);
}
return instance;
}
Aggregations