/** * Creates a screen by its controller class. * <p> * By default, the screen will be opened in the current tab of the main window ({@link OpenMode#THIS_TAB}). * * @param screenClass screen controller class */ default <T extends Screen> T create(Class<T> screenClass) { return create(screenClass, OpenMode.THIS_TAB, FrameOwner.NO_OPTIONS); }
/** * Removes all windows from all UIs. */ public void removeAllWindows() { log.debug("Closing all windows in all UIs"); try { for (AppUI ui : getAppUIs()) { Screens screens = ui.getScreens(); if (screens != null) { Screen rootScreen = screens.getOpenedScreens().getRootScreenOrNull(); if (rootScreen != null) { screens.removeAll(); screens.remove(rootScreen); } } // also remove all native Vaadin windows, that is not under CUBA control Window[] windows = ui.getWindows().toArray(new Window[0]); for (com.vaadin.ui.Window win : windows) { ui.removeWindow(win); } // todo also remove all notifications } } catch (Throwable e) { log.error("Error closing all windows", e); } }
@Override public boolean handleException(Exception ex) { boolean handled = wrappedTask.handleException(ex); if (handled || wrappedTask.getOwnerScreen() == null) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); } else { Screens screens = getScreenContext().getScreens(); screens.remove(screen); showExecutionError(ex); log.error("Exception occurred in background task", ex); handled = true; } return handled; }
Screen screen = screens.create(screenId, openType.getOpenMode(), new MapScreenOptions(params)); screens.showFromNavigation(screen);
protected Screens.OpenedScreens getOpenedScreens() { return getScreens().getOpenedScreens(); }
/** * Shows this screen. * * @see Screens#show(Screen) */ public Screen show() { getScreenContext().getScreens().show(this); return this; }
Screens screens = ui.getScreens(); if (!screens.hasUnsavedChanges()) { performStandardLogout(ui);
@Override public void done(V result) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); try { wrappedTask.done(result); } catch (Exception ex) { // we should show exception messages immediately showExecutionError(ex); } }
protected String buildScreenRoute(Screen screen) { List<Screen> screens = new ArrayList<>(ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs()); if (screens.isEmpty() || screens.get(0) != screen) { log.debug("Current breadcrumbs doesn't contain the given screen '{}'", screen.getId()); return ""; } Collections.reverse(screens); StringBuilder state = new StringBuilder(); String prevSubRoute = null; for (int i = 0; i < screens.size() && i < MAX_NESTING; i++) { String subRoute = buildSubRoute(prevSubRoute, screens.get(i)); if (StringUtils.isNotEmpty(state) && StringUtils.isNotEmpty(subRoute)) { state.append('/'); } state.append(subRoute); prevSubRoute = subRoute; } return state.toString(); }
/** * Creates a screen by its controller class. * * @param screenClass screen controller class * @param launchMode how the screen should be opened */ default <T extends Screen> T create(Class<T> screenClass, LaunchMode launchMode) { return create(screenClass, launchMode, FrameOwner.NO_OPTIONS); }
/** * Initialize new TopLevelWindow and replace current. * * @param topLevelWindowId target top level window id * @deprecated Use {@link Screens#create(Class, Screens.LaunchMode)} with {@link OpenMode#ROOT} */ @Deprecated public void navigateTo(String topLevelWindowId) { AppUI ui = AppUI.getCurrent(); WindowInfo windowInfo = windowConfig.getWindowInfo(topLevelWindowId); Screens screens = ui.getScreens(); Screen screen = screens.create(windowInfo.asScreen(), OpenMode.ROOT); screens.show(screen); }
@Override public boolean handleTimeoutException() { boolean handled = wrappedTask.handleTimeoutException(); if (handled || wrappedTask.getOwnerScreen() == null) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); } else { Screens screens = getScreenContext().getScreens(); screens.remove(screen); Notifications notifications = getScreenContext().getNotifications(); Messages messages = AppBeans.get(Messages.NAME); notifications.create(Notifications.NotificationType.WARNING) .withCaption(messages.getMessage(LocalizedTaskWrapper.class, "backgroundWorkProgress.timeout")) .withDescription(messages.getMessage(LocalizedTaskWrapper.class, "backgroundWorkProgress.timeoutMessage")) .show(); handled = true; } return handled; }
protected String buildDialogRoute(Screen dialog) { RouteDefinition dialogRouteDefinition = getRouteDef(dialog); Iterator<Screen> currentTabScreens = ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs().iterator(); Screen currentScreen = currentTabScreens.hasNext() ? currentTabScreens.next() : null; String currentScreenRoute = currentScreen != null ? buildScreenRoute(currentScreen) : ""; if (dialogRouteDefinition == null) { return currentScreenRoute; } String dialogRoute = dialogRouteDefinition.getPath(); if (dialogRoute == null || dialogRoute.isEmpty()) { return currentScreenRoute; } String parentPrefix = dialogRouteDefinition.getParentPrefix(); if (StringUtils.isNotEmpty(parentPrefix) && dialogRoute.startsWith(parentPrefix + '/') && currentScreenRoute.endsWith(parentPrefix)) { dialogRoute = dialogRoute.substring(parentPrefix.length() + 1); } return currentScreenRoute == null || currentScreenRoute.isEmpty() ? dialogRoute : currentScreenRoute + '/' + dialogRoute; }
/** * Creates a screen by its screen id. * * @param screenId screen id * @param launchMode how the screen should be opened */ default Screen create(String screenId, LaunchMode launchMode) { return create(screenId, launchMode, FrameOwner.NO_OPTIONS); }
/** * Requests closing of the screen caused by the given action. * * @param action close action which is propagated to {@link BeforeCloseEvent} and {@link AfterCloseEvent} * @return result of operation */ public OperationResult close(CloseAction action) { BeforeCloseEvent beforeCloseEvent = new BeforeCloseEvent(this, action); fireEvent(BeforeCloseEvent.class, beforeCloseEvent); if (beforeCloseEvent.isClosePrevented()) { if (beforeCloseEvent.getCloseResult() != null) { return beforeCloseEvent.getCloseResult(); } return OperationResult.fail(); } // save settings right before removing if (isSaveSettingsOnClose(action)) { saveSettings(); } if (isSaveScreenHistoryOnClose(action)) { ScreenHistorySupport screenHistorySupport = beanLocator.get(ScreenHistorySupport.NAME); screenHistorySupport.saveScreenHistory(this); } screenContext.getScreens().remove(this); AfterCloseEvent afterCloseEvent = new AfterCloseEvent(this, action); fireEvent(AfterCloseEvent.class, afterCloseEvent); return OperationResult.success(); }
protected boolean omitParams(Screen screen) { Screens.LaunchMode launchMode = screen.getWindow().getContext().getLaunchMode(); if (OpenMode.THIS_TAB != launchMode) { return false; } return ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs().size() > MAX_NESTING; }
Screen screen = screenContext.getScreens().create(editorWindowId, OpenMode.DIALOG, new MapScreenOptions(params)); screen.addAfterCloseListener(event -> { CloseAction closeAction = event.getCloseAction();
protected boolean notAttachedToUi(Screen screen) { boolean notAttached; Screens.OpenedScreens openedScreens = ui.getScreens().getOpenedScreens(); if (screen.getWindow() instanceof RootWindow) { Screen rootScreen = openedScreens.getRootScreenOrNull(); notAttached = rootScreen == null || rootScreen != screen; } else if (screen.getWindow() instanceof DialogWindow) { notAttached = !openedScreens.getDialogScreens() .contains(screen); } else { notAttached = !openedScreens.getActiveScreens() .contains(screen); } return notAttached; } }
protected void handle404(String route) { Map<String, Object> params = ParamsMap.of("requestedRoute", route); MapScreenOptions options = new MapScreenOptions(params); getScreens().create(NotFoundScreen.class, OpenMode.NEW_TAB, options) .show(); }