Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

348
LINES

< > BotCompany Repo | #1003942 // Test RSTAUI (RSyntaxTextArea + dialogs!) - WORKS

JavaX source code [tags: use-pretranspiled] - run with: x30.jar

Uses 1314K of libraries. Click here for Pure Java version (369L/3K/11K).

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

download  show line numbers  debug dex  old transpilations   

Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1003942
Snippet name: Test RSTAUI (RSyntaxTextArea + dialogs!) - WORKS
Eternal ID of this version: #1003942/1
Text MD5: c5aad58995f6141fe26eacb1bb18f0b2
Transpilation MD5: d0425874a158803c14557a80905a514f
Author: stefan
Category: javax / talking robots
Type: JavaX source code
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2016-07-31 16:06:49
Source code size: 9350 bytes / 348 lines
Pitched / IR pitched: No / No
Views / Downloads: 808 / 1097
Referenced in: [show references]