CTabItem cti = findItemForPart(part); if (cti == null) { return; boolean isCssEngineActive = isCssEngineActive(cti); boolean isSelectedTab = cti == cti.getParent().getSelection(); boolean partActivatedEvent = newValue instanceof MPlaceholder; part.getTags().remove(CSSConstants.CSS_CONTENT_CHANGE_CLASS); if (!isSelectedTab) { addHighlight(part, cti, isCssEngineActive); removeHighlight(part, cti, isCssEngineActive); setCSSInfo(part, cti); reapplyStyles(cti.getParent()); updateBusyStateNoCss(cti, newValue, oldValue);
/** * Creates a view menu for the given part in the contained tab folder. * * @param part * the part that should have its view menu created * @param ctf * the containing tab folder */ public void setupMenuButton(MPart part, CTabFolder ctf) { MMenu viewMenu = getViewMenu(part); // View menu (if any) if (viewMenu != null && hasVisibleMenuItems(viewMenu, part)) { showMenuButton(part, ctf, viewMenu); } else { // hide the menu's TB ToolBar menuTB = getViewMenuTB(ctf); if (menuTB != null) { menuTB.dispose(); } } }
@Override public Object createWidget(MUIElement element, Object parent) { if (!(element instanceof MPartStack) || !(parent instanceof Composite)) return null; MPartStack pStack = (MPartStack) element; Composite parentComposite = (Composite) parent; // Ensure that all rendered PartStacks have an Id if (element.getElementId() == null || element.getElementId().length() == 0) { String generatedId = "PartStack@" + Integer.toHexString(element.hashCode()); //$NON-NLS-1$ element.setElementId(generatedId); } int styleOverride = getStyleOverride(pStack); int style = styleOverride == -1 ? SWT.BORDER : styleOverride; final CTabFolder tabFolder = new CTabFolder(parentComposite, style); tabFolder.setMRUVisible(getMRUValue(tabFolder)); // Adjust the minimum chars based on the location int location = modelService.getElementLocation(element); if ((location & EModelService.IN_SHARED_AREA) != 0) { tabFolder.setMinimumCharacters(MIN_EDITOR_CHARS); tabFolder.setUnselectedCloseVisible(true); } else { tabFolder.setMinimumCharacters(MIN_VIEW_CHARS); tabFolder.setUnselectedCloseVisible(false); } bindWidget(element, tabFolder); // ?? Do we need this ? // Add a composite to manage the view's TB and Menu addTopRight(tabFolder); return tabFolder; }
private void updatePartTab(Event event, MPart part) { String attName = (String) event.getProperty(UIEvents.EventTags.ATTNAME); Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE); // Is the part directly under the stack? MElementContainer<MUIElement> parent = part.getParent(); if (parent != null && parent.getRenderer() == StackRenderer.this) { CTabItem cti = findItemForPart(part, parent); if (cti != null) { updateTab(cti, part, attName, newValue); } return; } // Do we have any stacks with place holders for the element // that's changed? Set<MPlaceholder> refs = renderedMap.get(part); if (refs != null) { for (MPlaceholder ref : refs) { MElementContainer<MUIElement> refParent = ref.getParent(); if (refParent.getRenderer() instanceof StackRenderer) { CTabItem cti = findItemForPart(ref, refParent); if (cti != null) { updateTab(cti, part, attName, newValue); } } } } }
List<CTabItem> getItemsToSet(MPart part) { List<CTabItem> itemsToSet = new ArrayList<>(); MUIElement partParent = part.getParent(); if (partParent instanceof MPartStack) { addItemToSet(itemsToSet, part); } else if (partParent instanceof MPartSashContainer) { MElementContainer<MUIElement> parentParent = partParent.getParent(); if (parentParent instanceof MPart) { MPart parentParentMPart = (MPart) parentParent; addItemToSet(itemsToSet, parentParentMPart); } } else if (part.getCurSharedRef() != null) { MWindow topWin = modelService.getTopLevelWindowFor(part); List<MPlaceholder> partRefs = modelService.findElements(topWin, part.getElementId(), MPlaceholder.class); for (MPlaceholder ref : partRefs) { CTabItem item = findItemForPart(ref, null); if (item != null) { itemsToSet.add(item); } } } return itemsToSet; }
CTabItem tabItem = findItemForPart(element, stack); if (tabItem != null) { if (element.getWidget() != null && tabItem.getControl() != element.getWidget()) return; updateMRUValue(tabFolder); int createFlags = SWT.NONE; if (part != null && isClosable(part)) { createFlags |= SWT.CLOSE; int index = Math.min(calcIndexFor(stack, element), tabFolder.getItemCount()); tabItem = new CTabItem(tabFolder, createFlags, index); tabItem.setText(getLabel(part, part.getLocalizedLabel())); tabItem.setImage(getImage(part)); String toolTip = getToolTip(part); if (toolTip == null) toolTip = part.getLocalizedTooltip(); tabItem.setToolTipText(getToolTip(toolTip)); if (element.getWidget() != null) {
CTabItem cti = findItemForPart(element, stack); if (cti != null) { if (element.getWidget() != null if (part != null && isClosable(part)) { createFlags |= SWT.CLOSE; int index = Math.min(calcIndexFor(stack, element), ctf.getItemCount()); cti = new CTabItem(ctf, createFlags, index); cti.setText(getLabel(part, part.getLocalizedLabel())); cti.setImage(getImage(part)); cti.setToolTipText(part.getLocalizedTooltip()); if (element.getWidget() != null) {
final CTabFolder tabFolder = (CTabFolder) getParentWidget(element); CTabItem tabItem = findItemForPart(element, null); if (tabItem == null) { createTab(element.getParent(), element); tabItem = findItemForPart(element, element.getParent()); adjustTopRight(tabFolder);
protected void showTab(MUIElement element) { super.showTab(element); // an invisible element won't have the correct widget hierarchy if (!element.isVisible()) { return; } final CTabFolder ctf = (CTabFolder) getParentWidget(element); CTabItem cti = findItemForPart(element, null); if (cti == null) { createTab(element.getParent(), element); cti = findItemForPart(element, element.getParent()); } Control ctrl = (Control) element.getWidget(); if (ctrl != null && ctrl.getParent() != ctf) { ctrl.setParent(ctf); cti.setControl(ctrl); } else if (element.getWidget() == null) { Control tabCtrl = (Control) renderer.createGui(element); cti.setControl(tabCtrl); } ignoreTabSelChanges = true; ctf.setSelection(cti); ignoreTabSelChanges = false; // Clear out the current Top Right info MPart part = (MPart) ((element instanceof MPart) ? element : ((MPlaceholder) element).getRef()); adjustTR(ctf, part); }
public void handleEvent(Event event) { Object element = event.getProperty(UIEvents.EventTags.ELEMENT); Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE); Object oldValue = event.getProperty(UIEvents.EventTags.OLD_VALUE); if (!validateElement(element) || !validateValues(oldValue, newValue)) { return; } MPart part = newValue instanceof MPlaceholder ? (MPart) ((MPlaceholder) newValue) .getRef() : (MPart) element; CTabItem cti = findItemForPart(part); if (cti == null) { return; } if (CSSConstants.CSS_CONTENT_CHANGE_CLASS.equals(newValue)) { part.getTags().remove(CSSConstants.CSS_CONTENT_CHANGE_CLASS); if (cti != cti.getParent().getSelection()) { part.getTags().add(CSSConstants.CSS_HIGHLIGHTED_CLASS); } } else if (newValue instanceof MPlaceholder // part gets active && part.getTags().contains( CSSConstants.CSS_HIGHLIGHTED_CLASS)) { part.getTags().remove(CSSConstants.CSS_HIGHLIGHTED_CLASS); } setCSSInfo(part, cti); reapplyStyles(cti.getParent()); }
private void addItemToSet(List<CTabItem> itemsToSet, MPart parentParent) { CTabItem item = findItemForPart(parentParent); if (item != null) { itemsToSet.add(item); } }
public Object createWidget(MUIElement element, Object parent) { if (!(element instanceof MPartStack) || !(parent instanceof Composite)) return null; Composite parentComposite = (Composite) parent; // Ensure that all rendered PartStacks have an Id if (element.getElementId() == null || element.getElementId().length() == 0) { String generatedId = "PartStack@" + Integer.toHexString(element.hashCode()); //$NON-NLS-1$ element.setElementId(generatedId); } // TBD: need to define attributes to handle this final CTabFolder ctf = new CTabFolder(parentComposite, SWT.BORDER); ctf.setMRUVisible(getInitialMRUValue(ctf)); // Adjust the minimum chars based on the location int location = modelService.getElementLocation(element); if ((location & EModelService.IN_SHARED_AREA) != 0) { ctf.setMinimumCharacters(MIN_EDITOR_CHARS); ctf.setUnselectedCloseVisible(true); } else { ctf.setMinimumCharacters(MIN_VIEW_CHARS); ctf.setUnselectedCloseVisible(false); } bindWidget(element, ctf); // ?? Do we need this ? // Add a composite to manage the view's TB and Menu addTopRight(ctf); return ctf; }
MMenu viewMenu = getViewMenu(part); boolean needsMenu = viewMenu != null && hasVisibleMenuItems(viewMenu, part); adjusting = false; updateMRUValue(tabFolder);
@Override public void hideChild(MElementContainer<MUIElement> parentElement, MUIElement child) { super.hideChild(parentElement, child); CTabFolder tabFolder = (CTabFolder) parentElement.getWidget(); if (tabFolder == null) return; // Check if we have to reset the currently active child for the stack CTabItem tabItem = findItemForPart(child, parentElement); if (tabItem == tabFolder.getSelection()) { // If we're the only part we need to clear the top right... if (tabFolder.getItemCount() == 1) { adjustTopRight(tabFolder); } } // find the 'stale' tab for this element and dispose it if (tabItem != null && !tabItem.isDisposed()) { tabItem.setControl(null); tabItem.dispose(); } }
/** * * Detaches the currently selected part * * @param menu */ private void detachActivePart(final Menu menu) { MPart selectedPart = (MPart) menu.getData(STACK_SELECTED_PART); CTabItem cti = findItemForPart(selectedPart); if (cti == null || cti.getParent() == null) { return; } CTabFolder parent = cti.getParent(); EModelService modelService = getContextForParent(selectedPart).get(EModelService.class); Rectangle bounds = parent.getBounds(); Point display = parent.toDisplay(bounds.x, bounds.y); modelService.detach(selectedPart, display.x, display.y, bounds.width, bounds.height); }
/** * Handles changes in tags * * @param event */ @Inject @Optional void subscribeTopicTagsChanged(@UIEventTopic(UIEvents.ApplicationElement.TOPIC_TAGS) Event event) { if (tabStateHandler == null) { tabStateHandler = new TabStateHandler(); } tabStateHandler.handleEvent(event); Object changedObj = event.getProperty(EventTags.ELEMENT); if (!(changedObj instanceof MPart)) return; final MPart part = (MPart) changedObj; CTabItem item = findItemForPart(part); if (item == null || item.isDisposed()) return; if (UIEvents.isADD(event)) { if (UIEvents.contains(event, UIEvents.EventTags.NEW_VALUE, IPresentationEngine.ADORNMENT_PIN)) { item.setImage(getImage(part)); } } else if (UIEvents.isREMOVE(event)) { if (UIEvents.contains(event, UIEvents.EventTags.OLD_VALUE, IPresentationEngine.ADORNMENT_PIN)) { item.setImage(getImage(part)); } } }
CTabItem cti = findItemForPart(child, parentElement); if (cti != null && !cti.isDisposed()) { cti.setControl(null); clearTR(ctf); } else { if (child instanceof MPlaceholder) {
MMenu menuModel = StackRenderer.getViewMenu(model); if (menuModel != null) { showStandaloneViewMenu(event, model, menuModel, partContainer);
uiElement = ((MPlaceholder) uiElement).getRef(); if (uiElement instanceof MPart) activate((MPart) uiElement); ele = ((MPlaceholder) ele).getRef(); if (ele instanceof MPart) activate((MPart) ele); })); MPart tabPart = (MPart) ((uiElement instanceof MPart) ? uiElement : ((MPlaceholder) uiElement).getRef()); openMenuFor(tabPart, tabFolder, absolutePoint); tabFolder.addControlListener(ControlListener.controlResizedAdapter(e -> updateMRUValue(tabFolder)));
@Inject @Optional void subscribeTopicChildrenChanged(@UIEventTopic(UIEvents.ElementContainer.TOPIC_CHILDREN) Event event) { Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT); // only interested in changes to toolbars if (!(changedObj instanceof MToolBar)) { return; } MUIElement container = modelService.getContainer((MUIElement) changedObj); // check if this is a part's toolbar if (container instanceof MPart) { MElementContainer<?> parent = ((MPart) container).getParent(); // only relayout if this part is the selected element and we // actually rendered this element if (parent instanceof MPartStack && parent.getSelectedElement() == container && parent.getRenderer() == StackRenderer.this) { Object widget = parent.getWidget(); if (widget instanceof CTabFolder) { adjustTopRight((CTabFolder) widget); } } } }