Search in sources :

Example 1 with IWindowCloseHandler

use of org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler in project aero.minova.rcp by minova-afis.

the class WFCDetailPart method postConstruct.

@PostConstruct
public void postConstruct(Composite parent, MWindow window, MApplication mApp) {
    resManager = new LocalResourceManager(JFaceResources.getResources(), parent);
    composite = parent;
    formToolkit = new FormToolkit(parent.getDisplay());
    appContext = mApp.getContext();
    mApplication = mApp;
    getForm();
    layoutForm(parent);
    mDetail.setDetailAccessor(new DetailAccessor(mDetail));
    mDetail.setClearAfterSave(form.getDetail().isClearAfterSave());
    // Erstellen der Util-Klasse, welche sämtliche funktionen der Detailansicht steuert
    casRequestsUtil = ContextInjectionFactory.make(WFCDetailCASRequestsUtil.class, mPerspective.getContext());
    casRequestsUtil.initializeCasRequestUtil(getDetail(), mPerspective, this);
    mPerspective.getContext().set(WFCDetailCASRequestsUtil.class, casRequestsUtil);
    mPerspective.getContext().set(Constants.DETAIL_WIDTH, detailWidth);
    TranslateUtil.translate(composite, translationService, locale);
    // Helper erst initialisieren, wenn casRequestsUtil erstellt wurde
    if (mDetail.getHelper() != null) {
        mDetail.getHelper().setControls(mDetail);
    }
    // Handler, der Dialog anzeigt wenn versucht wird, die Anwendung mit ungespeicherten Änderungen zu schließen. Außerdem wird
    // "RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION" wieder auf false gesetzt, damit die Nachricht beim nächsten Starten wieder angezeigt wird
    IWindowCloseHandler handler = mWindow -> {
        @SuppressWarnings("unchecked") List<MPerspective> pList = (List<MPerspective>) appContext.get(Constants.DIRTY_PERSPECTIVES);
        if (pList != null && !pList.isEmpty()) {
            StringBuilder listString = new StringBuilder();
            for (MPerspective mPerspective : pList) {
                listString.append(" - " + translationService.translate(mPerspective.getLabel(), null) + "\n");
            }
            MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), translationService.translate("@msg.ChangesDialog", null), null, translationService.translate("@msg.Close.DirtyMessage", null) + listString, MessageDialog.CONFIRM, new String[] { translationService.translate("@Action.Discard", null), translationService.translate("@Abort", null) }, 0);
            boolean res = dialog.open() == 0;
            if (res) {
                prefs.put(Constants.RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION, "false");
            }
            return res;
        }
        prefs.put(Constants.RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION, "false");
        return true;
    };
    window.getContext().set(IWindowCloseHandler.class, handler);
    openRestoringUIDialog();
}
Also used : ParameterizedCommand(org.eclipse.core.commands.ParameterizedCommand) MLookupField(aero.minova.rcp.model.form.MLookupField) MinovaSection(aero.minova.rcp.css.widgets.MinovaSection) Point(org.eclipse.swt.graphics.Point) ValueChangeListener(aero.minova.rcp.model.event.ValueChangeListener) BackingStoreException(org.osgi.service.prefs.BackingStoreException) Composite(org.eclipse.swt.widgets.Composite) Map(java.util.Map) IEclipsePreferences(org.eclipse.core.runtime.preferences.IEclipsePreferences) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) MButton(aero.minova.rcp.model.form.MButton) ServiceReference(org.osgi.framework.ServiceReference) ValueChangeEvent(aero.minova.rcp.model.event.ValueChangeEvent) MApplication(org.eclipse.e4.ui.model.application.MApplication) MGrid(aero.minova.rcp.model.form.MGrid) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) Constants(aero.minova.rcp.constants.Constants) Node(aero.minova.rcp.form.setup.xbs.Node) LookupField(aero.minova.rcp.rcp.fields.LookupField) WFCDetailCASRequestsUtil(aero.minova.rcp.rcp.util.WFCDetailCASRequestsUtil) ToolItem(org.eclipse.swt.widgets.ToolItem) MouseEvent(org.eclipse.swt.events.MouseEvent) IHelper(aero.minova.rcp.model.helper.IHelper) InstanceScope(org.eclipse.core.runtime.preferences.InstanceScope) Item(org.eclipse.swt.widgets.Item) MenuItem(org.eclipse.swt.widgets.MenuItem) Page(aero.minova.rcp.form.model.xsd.Page) SWT(org.eclipse.swt.SWT) MTextField(aero.minova.rcp.model.form.MTextField) SelectionListener(org.eclipse.swt.events.SelectionListener) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) UIEventTopic(org.eclipse.e4.ui.di.UIEventTopic) TranslationService(org.eclipse.e4.core.services.translation.TranslationService) ECommandService(org.eclipse.e4.core.commands.ECommandService) EPartService(org.eclipse.e4.ui.workbench.modeling.EPartService) MCommand(org.eclipse.e4.ui.model.application.commands.MCommand) JFaceResources(org.eclipse.jface.resource.JFaceResources) ButtonAccessor(aero.minova.rcp.rcp.accessor.ButtonAccessor) ControlListener(org.eclipse.swt.events.ControlListener) MToolBarElement(org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement) ArrayList(java.util.ArrayList) ControlEvent(org.eclipse.swt.events.ControlEvent) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) ModelToViewModel(aero.minova.rcp.model.form.ModelToViewModel) Named(javax.inject.Named) Section(org.eclipse.ui.forms.widgets.Section) Onclick(aero.minova.rcp.form.model.xsd.Onclick) MParameter(org.eclipse.e4.ui.model.application.commands.MParameter) Procedure(aero.minova.rcp.form.model.xsd.Procedure) SectionAccessor(aero.minova.rcp.rcp.accessor.SectionAccessor) Shell(org.eclipse.swt.widgets.Shell) ShortDateField(aero.minova.rcp.rcp.fields.ShortDateField) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) FormLayout(org.eclipse.swt.layout.FormLayout) MHandledItem(org.eclipse.e4.ui.model.application.ui.menu.MHandledItem) DateTimeField(aero.minova.rcp.rcp.fields.DateTimeField) ImageDescriptor(org.eclipse.jface.resource.ImageDescriptor) ExecutionException(java.util.concurrent.ExecutionException) Preference(org.eclipse.e4.core.di.extensions.Preference) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) ControlAdapter(org.eclipse.swt.events.ControlAdapter) Form(aero.minova.rcp.form.model.xsd.Form) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) ContextInjectionFactory(org.eclipse.e4.core.contexts.ContextInjectionFactory) Head(aero.minova.rcp.form.model.xsd.Head) MDetail(aero.minova.rcp.model.form.MDetail) TabUtil(aero.minova.rcp.rcp.util.TabUtil) ToolBar(org.eclipse.swt.widgets.ToolBar) MBooleanField(aero.minova.rcp.model.form.MBooleanField) MHandledMenuItem(org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem) MNumberField(aero.minova.rcp.model.form.MNumberField) Wizard(aero.minova.rcp.form.model.xsd.Wizard) Preferences(aero.minova.rcp.form.setup.xbs.Preferences) EHandlerService(org.eclipse.e4.core.commands.EHandlerService) GridChangeEvent(aero.minova.rcp.model.event.GridChangeEvent) Locale(java.util.Locale) MField(aero.minova.rcp.model.form.MField) Column(aero.minova.rcp.model.Column) MDateTimeField(aero.minova.rcp.model.form.MDateTimeField) Optional(org.eclipse.e4.core.di.annotations.Optional) Display(org.eclipse.swt.widgets.Display) JAXBException(javax.xml.bind.JAXBException) BundleContext(org.osgi.framework.BundleContext) NumberField(aero.minova.rcp.rcp.fields.NumberField) MShortDateField(aero.minova.rcp.model.form.MShortDateField) List(java.util.List) IWorkbench(org.eclipse.e4.ui.workbench.IWorkbench) GridChangeListener(aero.minova.rcp.model.event.GridChangeListener) Entry(java.util.Map.Entry) PostConstruct(javax.annotation.PostConstruct) MouseAdapter(org.eclipse.swt.events.MouseAdapter) PersistState(org.eclipse.e4.ui.di.PersistState) ShortTimeField(aero.minova.rcp.rcp.fields.ShortTimeField) ExpandableComposite(org.eclipse.ui.forms.widgets.ExpandableComposite) SectionGrid(aero.minova.rcp.rcp.widgets.SectionGrid) TRANSLATE_PROPERTY(aero.minova.rcp.rcp.fields.FieldUtil.TRANSLATE_PROPERTY) Image(org.eclipse.swt.graphics.Image) Rectangle(org.eclipse.swt.graphics.Rectangle) XBSUtil(aero.minova.rcp.form.setup.util.XBSUtil) ImageUtil(aero.minova.rcp.dataservice.ImageUtil) ApplicationPreferences(aero.minova.rcp.preferences.ApplicationPreferences) Inject(javax.inject.Inject) DetailLayout(aero.minova.rcp.css.widgets.DetailLayout) MinovaSectionData(aero.minova.rcp.css.widgets.MinovaSectionData) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) MHandledToolItem(org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) MessageDialogWithToggle(org.eclipse.jface.dialogs.MessageDialogWithToggle) MSection(aero.minova.rcp.model.form.MSection) TextField(aero.minova.rcp.rcp.fields.TextField) Field(aero.minova.rcp.form.model.xsd.Field) TranslateUtil(aero.minova.rcp.rcp.util.TranslateUtil) MParamStringField(aero.minova.rcp.model.form.MParamStringField) FieldUtil(aero.minova.rcp.rcp.fields.FieldUtil) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) MTrimBar(org.eclipse.e4.ui.model.application.ui.basic.MTrimBar) UISynchronize(org.eclipse.e4.ui.di.UISynchronize) GridAccessor(aero.minova.rcp.rcp.accessor.GridAccessor) XmlProcessor(aero.minova.rcp.dataservice.XmlProcessor) MShortTimeField(aero.minova.rcp.model.form.MShortTimeField) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) SelectionEvent(org.eclipse.swt.events.SelectionEvent) Menu(org.eclipse.swt.widgets.Menu) Grid(aero.minova.rcp.form.model.xsd.Grid) DetailAccessor(aero.minova.rcp.rcp.accessor.DetailAccessor) BooleanField(aero.minova.rcp.rcp.fields.BooleanField) FrameworkUtil(org.osgi.framework.FrameworkUtil) Control(org.eclipse.swt.widgets.Control) DetailAccessor(aero.minova.rcp.rcp.accessor.DetailAccessor) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) FormToolkit(org.eclipse.ui.forms.widgets.FormToolkit) LocalResourceManager(org.eclipse.jface.resource.LocalResourceManager) WFCDetailCASRequestsUtil(aero.minova.rcp.rcp.util.WFCDetailCASRequestsUtil) ArrayList(java.util.ArrayList) List(java.util.List) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) PostConstruct(javax.annotation.PostConstruct)

Example 2 with IWindowCloseHandler

use of org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler in project eclipse.platform.ui by eclipse-platform.

the class WorkbenchWindow method setup.

@PostConstruct
public void setup() {
    try {
        // if workbench window is opened as a result of command execution,
        // the context in which the new workbench window's commands are
        // initialized has to to match the workbench context
        final IEclipseContext windowContext = model.getContext();
        HandlerServiceImpl.push(windowContext.getParent(), null);
        // update the preference store.
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.COOLBAR_VISIBLE)) {
            this.coolBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.COOLBAR_VISIBLE));
        } else {
            this.coolBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.COOLBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.COOLBAR_VISIBLE, Boolean.toString(this.coolBarVisible));
        }
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE)) {
            this.perspectiveBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE));
        } else {
            this.perspectiveBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE, Boolean.toString(this.perspectiveBarVisible));
        }
        IServiceLocatorCreator slc = workbench.getService(IServiceLocatorCreator.class);
        this.serviceLocator = (ServiceLocator) slc.createServiceLocator(workbench, null, () -> {
            final Shell shell = getShell();
            if (shell != null && !shell.isDisposed()) {
                close();
            }
        }, windowContext);
        windowContext.set(IExtensionTracker.class.getName(), new ContextFunction() {

            @Override
            public Object compute(IEclipseContext context, String contextKey) {
                if (tracker == null) {
                    tracker = new UIExtensionTracker(getWorkbench().getDisplay());
                }
                return tracker;
            }
        });
        windowContext.set(IWindowCloseHandler.class.getName(), (IWindowCloseHandler) window -> getWindowAdvisor().preWindowShellClose() && WorkbenchWindow.this.close());
        final ISaveHandler defaultSaveHandler = windowContext.get(ISaveHandler.class);
        final PartServiceSaveHandler localSaveHandler = new WWinPartServiceSaveHandler() {

            @Override
            public Save promptToSave(MPart dirtyPart) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart part = ((CompatibilityPart) object).getPart();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable != null) {
                        if (!saveable.isSaveOnCloseNeeded()) {
                            return Save.NO;
                        }
                        return SaveableHelper.savePart(saveable, part, WorkbenchWindow.this, true) ? Save.NO : Save.CANCEL;
                    }
                }
                return defaultSaveHandler.promptToSave(dirtyPart);
            }

            @Override
            public Save[] promptToSave(Collection<MPart> dirtyParts) {
                LabelProvider labelProvider = new LabelProvider() {

                    @Override
                    public String getText(Object element) {
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                List<MPart> parts = new ArrayList<>(dirtyParts);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), parts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(parts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return new Save[] { Save.CANCEL };
                }
                Object[] toSave = dialog.getResult();
                Save[] retSaves = new Save[parts.size()];
                Arrays.fill(retSaves, Save.NO);
                for (int i = 0; i < retSaves.length; i++) {
                    MPart part = parts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            retSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                return retSaves;
            }

            @Override
            public boolean save(MPart dirtyPart, boolean confirm) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                    if (SaveableHelper.isSaveable(workbenchPart)) {
                        SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                        Object saveResult = saveablesList.preCloseParts(Collections.singletonList(workbenchPart), true, WorkbenchWindow.this);
                        return saveResult != null;
                    }
                } else if (isSaveOnCloseNotNeededSplitEditorPart(dirtyPart)) {
                    return true;
                }
                return super.save(dirtyPart, confirm);
            }

            private boolean saveParts(ArrayList<MPart> dirtyParts, Save[] decisions) {
                if (decisions == null || decisions.length == 0) {
                    super.saveParts(dirtyParts, true);
                }
                if (dirtyParts.size() != decisions.length) {
                    for (Save decision : decisions) {
                        if (decision == Save.CANCEL) {
                            return false;
                        }
                    }
                }
                List<MPart> dirtyPartsList = Collections.unmodifiableList(new ArrayList<>(dirtyParts));
                for (Save decision : decisions) {
                    if (decision == Save.CANCEL) {
                        return false;
                    }
                }
                for (int i = 0; i < decisions.length; i++) {
                    if (decisions[i] == Save.YES) {
                        if (!save(dirtyPartsList.get(i), false)) {
                            return false;
                        }
                    }
                }
                return true;
            }

            private boolean saveMixedParts(ArrayList<MPart> nonCompParts, ArrayList<IWorkbenchPart> compParts, boolean confirm, boolean addNonPartSources) {
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                if (!confirm) {
                    boolean saved = super.saveParts(nonCompParts, confirm);
                    Object saveResult = saveablesList.preCloseParts(compParts, true, WorkbenchWindow.this);
                    return ((saveResult != null) && saved);
                }
                LabelProvider labelProvider = new LabelProvider() {

                    WorkbenchPartLabelProvider workbenchLabelProvider = new WorkbenchPartLabelProvider();

                    @Override
                    public String getText(Object element) {
                        if (element instanceof Saveable) {
                            return workbenchLabelProvider.getText(element);
                        }
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                ArrayList<Object> listParts = new ArrayList<>();
                Map<IWorkbenchPart, List<Saveable>> saveableMap = saveablesList.getSaveables(compParts);
                listParts.addAll(nonCompParts);
                LinkedHashSet<Saveable> saveablesSet = new LinkedHashSet<>();
                for (IWorkbenchPart workbenchPart : compParts) {
                    List<Saveable> list = saveableMap.get(workbenchPart);
                    if (list != null) {
                        saveablesSet.addAll(list);
                    }
                }
                if (addNonPartSources) {
                    for (ISaveablesSource nonPartSource : saveablesList.getNonPartSources()) {
                        Saveable[] saveables = nonPartSource.getSaveables();
                        for (Saveable saveable : saveables) {
                            if (saveable.isDirty()) {
                                saveablesSet.add(saveable);
                            }
                        }
                    }
                }
                listParts.addAll(saveablesSet);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), listParts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(listParts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return false;
                }
                Object[] toSave = dialog.getResult();
                Save[] nonCompatSaves = new Save[nonCompParts.size()];
                Save[] compatSaves = new Save[saveablesSet.size()];
                Arrays.fill(nonCompatSaves, Save.NO);
                Arrays.fill(compatSaves, Save.NO);
                for (int i = 0; i < nonCompatSaves.length; i++) {
                    MPart part = nonCompParts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            nonCompatSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                Map<Saveable, Save> saveOptionMap = new HashMap<>();
                for (Saveable saveable : saveablesSet) {
                    boolean found = false;
                    for (Object o : toSave) {
                        if (o == saveable) {
                            saveOptionMap.put(saveable, Save.YES);
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        saveOptionMap.put(saveable, Save.NO);
                    }
                }
                boolean saved = saveParts(nonCompParts, nonCompatSaves);
                if (!saved) {
                    return saved;
                }
                Object saveResult = saveablesList.preCloseParts(compParts, false, true, WorkbenchWindow.this, saveOptionMap);
                return ((saveResult != null) && saved);
            }

            private void removeSaveOnCloseNotNeededParts(List<IWorkbenchPart> parts) {
                for (Iterator<IWorkbenchPart> it = parts.iterator(); it.hasNext(); ) {
                    IWorkbenchPart part = it.next();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                        it.remove();
                    }
                }
            }

            private void removeSaveOnCloseNotNeededSplitEditorParts(List<MPart> parts) {
                for (Iterator<MPart> it = parts.iterator(); it.hasNext(); ) {
                    MPart part = it.next();
                    if (isSaveOnCloseNotNeededSplitEditorPart(part)) {
                        it.remove();
                    }
                }
            }

            private boolean isSaveOnCloseNotNeededSplitEditorPart(MPart part) {
                boolean notNeeded = false;
                if (part instanceof MCompositePart && SplitHost.SPLIT_HOST_CONTRIBUTOR_URI.equals(part.getContributionURI())) {
                    MCompositePart compPart = (MCompositePart) part;
                    List<MPart> elements = modelService.findElements(compPart, null, MPart.class);
                    if (elements != null && elements.size() > 1) {
                        elements.remove(0);
                        for (MPart mpart : elements) {
                            Object object = mpart.getObject();
                            if (object instanceof CompatibilityPart) {
                                IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                                if (!SaveableHelper.isSaveable(workbenchPart)) {
                                    notNeeded = true;
                                } else {
                                    ISaveablePart saveable = SaveableHelper.getSaveable(workbenchPart);
                                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                                        notNeeded = true;
                                    } else {
                                        notNeeded = false;
                                        break;
                                    }
                                }
                            } else {
                                notNeeded = false;
                                break;
                            }
                        }
                    }
                }
                return notNeeded;
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm, boolean closing, boolean addNonPartSources) {
                ArrayList<IWorkbenchPart> saveableParts = new ArrayList<>();
                ArrayList<MPart> nonCompatibilityParts = new ArrayList<>();
                for (MPart part : dirtyParts) {
                    Object object = part.getObject();
                    if (object instanceof CompatibilityPart) {
                        IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                        if (SaveableHelper.isSaveable(workbenchPart)) {
                            saveableParts.add(workbenchPart);
                        }
                    } else {
                        nonCompatibilityParts.add(part);
                    }
                }
                if (!saveableParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededParts(saveableParts);
                }
                if (!nonCompatibilityParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededSplitEditorParts(nonCompatibilityParts);
                }
                if (saveableParts.isEmpty()) {
                    if (nonCompatibilityParts.isEmpty()) {
                        // nothing to save
                        return true;
                    }
                    return super.saveParts(nonCompatibilityParts, confirm);
                } else if (!nonCompatibilityParts.isEmpty()) {
                    return saveMixedParts(nonCompatibilityParts, saveableParts, confirm, addNonPartSources);
                }
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                Object saveResult = saveablesList.preCloseParts(saveableParts, addNonPartSources, true, WorkbenchWindow.this, WorkbenchWindow.this);
                return (saveResult != null);
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm) {
                return saveParts(dirtyParts, confirm, false, false);
            }
        };
        localSaveHandler.logger = logger;
        windowContext.set(ISaveHandler.class, localSaveHandler);
        windowContext.set(IWorkbenchWindow.class.getName(), this);
        windowContext.set(IPageService.class, this);
        windowContext.set(IPartService.class, partService);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_NAME, this);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_SHELL_NAME, getShell());
        EContextService cs = windowContext.get(EContextService.class);
        cs.activateContext(IContextService.CONTEXT_ID_WINDOW);
        cs.getActiveContextIds();
        initializeDefaultServices();
        /*
			 * Remove the second QuickAccess control if an older workspace is opened.
			 *
			 * An older workspace will create an ApplicationModel which already contains the
			 * QuickAccess elements, from the old "popuolateTopTrimContribution()" method.
			 * The new implementation of this method doesn't add the QuickAccess elements
			 * anymore but an old workbench.xmi still has these entries in it and so they
			 * need to be removed.
			 */
        cleanLegacyQuickAccessContribution();
        // register with the tracker
        fireWindowOpening();
        configureShell(getShell(), windowContext);
        try {
            page = new WorkbenchPage(this, input);
        } catch (WorkbenchException e) {
            WorkbenchPlugin.log(e);
        }
        menuOverride = new MenuOverrides(page);
        toolbarOverride = new ToolbarOverrides(page);
        ContextInjectionFactory.inject(page, model.getContext());
        windowContext.set(IWorkbenchPage.class, page);
        menuManager.setOverrides(menuOverride);
        ((CoolBarToTrimManager) getCoolBarManager2()).setOverrides(toolbarOverride);
        // Fill the action bars
        fillActionBars(FILL_ALL_ACTION_BARS);
        firePageOpened();
        populateTopTrimContributions();
        populateBottomTrimContributions();
        // Trim gets populated during rendering (?) so make sure we have al/
        // sides. See bug 383269 for details
        modelService.getTrim(model, SideValue.LEFT);
        modelService.getTrim(model, SideValue.RIGHT);
        // move the QuickAccess ToolControl to the correct position (only if
        // it exists)
        positionQuickAccess();
        Shell shell = (Shell) model.getWidget();
        if (model.getMainMenu() == null) {
            mainMenu = modelService.createModelElement(MMenu.class);
            mainMenu.setElementId(IWorkbenchConstants.MAIN_MENU_ID);
            mainMenu.getPersistedState().put(org.eclipse.e4.ui.workbench.IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
            renderer = (MenuManagerRenderer) rendererFactory.getRenderer(mainMenu, null);
            renderer.linkModelToManager(mainMenu, menuManager);
            renderer.reconcileManagerToModel(menuManager, mainMenu);
            model.setMainMenu(mainMenu);
            final Menu menu = (Menu) engine.createGui(mainMenu, model.getWidget(), model.getContext());
            shell.setMenuBar(menu);
            menuUpdater = () -> {
                try {
                    if (model.getMainMenu() == null || model.getWidget() == null || menu.isDisposed() || mainMenu.getWidget() == null) {
                        return;
                    }
                    MenuManagerRendererFilter.updateElementVisibility(mainMenu, renderer, menuManager, windowContext.getActiveLeaf(), 1, false);
                    menuManager.update(true);
                } finally {
                    canUpdateMenus = true;
                }
            };
            RunAndTrack menuChangeManager = new RunAndTrack() {

                @Override
                public boolean changed(IEclipseContext context) {
                    ExpressionInfo info = new ExpressionInfo();
                    IEclipseContext leafContext = windowContext.getActiveLeaf();
                    MenuManagerRendererFilter.collectInfo(info, mainMenu, renderer, leafContext, true);
                    // if one of these variables change, re-run the RAT
                    for (String name : info.getAccessedVariableNames()) {
                        leafContext.get(name);
                    }
                    if (canUpdateMenus && workbench.getDisplay() != null) {
                        canUpdateMenus = false;
                        workbench.getDisplay().asyncExec(menuUpdater);
                    }
                    return manageChanges;
                }
            };
            windowContext.runAndTrack(menuChangeManager);
        }
        eventBroker.subscribe(UIEvents.UIElement.TOPIC_WIDGET, windowWidgetHandler);
        boolean newWindow = setupPerspectiveStack(windowContext);
        partService.setPage(page);
        page.setPerspective(perspective);
        firePageActivated();
        if (newWindow) {
            page.fireInitialPartVisibilityEvents();
        } else {
            page.updatePerspectiveActionSets();
        }
        updateActionSets();
        IPreferenceStore preferenceStore = PrefUtil.getAPIPreferenceStore();
        boolean enableAnimations = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS);
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, false);
        // Hack!! don't show the intro if there's more than one open
        // perspective
        List<MPerspective> persps = modelService.findElements(model, null, MPerspective.class, null);
        if (persps.size() > 1) {
            PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_INTRO, false);
            PrefUtil.saveAPIPrefs();
        }
        if (Boolean.parseBoolean(getModel().getPersistedState().get(PERSISTED_STATE_RESTORED))) {
            SafeRunnable.run(new SafeRunnable() {

                @Override
                public void run() throws Exception {
                    getWindowAdvisor().postWindowRestore();
                }
            });
        } else {
            getModel().getPersistedState().put(PERSISTED_STATE_RESTORED, Boolean.TRUE.toString());
        }
        getWindowAdvisor().postWindowCreate();
        getWindowAdvisor().openIntro();
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, enableAnimations);
        getShell().setData(this);
        trackShellActivation();
        /**
         * When SWT zoom changes for primary monitor, prompt user to restart Eclipse to
         * apply the changes.
         */
        getShell().addListener(SWT.ZoomChanged, event -> {
            if (getShell().getDisplay().getPrimaryMonitor().equals(getShell().getMonitor())) {
                int dialogResponse = MessageDialog.open(MessageDialog.QUESTION, getShell(), WorkbenchMessages.Workbench_zoomChangedTitle, WorkbenchMessages.Workbench_zoomChangedMessage, SWT.NONE, WorkbenchMessages.Workbench_RestartButton, WorkbenchMessages.Workbench_DontRestartButton);
                if (event.doit && dialogResponse == 0) {
                    getWorkbenchImpl().restart(true);
                }
            }
        });
    } finally {
        HandlerServiceImpl.pop();
    }
}
Also used : Arrays(java.util.Arrays) ModeledPageLayout(org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout) UIListenerLogging(org.eclipse.ui.internal.misc.UIListenerLogging) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) EventHandler(org.osgi.service.event.EventHandler) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Point(org.eclipse.swt.graphics.Point) IUpdateService(org.eclipse.e4.ui.internal.workbench.renderers.swt.IUpdateService) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) Map(java.util.Map) HandlerServiceImpl(org.eclipse.e4.core.commands.internal.HandlerServiceImpl) IServiceScopes(org.eclipse.ui.services.IServiceScopes) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) MApplication(org.eclipse.e4.ui.model.application.MApplication) ServiceLocator(org.eclipse.ui.internal.services.ServiceLocator) ISaveablePart(org.eclipse.ui.ISaveablePart) EContextService(org.eclipse.e4.ui.services.EContextService) LegacyActionPersistence(org.eclipse.ui.internal.menus.LegacyActionPersistence) IEvaluationService(org.eclipse.ui.services.IEvaluationService) PlatformUI(org.eclipse.ui.PlatformUI) MenuManager(org.eclipse.jface.action.MenuManager) IActionSetDescriptor(org.eclipse.ui.internal.registry.IActionSetDescriptor) Assert(org.eclipse.core.runtime.Assert) Set(java.util.Set) IHandler(org.eclipse.core.commands.IHandler) InvocationTargetException(java.lang.reflect.InvocationTargetException) MTrimElement(org.eclipse.e4.ui.model.application.ui.basic.MTrimElement) GroupMarker(org.eclipse.jface.action.GroupMarker) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) Saveable(org.eclipse.ui.Saveable) MTrimmedWindow(org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow) TrimBarLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimBarLayout) SWT(org.eclipse.swt.SWT) SlaveCommandService(org.eclipse.ui.internal.commands.SlaveCommandService) IPageService(org.eclipse.ui.IPageService) MToolControl(org.eclipse.e4.ui.model.application.ui.menu.MToolControl) IActionSetsListener(org.eclipse.ui.internal.menus.IActionSetsListener) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPartReference(org.eclipse.ui.IWorkbenchPartReference) UIEventTopic(org.eclipse.e4.ui.di.UIEventTopic) SelectionService(org.eclipse.ui.internal.e4.compatibility.SelectionService) BusyIndicator(org.eclipse.swt.custom.BusyIndicator) EPartService(org.eclipse.e4.ui.workbench.modeling.EPartService) ICoolBarManager2(org.eclipse.jface.internal.provisional.action.ICoolBarManager2) ICommandService(org.eclipse.ui.commands.ICommandService) ListenerList(org.eclipse.core.runtime.ListenerList) Position(org.eclipse.e4.ui.model.internal.Position) MUIElement(org.eclipse.e4.ui.model.application.ui.MUIElement) SplitHost(org.eclipse.e4.ui.workbench.addons.splitteraddon.SplitHost) ArrayList(java.util.ArrayList) SideValue(org.eclipse.e4.ui.model.application.ui.SideValue) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) MPerspectiveStack(org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack) IConfigurationElement(org.eclipse.core.runtime.IConfigurationElement) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) LinkedHashSet(java.util.LinkedHashSet) IActionCommandMappingService(org.eclipse.ui.internal.handlers.IActionCommandMappingService) LegacyHandlerService(org.eclipse.ui.internal.handlers.LegacyHandlerService) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) MenuManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer) ActiveShellExpression(org.eclipse.ui.ActiveShellExpression) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) IEvaluationContext(org.eclipse.core.expressions.IEvaluationContext) IPresentationEngine(org.eclipse.e4.ui.workbench.IPresentationEngine) ActionCommandMappingService(org.eclipse.ui.internal.handlers.ActionCommandMappingService) ShellAdapter(org.eclipse.swt.events.ShellAdapter) PrefUtil(org.eclipse.ui.internal.util.PrefUtil) MenuManagerRendererFilter(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) CustomizePerspectiveDialog(org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog) IMenuManager(org.eclipse.jface.action.IMenuManager) SubContributionItem(org.eclipse.jface.action.SubContributionItem) IContextService(org.eclipse.ui.contexts.IContextService) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) Platform(org.eclipse.core.runtime.Platform) ModalContext(org.eclipse.jface.operation.ModalContext) IEventBroker(org.eclipse.e4.core.services.events.IEventBroker) StartupRunnable(org.eclipse.ui.internal.StartupThreading.StartupRunnable) Event(org.osgi.service.event.Event) IPartService(org.eclipse.ui.IPartService) CoolBarManager2(org.eclipse.jface.internal.provisional.action.CoolBarManager2) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) ContextInjectionFactory(org.eclipse.e4.core.contexts.ContextInjectionFactory) UIEvents(org.eclipse.e4.ui.workbench.UIEvents) WorkbenchException(org.eclipse.ui.WorkbenchException) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchAdvisor(org.eclipse.ui.application.WorkbenchAdvisor) URIHelper(org.eclipse.e4.ui.internal.workbench.URIHelper) TextProcessor(org.eclipse.osgi.util.TextProcessor) IAction(org.eclipse.jface.action.IAction) IMenuService(org.eclipse.ui.menus.IMenuService) IWorkbenchRegistryConstants(org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants) IToolBarManager(org.eclipse.jface.action.IToolBarManager) ISaveablesSource(org.eclipse.ui.ISaveablesSource) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) SlaveMenuService(org.eclipse.ui.internal.menus.SlaveMenuService) PreDestroy(javax.annotation.PreDestroy) ActionHandler(org.eclipse.jface.commands.ActionHandler) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry) PositionInfo(org.eclipse.e4.ui.model.internal.PositionInfo) IToolBarManager2(org.eclipse.jface.internal.provisional.action.IToolBarManager2) MMenuElement(org.eclipse.e4.ui.model.application.ui.menu.MMenuElement) IContributionManagerOverrides(org.eclipse.jface.action.IContributionManagerOverrides) IActionBarConfigurer2(org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2) ProgressRegion(org.eclipse.ui.internal.progress.ProgressRegion) ToolBarManager2(org.eclipse.jface.internal.provisional.action.ToolBarManager2) IRendererFactory(org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory) MElementContainer(org.eclipse.e4.ui.model.application.ui.MElementContainer) IAdaptable(org.eclipse.core.runtime.IAdaptable) NLS(org.eclipse.osgi.util.NLS) IBindingService(org.eclipse.ui.keys.IBindingService) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Optional(org.eclipse.e4.core.di.annotations.Optional) Display(org.eclipse.swt.widgets.Display) ContextService(org.eclipse.ui.internal.contexts.ContextService) ArrayContentProvider(org.eclipse.jface.viewers.ArrayContentProvider) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) IHandlerService(org.eclipse.ui.handlers.IHandlerService) List(java.util.List) CoolBarManager(org.eclipse.jface.action.CoolBarManager) IPerspectiveDescriptor(org.eclipse.ui.IPerspectiveDescriptor) IViewDescriptor(org.eclipse.ui.views.IViewDescriptor) Entry(java.util.Map.Entry) PostConstruct(javax.annotation.PostConstruct) IHandlerActivation(org.eclipse.ui.handlers.IHandlerActivation) WorkbenchWindowAdvisor(org.eclipse.ui.application.WorkbenchWindowAdvisor) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) SafeRunnable(org.eclipse.jface.util.SafeRunnable) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) ISelectionService(org.eclipse.ui.ISelectionService) ToolBarManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer) IPerspectiveRegistry(org.eclipse.ui.IPerspectiveRegistry) EvaluationReference(org.eclipse.ui.internal.services.EvaluationReference) Rectangle(org.eclipse.swt.graphics.Rectangle) HashMap(java.util.HashMap) Logger(org.eclipse.e4.core.services.log.Logger) IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) HashSet(java.util.HashSet) Inject(javax.inject.Inject) TrimmedPartLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimmedPartLayout) Expression(org.eclipse.core.expressions.Expression) MPlaceholder(org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IWorkbenchPreferenceConstants(org.eclipse.ui.IWorkbenchPreferenceConstants) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) WorkbenchLocationService(org.eclipse.ui.internal.services.WorkbenchLocationService) ICoolBarManager(org.eclipse.jface.action.ICoolBarManager) IWorkbenchActionConstants(org.eclipse.ui.IWorkbenchActionConstants) Iterator(java.util.Iterator) Layout(org.eclipse.swt.widgets.Layout) IPageListener(org.eclipse.ui.IPageListener) E4Workbench(org.eclipse.e4.ui.internal.workbench.E4Workbench) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) ShellEvent(org.eclipse.swt.events.ShellEvent) StatusLineManager(org.eclipse.jface.action.StatusLineManager) InjectionException(org.eclipse.e4.core.di.InjectionException) MTrimBar(org.eclipse.e4.ui.model.application.ui.basic.MTrimBar) ActionBarAdvisor(org.eclipse.ui.application.ActionBarAdvisor) CommandAction(org.eclipse.ui.internal.actions.CommandAction) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) IContributionItem(org.eclipse.jface.action.IContributionItem) IWorkbench(org.eclipse.ui.IWorkbench) Menu(org.eclipse.swt.widgets.Menu) Collections(java.util.Collections) LabelProvider(org.eclipse.jface.viewers.LabelProvider) Control(org.eclipse.swt.widgets.Control) ISources(org.eclipse.ui.ISources) LinkedHashSet(java.util.LinkedHashSet) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ListenerList(org.eclipse.core.runtime.ListenerList) ArrayList(java.util.ArrayList) List(java.util.List) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Saveable(org.eclipse.ui.Saveable) SafeRunnable(org.eclipse.jface.util.SafeRunnable) EContextService(org.eclipse.e4.ui.services.EContextService) WorkbenchException(org.eclipse.ui.WorkbenchException) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) ISaveablesSource(org.eclipse.ui.ISaveablesSource) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) ISaveablePart(org.eclipse.ui.ISaveablePart) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) Menu(org.eclipse.swt.widgets.Menu) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) Point(org.eclipse.swt.graphics.Point) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) InvocationTargetException(java.lang.reflect.InvocationTargetException) WorkbenchException(org.eclipse.ui.WorkbenchException) InjectionException(org.eclipse.e4.core.di.InjectionException) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) LabelProvider(org.eclipse.jface.viewers.LabelProvider) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) PostConstruct(javax.annotation.PostConstruct)

Example 3 with IWindowCloseHandler

use of org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler in project eclipse.platform.ui by eclipse-platform.

the class WBWRenderer method hookControllerLogic.

@Override
public void hookControllerLogic(MUIElement me) {
    super.hookControllerLogic(me);
    Widget widget = (Widget) me.getWidget();
    if (widget instanceof Shell && me instanceof MWindow) {
        final Shell shell = (Shell) widget;
        final MWindow w = (MWindow) me;
        shell.addControlListener(new ControlListener() {

            @Override
            public void controlResized(ControlEvent e) {
                // Don't store the maximized size in the model
                if (shell.getMaximized()) {
                    return;
                }
                try {
                    ignoreSizeChanges = true;
                    w.setWidth(shell.getSize().x);
                    w.setHeight(shell.getSize().y);
                } finally {
                    ignoreSizeChanges = false;
                }
            }

            @Override
            public void controlMoved(ControlEvent e) {
                // Don't store the maximized size in the model
                if (shell.getMaximized()) {
                    return;
                }
                try {
                    ignoreSizeChanges = true;
                    w.setX(shell.getLocation().x);
                    w.setY(shell.getLocation().y);
                } finally {
                    ignoreSizeChanges = false;
                }
            }
        });
        shell.addShellListener(ShellListener.shellClosedAdapter(e -> {
            // override the shell close event
            e.doit = false;
            MWindow window = (MWindow) e.widget.getData(OWNING_ME);
            IWindowCloseHandler closeHandler = window.getContext().get(IWindowCloseHandler.class);
            // request, clean-up as necessary
            if (closeHandler == null || closeHandler.close(window)) {
                cleanUp(window);
            }
        }));
        shell.addListener(SWT.Activate, event -> {
            MUIElement parentME = w.getParent();
            if (parentME instanceof MApplication) {
                MApplication app = (MApplication) parentME;
                app.setSelectedElement(w);
                w.getContext().activate();
            } else if (parentME == null) {
                parentME = modelService.getContainer(w);
                if (parentME instanceof MContext) {
                    w.getContext().activate();
                }
            }
            updateNonFocusState(SWT.Activate, w);
        });
        shell.addListener(SWT.Deactivate, event -> updateNonFocusState(SWT.Deactivate, w));
    }
}
Also used : UIEvents(org.eclipse.e4.ui.workbench.UIEvents) Arrays(java.util.Arrays) IServiceConstants(org.eclipse.e4.ui.services.IServiceConstants) Collections.singletonList(java.util.Collections.singletonList) IResourcesRegistry(org.eclipse.e4.ui.css.core.resources.IResourcesRegistry) MPartStack(org.eclipse.e4.ui.model.application.ui.basic.MPartStack) ResourceByDefinitionKey(org.eclipse.e4.ui.css.swt.resources.ResourceByDefinitionKey) Composite(org.eclipse.swt.widgets.Composite) Widget(org.eclipse.swt.widgets.Widget) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) Geometry(org.eclipse.jface.util.Geometry) MApplication(org.eclipse.e4.ui.model.application.MApplication) MElementContainer(org.eclipse.e4.ui.model.application.ui.MElementContainer) IStylingEngine(org.eclipse.e4.ui.services.IStylingEngine) Collection(java.util.Collection) Set(java.util.Set) Optional(org.eclipse.e4.core.di.annotations.Optional) Display(org.eclipse.swt.widgets.Display) ArrayContentProvider(org.eclipse.jface.viewers.ArrayContentProvider) SWTRenderersMessages(org.eclipse.e4.ui.internal.workbench.renderers.swt.SWTRenderersMessages) Util(org.eclipse.jface.util.Util) List(java.util.List) Window(org.eclipse.jface.window.Window) MTrimmedWindow(org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow) SWT(org.eclipse.swt.SWT) PostConstruct(javax.annotation.PostConstruct) Label(org.eclipse.swt.widgets.Label) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) IShellProvider(org.eclipse.jface.window.IShellProvider) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) UIEventTopic(org.eclipse.e4.ui.di.UIEventTopic) SWTResourcesRegistry(org.eclipse.e4.ui.css.swt.resources.SWTResourcesRegistry) CheckboxTableViewer(org.eclipse.jface.viewers.CheckboxTableViewer) EPartService(org.eclipse.e4.ui.workbench.modeling.EPartService) Image(org.eclipse.swt.graphics.Image) Rectangle(org.eclipse.swt.graphics.Rectangle) Logger(org.eclipse.e4.core.services.log.Logger) MUIElement(org.eclipse.e4.ui.model.application.ui.MUIElement) ControlListener(org.eclipse.swt.events.ControlListener) ArrayList(java.util.ArrayList) ControlEvent(org.eclipse.swt.events.ControlEvent) HashSet(java.util.HashSet) Inject(javax.inject.Inject) CSSEngine(org.eclipse.e4.ui.css.core.engine.CSSEngine) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) CSSConstants(org.eclipse.e4.ui.internal.workbench.swt.CSSConstants) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) Font(org.eclipse.swt.graphics.Font) GridData(org.eclipse.swt.layout.GridData) Resource(org.eclipse.swt.graphics.Resource) Shell(org.eclipse.swt.widgets.Shell) E4Workbench(org.eclipse.e4.ui.internal.workbench.E4Workbench) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) Monitor(org.eclipse.swt.widgets.Monitor) MContext(org.eclipse.e4.ui.model.application.ui.MContext) MUILabel(org.eclipse.e4.ui.model.application.ui.MUILabel) MTrimBar(org.eclipse.e4.ui.model.application.ui.basic.MTrimBar) IPresentationEngine(org.eclipse.e4.ui.workbench.IPresentationEngine) WidgetElement(org.eclipse.e4.ui.css.swt.dom.WidgetElement) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) ShellListener(org.eclipse.swt.events.ShellListener) Dialog(org.eclipse.jface.dialogs.Dialog) LabelProvider.createTextProvider(org.eclipse.jface.viewers.LabelProvider.createTextProvider) IEventBroker(org.eclipse.e4.core.services.events.IEventBroker) Menu(org.eclipse.swt.widgets.Menu) Event(org.osgi.service.event.Event) Collections(java.util.Collections) Control(org.eclipse.swt.widgets.Control) Shell(org.eclipse.swt.widgets.Shell) Widget(org.eclipse.swt.widgets.Widget) MContext(org.eclipse.e4.ui.model.application.ui.MContext) ControlListener(org.eclipse.swt.events.ControlListener) MUIElement(org.eclipse.e4.ui.model.application.ui.MUIElement) ControlEvent(org.eclipse.swt.events.ControlEvent) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) MApplication(org.eclipse.e4.ui.model.application.MApplication)

Aggregations

ArrayList (java.util.ArrayList)3 List (java.util.List)3 PostConstruct (javax.annotation.PostConstruct)3 Inject (javax.inject.Inject)3 IEclipseContext (org.eclipse.e4.core.contexts.IEclipseContext)3 Optional (org.eclipse.e4.core.di.annotations.Optional)3 UIEventTopic (org.eclipse.e4.ui.di.UIEventTopic)3 MApplication (org.eclipse.e4.ui.model.application.MApplication)3 MPerspective (org.eclipse.e4.ui.model.application.ui.advanced.MPerspective)3 MPart (org.eclipse.e4.ui.model.application.ui.basic.MPart)3 MTrimBar (org.eclipse.e4.ui.model.application.ui.basic.MTrimBar)3 MWindow (org.eclipse.e4.ui.model.application.ui.basic.MWindow)3 EModelService (org.eclipse.e4.ui.workbench.modeling.EModelService)3 Map (java.util.Map)2 Entry (java.util.Map.Entry)2 ContextInjectionFactory (org.eclipse.e4.core.contexts.ContextInjectionFactory)2 MMenu (org.eclipse.e4.ui.model.application.ui.menu.MMenu)2 EPartService (org.eclipse.e4.ui.workbench.modeling.EPartService)2 IWindowCloseHandler (org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler)2 MessageDialog (org.eclipse.jface.dialogs.MessageDialog)2