| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.util.XReplaceable; |
| import com.sun.star.util.XReplaceDescriptor; |
| import com.sun.star.util.XPropertyReplace; |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.text.XTextDocument; |
| import com.sun.star.script.provider.XScriptContext; |
| |
| int replaceText(searchKey, color, bold) { |
| |
| result = 0; |
| |
| try { |
| // Create an XReplaceable object and an XReplaceDescriptor |
| replaceable = (XReplaceable) |
| UnoRuntime.queryInterface(XReplaceable.class, xTextDocument); |
| |
| descriptor = |
| (XReplaceDescriptor) replaceable.createReplaceDescriptor(); |
| |
| // Gets a XPropertyReplace object for altering the properties |
| // of the replaced text |
| xPropertyReplace = (XPropertyReplace) |
| UnoRuntime.queryInterface(XPropertyReplace.class, descriptor); |
| |
| // Sets the replaced text property fontweight value to Bold or Normal |
| wv = null; |
| if (bold) { |
| wv = new PropertyValue("CharWeight", -1, |
| new Float(com.sun.star.awt.FontWeight.BOLD), |
| com.sun.star.beans.PropertyState.DIRECT_VALUE); |
| } |
| else { |
| wv = new PropertyValue("CharWeight", -1, |
| new Float(com.sun.star.awt.FontWeight.NORMAL), |
| com.sun.star.beans.PropertyState.DIRECT_VALUE); |
| } |
| |
| // Sets the replaced text property color value to RGB color parameter |
| cv = new PropertyValue("CharColor", -1, new Integer(color), |
| com.sun.star.beans.PropertyState.DIRECT_VALUE); |
| |
| // Apply the properties |
| PropertyValue[] props = { cv, wv }; |
| xPropertyReplace.setReplaceAttributes(props); |
| |
| // Only matches whole words and case sensitive |
| descriptor.setPropertyValue("SearchCaseSensitive", new Boolean(true)); |
| descriptor.setPropertyValue("SearchWords", new Boolean(true)); |
| |
| // Replaces all instances of searchKey with new Text properties |
| // and gets the number of instances of the searchKey |
| descriptor.setSearchString(searchKey); |
| descriptor.setReplaceString(searchKey); |
| result = replaceable.replaceAll(descriptor); |
| |
| } |
| catch (Exception e) { |
| } |
| |
| return result; |
| } |
| |
| searchKey = ""; |
| |
| // The XSCRIPTCONTEXT variable is of type XScriptContext and is available to |
| // all BeanShell scripts executed by the Script Framework |
| xTextDocument = (XTextDocument) |
| UnoRuntime.queryInterface(XTextDocument.class, XSCRIPTCONTEXT.getDocument()); |
| |
| // Create a JButton and add an ActionListener |
| // When clicked the value for the searchKey is read and passed to replaceText |
| myListener = new ActionListener() { |
| actionPerformed(ActionEvent e) { |
| searchKey = findTextBox.getText(); |
| |
| if(searchKey.equalsIgnoreCase("")) { |
| JOptionPane.showMessageDialog(null, |
| "No text entered for search", |
| "No text", JOptionPane.INFORMATION_MESSAGE); |
| } |
| else { |
| // highlight the text in red |
| cRed = new Color(255, 0, 0); |
| red = cRed.getRGB(); |
| num = replaceText(searchKey, red, true); |
| |
| if(num > 0) { |
| int response = JOptionPane.showConfirmDialog(null, |
| searchKey + " was found " + num + |
| " times\nDo you wish to keep the text highlighted?", |
| "Confirm highlight", JOptionPane.YES_NO_OPTION, |
| JOptionPane.QUESTION_MESSAGE); |
| |
| if (response == 1) { |
| cBlack = new Color(255, 255, 255); |
| black = cBlack.getRGB(); |
| replaceText(searchKey, black, false); |
| } |
| } |
| else { |
| JOptionPane.showMessageDialog(null, |
| "No matches were found", "Not found", |
| JOptionPane.INFORMATION_MESSAGE); |
| } |
| } |
| } |
| }; |
| |
| |
| exitListener = new ActionListener() { |
| actionPerformed(ActionEvent e) { |
| frame.dispose(); |
| } |
| }; |
| |
| |
| searchButton = new JButton("Highlight"); |
| searchButton.addActionListener(myListener); |
| |
| exitButton = new JButton("Exit"); |
| exitButton.addActionListener(exitListener); |
| |
| buttonPanel = new JPanel(); |
| buttonPanel.setLayout(new FlowLayout()); |
| buttonPanel.add(searchButton); |
| buttonPanel.add(exitButton); |
| |
| |
| // Create a JPanel containing one JTextField for the search text. |
| searchPanel = new JPanel(); |
| searchPanel.setLayout(new FlowLayout()); |
| findTextBox = new JTextField(20); |
| findWhat = new JLabel("Find What: "); |
| searchPanel.add(findWhat); |
| searchPanel.add(findTextBox); |
| |
| // Create frame and add a window listener |
| frame = new JFrame("Highlight Text"); |
| frame.setSize(350,130); |
| frame.setLocation(430,430); |
| frame.setResizable(false); |
| // Add the panel and button to the frame |
| frame.getContentPane().setLayout(new GridLayout(2,1,10,10)); |
| frame.getContentPane().add(searchPanel); |
| frame.getContentPane().add(buttonPanel); |
| |
| frame.setVisible(true); |
| frame.pack(); |