annotate dwtexamples/texteditor/TextEditor.d @ 65:a84ba4d1820f

restructure the dsss.conf and resources
author Frank Benoit <benoit@tionex.de>
date Fri, 11 Apr 2008 21:15:36 +0200
parents 7c3196948c7f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
7 *
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
8 * Contributors:
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
10 * Port to the D programming language:
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
11 * Thomas Graber <d4rkdragon@gmail.com>
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
12 *******************************************************************************/
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
13 module dwtexamples.texteditor.TextEditor;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
14
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
15 import dwt.DWT;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
16 import dwt.custom.ExtendedModifyEvent;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
17 import dwt.custom.ExtendedModifyListener;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
18 import dwt.custom.StyleRange;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
19 import dwt.custom.StyledText;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
20 import dwt.events.DisposeEvent;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
21 import dwt.events.DisposeListener;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
22 import dwt.events.SelectionAdapter;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
23 import dwt.events.SelectionEvent;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
24 import dwt.graphics.Color;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
25 import dwt.graphics.Font;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
26 import dwt.graphics.FontData;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
27 import dwt.graphics.Point;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
28 import dwt.graphics.RGB;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
29 import dwt.layout.GridData;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
30 import dwt.layout.GridLayout;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
31 import dwt.widgets.Display;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
32 import dwt.widgets.FontDialog;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
33 import dwt.widgets.Menu;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
34 import dwt.widgets.MenuItem;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
35 import dwt.widgets.Shell;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
36 import dwt.widgets.ToolBar;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
37 import dwt.widgets.ToolItem;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
38 import dwt.widgets.Widget;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
39 import dwt.dwthelper.ResourceBundle;
34
7c3196948c7f missing import
Frank Benoit <benoit@tionex.de>
parents: 20
diff changeset
40 import dwt.dwthelper.utils;
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
41
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
42 import tango.util.collection.ArraySeq;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
43
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
44 import dwtexamples.texteditor.Images;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
45
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
46 version( JIVE ){
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
47 import jive.stacktrace;
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
48 }
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
49
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
50 /**
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
51 */
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
52 public class TextEditor {
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
53 Shell shell;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
54 ToolBar toolBar;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
55 StyledText text;
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
56 Images images;
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
57 alias ArraySeq!(StyleRange) StyleCache;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
58 StyleCache cachedStyles;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
59
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
60 Color RED = null;
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
61 Color BLUE = null;
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
62 Color GREEN = null;
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
63 Font font = null;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
64 ToolItem boldButton, italicButton, underlineButton, strikeoutButton;
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
65
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
66 //string resources
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
67 static ResourceBundle resources;
65
a84ba4d1820f restructure the dsss.conf and resources
Frank Benoit <benoit@tionex.de>
parents: 34
diff changeset
68 private static const char[] resourceData = import( "dwtexamples.texteditor.examples_texteditor.properties" );
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
69
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
70 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
71 * static ctor
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
72 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
73 static this()
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
74 {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
75 resources = ResourceBundle.getBundleFromData( resourceData );
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
76 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
77
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
78 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
79 * ctor
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
80 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
81 this() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
82 images = new Images();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
83 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
84
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
85 /*
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
86 * creates edit menu
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
87 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
88 Menu createEditMenu() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
89 Menu bar = shell.getMenuBar ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
90 Menu menu = new Menu (bar);
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
91
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
92 MenuItem item = new MenuItem (menu, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
93 item.setText (resources.getString("Cut_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
94 item.setAccelerator(DWT.MOD1 + 'X');
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
95 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
96 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
97 handleCutCopy();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
98 text.cut();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
99 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
100 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
101 item = new MenuItem (menu, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
102 item.setText (resources.getString("Copy_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
103 item.setAccelerator(DWT.MOD1 + 'C');
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
104 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
105 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
106 handleCutCopy();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
107 text.copy();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
108 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
109 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
110 item = new MenuItem (menu, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
111 item.setText (resources.getString("Paste_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
112 item.setAccelerator(DWT.MOD1 + 'V');
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
113 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
114 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
115 text.paste();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
116 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
117 });
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
118 new MenuItem (menu, DWT.SEPARATOR);
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
119 item = new MenuItem (menu, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
120 item.setText (resources.getString("Font_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
121 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
122 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
123 setFont();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
124 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
125 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
126 return menu;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
127 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
128
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
129 /*
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
130 * creates file menu
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
131 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
132 Menu createFileMenu() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
133 Menu bar = shell.getMenuBar ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
134 Menu menu = new Menu (bar);
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
135
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
136 MenuItem item = new MenuItem (menu, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
137 item.setText (resources.getString("Exit_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
138 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
139 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
140 shell.close ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
141 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
142 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
143
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
144 return menu;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
145 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
146
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
147 /*
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
148 * Set a style
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
149 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
150 void setStyle(Widget widget) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
151 Point sel = text.getSelectionRange();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
152 if ((sel is null) || (sel.y is 0)) return;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
153 StyleRange style;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
154 for (int i = sel.x; i<sel.x+sel.y; i++) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
155 StyleRange range = text.getStyleRangeAtOffset(i);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
156 if (range !is null) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
157 style = cast(StyleRange)range.clone();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
158 style.start = i;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
159 style.length = 1;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
160 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
161 style = new StyleRange(i, 1, null, null, DWT.NORMAL);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
162 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
163 if (widget is boldButton) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
164 style.fontStyle ^= DWT.BOLD;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
165 } else if (widget is italicButton) {
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
166 style.fontStyle ^= DWT.ITALIC;
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
167 } else if (widget is underlineButton) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
168 style.underline = !style.underline;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
169 } else if (widget is strikeoutButton) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
170 style.strikeout = !style.strikeout;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
171 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
172 text.setStyleRange(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
173 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
174 text.setSelectionRange(sel.x + sel.y, 0);
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
175 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
176
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
177 /*
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
178 * Clear all style data for the selected text.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
179 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
180 void clear() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
181 Point sel = text.getSelectionRange();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
182 if (sel.y !is 0) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
183 StyleRange style;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
184 style = new StyleRange(sel.x, sel.y, null, null, DWT.NORMAL);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
185 text.setStyleRange(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
186 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
187 text.setSelectionRange(sel.x + sel.y, 0);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
188 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
189
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
190 /*
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
191 * Set the foreground color for the selected text.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
192 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
193 void fgColor(Color fg) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
194 Point sel = text.getSelectionRange();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
195 if ((sel is null) || (sel.y is 0)) return;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
196 StyleRange style, range;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
197 for (int i = sel.x; i<sel.x+sel.y; i++) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
198 range = text.getStyleRangeAtOffset(i);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
199 if (range !is null) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
200 style = cast(StyleRange)range.clone();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
201 style.start = i;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
202 style.length = 1;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
203 style.foreground = fg;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
204 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
205 style = new StyleRange (i, 1, fg, null, DWT.NORMAL);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
206 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
207 text.setStyleRange(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
208 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
209 text.setSelectionRange(sel.x + sel.y, 0);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
210 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
211
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
212 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
213 * creates menu bar
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
214 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
215 void createMenuBar () {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
216 Menu bar = new Menu (shell, DWT.BAR);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
217 shell.setMenuBar (bar);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
218
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
219 MenuItem fileItem = new MenuItem (bar, DWT.CASCADE);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
220 fileItem.setText (resources.getString("File_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
221 fileItem.setMenu (createFileMenu ());
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
222
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
223 MenuItem editItem = new MenuItem (bar, DWT.CASCADE);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
224 editItem.setText (resources.getString("Edit_menuitem"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
225 editItem.setMenu (createEditMenu ());
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
226 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
227
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
228 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
229 * creates shell
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
230 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
231 void createShell (Display display) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
232 shell = new Shell (display);
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
233 shell.setText (resources.getString("Window_title"));
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
234 images.loadAll (display);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
235 GridLayout layout = new GridLayout();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
236 layout.numColumns = 1;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
237 shell.setLayout(layout);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
238 shell.addDisposeListener (new class() DisposeListener {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
239 public void widgetDisposed (DisposeEvent e) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
240 if (font !is null) font.dispose();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
241 images.freeAll ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
242 RED.dispose();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
243 GREEN.dispose();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
244 BLUE.dispose();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
245 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
246 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
247 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
248
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
249 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
250 * creates styled text widget
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
251 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
252 void createStyledText() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
253 initializeColors();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
254 text = new StyledText (shell, DWT.BORDER | DWT.MULTI | DWT.V_SCROLL | DWT.H_SCROLL);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
255 GridData spec = new GridData();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
256 spec.horizontalAlignment = GridData.FILL;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
257 spec.grabExcessHorizontalSpace = true;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
258 spec.verticalAlignment = GridData.FILL;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
259 spec.grabExcessVerticalSpace = true;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
260 text.setLayoutData(spec);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
261 text.addExtendedModifyListener(new class() ExtendedModifyListener {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
262 public void modifyText(ExtendedModifyEvent e) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
263 handleExtendedModify(e);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
264 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
265 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
266 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
267
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
268 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
269 * creates tool bar
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
270 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
271 void createToolBar() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
272 toolBar = new ToolBar(shell, DWT.NONE);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
273 SelectionAdapter listener = new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
274 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
275 setStyle (event.widget);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
276 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
277 };
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
278 boldButton = new ToolItem(toolBar, DWT.CHECK);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
279 boldButton.setImage(images.Bold);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
280 boldButton.setToolTipText(resources.getString("Bold"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
281 boldButton.addSelectionListener(listener);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
282 italicButton = new ToolItem(toolBar, DWT.CHECK);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
283 italicButton.setImage(images.Italic);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
284 italicButton.setToolTipText(resources.getString("Italic"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
285 italicButton.addSelectionListener(listener);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
286 underlineButton = new ToolItem(toolBar, DWT.CHECK);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
287 underlineButton.setImage(images.Underline);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
288 underlineButton.setToolTipText(resources.getString("Underline"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
289 underlineButton.addSelectionListener(listener);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
290 strikeoutButton = new ToolItem(toolBar, DWT.CHECK);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
291 strikeoutButton.setImage(images.Strikeout);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
292 strikeoutButton.setToolTipText(resources.getString("Strikeout"));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
293 strikeoutButton.addSelectionListener(listener);
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
294
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
295 ToolItem item = new ToolItem(toolBar, DWT.SEPARATOR);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
296 item = new ToolItem(toolBar, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
297 item.setImage(images.Red);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
298 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
299 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
300 fgColor(RED);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
301 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
302 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
303 item = new ToolItem(toolBar, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
304 item.setImage(images.Green);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
305 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
306 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
307 fgColor(GREEN);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
308 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
309 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
310 item = new ToolItem(toolBar, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
311 item.setImage(images.Blue);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
312 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
313 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
314 fgColor(BLUE);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
315 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
316 });
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
317 item = new ToolItem(toolBar, DWT.SEPARATOR);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
318 item = new ToolItem(toolBar, DWT.PUSH);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
319 item.setImage(images.Erase);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
320 item.addSelectionListener(new class() SelectionAdapter {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
321 public void widgetSelected(SelectionEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
322 clear();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
323 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
324 });
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
325 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
326
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
327 /*
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
328 * Cache the style information for text that has been cut or copied.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
329 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
330 void handleCutCopy() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
331 // Save the cut/copied style info so that during paste we will maintain
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
332 // the style information. Cut/copied text is put in the clipboard in
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
333 // RTF format, but is not pasted in RTF format. The other way to
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
334 // handle the pasting of styles would be to access the Clipboard directly and
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
335 // parse the RTF text.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
336 cachedStyles = new StyleCache();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
337 Point sel = text.getSelectionRange();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
338 int startX = sel.x;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
339 for (int i=sel.x; i<=sel.x+sel.y-1; i++) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
340 StyleRange style = text.getStyleRangeAtOffset(i);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
341 if (style !is null) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
342 style.start = style.start - startX;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
343 if (cachedStyles.toArray().length > 0) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
344 StyleRange lastStyle = cachedStyles.tail();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
345 if (lastStyle.similarTo(style) && lastStyle.start + lastStyle.length is style.start) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
346 lastStyle.length++;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
347 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
348 cachedStyles.append(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
349 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
350 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
351 cachedStyles.append(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
352 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
353 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
354 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
355 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
356
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
357 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
358 * handle modify
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
359 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
360 void handleExtendedModify(ExtendedModifyEvent event) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
361 if (event.length is 0) return;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
362 StyleRange style;
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
363 //PORTING event.length is char count, but it needs to decide on codepoint count
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
364 auto cont = text.getTextRange(event.start, event.length);
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
365 if ( codepointCount(cont) is 1 || cont == text.getLineDelimiter()) {
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
366 // Have the new text take on the style of the text to its right (during
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
367 // typing) if no style information is active.
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
368 int caretOffset = text.getCaretOffset();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
369 style = null;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
370 if (caretOffset < text.getCharCount()) style = text.getStyleRangeAtOffset(caretOffset);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
371 if (style !is null) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
372 style = cast(StyleRange) style.clone ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
373 style.start = event.start;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
374 style.length = event.length;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
375 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
376 style = new StyleRange(event.start, event.length, null, null, DWT.NORMAL);
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
377 }
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
378 if (boldButton.getSelection()) style.fontStyle |= DWT.BOLD;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
379 if (italicButton.getSelection()) style.fontStyle |= DWT.ITALIC;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
380 style.underline = underlineButton.getSelection();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
381 style.strikeout = strikeoutButton.getSelection();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
382 if (!style.isUnstyled()) text.setStyleRange(style);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
383 } else {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
384 // paste occurring, have text take on the styles it had when it was
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
385 // cut/copied
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
386 foreach (style; cachedStyles) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
387 StyleRange newStyle = cast(StyleRange)style.clone();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
388 newStyle.start = style.start + event.start;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
389 text.setStyleRange(newStyle);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
390 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
391 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
392 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
393
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
394 /*
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
395 * opens the shell
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
396 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
397 public Shell open (Display display) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
398 createShell (display);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
399 createMenuBar ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
400 createToolBar ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
401 createStyledText ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
402 shell.setSize(500, 300);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
403 shell.open ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
404 return shell;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
405 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
406
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
407 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
408 * set the font for styled text widget
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
409 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
410 void setFont() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
411 FontDialog fontDialog = new FontDialog(shell);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
412 fontDialog.setFontList((text.getFont()).getFontData());
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
413 FontData fontData = fontDialog.open();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
414 if (fontData !is null) {
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
415 Font newFont = new Font(shell.getDisplay(), fontData);
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
416 text.setFont(newFont);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
417 if (font !is null) font.dispose();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
418 font = newFont;
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
419 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
420 }
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
421
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
422 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
423 * initialize the colors
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
424 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
425 void initializeColors() {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
426 Display display = Display.getDefault();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
427 RED = new Color (display, new RGB(255,0,0));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
428 BLUE = new Color (display, new RGB(0,0,255));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
429 GREEN = new Color (display, new RGB(0,255,0));
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
430 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
431 }
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
432
20
bfdfcd1c8f28 Fix: utf8 awareness
Frank Benoit <benoit@tionex.de>
parents: 16
diff changeset
433 /*
16
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
434 * main function
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
435 */
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
436 public void main (char[][] args) {
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
437 Display display = new Display ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
438 TextEditor example = new TextEditor ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
439 Shell shell = example.open (display);
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
440 while (!shell.isDisposed ())
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
441 if (!display.readAndDispatch ()) display.sleep ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
442 display.dispose ();
f9c0133912fc adding texteditor example
Thomas Graber <d4rkdragon@gmail.com>
parents:
diff changeset
443 }