/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.font.TextAttribute; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import ilog.views.IlvApplyObject; import ilog.views.IlvGraphic; import ilog.views.IlvGraphicEnumeration; import ilog.views.IlvManager; import ilog.views.IlvManagerView; import ilog.views.IlvPoint; import ilog.views.event.ManagerSelectionChangedEvent; import ilog.views.event.ManagerSelectionListener; import ilog.views.graphic.IlvLabel; import ilog.views.graphic.IlvText; import ilog.views.graphic.IlvTextSelection; import ilog.views.interactor.IlvSelectInteractor; /** * This sample shows how to use the inplace text editor. */ public class TextEditor extends JFrame { IlvManager manager; IlvManagerView mgrview; JComboBox<String> fontSelector; JComboBox<String> colorSelector; boolean blockSelectors = false; public TextEditor() { // Creates the manager. manager = new IlvManager(); Font font = new Font("SansSerif", Font.BOLD, 14); IlvLabel label = new IlvLabel(new IlvPoint(200, 40), "Welcome to inplace text editor test panel!"); label.setFont(font); label.setForeground(Color.blue); manager.addObject(label, false); font = new Font("Arial", Font.ITALIC, 24); label = new IlvLabel(new IlvPoint(200, 80), "I am an IlvLabel. Click on me to edit!"); label.setFont(font); manager.addObject(label, false); font = new Font("SansSerif", Font.CENTER_BASELINE, 15); label = new IlvLabel(new IlvPoint(200, 120), "Sorry, you can not edit me but you can move me;-))"); label.setForeground(Color.green); label.setFont(font); manager.addObject(label, false); manager.setEditable(label, false); font = new Font("SansSerif", Font.CENTER_BASELINE, 18); IlvText text = new IlvText(new IlvPoint(20, 160), "Hi, I am an IlvText. I have several lines.\nYou can click on me and edit me ;-))\nEnjoy..."); text.setWrappingWidth(200); text.setWrappingMode(IlvText.WRAP_WORD); text.setForeground(Color.red); text.setFont(font); text.addLabelAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 51, 56); text.addLabelAttribute(TextAttribute.FONT, new Font("SansSerif", Font.ITALIC | Font.CENTER_BASELINE, 18), 12, 19); text.addLabelAttribute(TextAttribute.FONT, new Font("Serif", Font.ITALIC | Font.CENTER_BASELINE, 18), 28, 35); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.blue, 28, 41); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.black, 43, 46); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.green.darker(), 57, 62); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.yellow.darker(), 63, 67); text.addLabelAttribute(TextAttribute.BACKGROUND, Color.cyan, 67, 71); // text.addLabelAttribute(TextAttribute.STRIKETHROUGH, // TextAttribute.STRIKETHROUGH_ON, // 67, 71); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.cyan.darker(), 80, 81); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.yellow.darker(), 81, 82); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.green.darker(), 82, 83); text.addLabelAttribute(TextAttribute.FOREGROUND, Color.blue, 83, 84); // text.setUnderline(true); // text.setStrikethrough(true); manager.addObject(text, false); font = new Font("SansSerif", Font.BOLD, 24); text = new IlvText(new IlvPoint(220, 160), "I AM AN OUTLINED\nTEXT!"); text.setFont(font); text.setForeground(Color.orange); text.setOutlineColor(Color.blue); text.setOutlineThickness(0); text.setOutlineMode(IlvText.OUTLINE_FRONT); manager.addObject(text, false); font = new Font("SansSerif", Font.BOLD, 24); text = new IlvText(new IlvPoint(220, 220), "I AM AN OUTLINE\nONLY TEXT!"); text.setFont(font); text.setOutlineColor(Color.RED); text.setOutlineThickness(1); text.setOutlineMode(IlvText.OUTLINE_ONLY); manager.addObject(text, false); // Creates a view associated to the manager mgrview = new IlvManagerView(manager); mgrview.setBackground(Color.white); // Install View Interactor IlvSelectInteractor inter = new IlvSelectInteractor(); inter.setOpaqueMove(true); inter.setOpaqueResize(true); mgrview.setInteractor(inter); // Add the manager view: getContentPane().add(mgrview, BorderLayout.CENTER); getContentPane().add(createTopControls(), BorderLayout.NORTH); // Add a listener to the manager that sets the font and color selector back manager.addManagerSelectionListener(new ManagerSelectionListener() { Override public void selectionChanged(ManagerSelectionChangedEvent event) { blockSelectors = true; boolean hasIlvTextSelected = false; IlvManager manager = event.getManager(); IlvGraphicEnumeration e = manager.getSelectedObjects(); while (e.hasMoreElements()) { IlvGraphic g = e.nextElement(); if (g instanceof IlvText) { hasIlvTextSelected = true; break; } } if (fontSelector != null) fontSelector.setEnabled(hasIlvTextSelected); if (colorSelector != null) colorSelector.setEnabled(hasIlvTextSelected); if (fontSelector != null) fontSelector.setSelectedIndex(-1); if (colorSelector != null) colorSelector.setSelectedIndex(-1); blockSelectors = false; } }); } /** * Creates the controls at the top level of the window. */ private JPanel createTopControls() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING)); String[] fitems = new String[] { "SanSerif14", "SanSerif18", "Serif14", "Serif18" }; fontSelector = new JComboBox<String>(fitems); panel.add(new JLabel("Font:")); panel.add(fontSelector); fontSelector.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent event) { if (blockSelectors) return; SuppressWarnings("unchecked") JComboBox<String> comboBox = (JComboBox<String>)event.getSource(); String fontName = (String)comboBox.getSelectedItem(); Font font = null; if (fontName.equals("SanSerif14")) font = new Font("SansSerif", Font.CENTER_BASELINE, 14); else if (fontName.equals("SanSerif18")) font = new Font("SansSerif", Font.CENTER_BASELINE, 18); else if (fontName.equals("Serif14")) font = new Font("SansSerif", Font.CENTER_BASELINE, 14); else if (fontName.equals("Serif18")) font = new Font("SansSerif", Font.CENTER_BASELINE, 18); if (font != null) { IlvGraphicEnumeration e = manager.getSelectedObjects(); while (e.hasMoreElements()) { IlvGraphic g = e.nextElement(); if (g instanceof IlvText) { final IlvText text = (IlvText)g; IlvTextSelection selection = (IlvTextSelection)manager.getSelection(text); final IlvTextSelection.Range r = selection.getRange(); if (!r.isEmpty() && !r.isCollapsed()) { text.getGraphicBag().applyToObject(text, new IlvApplyObject() { Override public void apply(IlvGraphic g, Object arg) { text.addLabelAttribute(TextAttribute.FONT, arg, r.from, r.to); } }, font, true); } } } } } }); String[] citems = new String[] { "Red", "Blue", "Green" }; colorSelector = new JComboBox<String>(citems); panel.add(new JLabel("Color:")); panel.add(colorSelector); colorSelector.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent event) { if (blockSelectors) return; SuppressWarnings("unchecked") JComboBox<String> comboBox = (JComboBox<String>)event.getSource(); String colorName = (String)comboBox.getSelectedItem(); Color color = null; if (colorName.equals("Red")) color = Color.red; else if (colorName.equals("Blue")) color = Color.blue; else if (colorName.equals("Green")) color = Color.green.darker(); if (color != null) { IlvGraphicEnumeration e = manager.getSelectedObjects(); while (e.hasMoreElements()) { IlvGraphic g = e.nextElement(); if (g instanceof IlvText) { final IlvText text = (IlvText)g; IlvTextSelection selection = (IlvTextSelection)manager.getSelection(text); final IlvTextSelection.Range r = selection.getRange(); if (!r.isEmpty() && !r.isCollapsed()) { text.getGraphicBag().applyToObject(text, new IlvApplyObject() { Override public void apply(IlvGraphic g, Object arg) { text.addLabelAttribute(TextAttribute.FOREGROUND, arg, r.from, r.to); } }, color, true); } } } } } }); return panel; } public static void main(String[] args) { // This sample uses JViews Diagrammer features. When deploying an // application that includes this code, you need to be in possession // of a Perforce JViews Diagrammer Deployment license. // IlvProductUtil.DeploymentLicenseRequired( // IlvProductUtil.JViews_Diagrammer_Deployment); // Sun recommends that to put the entire GUI initialization into the // AWT thread SwingUtilities.invokeLater( new Runnable() { Override public void run() { JFrame frame = new TextEditor(); frame.setTitle("JViews Inplace Text Editor Sample"); frame.setSize(450,350); frame.setVisible(true); frame.addWindowListener(new ExitOnWindowClosing()); } }); } static class ExitOnWindowClosing extends WindowAdapter { public ExitOnWindowClosing() {} Override public void windowClosing(WindowEvent e) { System.exit(0); } } }