Mercurial > projects > dwt-addons
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 |
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 } |