-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathSnippet140.d
More file actions
executable file
·159 lines (147 loc) · 5.43 KB
/
Snippet140.d
File metadata and controls
executable file
·159 lines (147 loc) · 5.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/usr/bin/env dub
/+
dub.sdl:
name "snippet140"
dependency "dwt" path="../../../../../../"
lflags "/subsystem:console:4" platform="x86_omf"
libs \
"atk-1.0" \
"cairo" \
"dl" \
"fontconfig" \
"gdk-x11-2.0" \
"gdk_pixbuf-2.0" \
"glib-2.0" \
"gmodule-2.0" \
"gnomeui-2" \
"gnomevfs-2" \
"gobject-2.0" \
"gthread-2.0" \
"gtk-x11-2.0" \
"pango-1.0" \
"pangocairo-1.0" \
"X11" \
"Xcomposite" \
"Xcursor" \
"Xdamage" \
"Xext" \
"Xfixes" \
"Xi" \
"Xinerama" \
"Xrandr" \
"Xrender" \
"Xtst" \
platform="linux"
+/
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Port to the D programming language:
* Bill Baxter
*******************************************************************************/
module org.eclipse.swt.snippets.Snippet140;
/*
* CoolBar example snippet: drop-down a chevron menu containing hidden tool items
*
* For a list of all SWT example snippets see
* http://www.eclipse.org/swt/snippets/
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.CoolItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import java.lang.all;
version(Tango){
import tango.util.Convert;
} else { // Phobos
import std.conv;
}
void main () {
Menu chevronMenu = null;
auto display = new Display ();
auto shell = new Shell (display);
shell.setLayout(new GridLayout());
auto coolBar = new CoolBar(shell, SWT.FLAT | SWT.BORDER);
coolBar.setLayoutData(new GridData(GridData.FILL_BOTH));
ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT | SWT.WRAP);
int minWidth = 0;
for (int j = 0; j < 5; j++) {
int width = 0;
ToolItem item = new ToolItem(toolBar, SWT.PUSH);
item.setText("B" ~ to!(String)(j));
width = item.getWidth();
/* find the width of the widest tool */
if (width > minWidth) minWidth = width;
}
CoolItem coolItem = new CoolItem(coolBar, SWT.DROP_DOWN);
coolItem.setControl(toolBar);
Point size = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
Point coolSize = coolItem.computeSize (size.x, size.y);
coolItem.setMinimumSize(minWidth, coolSize.y);
coolItem.setPreferredSize(coolSize);
coolItem.setSize(coolSize);
coolItem.addSelectionListener(new class SelectionAdapter {
override
public void widgetSelected(SelectionEvent event) {
if (event.detail == SWT.ARROW) {
CoolItem item = cast(CoolItem) event.widget;
Rectangle itemBounds = item.getBounds ();
Point pt = coolBar.toDisplay(new Point(itemBounds.x, itemBounds.y));
itemBounds.x = pt.x;
itemBounds.y = pt.y;
ToolBar bar = cast(ToolBar) item.getControl ();
ToolItem[] tools = bar.getItems ();
int i = 0;
while (i < tools.length) {
Rectangle toolBounds = tools[i].getBounds ();
pt = bar.toDisplay(new Point(toolBounds.x, toolBounds.y));
toolBounds.x = pt.x;
toolBounds.y = pt.y;
/* Figure out the visible portion of the tool by looking at the
* intersection of the tool bounds with the cool item bounds.
*/
Rectangle intersection = itemBounds.intersection (toolBounds);
/* If the tool is not completely within the cool item bounds, then it
* is partially hidden, and all remaining tools are completely hidden.
*/
if (intersection != toolBounds) break;
i++;
}
/* Create a menu with items for each of the completely hidden buttons. */
if (chevronMenu !is null) chevronMenu.dispose();
chevronMenu = new Menu (coolBar);
for (int j = i; j < tools.length; j++) {
MenuItem menuItem = new MenuItem (chevronMenu, SWT.PUSH);
menuItem.setText (tools[j].getText());
}
/* Drop down the menu below the chevron, with the left edges aligned. */
pt = coolBar.toDisplay(new Point(event.x, event.y));
chevronMenu.setLocation (pt.x, pt.y);
chevronMenu.setVisible (true);
}
}
});
shell.pack();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}