All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fife.rsta.ui.demo.RSTAUIDemoApp Maven / Gradle / Ivy

package org.fife.rsta.ui.demo;

import java.awt.BorderLayout;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.text.BadLocationException;

import org.fife.rsta.ui.CollapsibleSectionPanel;
//import org.fife.rsta.ui.DocumentMap;
import org.fife.rsta.ui.GoToDialog;
import org.fife.rsta.ui.SizeGripIcon;
import org.fife.rsta.ui.search.FindDialog;
import org.fife.rsta.ui.search.ReplaceDialog;
import org.fife.rsta.ui.search.ReplaceToolBar;
import org.fife.rsta.ui.search.SearchEvent;
import org.fife.rsta.ui.search.SearchListener;
import org.fife.rsta.ui.search.FindToolBar;
import org.fife.ui.rsyntaxtextarea.ErrorStrip;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rtextarea.RTextScrollPane;
import org.fife.ui.rtextarea.SearchContext;
import org.fife.ui.rtextarea.SearchEngine;
import org.fife.ui.rtextarea.SearchResult;


/**
 * An application that demonstrates use of the RSTAUI project.  Please don't
 * take this as good application design; it's just a simple example.

* * Unlike the library itself, this class is public domain. * * @author Robert Futrell * @version 1.0 */ public class RSTAUIDemoApp extends JFrame implements SearchListener { private CollapsibleSectionPanel csp; private RSyntaxTextArea textArea; private FindDialog findDialog; private ReplaceDialog replaceDialog; private FindToolBar findToolBar; private ReplaceToolBar replaceToolBar; private StatusBar statusBar; public RSTAUIDemoApp() { initSearchDialogs(); JPanel contentPane = new JPanel(new BorderLayout()); setContentPane(contentPane); csp = new CollapsibleSectionPanel(); contentPane.add(csp); setJMenuBar(createMenuBar()); textArea = new RSyntaxTextArea(25, 80); textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); textArea.setCodeFoldingEnabled(true); textArea.setMarkOccurrences(true); RTextScrollPane sp = new RTextScrollPane(textArea); csp.add(sp); ErrorStrip errorStrip = new ErrorStrip(textArea); contentPane.add(errorStrip, BorderLayout.LINE_END); //org.fife.rsta.ui.DocumentMap docMap = new org.fife.rsta.ui.DocumentMap(textArea); //contentPane.add(docMap, BorderLayout.LINE_END); statusBar = new StatusBar(); contentPane.add(statusBar, BorderLayout.SOUTH); setTitle("RSTAUI Demo Application"); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setLocationRelativeTo(null); } private void addItem(Action a, ButtonGroup bg, JMenu menu) { JRadioButtonMenuItem item = new JRadioButtonMenuItem(a); bg.add(item); menu.add(item); } private JMenuBar createMenuBar() { JMenuBar mb = new JMenuBar(); JMenu menu = new JMenu("Search"); menu.add(new JMenuItem(new ShowFindDialogAction())); menu.add(new JMenuItem(new ShowReplaceDialogAction())); menu.add(new JMenuItem(new GoToLineAction())); menu.addSeparator(); int ctrl = getToolkit().getMenuShortcutKeyMask(); int shift = InputEvent.SHIFT_MASK; KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F, ctrl|shift); Action a = csp.addBottomComponent(ks, findToolBar); a.putValue(Action.NAME, "Show Find Search Bar"); menu.add(new JMenuItem(a)); ks = KeyStroke.getKeyStroke(KeyEvent.VK_H, ctrl|shift); a = csp.addBottomComponent(ks, replaceToolBar); a.putValue(Action.NAME, "Show Replace Search Bar"); menu.add(new JMenuItem(a)); mb.add(menu); menu = new JMenu("LookAndFeel"); ButtonGroup bg = new ButtonGroup(); LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels(); for (LookAndFeelInfo info : infos) { addItem(new LookAndFeelAction(info), bg, menu); } mb.add(menu); return mb; } @Override public String getSelectedText() { return textArea.getSelectedText(); } /** * Creates our Find and Replace dialogs. */ public void initSearchDialogs() { findDialog = new FindDialog(this, this); replaceDialog = new ReplaceDialog(this, this); // This ties the properties of the two dialogs together (match case, // regex, etc.). SearchContext context = findDialog.getSearchContext(); replaceDialog.setSearchContext(context); // Create tool bars and tie their search contexts together also. findToolBar = new FindToolBar(this); findToolBar.setSearchContext(context); replaceToolBar = new ReplaceToolBar(this); replaceToolBar.setSearchContext(context); } /** * Listens for events from our search dialogs and actually does the dirty * work. */ @Override public void searchEvent(SearchEvent e) { SearchEvent.Type type = e.getType(); SearchContext context = e.getSearchContext(); SearchResult result; switch (type) { default: // Prevent FindBugs warning later case MARK_ALL: result = SearchEngine.markAll(textArea, context); break; case FIND: result = SearchEngine.find(textArea, context); if (!result.wasFound()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); } break; case REPLACE: result = SearchEngine.replace(textArea, context); if (!result.wasFound()) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); } break; case REPLACE_ALL: result = SearchEngine.replaceAll(textArea, context); JOptionPane.showMessageDialog(null, result.getCount() + " occurrences replaced."); break; } String text; if (result.wasFound()) { text = "Text found; occurrences marked: " + result.getMarkedCount(); } else if (type==SearchEvent.Type.MARK_ALL) { if (result.getMarkedCount()>0) { text = "Occurrences marked: " + result.getMarkedCount(); } else { text = ""; } } else { text = "Text not found"; } statusBar.setLabel(text); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } new RSTAUIDemoApp().setVisible(true); }); } /** * Opens the "Go to Line" dialog. */ private class GoToLineAction extends AbstractAction { GoToLineAction() { super("Go To Line..."); int c = getToolkit().getMenuShortcutKeyMask(); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_L, c)); } @Override public void actionPerformed(ActionEvent e) { if (findDialog.isVisible()) { findDialog.setVisible(false); } if (replaceDialog.isVisible()) { replaceDialog.setVisible(false); } GoToDialog dialog = new GoToDialog(RSTAUIDemoApp.this); dialog.setMaxLineNumberAllowed(textArea.getLineCount()); dialog.setVisible(true); int line = dialog.getLineNumber(); if (line>0) { try { textArea.setCaretPosition(textArea.getLineStartOffset(line-1)); } catch (BadLocationException ble) { // Never happens UIManager.getLookAndFeel().provideErrorFeedback(textArea); ble.printStackTrace(); } } } } /** * Changes the Look and Feel. */ private class LookAndFeelAction extends AbstractAction { private LookAndFeelInfo info; LookAndFeelAction(LookAndFeelInfo info) { putValue(NAME, info.getName()); this.info = info; } @Override public void actionPerformed(ActionEvent e) { try { UIManager.setLookAndFeel(info.getClassName()); SwingUtilities.updateComponentTreeUI(RSTAUIDemoApp.this); if (findDialog!=null) { findDialog.updateUI(); replaceDialog.updateUI(); } pack(); } catch (RuntimeException re) { throw re; // FindBugs } catch (Exception ex) { ex.printStackTrace(); } } } /** * Shows the Find dialog. */ private class ShowFindDialogAction extends AbstractAction { ShowFindDialogAction() { super("Find..."); int c = getToolkit().getMenuShortcutKeyMask(); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F, c)); } @Override public void actionPerformed(ActionEvent e) { if (replaceDialog.isVisible()) { replaceDialog.setVisible(false); } findDialog.setVisible(true); } } /** * Shows the Replace dialog. */ private class ShowReplaceDialogAction extends AbstractAction { ShowReplaceDialogAction() { super("Replace..."); int c = getToolkit().getMenuShortcutKeyMask(); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_H, c)); } @Override public void actionPerformed(ActionEvent e) { if (findDialog.isVisible()) { findDialog.setVisible(false); } replaceDialog.setVisible(true); } } /** * The status bar for this application. */ private static class StatusBar extends JPanel { private JLabel label; StatusBar() { label = new JLabel("Ready"); setLayout(new BorderLayout()); add(label, BorderLayout.LINE_START); add(new JLabel(new SizeGripIcon()), BorderLayout.LINE_END); } void setLabel(String label) { this.label.setText(label); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy