package org.xmind.cathy.internal.renderer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.resource.ResourceManager; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; import org.xmind.cathy.internal.CathyPlugin; import org.xmind.cathy.internal.WorkbenchMessages; import org.xmind.ui.internal.utils.CommandUtils; import org.xmind.ui.resources.ColorUtils; public class XStackRenderer extends StackRenderer { private ResourceManager resources; private Composite nullContent; @Override public Object createWidget(MUIElement element, Object parent) { final CTabFolder ctf = (CTabFolder) super.createWidget(element, parent); resources = new LocalResourceManager(JFaceResources.getResources(), ctf); nullContent = createNullContentTipArea(ctf); nullContent.moveBelow(null); ctf.addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent e) { nullContent.moveBelow(null); } }); ctf.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { nullContent.setBounds(ctf.getClientArea()); } @Override public void controlMoved(ControlEvent e) { nullContent.setBounds(ctf.getClientArea()); } }); return ctf; } private Composite createNullContentTipArea(CTabFolder parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setBackground( (Color) resources.get(ColorUtils.toDescriptor("#ffffff"))); //$NON-NLS-1$ GridLayout layout = new GridLayout(1, false); composite.setLayout(layout); Composite centerArea = new Composite(composite, SWT.NONE); centerArea.setBackground(composite.getBackground()); centerArea.setLayoutData( new GridData(SWT.CENTER, SWT.CENTER, true, true)); GridLayout layout2 = new GridLayout(1, false); layout2.marginWidth = 0; layout2.marginHeight = 0; layout2.verticalSpacing = 40; centerArea.setLayout(layout2); createTopArea(centerArea); createBottomArea(centerArea); return composite; } private void createTopArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setBackground(parent.getBackground()); composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); GridLayout layout = new GridLayout(1, false); layout.marginWidth = 0; layout.marginHeight = 0; layout.verticalSpacing = 20; composite.setLayout(layout); Label imageLabel = new Label(composite, SWT.NONE); imageLabel.setBackground(composite.getBackground()); imageLabel.setLayoutData( new GridData(SWT.CENTER, SWT.CENTER, true, false)); imageLabel.setImage((Image) resources.get( CathyPlugin.imageDescriptorFromPlugin(CathyPlugin.PLUGIN_ID, "icons/views/null_editor_tip.png"))); //$NON-NLS-1$ } private void createBottomArea(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText(WorkbenchMessages.XStackRenderer_BottomArea_Add_button); GridData layoutData = new GridData(SWT.CENTER, SWT.CENTER, false, false); layoutData.widthHint = Math.max(128, button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x + 10); button.setLayoutData(layoutData); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { CommandUtils.executeCommand("org.xmind.ui.command.newWorkbook", //$NON-NLS-1$ PlatformUI.getWorkbench().getActiveWorkbenchWindow()); } }); } }