Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java')
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java628
1 files changed, 314 insertions, 314 deletions
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java
index b48c103f30..b96e27b9f3 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/widgets/SashComposite.java
@@ -1,314 +1,314 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.net4j.util.ui.widgets;
-
-import org.eclipse.net4j.util.event.IListener;
-import org.eclipse.net4j.util.event.INotifier;
-import org.eclipse.net4j.util.event.Notifier;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Sash;
-
-/**
- * @author Eike Stepper
- */
-public abstract class SashComposite extends Composite implements INotifier
-{
- private final SashListener sashListener = new SashListener();
-
- private final Notifier notifier = new Notifier();
-
- private int limit;
-
- private int percent;
-
- private boolean borders;
-
- private boolean vertical;
-
- private Sash sash;
-
- private Control control1;
-
- private Control control2;
-
- private FormData sashData;
-
- private FormData control1Data;
-
- private FormData control2Data;
-
- public SashComposite(Composite parent, int style, int limit, int percent)
- {
- this(parent, style, limit, percent, false);
- }
-
- public SashComposite(Composite parent, int style, int limit, int percent, boolean borders)
- {
- super(parent, style);
- setLayout(new FormLayout());
- this.limit = limit;
- this.percent = percent;
- this.borders = borders;
-
- control1Data = new FormData();
- control1 = borders ? new OneBorderComposite(this)
- {
- @Override
- protected Control createUI(Composite parent)
- {
- return createControl1(parent);
- }
- } : createControl1(this);
-
- control1.setLayoutData(control1Data);
-
- sashData = new FormData();
- sash = createSash(this);
- sash.setLayoutData(sashData);
-
- control2Data = new FormData();
- control2 = borders ? new OneBorderComposite(this)
- {
- @Override
- protected Control createUI(Composite parent)
- {
- return createControl2(parent);
- }
- } : createControl2(this);
-
- control2.setLayoutData(control2Data);
-
- init();
- }
-
- /**
- * @since 2.0
- */
- @Override
- public void dispose()
- {
- sash.removeListener(SWT.Selection, sashListener);
- super.dispose();
- }
-
- /**
- * @since 2.0
- */
- public void addListener(IListener listener)
- {
- notifier.addListener(listener);
- }
-
- /**
- * @since 2.0
- */
- public IListener[] getListeners()
- {
- return notifier.getListeners();
- }
-
- /**
- * @since 2.0
- */
- public boolean hasListeners()
- {
- return notifier.hasListeners();
- }
-
- /**
- * @since 2.0
- */
- public void removeListener(IListener listener)
- {
- notifier.removeListener(listener);
- }
-
- public boolean isVertical()
- {
- return vertical;
- }
-
- public void setVertical(boolean vertical)
- {
- if (this.vertical != vertical)
- {
- this.vertical = vertical;
-
- Sash newSash = createSash(this);
- newSash.moveBelow(control1);
- newSash.setLayoutData(sash.getLayoutData());
-
- sash.removeListener(SWT.Selection, sashListener);
- sash.setLayoutData(null);
- sash.dispose();
- sash = newSash;
-
- init();
- layout();
- IListener[] listeners = notifier.getListeners();
- if (listeners != null)
- {
- notifier.fireEvent(new OrientationChangedEvent(vertical), listeners);
- }
- }
- }
-
- public Sash getSash()
- {
- return sash;
- }
-
- public Control getControl1()
- {
- return borders ? ((OneBorderComposite)control1).getClientControl() : control1;
- }
-
- public Control getControl2()
- {
- return borders ? ((OneBorderComposite)control2).getClientControl() : control2;
- }
-
- protected void init()
- {
- if (borders)
- {
- ((OneBorderComposite)control1).setBorderPosition(SWT.RIGHT);
- ((OneBorderComposite)control2).setBorderPosition(SWT.LEFT);
- }
-
- control1Data.left = new FormAttachment(0, 0);
- control1Data.right = new FormAttachment(sash, 0);
- control1Data.top = new FormAttachment(0, 0);
- control1Data.bottom = new FormAttachment(100, 0);
-
- sashData.left = new FormAttachment(percent, 0);
- sashData.right = null;
- sashData.top = new FormAttachment(0, 0);
- sashData.bottom = new FormAttachment(100, 0);
-
- control2Data.left = new FormAttachment(sash, 0);
- control2Data.right = new FormAttachment(100, 0);
- control2Data.top = new FormAttachment(0, 0);
- control2Data.bottom = new FormAttachment(100, 0);
-
- if (vertical)
- {
- swap();
- }
- }
-
- protected void swap()
- {
- if (borders)
- {
- ((OneBorderComposite)control1).swapBorderPosition();
- ((OneBorderComposite)control2).swapBorderPosition();
- }
-
- swap(control1Data);
- swap(sashData);
- swap(control2Data);
- }
-
- protected void swap(FormData formData)
- {
- FormAttachment tmp1 = formData.left;
- formData.left = formData.top;
- formData.top = tmp1;
-
- FormAttachment tmp2 = formData.right;
- formData.right = formData.bottom;
- formData.bottom = tmp2;
- }
-
- protected Sash createSash(Composite parent)
- {
- Sash sash = new Sash(parent, vertical ? SWT.HORIZONTAL : SWT.VERTICAL);
- sash.addListener(SWT.Selection, sashListener);
- return sash;
- }
-
- protected abstract Control createControl1(Composite parent);
-
- protected abstract Control createControl2(Composite parent);
-
- /**
- * @author Eike Stepper
- * @since 2.0
- */
- public class OrientationChangedEvent extends org.eclipse.net4j.util.event.Event
- {
- private static final long serialVersionUID = 1L;
-
- private boolean vertical;
-
- public OrientationChangedEvent(boolean vertical)
- {
- super(SashComposite.this);
- }
-
- @Override
- public SashComposite getSource()
- {
- return (SashComposite)super.getSource();
- }
-
- public boolean isVertical()
- {
- return vertical;
- }
- }
-
- /**
- * @author Eike Stepper
- */
- private final class SashListener implements Listener
- {
- public SashListener()
- {
- }
-
- public void handleEvent(Event e)
- {
- Rectangle sashRect = sash.getBounds();
- Rectangle shellRect = getClientArea();
- if (!vertical)
- {
- int right = shellRect.width - sashRect.width - limit;
- e.x = Math.max(Math.min(e.x, right), limit);
- if (e.x != sashRect.x)
- {
- sashData.left = new FormAttachment(0, e.x);
- layout();
- }
- }
- else
- {
- int bottom = shellRect.height - sashRect.height - limit;
- e.y = Math.max(Math.min(e.y, bottom), limit);
- if (e.y != sashRect.y)
- {
- sashData.top = new FormAttachment(0, e.y);
- layout();
- }
- }
- }
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.util.ui.widgets;
+
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.event.INotifier;
+import org.eclipse.net4j.util.event.Notifier;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class SashComposite extends Composite implements INotifier
+{
+ private final SashListener sashListener = new SashListener();
+
+ private final Notifier notifier = new Notifier();
+
+ private int limit;
+
+ private int percent;
+
+ private boolean borders;
+
+ private boolean vertical;
+
+ private Sash sash;
+
+ private Control control1;
+
+ private Control control2;
+
+ private FormData sashData;
+
+ private FormData control1Data;
+
+ private FormData control2Data;
+
+ public SashComposite(Composite parent, int style, int limit, int percent)
+ {
+ this(parent, style, limit, percent, false);
+ }
+
+ public SashComposite(Composite parent, int style, int limit, int percent, boolean borders)
+ {
+ super(parent, style);
+ setLayout(new FormLayout());
+ this.limit = limit;
+ this.percent = percent;
+ this.borders = borders;
+
+ control1Data = new FormData();
+ control1 = borders ? new OneBorderComposite(this)
+ {
+ @Override
+ protected Control createUI(Composite parent)
+ {
+ return createControl1(parent);
+ }
+ } : createControl1(this);
+
+ control1.setLayoutData(control1Data);
+
+ sashData = new FormData();
+ sash = createSash(this);
+ sash.setLayoutData(sashData);
+
+ control2Data = new FormData();
+ control2 = borders ? new OneBorderComposite(this)
+ {
+ @Override
+ protected Control createUI(Composite parent)
+ {
+ return createControl2(parent);
+ }
+ } : createControl2(this);
+
+ control2.setLayoutData(control2Data);
+
+ init();
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public void dispose()
+ {
+ sash.removeListener(SWT.Selection, sashListener);
+ super.dispose();
+ }
+
+ /**
+ * @since 2.0
+ */
+ public void addListener(IListener listener)
+ {
+ notifier.addListener(listener);
+ }
+
+ /**
+ * @since 2.0
+ */
+ public IListener[] getListeners()
+ {
+ return notifier.getListeners();
+ }
+
+ /**
+ * @since 2.0
+ */
+ public boolean hasListeners()
+ {
+ return notifier.hasListeners();
+ }
+
+ /**
+ * @since 2.0
+ */
+ public void removeListener(IListener listener)
+ {
+ notifier.removeListener(listener);
+ }
+
+ public boolean isVertical()
+ {
+ return vertical;
+ }
+
+ public void setVertical(boolean vertical)
+ {
+ if (this.vertical != vertical)
+ {
+ this.vertical = vertical;
+
+ Sash newSash = createSash(this);
+ newSash.moveBelow(control1);
+ newSash.setLayoutData(sash.getLayoutData());
+
+ sash.removeListener(SWT.Selection, sashListener);
+ sash.setLayoutData(null);
+ sash.dispose();
+ sash = newSash;
+
+ init();
+ layout();
+ IListener[] listeners = notifier.getListeners();
+ if (listeners != null)
+ {
+ notifier.fireEvent(new OrientationChangedEvent(vertical), listeners);
+ }
+ }
+ }
+
+ public Sash getSash()
+ {
+ return sash;
+ }
+
+ public Control getControl1()
+ {
+ return borders ? ((OneBorderComposite)control1).getClientControl() : control1;
+ }
+
+ public Control getControl2()
+ {
+ return borders ? ((OneBorderComposite)control2).getClientControl() : control2;
+ }
+
+ protected void init()
+ {
+ if (borders)
+ {
+ ((OneBorderComposite)control1).setBorderPosition(SWT.RIGHT);
+ ((OneBorderComposite)control2).setBorderPosition(SWT.LEFT);
+ }
+
+ control1Data.left = new FormAttachment(0, 0);
+ control1Data.right = new FormAttachment(sash, 0);
+ control1Data.top = new FormAttachment(0, 0);
+ control1Data.bottom = new FormAttachment(100, 0);
+
+ sashData.left = new FormAttachment(percent, 0);
+ sashData.right = null;
+ sashData.top = new FormAttachment(0, 0);
+ sashData.bottom = new FormAttachment(100, 0);
+
+ control2Data.left = new FormAttachment(sash, 0);
+ control2Data.right = new FormAttachment(100, 0);
+ control2Data.top = new FormAttachment(0, 0);
+ control2Data.bottom = new FormAttachment(100, 0);
+
+ if (vertical)
+ {
+ swap();
+ }
+ }
+
+ protected void swap()
+ {
+ if (borders)
+ {
+ ((OneBorderComposite)control1).swapBorderPosition();
+ ((OneBorderComposite)control2).swapBorderPosition();
+ }
+
+ swap(control1Data);
+ swap(sashData);
+ swap(control2Data);
+ }
+
+ protected void swap(FormData formData)
+ {
+ FormAttachment tmp1 = formData.left;
+ formData.left = formData.top;
+ formData.top = tmp1;
+
+ FormAttachment tmp2 = formData.right;
+ formData.right = formData.bottom;
+ formData.bottom = tmp2;
+ }
+
+ protected Sash createSash(Composite parent)
+ {
+ Sash sash = new Sash(parent, vertical ? SWT.HORIZONTAL : SWT.VERTICAL);
+ sash.addListener(SWT.Selection, sashListener);
+ return sash;
+ }
+
+ protected abstract Control createControl1(Composite parent);
+
+ protected abstract Control createControl2(Composite parent);
+
+ /**
+ * @author Eike Stepper
+ * @since 2.0
+ */
+ public class OrientationChangedEvent extends org.eclipse.net4j.util.event.Event
+ {
+ private static final long serialVersionUID = 1L;
+
+ private boolean vertical;
+
+ public OrientationChangedEvent(boolean vertical)
+ {
+ super(SashComposite.this);
+ }
+
+ @Override
+ public SashComposite getSource()
+ {
+ return (SashComposite)super.getSource();
+ }
+
+ public boolean isVertical()
+ {
+ return vertical;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class SashListener implements Listener
+ {
+ public SashListener()
+ {
+ }
+
+ public void handleEvent(Event e)
+ {
+ Rectangle sashRect = sash.getBounds();
+ Rectangle shellRect = getClientArea();
+ if (!vertical)
+ {
+ int right = shellRect.width - sashRect.width - limit;
+ e.x = Math.max(Math.min(e.x, right), limit);
+ if (e.x != sashRect.x)
+ {
+ sashData.left = new FormAttachment(0, e.x);
+ layout();
+ }
+ }
+ else
+ {
+ int bottom = shellRect.height - sashRect.height - limit;
+ e.y = Math.max(Math.min(e.y, bottom), limit);
+ if (e.y != sashRect.y)
+ {
+ sashData.top = new FormAttachment(0, e.y);
+ layout();
+ }
+ }
+ }
+ }
+}

Back to the top