annotate dwtx/novocode/ishell/internal/TitleBar.d @ 192:c3583c6ec027

Added missing default cases for switch statements
author Frank Benoit <benoit@tionex.de>
date Mon, 03 Nov 2008 22:52:26 +0100
parents df4e66472aff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
1 /*******************************************************************************
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
2 * Copyright (c) 2005 Stefan Zeiger and others.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
3 * All rights reserved. This program and the accompanying materials
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
5 * which accompanies this distribution, and is available at
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
6 * http://www.novocode.com/legal/epl-v10.html
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
7 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
8 * Contributors:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
10 *******************************************************************************/
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
11
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
12 module dwtx.novocode.ishell.internal.TitleBar;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
13
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
14 import dwt.dwthelper.utils;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
15 import dwt.dwthelper.Runnable;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
16 import dwtx.dwtxhelper.Timer;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
17 import dwtx.dwtxhelper.TimerTask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
18
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
19 import dwt.DWT;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
20 import dwt.graphics.Color;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
21 import dwt.graphics.Font;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
22 import dwt.graphics.FontData;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
23 import dwt.graphics.GC;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
24 import dwt.graphics.Image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
25 import dwt.graphics.ImageData;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
26 import dwt.graphics.PaletteData;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
27 import dwt.graphics.Point;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
28 import dwt.graphics.Rectangle;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
29 import dwt.graphics.RGB;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
30 import dwt.widgets.Canvas;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
31 import dwt.widgets.Display;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
32 import dwt.widgets.Event;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
33 import dwt.widgets.Listener;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
34 import dwt.widgets.Menu;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
35 import dwt.widgets.MenuItem;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
36 import dwt.widgets.Shell;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
37
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
38 import dwtx.novocode.ishell.DesktopForm;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
39 import dwtx.novocode.ishell.InternalShell;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
40
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
41 import dwt.dwthelper.utils;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
42
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
43
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
44 /**
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
45 * A title bar for an InternalShell.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
46 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
47 * @author Stefan Zeiger (szeiger@novocode.com)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
48 * @since Jan 21, 2005
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
49 * @version $Id: TitleBar.java 342 2005-07-09 20:37:13 +0000 (Sat, 09 Jul 2005) szeiger $
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
50 */
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
51
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
52 class TitleBar : Canvas
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
53 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
54 private static const long UPDATE_DELAY = 25;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
55 private static const int MINIMUM_GRAB_AREA = 2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
56 private static const String ELLIPSIS = "...";
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
57 private static const int LEFT_PADDING = 2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
58 private static const int RIGHT_PADDING = 2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
59 private static const int IMAGE_SIZE = 16;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
60 private static const int TOOL_SIZE = 14;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
61 private static const int TOP_PADDING = 1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
62 private static const int BOTTOM_PADDING = 1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
63
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
64 private int mouseDownOffsetX, mouseDownOffsetY, snapBackX, snapBackY;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
65 private bool cancelled;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
66 private /**volatile*/ long lastUpdate;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
67 private Timer timer;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
68 private TimerTask timerTask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
69 private InternalShell ishell;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
70 private DesktopForm desktop;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
71 private String text;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
72 private Image image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
73 private bool styleClose, styleMax, styleTool, styleMin;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
74 private Image closeImage, restoreImage, maximizeImage, minimizeImage;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
75 private MenuItem restoreItem, closeItem, maximizeItem;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
76 private Menu defaultPopup;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
77 private Point minGrabSize;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
78 private Shell shell;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
79 private Color gradStartColor, gradEndColor, textColor, inactiveGradStartColor, inactiveGradEndColor, inactiveTextColor;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
80 private Listener activateListener, deactivateListener;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
81
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
82
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
83 this(InternalShell parent, int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
84 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
85 super(parent, checkStyle(style));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
86 this.timer = new Timer(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
87 this.minGrabSize = new Point(MINIMUM_GRAB_AREA, MINIMUM_GRAB_AREA);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
88 this.ishell = parent;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
89 this.desktop = cast(DesktopForm)ishell.getParent();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
90 this.styleClose = (style & DWT.CLOSE) !is 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
91 this.styleMax = (style & DWT.MAX) !is 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
92 this.styleMin = (style & DWT.MIN) !is 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
93 this.styleTool = (style & DWT.TOOL) !is 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
94
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
95 Display display = getDisplay();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
96 shell = getShell();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
97
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
98 gradStartColor = display.getSystemColor(DWT.COLOR_TITLE_BACKGROUND);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
99 gradEndColor = display.getSystemColor(DWT.COLOR_TITLE_BACKGROUND_GRADIENT);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
100 textColor = display.getSystemColor(DWT.COLOR_TITLE_FOREGROUND);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
101 inactiveGradStartColor = display.getSystemColor(DWT.COLOR_TITLE_INACTIVE_BACKGROUND);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
102 inactiveGradEndColor = display.getSystemColor(DWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
103 inactiveTextColor = display.getSystemColor(DWT.COLOR_TITLE_INACTIVE_FOREGROUND);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
104
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
105 GC gc = new GC(this);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
106 int imgHeight = gc.getFontMetrics().getHeight()-1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
107 if(imgHeight%2 is 0) imgHeight--;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
108 gc.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
109
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
110 closeImage = createMenuImage(IMAGE_TYPE_CLOSE, imgHeight);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
111 restoreImage = createMenuImage(IMAGE_TYPE_RESTORE, imgHeight);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
112 maximizeImage = createMenuImage(IMAGE_TYPE_MAXIMIZE, imgHeight);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
113 minimizeImage = createMenuImage(IMAGE_TYPE_MINIMIZE, imgHeight);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
114
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
115 setFont(createTitleFont(getFont(), styleTool));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
116
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
117 defaultPopup = new Menu(this);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
118
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
119 restoreItem = new MenuItem(defaultPopup, DWT.PUSH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
120 restoreItem.setText("&Restore");
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
121 restoreItem.setImage(restoreImage);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
122 restoreItem.addListener(DWT.Selection, dgListener(&restoreListener));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
123
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
124 MenuItem minimizeItem = new MenuItem(defaultPopup, DWT.PUSH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
125 minimizeItem.setText("Mi&nimize");
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
126 minimizeItem.setEnabled(styleMin);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
127 minimizeItem.setImage(minimizeImage);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
128 minimizeItem.addListener(DWT.Selection, dgListener(&minimizeListener));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
129
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
130 maximizeItem = new MenuItem(defaultPopup, DWT.PUSH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
131 maximizeItem.setText("Ma&ximize");
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
132 maximizeItem.setImage(maximizeImage);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
133 maximizeItem.addListener(DWT.Selection, dgListener(&maximizeListener));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
134
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
135 new MenuItem(defaultPopup, DWT.SEPARATOR);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
136
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
137 closeItem = new MenuItem(defaultPopup, DWT.PUSH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
138 closeItem.setText("&Close");
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
139 closeItem.setEnabled(styleClose);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
140 closeItem.setImage(closeImage);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
141 closeItem.addListener(DWT.Selection, dgListener(&closeListener));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
142
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
143 addListener(DWT.Paint, dgListener(&onPaint));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
144 addListener(DWT.MouseDown, dgListener(&onMouseDown));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
145 addListener(DWT.MenuDetect, dgListener(&onMenuDetect));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
146 addListener(DWT.MouseDoubleClick, dgListener(&onMouseDoubleClick));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
147 addListener(DWT.MouseMove, dgListener(&onMouseMove));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
148 addListener(DWT.MouseUp, dgListener(&onMouseUp));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
149
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
150 activateListener = dgListener(&onActivateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
151 deactivateListener = dgListener(&onDeactivateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
152 shell.addListener(DWT.Activate, activateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
153 shell.addListener(DWT.Deactivate, deactivateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
154
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
155 addListener(DWT.Dispose, dgListener(&onDispose));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
156 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
157
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
158
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
159 private void restoreListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
160 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
161 ishell.setMaximized(false);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
162 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
163
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
164
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
165 private void minimizeListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
166 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
167 ishell.setMinimized(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
168 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
169
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
170
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
171 private void maximizeListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
172 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
173 ishell.setMaximized(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
174 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
175
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
176
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
177 private void closeListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
178 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
179 ishell.close();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
180 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
181
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
182
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
183 private void onPaint(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
184 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
185 Rectangle r = getClientArea();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
186 if(r.width is 0 || r.height is 0) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
187
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
188 bool active = (shell is display.getActiveShell() && ishell.isActiveShell());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
189
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
190 GC gc = event.gc;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
191 gc.setForeground(active ? gradStartColor : inactiveGradStartColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
192 gc.setBackground(active ? gradEndColor : inactiveGradEndColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
193 gc.fillGradientRectangle(r.x, r.y, r.width, r.height, false);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
194
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
195 int textLeftPadding = LEFT_PADDING;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
196 if(image !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
197 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
198 Rectangle imageBounds = image.getBounds();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
199 if(imageBounds.width > IMAGE_SIZE || imageBounds.height > IMAGE_SIZE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
200 gc.drawImage(image, 0, 0, imageBounds.width, imageBounds.height, LEFT_PADDING, TOP_PADDING, IMAGE_SIZE, IMAGE_SIZE);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
201 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
202 gc.drawImage(image, LEFT_PADDING + (IMAGE_SIZE-imageBounds.width)/2, (r.height-imageBounds.height)/2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
203 textLeftPadding += IMAGE_SIZE + LEFT_PADDING;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
204 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
205
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
206 if(text !is null && text.length() > 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
207 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
208 gc.setForeground(active ? textColor : inactiveTextColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
209 String s = text;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
210 int availableWidth = r.width - textLeftPadding - RIGHT_PADDING;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
211 if(gc.textExtent(s, DWT.DRAW_TRANSPARENT).x > availableWidth)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
212 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
213 int ellipsisWidth = gc.textExtent(ELLIPSIS, DWT.DRAW_TRANSPARENT).x;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
214 while(s.length() > 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
215 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
216 s = s.substring(0, s.length()-1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
217 if(gc.textExtent(s, DWT.DRAW_TRANSPARENT).x + ellipsisWidth <= availableWidth)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
218 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
219 s ~= ELLIPSIS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
220 break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
221 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
222 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
223 setToolTipText(text);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
224 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
225 else setToolTipText(null);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
226 if(s.length() > 0) gc.drawString(s, textLeftPadding, (r.height-gc.getFontMetrics().getHeight())/2, true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
227 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
228 else setToolTipText(null);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
229 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
230
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
231
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
232 private void onMouseDown(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
233 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
234 if(event.button is 1)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
235 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
236 if(image !is null && event.x < LEFT_PADDING + IMAGE_SIZE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
237 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
238 cancelled = true;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
239 // left-clicking on the image always shows the default popup menu
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
240 instrumentDefaultPopup(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
241 defaultPopup.setLocation(toDisplay(0, getSize().y));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
242 defaultPopup.setVisible(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
243 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
244 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
245 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
246 mouseDownOffsetX = event.x;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
247 mouseDownOffsetY = event.y;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
248 Point p = ishell.getLocation();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
249 snapBackX = p.x;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
250 snapBackY = p.y;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
251 cancelled = false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
252 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
253 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
254 else if(event.button is 3)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
255 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
256 if((event.stateMask & DWT.BUTTON1) !is 0 && snapBackX !is Integer.MIN_VALUE && snapBackY !is Integer.MIN_VALUE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
257 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
258 ishell.setLocation(snapBackX, snapBackY);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
259 snapBackX = Integer.MIN_VALUE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
260 snapBackY = Integer.MIN_VALUE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
261 cancelled = true;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
262 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
263 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
264 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
265 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
266 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
267 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
268
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
269
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
270 private void onMenuDetect(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
271 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
272 event.doit = false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
273 Menu m = getMenu();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
274 if(m is null || m.isDisposed())
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
275 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
276 m = defaultPopup;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
277 instrumentDefaultPopup(false);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
278 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
279 m.setLocation(event.x, event.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
280 m.setVisible(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
281 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
282
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
283
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
284 private void onMouseDoubleClick(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
285 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
286 if(event.button is 1)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
287 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
288 if(image !is null && event.x < LEFT_PADDING + IMAGE_SIZE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
289 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
290 if(styleClose) ishell.close();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
291 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
292 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
293 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
294 if(styleMax) ishell.setMaximized(!ishell.getMaximized());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
295 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
296 cancelled = true;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
297 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
298 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
299
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
300
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
301 private void onMouseMove(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
302 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
303 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0 && !ishell.getMaximized())
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
304 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
305 if(timerTask !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
306 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
307 timerTask.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
308 timerTask = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
309 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
310 long now = System.currentTimeMillis();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
311 if(lastUpdate + UPDATE_DELAY < now)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
312 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
313 performMove(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
314 lastUpdate = now;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
315 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
316 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
317 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
318 timerTask = new class() TimerTask
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
319 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
320 public void run()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
321 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
322 TimerTask executingTask = this;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
323 event.display.asyncExec(new class() Runnable
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
324 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
325 public void run()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
326 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
327 if(executingTask !is timerTask) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
328 performMove(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
329 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
330 });
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
331 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
332 };
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
333 timer.schedule(timerTask, UPDATE_DELAY);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
334 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
335 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
336 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
337
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
338
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
339 private void onMouseUp(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
340 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
341 if(ishell.getMaximized()) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
342 if(image is null || event.x >= LEFT_PADDING + IMAGE_SIZE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
343 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
344 if(timerTask !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
345 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
346 timerTask.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
347 timerTask = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
348 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
349 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
350 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
351 performMove(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
352 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
353 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
354 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
355
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
356
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
357 private void onActivateListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
358 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
359 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
360 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
361
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
362
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
363 private void onDeactivateListener(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
364 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
365 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
366 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
367
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
368
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
369 private void onDispose(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
370 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
371 timer.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
372 shell.removeListener(DWT.Activate, activateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
373 shell.removeListener(DWT.Deactivate, deactivateListener);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
374 closeImage.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
375 maximizeImage.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
376 restoreImage.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
377 minimizeImage.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
378 defaultPopup.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
379 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
380
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
381
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
382 private void performMove(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
383 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
384 Point p = ishell.getLocation();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
385 int newX = p.x + event.x - mouseDownOffsetX;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
386 int newY = p.y + event.y - mouseDownOffsetY;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
387
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
388 // Make sure that the minimum grab area stays visible
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
389 Rectangle deskCA = desktop.getClientArea();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
390 Rectangle bounds = getBounds();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
391 newX = Math.min(Math.max(newX, deskCA.x-bounds.x-bounds.width+MINIMUM_GRAB_AREA), deskCA.x-bounds.x+deskCA.width-minGrabSize.x);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
392 newY = Math.min(Math.max(newY, deskCA.y-bounds.y-bounds.height+MINIMUM_GRAB_AREA), deskCA.y-bounds.y+deskCA.height-MINIMUM_GRAB_AREA);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
393
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
394 if(newX !is p.x || newY !is p.y) ishell.setLocation(newX, newY);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
395 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
396
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
397
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
398 public Point getMinGrabSize()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
399 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
400 return minGrabSize;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
401 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
402
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
403
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
404 public Point computeSize(int wHint, int hHint, bool changed)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
405 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
406 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
407 if(wHint is DWT.DEFAULT) wHint = 50;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
408 if(hHint is DWT.DEFAULT)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
409 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
410 GC gc = new GC(this);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
411 hHint = gc.getFontMetrics().getHeight();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
412 hHint = Math.max(hHint, styleTool ? TOOL_SIZE : IMAGE_SIZE);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
413 hHint += TOP_PADDING + BOTTOM_PADDING;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
414 gc.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
415 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
416 return new Point(wHint, hHint);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
417 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
418
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
419
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
420 private static int checkStyle(int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
421 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
422 //int mask = DWT.SHADOW_IN | DWT.FLAT;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
423 //style &= mask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
424 style = DWT.NO_FOCUS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
425 return style;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
426 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
427
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
428
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
429 public bool setFocus()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
430 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
431 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
432 return false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
433 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
434
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
435
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
436 public bool isReparentable ()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
437 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
438 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
439 return false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
440 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
441
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
442
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
443 public void setText(String text)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
444 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
445 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
446 this.text = text;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
447 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
448 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
449
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
450
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
451 public String getText() { return text; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
452
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
453
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
454 public void setImage(Image image)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
455 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
456 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
457 if(styleTool) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
458 this.image = image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
459 minGrabSize.x = MINIMUM_GRAB_AREA;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
460 if(image !is null) minGrabSize.x += LEFT_PADDING + IMAGE_SIZE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
461 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
462 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
463
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
464
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
465 public Image getImage() { return image; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
466
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
467
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
468 private Font createTitleFont(Font f, bool tool)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
469 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
470 FontData[] fds = f.getFontData();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
471 foreach(fd; fds)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
472 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
473 fd.setStyle(fd.getStyle() | DWT.BOLD);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
474 if(tool) fd.setHeight(cast(int)(fd.getHeight()*0.9));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
475 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
476 return new Font(getDisplay(), fds);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
477 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
478
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
479
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
480 private void instrumentDefaultPopup(bool onImage)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
481 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
482 restoreItem.setEnabled(styleMax && ishell.getMaximized());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
483 maximizeItem.setEnabled(styleMax && !ishell.getMaximized());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
484 MenuItem def = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
485 if(onImage)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
486 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
487 if(styleClose) def = closeItem;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
488 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
489 else if(styleMax)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
490 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
491 def = ishell.getMaximized() ? restoreItem : maximizeItem;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
492 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
493 defaultPopup.setDefaultItem(def);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
494 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
495
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
496
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
497 private static const int IMAGE_TYPE_CLOSE = 1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
498 private static const int IMAGE_TYPE_MAXIMIZE = 2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
499 private static const int IMAGE_TYPE_RESTORE = 3;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
500 private static const int IMAGE_TYPE_MINIMIZE = 4;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
501
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
502
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
503 private Image createMenuImage(int type, int height)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
504 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
505 final Point size = new Point(height, height);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
506 final int imgWidth = height + height/2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
507 final Color fg = getForeground();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
508 final Color white = getDisplay().getSystemColor(DWT.COLOR_WHITE);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
509 final RGB blackRGB = new RGB(0,0,0);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
510
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
511 ImageData id = new ImageData(imgWidth, size.y, 1, new PaletteData([ blackRGB, fg.getRGB() ]));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
512 ImageData maskid = new ImageData(imgWidth, size.y, 1, new PaletteData([ blackRGB, white.getRGB() ]));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
513
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
514 Image img = new Image(getDisplay(), id);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
515 GC gc = new GC(img);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
516 gc.setForeground(fg);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
517 drawMenuImage(gc, size, type);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
518 gc.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
519
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
520 Image maskimg = new Image(getDisplay(), maskid);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
521 gc = new GC(maskimg);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
522 gc.setForeground(white);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
523 drawMenuImage(gc, size, type);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
524 gc.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
525
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
526 Image transp = new Image(getDisplay(), img.getImageData(), maskimg.getImageData());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
527 img.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
528 maskimg.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
529 return transp;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
530 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
531
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
532
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
533 private void drawMenuImage(GC gc, Point size, int type)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
534 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
535 switch(type)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
536 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
537 case IMAGE_TYPE_CLOSE:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
538 gc.drawLine(1, 1, size.x-2, size.y-2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
539 gc.drawLine(2, 1, size.x-2, size.y-3);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
540 gc.drawLine(1, 2, size.x-3, size.y-2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
541 gc.drawLine(1, size.y-2, size.x-2, 1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
542 gc.drawLine(1, size.y-3, size.x-3, 1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
543 gc.drawLine(2, size.y-2, size.x-2, 2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
544 break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
545
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
546 case IMAGE_TYPE_RESTORE:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
547 gc.drawRectangle(0, 4, size.x-4, size.y-6);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
548 gc.drawLine(1, 5, size.x-5, 5);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
549 gc.drawLine(2, 1, size.x-2, 1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
550 gc.drawLine(2, 2, size.x-2, 2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
551 gc.drawPoint(2, 3);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
552 gc.drawLine(size.x-2, 3, size.x-2, size.y-5);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
553 gc.drawPoint(size.x-3, size.y-5);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
554 break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
555
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
556 case IMAGE_TYPE_MAXIMIZE:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
557 gc.drawRectangle(0, 0, size.x-2, size.y-2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
558 gc.drawLine(1, 1, size.x-3, 1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
559 break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
560
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
561 case IMAGE_TYPE_MINIMIZE:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
562 gc.drawLine(1, size.y-2, size.x-4, size.y-2);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
563 gc.drawLine(1, size.y-3, size.x-4, size.y-3);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
564 break;
192
c3583c6ec027 Added missing default cases for switch statements
Frank Benoit <benoit@tionex.de>
parents: 190
diff changeset
565 default:
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
566 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
567 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 189
diff changeset
568 }