Uses 2805K of libraries. Click here for Pure Java version (1333L/9K/34K).
1 | !7 |
2 | |
3 | lib 1013041 // RSyntaxTextArea |
4 | lib 1013047 // AutoComplete |
5 | lib 1013048 // RSTAUI |
6 | |
7 | import javax.swing.UIManager.LookAndFeelInfo; |
8 | |
9 | import org.fife.rsta.ui.CollapsibleSectionPanel; |
10 | //import org.fife.rsta.ui.DocumentMap; |
11 | import org.fife.rsta.ui.GoToDialog; |
12 | import org.fife.rsta.ui.SizeGripIcon; |
13 | import org.fife.rsta.ui.search.FindDialog; |
14 | import org.fife.rsta.ui.search.ReplaceDialog; |
15 | import org.fife.rsta.ui.search.ReplaceToolBar; |
16 | import org.fife.rsta.ui.search.SearchEvent; |
17 | import org.fife.rsta.ui.search.SearchListener; |
18 | import org.fife.rsta.ui.search.FindToolBar; |
19 | import org.fife.ui.rsyntaxtextarea.ErrorStrip; |
20 | import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; |
21 | import org.fife.ui.rsyntaxtextarea.SyntaxConstants; |
22 | import org.fife.ui.rtextarea.RTextScrollPane; |
23 | import org.fife.ui.rtextarea.SearchContext; |
24 | import org.fife.ui.rtextarea.SearchEngine; |
25 | import org.fife.ui.rtextarea.SearchResult; |
26 | |
27 | p { |
28 | rsyntaxTextArea_fixNumPad(); |
29 | new RSTAUIDemoApp().setVisible(true); |
30 | } |
31 | |
32 | |
33 | /** |
34 | * An application that demonstrates use of the RSTAUI project. Please don't |
35 | * take this as good application design; it's just a simple example.<p> |
36 | * |
37 | * Unlike the library itself, this class is public domain. |
38 | * |
39 | * @author Robert Futrell |
40 | * @version 1.0 |
41 | */ |
42 | sclass RSTAUIDemoApp extends JFrame implements SearchListener { |
43 | |
44 | private CollapsibleSectionPanel csp; |
45 | private RSyntaxTextArea textArea; |
46 | private FindDialog findDialog; |
47 | private ReplaceDialog replaceDialog; |
48 | private FindToolBar findToolBar; |
49 | private ReplaceToolBar replaceToolBar; |
50 | private StatusBar statusBar; |
51 | |
52 | |
53 | public RSTAUIDemoApp() { |
54 | |
55 | initSearchDialogs(); |
56 | |
57 | JPanel contentPane = new JPanel(new BorderLayout()); |
58 | setContentPane(contentPane); |
59 | csp = new CollapsibleSectionPanel(); |
60 | contentPane.add(csp); |
61 | |
62 | setJMenuBar(createMenuBar()); |
63 | |
64 | textArea = new RSyntaxTextArea(25, 80); |
65 | textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); |
66 | textArea.setCodeFoldingEnabled(true); |
67 | textArea.setMarkOccurrences(true); |
68 | RTextScrollPane sp = new RTextScrollPane(textArea); |
69 | csp.add(sp); |
70 | |
71 | ErrorStrip errorStrip = new ErrorStrip(textArea); |
72 | contentPane.add(errorStrip, BorderLayout.LINE_END); |
73 | //org.fife.rsta.ui.DocumentMap docMap = new org.fife.rsta.ui.DocumentMap(textArea); |
74 | //contentPane.add(docMap, BorderLayout.LINE_END); |
75 | |
76 | statusBar = new StatusBar(); |
77 | contentPane.add(statusBar, BorderLayout.SOUTH); |
78 | |
79 | setTitle("RSTAUI Demo Application"); |
80 | setDefaultCloseOperation(EXIT_ON_CLOSE); |
81 | pack(); |
82 | setLocationRelativeTo(null); |
83 | |
84 | } |
85 | |
86 | |
87 | private void addItem(Action a, ButtonGroup bg, JMenu menu) { |
88 | JRadioButtonMenuItem item = new JRadioButtonMenuItem(a); |
89 | bg.add(item); |
90 | menu.add(item); |
91 | } |
92 | |
93 | |
94 | private JMenuBar createMenuBar() { |
95 | |
96 | JMenuBar mb = new JMenuBar(); |
97 | JMenu menu = new JMenu("Search"); |
98 | menu.add(new JMenuItem(new ShowFindDialogAction())); |
99 | menu.add(new JMenuItem(new ShowReplaceDialogAction())); |
100 | menu.add(new JMenuItem(new GoToLineAction())); |
101 | menu.addSeparator(); |
102 | |
103 | int ctrl = getToolkit().getMenuShortcutKeyMask(); |
104 | int shift = InputEvent.SHIFT_MASK; |
105 | KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F, ctrl|shift); |
106 | Action a = csp.addBottomComponent(ks, findToolBar); |
107 | a.putValue(Action.NAME, "Show Find Search Bar"); |
108 | menu.add(new JMenuItem(a)); |
109 | ks = KeyStroke.getKeyStroke(KeyEvent.VK_H, ctrl|shift); |
110 | a = csp.addBottomComponent(ks, replaceToolBar); |
111 | a.putValue(Action.NAME, "Show Replace Search Bar"); |
112 | menu.add(new JMenuItem(a)); |
113 | |
114 | mb.add(menu); |
115 | |
116 | menu = new JMenu("LookAndFeel"); |
117 | ButtonGroup bg = new ButtonGroup(); |
118 | LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels(); |
119 | for (int i=0; i<infos.length; i++) { |
120 | addItem(new LookAndFeelAction(infos[i]), bg, menu); |
121 | } |
122 | mb.add(menu); |
123 | |
124 | return mb; |
125 | |
126 | } |
127 | |
128 | |
129 | @Override |
130 | public String getSelectedText() { |
131 | return textArea.getSelectedText(); |
132 | } |
133 | |
134 | |
135 | /** |
136 | * Creates our Find and Replace dialogs. |
137 | */ |
138 | public void initSearchDialogs() { |
139 | |
140 | findDialog = new FindDialog(this, this); |
141 | replaceDialog = new ReplaceDialog(this, this); |
142 | |
143 | // This ties the properties of the two dialogs together (match case, |
144 | // regex, etc.). |
145 | SearchContext context = findDialog.getSearchContext(); |
146 | replaceDialog.setSearchContext(context); |
147 | |
148 | // Create tool bars and tie their search contexts together also. |
149 | findToolBar = new FindToolBar(this); |
150 | findToolBar.setSearchContext(context); |
151 | replaceToolBar = new ReplaceToolBar(this); |
152 | replaceToolBar.setSearchContext(context); |
153 | |
154 | } |
155 | |
156 | |
157 | /** |
158 | * Listens for events from our search dialogs and actually does the dirty |
159 | * work. |
160 | */ |
161 | @Override |
162 | public void searchEvent(SearchEvent e) { |
163 | |
164 | SearchEvent.Type type = e.getType(); |
165 | SearchContext context = e.getSearchContext(); |
166 | SearchResult result = null; |
167 | |
168 | switch (type) { |
169 | default: // Prevent FindBugs warning later |
170 | case MARK_ALL: |
171 | result = SearchEngine.markAll(textArea, context); |
172 | break; |
173 | case FIND: |
174 | result = SearchEngine.find(textArea, context); |
175 | if (!result.wasFound()) { |
176 | UIManager.getLookAndFeel().provideErrorFeedback(textArea); |
177 | } |
178 | break; |
179 | case REPLACE: |
180 | result = SearchEngine.replace(textArea, context); |
181 | if (!result.wasFound()) { |
182 | UIManager.getLookAndFeel().provideErrorFeedback(textArea); |
183 | } |
184 | break; |
185 | case REPLACE_ALL: |
186 | result = SearchEngine.replaceAll(textArea, context); |
187 | JOptionPane.showMessageDialog(null, result.getCount() + |
188 | " occurrences replaced."); |
189 | break; |
190 | } |
191 | |
192 | String text = null; |
193 | if (result.wasFound()) { |
194 | text = "Text found; occurrences marked: " + result.getMarkedCount(); |
195 | } |
196 | else if (type==SearchEvent.Type.MARK_ALL) { |
197 | if (result.getMarkedCount()>0) { |
198 | text = "Occurrences marked: " + result.getMarkedCount(); |
199 | } |
200 | else { |
201 | text = ""; |
202 | } |
203 | } |
204 | else { |
205 | text = "Text not found"; |
206 | } |
207 | statusBar.setLabel(text); |
208 | |
209 | } |
210 | |
211 | |
212 | public static void main(String[] args) { |
213 | SwingUtilities.invokeLater(new Runnable() { |
214 | @Override |
215 | public void run() { |
216 | try { |
217 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); |
218 | // UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel"); |
219 | } catch (Exception e) { |
220 | e.printStackTrace(); |
221 | } |
222 | new RSTAUIDemoApp().setVisible(true); |
223 | } |
224 | }); |
225 | } |
226 | |
227 | |
228 | private class GoToLineAction extends AbstractAction { |
229 | |
230 | public GoToLineAction() { |
231 | super("Go To Line..."); |
232 | int c = getToolkit().getMenuShortcutKeyMask(); |
233 | putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_L, c)); |
234 | } |
235 | |
236 | @Override |
237 | public void actionPerformed(ActionEvent e) { |
238 | if (findDialog.isVisible()) { |
239 | findDialog.setVisible(false); |
240 | } |
241 | if (replaceDialog.isVisible()) { |
242 | replaceDialog.setVisible(false); |
243 | } |
244 | GoToDialog dialog = new GoToDialog(RSTAUIDemoApp.this); |
245 | dialog.setMaxLineNumberAllowed(textArea.getLineCount()); |
246 | dialog.setVisible(true); |
247 | int line = dialog.getLineNumber(); |
248 | if (line>0) { |
249 | try { |
250 | textArea.setCaretPosition(textArea.getLineStartOffset(line-1)); |
251 | } catch (BadLocationException ble) { // Never happens |
252 | UIManager.getLookAndFeel().provideErrorFeedback(textArea); |
253 | ble.printStackTrace(); |
254 | } |
255 | } |
256 | } |
257 | |
258 | } |
259 | |
260 | |
261 | private class LookAndFeelAction extends AbstractAction { |
262 | |
263 | private LookAndFeelInfo info; |
264 | |
265 | public LookAndFeelAction(LookAndFeelInfo info) { |
266 | putValue(NAME, info.getName()); |
267 | this.info = info; |
268 | } |
269 | |
270 | @Override |
271 | public void actionPerformed(ActionEvent e) { |
272 | try { |
273 | UIManager.setLookAndFeel(info.getClassName()); |
274 | SwingUtilities.updateComponentTreeUI(RSTAUIDemoApp.this); |
275 | if (findDialog!=null) { |
276 | findDialog.updateUI(); |
277 | replaceDialog.updateUI(); |
278 | } |
279 | pack(); |
280 | } catch (RuntimeException re) { |
281 | throw re; // FindBugs |
282 | } catch (Exception ex) { |
283 | ex.printStackTrace(); |
284 | } |
285 | } |
286 | } |
287 | |
288 | |
289 | private class ShowFindDialogAction extends AbstractAction { |
290 | |
291 | public ShowFindDialogAction() { |
292 | super("Find..."); |
293 | int c = getToolkit().getMenuShortcutKeyMask(); |
294 | putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F, c)); |
295 | } |
296 | |
297 | @Override |
298 | public void actionPerformed(ActionEvent e) { |
299 | if (replaceDialog.isVisible()) { |
300 | replaceDialog.setVisible(false); |
301 | } |
302 | findDialog.setVisible(true); |
303 | } |
304 | |
305 | } |
306 | |
307 | |
308 | private class ShowReplaceDialogAction extends AbstractAction { |
309 | |
310 | public ShowReplaceDialogAction() { |
311 | super("Replace..."); |
312 | int c = getToolkit().getMenuShortcutKeyMask(); |
313 | putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_H, c)); |
314 | } |
315 | |
316 | @Override |
317 | public void actionPerformed(ActionEvent e) { |
318 | if (findDialog.isVisible()) { |
319 | findDialog.setVisible(false); |
320 | } |
321 | replaceDialog.setVisible(true); |
322 | } |
323 | |
324 | } |
325 | |
326 | |
327 | private static class StatusBar extends JPanel { |
328 | |
329 | private JLabel label; |
330 | |
331 | public StatusBar() { |
332 | label = new JLabel("Ready"); |
333 | setLayout(new BorderLayout()); |
334 | add(label, BorderLayout.LINE_START); |
335 | add(new JLabel(new SizeGripIcon()), BorderLayout.LINE_END); |
336 | } |
337 | |
338 | public void setLabel(String label) { |
339 | this.label.setText(label); |
340 | } |
341 | |
342 | } |
343 | |
344 | |
345 | } |
Began life as a copy of #1013049
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1013050 |
Snippet name: | Test RSTAUI (RSyntaxTextArea + dialogs) without Substance (OK) |
Eternal ID of this version: | #1013050/4 |
Text MD5: | 2ae64cca4bea72ccb2bb5f3c6353cce6 |
Transpilation MD5: | 6146660108d9510c98074eea622c8423 |
Author: | stefan |
Category: | javax / gui |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2017-12-22 16:54:42 |
Source code size: | 9268 bytes / 345 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 426 / 544 |
Version history: | 3 change(s) |
Referenced in: | [show references] |