diff dwtx/novocode/ishell/InternalShell.d @ 190:df4e66472aff

novocode line endings, indention
author Frank Benoit <benoit@tionex.de>
date Sun, 26 Oct 2008 15:04:41 +0100
parents 71ca5bcf2307
children
line wrap: on
line diff
--- a/dwtx/novocode/ishell/InternalShell.d	Sun Oct 26 14:57:25 2008 +0100
+++ b/dwtx/novocode/ishell/InternalShell.d	Sun Oct 26 15:04:41 2008 +0100
@@ -1,398 +1,398 @@
-/*******************************************************************************
- * Copyright (c) 2005 Stefan Zeiger 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.novocode.com/legal/epl-v10.html
- *
- * Contributors:
- *     Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
- *******************************************************************************/
-
-module dwtx.novocode.ishell.InternalShell;
-
-import dwt.dwthelper.utils;
-import dwt.DWT;
-import dwt.DWTException;
-import dwt.graphics.Image;
-import dwt.graphics.Point;
-import dwt.graphics.Rectangle;
-import dwt.layout.FormAttachment;
-import dwt.layout.FormData;
-import dwt.layout.FormLayout;
-import dwt.widgets.Composite;
-import dwt.widgets.Control;
-import dwt.widgets.Event;
-import dwt.widgets.Listener;
-import dwt.widgets.Menu;
-
-import dwtx.novocode.SizeBorder;
-import dwtx.novocode.SizeGrip;
-import dwtx.novocode.ishell.DesktopForm;
-import dwtx.novocode.ishell.internal.TitleBar;
-import dwtx.novocode.ishell.internal.TitleBarButton;
-
-
-/**
- * An internal shell which can be placed on a DesktopForm.
- * <p>
- * <dl>
- * <dt><b>Styles:</b></dt>
- * <dd>RESIZE, CLOSE, MAX, ON_TOP, TOOL, NO_RADIO_GROUP</dd>
- * <dt><b>Events:</b></dt>
- * <dd>(none)</dd>
- * </dl>
- * </p>
- *
- * @author Stefan Zeiger (szeiger@novocode.com)
- * @since Jan 21, 2005
- * @version $Id: InternalShell.java 344 2005-07-09 22:37:51 +0000 (Sat, 09 Jul 2005) szeiger $
- */
-
-// [TODO] Support styles NO_TRIM, BORDER, TITLE
-// [TODO] Separate "minimized" from "not visible"
-
-class InternalShell : Composite
-{
-  private static const int BORDER_SIZE = 4;
-
-  private Composite contentPane;
-  private TitleBar titleBar;
-  private SizeGrip sizeGrip;
-  private SizeBorder sizeBorder;
-  private int minWidth = 112;
-  private int minHeight;
-  private DesktopForm desktop;
-  private bool maximized;
-  private Rectangle pluralizedBounds;
-  private int titleHeight;
-  private int style;
-  private TitleBarButton closeButton, maxButton, minButton;
-
-  Control focusControl;
-
-
-  this(DesktopForm parent, int style)
-  {
-    super(parent, checkStyle(style));
-    this.desktop = parent;
-    this.style = style;
-    setBackground(getDisplay().getSystemColor(DWT.COLOR_WIDGET_BACKGROUND));
-    FormLayout layout = new FormLayout();
-    setLayout(layout);
-    FormData fd;
-
-    titleBar = new TitleBar(this, style & (DWT.CLOSE | DWT.RESIZE | DWT.MAX | DWT.TOOL | DWT.MIN));
-    titleHeight = titleBar.computeSize(DWT.DEFAULT, DWT.DEFAULT, true).y;
-
-    Control leftButton = null;
-
-    if((style & (DWT.CLOSE | DWT.MAX | DWT.MIN)) !is 0)
-    {
-      closeButton = new TitleBarButton(this, DWT.CLOSE);
-      if((style & DWT.CLOSE) is 0) closeButton.setEnabled(false);
-      closeButton.addListener(DWT.Selection, dgListener(&closeListener));
-      fd = new FormData(titleHeight, titleHeight);
-      if(leftButton !is null) fd.right = new FormAttachment(leftButton);
-      else fd.right = new FormAttachment(100, -BORDER_SIZE);
-      fd.top = new FormAttachment(0, BORDER_SIZE);
-      closeButton.setLayoutData(fd);
-      leftButton = closeButton;
-
-      if((style & (DWT.MAX|DWT.MIN)) !is 0)
-      {
-        maxButton = new TitleBarButton(this, DWT.MAX);
-        if((style & DWT.MAX) is 0) maxButton.setEnabled(false);
-        maxButton.addListener(DWT.Selection, dgListener(&maximizeListener));
-        fd = new FormData(titleHeight, titleHeight);
-        if(leftButton !is null) fd.right = new FormAttachment(leftButton);
-        else fd.right = new FormAttachment(100, -BORDER_SIZE);
-        fd.top = new FormAttachment(0, BORDER_SIZE);
-        maxButton.setLayoutData(fd);
-        leftButton = maxButton;
-
-        minButton = new TitleBarButton(this, DWT.MIN);
-        if((style & DWT.MIN) is 0) minButton.setEnabled(false);
-        minButton.addListener(DWT.Selection, dgListener(&minimizeListener));
-        fd = new FormData(titleHeight, titleHeight);
-        if(leftButton !is null) fd.right = new FormAttachment(leftButton);
-        else fd.right = new FormAttachment(100, -BORDER_SIZE);
-        fd.top = new FormAttachment(0, BORDER_SIZE);
-        minButton.setLayoutData(fd);
-        leftButton = minButton;
-      }
-    }
-
-    fd = new FormData();
-    fd.left = new FormAttachment(0, BORDER_SIZE);
-    if(leftButton !is null) fd.right = new FormAttachment(leftButton);
-    else fd.right = new FormAttachment(100, -BORDER_SIZE);
-    fd.top = new FormAttachment(0, BORDER_SIZE);
-    titleBar.setLayoutData(fd);
-
-    contentPane = new Composite(this, DWT.NONE);
-    fd = new FormData();
-    fd.left = new FormAttachment(0, BORDER_SIZE);
-    fd.right = new FormAttachment(100, -BORDER_SIZE);
-    fd.top = new FormAttachment(titleBar, 1);
-    fd.bottom = new FormAttachment(100, -BORDER_SIZE);
-    contentPane.setLayoutData(fd);
-
-    sizeBorder = new SizeBorder(this, this, DWT.BORDER);
-    sizeBorder.setBorderWidth(BORDER_SIZE);
-    fd = new FormData();
-    fd.left = new FormAttachment(0);
-    fd.right = new FormAttachment(100);
-    fd.top = new FormAttachment(0);
-    fd.bottom = new FormAttachment(100);
-    sizeBorder.setLayoutData(fd);
-
-    minHeight = titleHeight + 2*BORDER_SIZE;
-    sizeBorder.setMinimumShellSize(minWidth, minHeight);
-    sizeBorder.setCornerSize(titleHeight + BORDER_SIZE);
-    if((style & DWT.RESIZE) is 0) sizeBorder.setEnabled(false);
-
-    setSize(320, 240);
-    setVisible(false);
-
-    desktop.manage(this);
-  }
-
-
-  private void closeListener(Event event)
-  {
-      close();
-  }
-
-
-  private void maximizeListener(Event event)
-  {
-      setMaximized(!maximized);
-  }
-
-
-  private void minimizeListener(Event event)
-  {
-      setMinimized(true);
-  }
-
-
-  private static int checkStyle(int style)
-  {
-    int mask = DWT.NO_RADIO_GROUP;
-    style &= mask;
-    return style;
-  }
-
-
-  public int getStyle()
-  {
-    return style;
-  }
-
-
-  public Composite getContentPane() { return contentPane; }
-
-
-  public void setText(String s) { titleBar.setText(s); }
-
-  public String getText() { return titleBar.getText(); }
-
-
-  public void setCustomMenu(Menu menu) { titleBar.setMenu(menu); }
-
-  public Menu getCustomMenu() { return titleBar.getMenu(); }
-
-
-  public void setImage(Image image) { titleBar.setImage(image); }
-
-  public Image getImage() { return titleBar.getImage(); }
-
-
-  public void createSizeGrip(int style)
-  {
-    checkWidget();
-    if(sizeGrip !is null)
-      throw new DWTException("SizeGrip was already created");
-    if((this.style & DWT.RESIZE) is 0)
-      throw new DWTException("Cannot create SizeGrip for InternalShell without style RESIZE");
-    sizeGrip = new SizeGrip(this, this, style);
-    sizeGrip.setBackground(contentPane.getBackground());
-    sizeGrip.moveAbove(contentPane);
-    FormData fd = new FormData();
-    fd.right = new FormAttachment(100, -BORDER_SIZE);
-    fd.bottom = new FormAttachment(100, -BORDER_SIZE);
-    sizeGrip.setLayoutData(fd);
-    sizeGrip.setMinimumShellSize(minWidth, minHeight);
-    if(isVisible()) layout(true);
-  }
-
-
-  public Point computeSize(int wHint, int hHint, bool changed)
-  {
-    Point p = super.computeSize(wHint, hHint, changed);
-    if(p.x < minWidth) p.x = minWidth;
-    if(p.y < minHeight) p.y = minHeight;
-    return p;
-  }
-
-
-  public void setSize(int width, int height)
-  {
-    if(width < minWidth) width = minWidth;
-    if(height < minHeight) height = minHeight;
-    super.setSize(width, height);
-  }
-
-
-  public void setBounds(int x, int y, int width, int height)
-  {
-    if(width < minWidth) width = minWidth;
-    if(height < minHeight) height = minHeight;
-    super.setBounds(x, y, width, height);
-  }
-
-
-  public void setMinimumSize(int width, int height)
-  {
-    checkWidget();
-    minWidth = width;
-    minHeight = height;
-    sizeGrip.setMinimumShellSize(minWidth, minHeight);
-    sizeBorder.setMinimumShellSize(minWidth, minHeight);
-    Point size = getSize();
-    if(size.x < minWidth || size.y < minHeight)
-      setSize(Math.max(minWidth, size.x), Math.max(minHeight, size.y));
-  }
-
-
-  public void close()
-  {
-    Event event = new Event();
-    notifyListeners(DWT.Close, event);
-    if(event.doit && !isDisposed()) dispose();
-  }
-
-
-  public void open()
-  {
-    desktop.activate(this);
-    setVisible(true);
-    setFocus();
-  }
-
-
-  public void setVisible(bool visible)
-  {
-    if(!visible) desktop.shellVisibilityChanged(this, false);
-    super.setVisible(visible);
-    if(visible) desktop.shellVisibilityChanged(this, true);
-  }
-
-
-  public void setActive()
-  {
-    desktop.activate(this);
-  }
-
-
-  public void setMaximized(bool maximized)
-  {
-    checkWidget();
-    if(this.maximized is maximized) return;
-    setMaximizedWithoutNotification(maximized);
-    desktop.shellMaximizedOrRestored(this, maximized);
-  }
-
-
-  public void setMinimized(bool minimized)
-  {
-    checkWidget();
-    bool wasMaximized = maximized;
-    setVisible(!minimized);
-    maximized = wasMaximized;
-  }
-
-
-  public bool getMinimized()
-  {
-    return getVisible();
-  }
-
-
-  void setMaximizedWithoutNotification(bool maximized)
-  {
-    if(this.maximized is maximized) return;
-    this.maximized = maximized;
-    if(maximized)
-    {
-      pluralizedBounds = getBounds();
-      desktopResized(desktop.getClientArea());
-    }
-    else
-    {
-      setBounds(pluralizedBounds.x,pluralizedBounds.y,pluralizedBounds.width,pluralizedBounds.height);
-    }
-    // Note: This method may be called in a Dispose event for this object
-    if(sizeGrip !is null && !sizeGrip.isDisposed()) sizeGrip.setVisible(!maximized);
-    if(!sizeBorder.isDisposed()) sizeBorder.setEnabled(!maximized && (style & DWT.RESIZE) !is 0);
-    if(maxButton !is null && !maxButton.isDisposed()) maxButton.redraw();
-  }
-
-
-  public bool getMaximized()
-  {
-    checkWidget();
-    return maximized;
-  }
-
-
-  void redrawDecorationsAfterActivityChange()
-  {
-    // Note: This method may be called in a Dispose event for this object
-    if(!titleBar.isDisposed()) titleBar.redraw();
-    if(closeButton !is null && !closeButton.isDisposed()) closeButton.redraw();
-    if(maxButton !is null && !maxButton.isDisposed()) maxButton.redraw();
-    if(minButton !is null && !minButton.isDisposed()) minButton.redraw();
-  }
-
-
-  void desktopResized(Rectangle deskCA)
-  {
-    if(maximized)
-    {
-      int hideTitle = desktop.getShowMaximizedTitle() ? 0 : (titleHeight+1);
-      setBounds(deskCA.x - BORDER_SIZE,
-        deskCA.y - BORDER_SIZE - hideTitle,
-        deskCA.width + 2*BORDER_SIZE,
-        deskCA.height + 2*BORDER_SIZE + hideTitle);
-    }
-    else forceVisibleLocation(deskCA);
-  }
-
-
-  public bool setFocus()
-  {
-    if(focusControl !is null && focusControl !is this && !focusControl.isDisposed())
-      return focusControl.setFocus();
-    return super.setFocus();
-  }
-
-
-  public bool isActiveShell()
-  {
-    return desktop.getActiveShell() is this;
-  }
-
-
-  private void forceVisibleLocation(Rectangle deskCA)
-  {
-    Point p = getLocation();
-    Point minGrabSize = titleBar.getMinGrabSize();
-    int x = p.x, y = p.y;
-    int minX = minGrabSize.x + BORDER_SIZE, minY = minGrabSize.y + BORDER_SIZE;
-    x = Math.min(Math.max(x, deskCA.x+minY), deskCA.x+deskCA.width-minX);
-    y = Math.min(Math.max(y, deskCA.y+minY), deskCA.y+deskCA.height-minY);
-    if(x != p.x || y != p.y) setLocation(x, y);
-  }
-}
+/*******************************************************************************
+ * Copyright (c) 2005 Stefan Zeiger 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.novocode.com/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
+ *******************************************************************************/
+
+module dwtx.novocode.ishell.InternalShell;
+
+import dwt.dwthelper.utils;
+import dwt.DWT;
+import dwt.DWTException;
+import dwt.graphics.Image;
+import dwt.graphics.Point;
+import dwt.graphics.Rectangle;
+import dwt.layout.FormAttachment;
+import dwt.layout.FormData;
+import dwt.layout.FormLayout;
+import dwt.widgets.Composite;
+import dwt.widgets.Control;
+import dwt.widgets.Event;
+import dwt.widgets.Listener;
+import dwt.widgets.Menu;
+
+import dwtx.novocode.SizeBorder;
+import dwtx.novocode.SizeGrip;
+import dwtx.novocode.ishell.DesktopForm;
+import dwtx.novocode.ishell.internal.TitleBar;
+import dwtx.novocode.ishell.internal.TitleBarButton;
+
+
+/**
+ * An internal shell which can be placed on a DesktopForm.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>RESIZE, CLOSE, MAX, ON_TOP, TOOL, NO_RADIO_GROUP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * </p>
+ *
+ * @author Stefan Zeiger (szeiger@novocode.com)
+ * @since Jan 21, 2005
+ * @version $Id: InternalShell.java 344 2005-07-09 22:37:51 +0000 (Sat, 09 Jul 2005) szeiger $
+ */
+
+// [TODO] Support styles NO_TRIM, BORDER, TITLE
+// [TODO] Separate "minimized" from "not visible"
+
+class InternalShell : Composite
+{
+    private static const int BORDER_SIZE = 4;
+
+    private Composite contentPane;
+    private TitleBar titleBar;
+    private SizeGrip sizeGrip;
+    private SizeBorder sizeBorder;
+    private int minWidth = 112;
+    private int minHeight;
+    private DesktopForm desktop;
+    private bool maximized;
+    private Rectangle pluralizedBounds;
+    private int titleHeight;
+    private int style;
+    private TitleBarButton closeButton, maxButton, minButton;
+
+    Control focusControl;
+
+
+    this(DesktopForm parent, int style)
+    {
+        super(parent, checkStyle(style));
+        this.desktop = parent;
+        this.style = style;
+        setBackground(getDisplay().getSystemColor(DWT.COLOR_WIDGET_BACKGROUND));
+        FormLayout layout = new FormLayout();
+        setLayout(layout);
+        FormData fd;
+
+        titleBar = new TitleBar(this, style & (DWT.CLOSE | DWT.RESIZE | DWT.MAX | DWT.TOOL | DWT.MIN));
+        titleHeight = titleBar.computeSize(DWT.DEFAULT, DWT.DEFAULT, true).y;
+
+        Control leftButton = null;
+
+        if((style & (DWT.CLOSE | DWT.MAX | DWT.MIN)) !is 0)
+        {
+            closeButton = new TitleBarButton(this, DWT.CLOSE);
+            if((style & DWT.CLOSE) is 0) closeButton.setEnabled(false);
+            closeButton.addListener(DWT.Selection, dgListener(&closeListener));
+            fd = new FormData(titleHeight, titleHeight);
+            if(leftButton !is null) fd.right = new FormAttachment(leftButton);
+            else fd.right = new FormAttachment(100, -BORDER_SIZE);
+            fd.top = new FormAttachment(0, BORDER_SIZE);
+            closeButton.setLayoutData(fd);
+            leftButton = closeButton;
+
+            if((style & (DWT.MAX|DWT.MIN)) !is 0)
+            {
+                maxButton = new TitleBarButton(this, DWT.MAX);
+                if((style & DWT.MAX) is 0) maxButton.setEnabled(false);
+                maxButton.addListener(DWT.Selection, dgListener(&maximizeListener));
+                fd = new FormData(titleHeight, titleHeight);
+                if(leftButton !is null) fd.right = new FormAttachment(leftButton);
+                else fd.right = new FormAttachment(100, -BORDER_SIZE);
+                fd.top = new FormAttachment(0, BORDER_SIZE);
+                maxButton.setLayoutData(fd);
+                leftButton = maxButton;
+
+                minButton = new TitleBarButton(this, DWT.MIN);
+                if((style & DWT.MIN) is 0) minButton.setEnabled(false);
+                minButton.addListener(DWT.Selection, dgListener(&minimizeListener));
+                fd = new FormData(titleHeight, titleHeight);
+                if(leftButton !is null) fd.right = new FormAttachment(leftButton);
+                else fd.right = new FormAttachment(100, -BORDER_SIZE);
+                fd.top = new FormAttachment(0, BORDER_SIZE);
+                minButton.setLayoutData(fd);
+                leftButton = minButton;
+            }
+        }
+
+        fd = new FormData();
+        fd.left = new FormAttachment(0, BORDER_SIZE);
+        if(leftButton !is null) fd.right = new FormAttachment(leftButton);
+        else fd.right = new FormAttachment(100, -BORDER_SIZE);
+        fd.top = new FormAttachment(0, BORDER_SIZE);
+        titleBar.setLayoutData(fd);
+
+        contentPane = new Composite(this, DWT.NONE);
+        fd = new FormData();
+        fd.left = new FormAttachment(0, BORDER_SIZE);
+        fd.right = new FormAttachment(100, -BORDER_SIZE);
+        fd.top = new FormAttachment(titleBar, 1);
+        fd.bottom = new FormAttachment(100, -BORDER_SIZE);
+        contentPane.setLayoutData(fd);
+
+        sizeBorder = new SizeBorder(this, this, DWT.BORDER);
+        sizeBorder.setBorderWidth(BORDER_SIZE);
+        fd = new FormData();
+        fd.left = new FormAttachment(0);
+        fd.right = new FormAttachment(100);
+        fd.top = new FormAttachment(0);
+        fd.bottom = new FormAttachment(100);
+        sizeBorder.setLayoutData(fd);
+
+        minHeight = titleHeight + 2*BORDER_SIZE;
+        sizeBorder.setMinimumShellSize(minWidth, minHeight);
+        sizeBorder.setCornerSize(titleHeight + BORDER_SIZE);
+        if((style & DWT.RESIZE) is 0) sizeBorder.setEnabled(false);
+
+        setSize(320, 240);
+        setVisible(false);
+
+        desktop.manage(this);
+    }
+
+
+    private void closeListener(Event event)
+    {
+        close();
+    }
+
+
+    private void maximizeListener(Event event)
+    {
+        setMaximized(!maximized);
+    }
+
+
+    private void minimizeListener(Event event)
+    {
+        setMinimized(true);
+    }
+
+
+    private static int checkStyle(int style)
+    {
+        int mask = DWT.NO_RADIO_GROUP;
+        style &= mask;
+        return style;
+    }
+
+
+    public int getStyle()
+    {
+        return style;
+    }
+
+
+    public Composite getContentPane() { return contentPane; }
+
+
+    public void setText(String s) { titleBar.setText(s); }
+
+    public String getText() { return titleBar.getText(); }
+
+
+    public void setCustomMenu(Menu menu) { titleBar.setMenu(menu); }
+
+    public Menu getCustomMenu() { return titleBar.getMenu(); }
+
+
+    public void setImage(Image image) { titleBar.setImage(image); }
+
+    public Image getImage() { return titleBar.getImage(); }
+
+
+    public void createSizeGrip(int style)
+    {
+        checkWidget();
+        if(sizeGrip !is null)
+            throw new DWTException("SizeGrip was already created");
+        if((this.style & DWT.RESIZE) is 0)
+            throw new DWTException("Cannot create SizeGrip for InternalShell without style RESIZE");
+        sizeGrip = new SizeGrip(this, this, style);
+        sizeGrip.setBackground(contentPane.getBackground());
+        sizeGrip.moveAbove(contentPane);
+        FormData fd = new FormData();
+        fd.right = new FormAttachment(100, -BORDER_SIZE);
+        fd.bottom = new FormAttachment(100, -BORDER_SIZE);
+        sizeGrip.setLayoutData(fd);
+        sizeGrip.setMinimumShellSize(minWidth, minHeight);
+        if(isVisible()) layout(true);
+    }
+
+
+    public Point computeSize(int wHint, int hHint, bool changed)
+    {
+        Point p = super.computeSize(wHint, hHint, changed);
+        if(p.x < minWidth) p.x = minWidth;
+        if(p.y < minHeight) p.y = minHeight;
+        return p;
+    }
+
+
+    public void setSize(int width, int height)
+    {
+        if(width < minWidth) width = minWidth;
+        if(height < minHeight) height = minHeight;
+        super.setSize(width, height);
+    }
+
+
+    public void setBounds(int x, int y, int width, int height)
+    {
+        if(width < minWidth) width = minWidth;
+        if(height < minHeight) height = minHeight;
+        super.setBounds(x, y, width, height);
+    }
+
+
+    public void setMinimumSize(int width, int height)
+    {
+        checkWidget();
+        minWidth = width;
+        minHeight = height;
+        sizeGrip.setMinimumShellSize(minWidth, minHeight);
+        sizeBorder.setMinimumShellSize(minWidth, minHeight);
+        Point size = getSize();
+        if(size.x < minWidth || size.y < minHeight)
+            setSize(Math.max(minWidth, size.x), Math.max(minHeight, size.y));
+    }
+
+
+    public void close()
+    {
+        Event event = new Event();
+        notifyListeners(DWT.Close, event);
+        if(event.doit && !isDisposed()) dispose();
+    }
+
+
+    public void open()
+    {
+        desktop.activate(this);
+        setVisible(true);
+        setFocus();
+    }
+
+
+    public void setVisible(bool visible)
+    {
+        if(!visible) desktop.shellVisibilityChanged(this, false);
+        super.setVisible(visible);
+        if(visible) desktop.shellVisibilityChanged(this, true);
+    }
+
+
+    public void setActive()
+    {
+        desktop.activate(this);
+    }
+
+
+    public void setMaximized(bool maximized)
+    {
+        checkWidget();
+        if(this.maximized is maximized) return;
+        setMaximizedWithoutNotification(maximized);
+        desktop.shellMaximizedOrRestored(this, maximized);
+    }
+
+
+    public void setMinimized(bool minimized)
+    {
+        checkWidget();
+        bool wasMaximized = maximized;
+        setVisible(!minimized);
+        maximized = wasMaximized;
+    }
+
+
+    public bool getMinimized()
+    {
+        return getVisible();
+    }
+
+
+    void setMaximizedWithoutNotification(bool maximized)
+    {
+        if(this.maximized is maximized) return;
+        this.maximized = maximized;
+        if(maximized)
+        {
+            pluralizedBounds = getBounds();
+            desktopResized(desktop.getClientArea());
+        }
+        else
+        {
+            setBounds(pluralizedBounds.x,pluralizedBounds.y,pluralizedBounds.width,pluralizedBounds.height);
+        }
+        // Note: This method may be called in a Dispose event for this object
+        if(sizeGrip !is null && !sizeGrip.isDisposed()) sizeGrip.setVisible(!maximized);
+        if(!sizeBorder.isDisposed()) sizeBorder.setEnabled(!maximized && (style & DWT.RESIZE) !is 0);
+        if(maxButton !is null && !maxButton.isDisposed()) maxButton.redraw();
+    }
+
+
+    public bool getMaximized()
+    {
+        checkWidget();
+        return maximized;
+    }
+
+
+    void redrawDecorationsAfterActivityChange()
+    {
+        // Note: This method may be called in a Dispose event for this object
+        if(!titleBar.isDisposed()) titleBar.redraw();
+        if(closeButton !is null && !closeButton.isDisposed()) closeButton.redraw();
+        if(maxButton !is null && !maxButton.isDisposed()) maxButton.redraw();
+        if(minButton !is null && !minButton.isDisposed()) minButton.redraw();
+    }
+
+
+    void desktopResized(Rectangle deskCA)
+    {
+        if(maximized)
+        {
+            int hideTitle = desktop.getShowMaximizedTitle() ? 0 : (titleHeight+1);
+            setBounds(deskCA.x - BORDER_SIZE,
+                    deskCA.y - BORDER_SIZE - hideTitle,
+                    deskCA.width + 2*BORDER_SIZE,
+                    deskCA.height + 2*BORDER_SIZE + hideTitle);
+        }
+        else forceVisibleLocation(deskCA);
+    }
+
+
+    public bool setFocus()
+    {
+        if(focusControl !is null && focusControl !is this && !focusControl.isDisposed())
+            return focusControl.setFocus();
+        return super.setFocus();
+    }
+
+
+    public bool isActiveShell()
+    {
+        return desktop.getActiveShell() is this;
+    }
+
+
+    private void forceVisibleLocation(Rectangle deskCA)
+    {
+        Point p = getLocation();
+        Point minGrabSize = titleBar.getMinGrabSize();
+        int x = p.x, y = p.y;
+        int minX = minGrabSize.x + BORDER_SIZE, minY = minGrabSize.y + BORDER_SIZE;
+        x = Math.min(Math.max(x, deskCA.x+minY), deskCA.x+deskCA.width-minX);
+        y = Math.min(Math.max(y, deskCA.y+minY), deskCA.y+deskCA.height-minY);
+        if(x != p.x || y != p.y) setLocation(x, y);
+    }
+}