Author: tchemit Date: 2009-12-21 21:11:57 +0100 (Mon, 21 Dec 2009) New Revision: 1692 Added: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSources.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DefaultDemoUIModel.java trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DemoUIModel.java Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoPanel.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTreeHelper.java trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/NumberEditorDemo.jaxx trunk/jaxx-demo/src/main/java/jaxx/demo/fun/Calculator.css trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties Log: add FontSizor widget + ExtremeDatabinding demo + use FontSizor on sources Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoPanel.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoPanel.jaxx 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoPanel.jaxx 2009-12-21 20:11:57 UTC (rev 1692) @@ -22,8 +22,6 @@ <JTabbedPane id='top'> <script><![CDATA[ -import org.apache.commons.io.IOUtils; -import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; protected String[] getSources() { if (getClass() == DemoPanel.class) { @@ -48,20 +46,6 @@ return getLabel() + " Demo"; } -public String loadSource(String filename) { - try { - if (log.isDebugEnabled()) { - log.debug(filename + " from " + getClass()); - } - String result = IOUtils.toString(getClass().getResourceAsStream(filename)); - - return result; - } catch (Exception e) { - log.error("could not load file " + filename, e); - return "could not load file " + filename; - } -} - private void $afterCompleteSetup() { SwingUtilities.invokeLater(new Runnable() { @@ -71,48 +55,20 @@ top.remove(sourceTabs); return; } - for (String extra : getSources()) { - JScrollPane pane = new JScrollPane( - JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - pane.setBorder(null); - //pane.setMinimumSize(jaxx.runtime.SwingUtil.newMinDimension()); - // creation du contenu du fichier - RSyntaxTextArea content = new RSyntaxTextArea(); - if (extra.matches(".*\\.jaxx") || extra.matches(".*\\.xml")){ - content.setSyntaxEditingStyle(RSyntaxTextArea.SYNTAX_STYLE_XML); - } else if (extra.matches(".*\\.java")){ - content.setSyntaxEditingStyle(RSyntaxTextArea.SYNTAX_STYLE_JAVA); - } else if (extra.matches(".*\\.css")){ - content.setSyntaxEditingStyle(RSyntaxTextArea.SYNTAX_STYLE_CSS); - } - content.setFont(content.getFont().deriveFont((float) 11)); - content.setMinimumSize(jaxx.runtime.SwingUtil.newMinDimension()); - content.setEditable(false); - content.setWrapStyleWord(false); - content.setText(loadSource(extra)); - content.setColumns(80); - content.setLineWrap(true); - pane.getViewport().add(content); - content.setCaretPosition(0); - // ajout de l'onglet - sourceTabs.addTab(extra, pane); - int index = sourceTabs.indexOfComponent(pane); - JLabel l = new JLabel(extra); - l.setFont(l.getFont().deriveFont((float) 10)); - sourceTabs.setTabComponentAt(index,l); - } + sourceTabs.init(); } }); } ]]> </script> - <tab title='{getDemoTabTitle()}'> + <tab id='tabDemoPanel' title='{getDemoTabTitle()}'> <JPanel id='demoPanel'/> </tab> - <tab title='Sources'> - <JTabbedPane id='sourceTabs' tabPlacement='{JTabbedPane.BOTTOM}'/> + <tab id='tabDemoSources' tabComponent='{sourceTabs.getSourcesHeader()}'> + <DemoSources id='sourceTabs' + sources='{java.util.Arrays.asList(getSources())}' + incomingClass='{getClass()}'/> </tab> -</JTabbedPane> +</JTabbedPane> \ No newline at end of file Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSources.jaxx (from rev 1686, trunk/jaxx-demo/src/main/java/jaxx/demo/DemoPanel.jaxx) =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSources.jaxx (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSources.jaxx 2009-12-21 20:11:57 UTC (rev 1692) @@ -0,0 +1,64 @@ +<!-- + *##% + JAXX Demo + Copyright (C) 2008 - 2009 CodeLutin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + ##%* +--> +<JPanel layout='{new BorderLayout()}'> + + <script><![CDATA[ +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import jaxx.runtime.swing.FontSizor; + +public void init() { + fontSizor.init(); + handler.init(this); +} + ]]> + </script> + + <JPanel id="sourcesHeader" opaque='false'> + <JLabel text='Sources' opaque='false'/> + <FontSizor id='fontSizor' opaque='false' showFontSize='true' defaultFontSize='10f' fontSize='10f'/> + </JPanel> + + <DemoSourcesHandler id='handler'/> + + <Class id='incomingClass' javaBean='null'/> + + <String id='currentSource' javaBean='null'/> + + <java.util.List id='sources' genericType='String' javaBean='null'/> + + <JTabbedPane id='sourceTabs' + constraints='BorderLayout.CENTER' + tabPlacement='{JTabbedPane.BOTTOM}' + onStateChanged='handler.updateSource(this)'/> + + <RSyntaxTextArea id='editor' + constraints='BorderLayout.SOUTH' + font-size='{fontSizor.getFontSize()}' + text='{handler.getSourceContent(DemoSources.this, getCurrentSource())}' + syntaxEditingStyle='{handler.getSourceEditingStyle(DemoSources.this, getCurrentSource())}' + minimumSize="{jaxx.runtime.SwingUtil.newMinDimension()}" + textAntiAliasHint='{RenderingHints.KEY_ANTIALIASING.toString()}' + editable="false" + wrapStyleWord="false" + columns="80" + lineWrap="true"/> + +</JPanel> \ No newline at end of file Added: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java 2009-12-21 20:11:57 UTC (rev 1692) @@ -0,0 +1,124 @@ +package jaxx.demo; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; + +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +/** + * Created: 21 déc. 2009 + * + * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin + * @version $Revision$ + * <p/> + * Mise a jour: $Date$ par : + * $Author: tchemit $ + */ +public class DemoSourcesHandler { + + /** + * Logger + */ + private static final Log log = LogFactory.getLog(DemoSourcesHandler.class); + + protected Map<String, String> sourcesCache; + + public Map<String, String> getSourcesCache() { + if (sourcesCache == null) { + sourcesCache = new TreeMap<String, String>(); + } + return sourcesCache; + } + + public String getSourceContent(DemoSources ui, String name) { + if (name == null) { + return ""; + } + String result = getSourcesCache().get(name); + if (result == null) { + try { + if (log.isDebugEnabled()) { + log.debug(name + " from " + getClass()); + } + result = IOUtils.toString(ui.getIncomingClass().getResourceAsStream(name)); + if (log.isDebugEnabled()) { + log.debug("source [" + name + "], loaded content =\n" + result); + } + } catch (Exception e) { + log.error("could not load file " + name, e); + result = "could not load file " + name; + } + getSourcesCache().put(name, result); + } + return result; + } + + public String getSourceEditingStyle(DemoSources ui, String source) { + + if (source == null) { + return ""; + } + String s = null; + if (source.matches(".*\\.jaxx") || source.matches(".*\\.xml")) { + s = RSyntaxTextArea.SYNTAX_STYLE_XML; + } else if (source.matches(".*\\.java")) { + s = RSyntaxTextArea.SYNTAX_STYLE_JAVA; + } else if (source.matches(".*\\.css")) { + s = RSyntaxTextArea.SYNTAX_STYLE_CSS; + } + if (log.isInfoEnabled()) { + log.info("source [" + source + "] style = " + s); + } + return s; + } + + public void init(DemoSources ui) { + List<String> sources = ui.getSources(); + if (sources == null) { + return; + } + for (String source : sources) { + + if (log.isInfoEnabled()) { + log.info("adding tab for resource " + source); + } + JScrollPane pane = new JScrollPane( + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + pane.setBorder(null); + // ajout de l'onglet + ui.sourceTabs.addTab(source, pane); + int index = ui.sourceTabs.indexOfComponent(pane); + JLabel l = new JLabel(source); + l.setFont(l.getFont().deriveFont((float) 10)); + ui.sourceTabs.setTabComponentAt(index, l); + } + } + + public void updateSource(DemoSources ui) { + JTabbedPane sourceTabs = ui.getSourceTabs(); + int index = sourceTabs.getSelectedIndex(); + String sourceName = sourceTabs.getTitleAt(index); + + if (log.isInfoEnabled()) { + log.info("new current Source : " + sourceName); + } + // attach editor to correct selected tab and reset it + JScrollPane pane = (JScrollPane) sourceTabs.getComponentAt(index); + pane.getViewport().add(ui.getEditor()); + ui.getEditor().setText(""); + ui.getEditor().setCaretPosition(0); + ui.getEditor().setTextAntiAliasHint(RenderingHints.KEY_ANTIALIASING.toString()); + + // change the current source to release the editor + ui.setCurrentSource(sourceName); + + } + +} Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTreeHelper.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTreeHelper.java 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoTreeHelper.java 2009-12-21 20:11:57 UTC (rev 1692) @@ -29,6 +29,7 @@ import jaxx.demo.component.jaxx.navigation.item.ItemTreeNavigationDemo; import jaxx.demo.component.swing.*; import jaxx.demo.feature.databinding.BeanDataBindingDemo; +import jaxx.demo.feature.databinding.BindingExtremeDemo; import jaxx.demo.feature.validation.ValidationListDemo; import jaxx.demo.feature.validation.ValidationTableDemo; import jaxx.demo.fun.CalculatorDemo; @@ -116,6 +117,7 @@ goUp(). addText(n_("jaxxdemo.tree.feature")). addText(n_("jaxxdemo.tree.features.databinding")). + addDemo(BindingExtremeDemo.class). addDemo(BeanDataBindingDemo.class). goUp(). addText(n_("jaxxdemo.tree.features.validation")). Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/NumberEditorDemo.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/NumberEditorDemo.jaxx 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/NumberEditorDemo.jaxx 2009-12-21 20:11:57 UTC (rev 1692) @@ -86,97 +86,4 @@ </row> </Table> </jaxx.demo.DemoPanel> - <!--row> - <cell> - <NumberEditor id='positifIntegerEditor' - property='positifInteger' - constructorParams='this' - bean='{demoModel}' - autoPopup='false' - showPopupButton='true' - showReset='true'/> - </cell> - <cell> - <NumberEditor id='positifIntegerEditor2' - property='positifInteger' - constructorParams='this' - bean='{demoModel}' - autoPopup='true' - showPopupButton='true' - showReset='true'/> - </cell> - </row> - <row> - <cell> - <JLabel text='{_("numbereditor.normal.int", demoModel.getNormalInteger())}'/> - </cell> - <cell> - <NumberEditor id='normalIntegerEditor' - property='normalInteger' - constructorParams='this' - bean='{demoModel}' - autoPopup='false' - showPopupButton='true' - showReset='true' - useSign='true'/> - </cell> - <cell> - <NumberEditor id='normalIntegerEditor2' - property='normalInteger' - constructorParams='this' - bean='{demoModel}' - autoPopup='true' - showPopupButton='true' - showReset='true' - useSign='true'/> - </cell> - </row> - <row> - <cell> - <JLabel text='{_("numbereditor.positive.float", demoModel.getPositifFloat())}'/> - </cell> - <cell> - <NumberEditor id='positifFloatEditor' - property='positifFloat' - constructorParams='this' - bean='{demoModel}' - autoPopup='false' - showPopupButton='true' - showReset='true'/> - </cell> - <cell> - <NumberEditor id='positifFloatEditor2' - property='positifFloat' - constructorParams='this' - bean='{demoModel}' - autoPopup='true' - showPopupButton='true' - showReset='true'/> - </cell> - </row> - <row> - <cell> - <JLabel text='{_("numbereditor.normal.float", demoModel.getNormalFloat())}'/> - </cell> - <cell> - <NumberEditor id='normalFloatEditor' - property='normalFloat' - constructorParams='this' - bean='{demoModel}' - autoPopup='false' - showPopupButton='true' - showReset='true' - useSign='true'/> - </cell> - <cell> - <NumberEditor id='normalFloatEditor2' - property='normalFloat' - constructorParams='this' - bean='{demoModel}' - autoPopup='true' - showPopupButton='true' - showReset='true' - useSign='true'/> - </cell> - </row--> Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx 2009-12-21 20:11:57 UTC (rev 1692) @@ -0,0 +1,243 @@ +<!-- + *##% + JAXX Demo + Copyright (C) 2008 - 2009 CodeLutin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + ##%* +--> + +<jaxx.demo.DemoPanel id='mainFrame' implements='DemoUIModel'> + + <style> + JTextArea { editable:false; } + + JCheckBox { enabled:false; } + + .nobinding { background:{Color.GRAY}; } + </style> + + <script><![CDATA[ +public JToggleButton getT3() { return t0; } + +private void $afterCompleteSetup() { + for (Object o : $objectMap.values()) { + if (o instanceof JCheckBox) { + JCheckBox c = (JCheckBox) o; + c.setBackground($bindings.containsKey(c.getName() + ".selected") ? Color.WHITE : Color.RED); + } + } + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + DefaultListModel m = (DefaultListModel) bindings.getModel(); + for (JAXXBinding b : getDataBindings()) { + m.addElement(b.getId()); + } + } + }); +} +@Override +protected String[] getSources() { + return new String[]{ getDefaultSource(), "DemoUIModel.java", "DefaultDemoUIModel.java" }; +} + ]]> + </script> + + <Boolean id='f0' javaBean='Boolean.FALSE'/> + <Boolean id='f1' javaBean='Boolean.FALSE'/> + <java.io.File id='file' javaBean='new java.io.File(".")'/> + + <DefaultDemoUIModel id='model0' initializer='new DefaultDemoUIModel()'/> + + <DemoUIModel id='model1' javaBean='new DefaultDemoUIModel()'/> + + + <Table id='demoPanel' fill="both" constraints='BorderLayout.NORTH'> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cf0' selected='{isF0()}' text='isF0()'/> + <JCheckBox id='cf1' selected='{isF1()}' text='isF1()'/> + <JCheckBox id='cf0O1' selected='{isF0() || isF1()}' text='isF0() || isF1()'/> + <JCheckBox id='cf0A1' selected='{isF0() && isF1()}' text='isF0() && isF1()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='ct0' selected='{t0.isSelected()}' text='t0.isSelected()'/> + <JCheckBox id='ct1' selected='{t1.isSelected()}' text='t1.isSelected()'/> + <JCheckBox id='ct0O1' selected='{t0.isSelected() || t1.isSelected()}' + text='t0.isSelected() || t1.isSelected()'/> + <JCheckBox id='ct0A1' selected='{t0.isSelected() && t1.isSelected()}' + text='t0.isSelected() && t1.isSelected()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cgett0' selected='{getT0().isSelected()}' text='getT0().isSelected()'/> + <JCheckBox id='cgett1' selected='{getT1().isSelected()}' text='getT1().isSelected()'/> + <JCheckBox id='cgett0O1' selected='{getT0().isSelected() || getT1().isSelected()}' + text='getT0().isSelected() || getT1().isSelected()'/> + <JCheckBox id='cgett0A1' selected='{getT0().isSelected() && getT1().isSelected()}' + text='getT0().isSelected() && getT1().isSelected()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JTextArea id='cfile' border='{new TitledBorder("file.getAbsolutePath()")}' + text='{file.getAbsolutePath()}' visible='{!$bindings.containsKey("cfile.text")}' + styleClass="nobinding"/> + <JTextArea id='cgetfile' border='{new TitledBorder("getFile().getAbsolutePath()")}' + text='{getFile().getAbsolutePath()}' + visible='{$bindings.containsKey("cgetfile.text")}'/> + </JPanel> + </cell> + </row> + <row weightx='1'> + <cell> + <JToggleButton id='t0' text='f0' onActionPerformed='setF0(!f0)'/> + </cell> + <cell> + <JToggleButton id='t1' text='f1' onActionPerformed='setF1(!f1)' javaBean='new JToggleButton()'/> + </cell> + <cell> + <JButton text="file..." + onActionPerformed='setFile(org.nuiton.util.FileUtil.getFile(this, new String[0]))'/> + </cell> + </row> + + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cmt0' selected='{model0.isF0()}' text='model0.isF0()'/> + <JCheckBox id='cmt1' selected='{model0.isF1()}' text='model0.isF1()'/> + <JCheckBox id='cmt0O1' selected='{model0.isF0() || model0.isF1()}' + text='model0.isF0() || model0.isF1()'/> + <JCheckBox id='cmt0A1' selected='{model0.isF0() && model0.isF1()}' + text='model0.isF0() && model0.isF1()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cmgett0' selected='{getModel0().isF0()}' text='getModel0().isF0()'/> + <JCheckBox id='cmgett1' selected='{getModel0().isF1()}' text='getModel0().isF1()'/> + <JCheckBox id='cmgett0O1' selected='{getModel0().isF0() || getModel0().isF1()}' + text='getModel0().isF0() || getModel0().isF1()'/> + <JCheckBox id='cmgett0A1' selected='{getModel0().isF0() && getModel0().isF1()}' + text='getModel0().isF0() && getModel0().isF1()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JTextArea id='cMfile' border='{new TitledBorder("model0.getFile().getAbsolutePath()")}' + text='{model0.getFile().getAbsolutePath()}' + visible='{$bindings.containsKey("cMfile.text")}'/> + <JTextArea id='cMgetfile' border='{new TitledBorder("getModel0().getFile().getAbsolutePath()")}' + text='{getModel0().getFile().getAbsolutePath()}' + visible='{$bindings.containsKey("cMgetfile.text")}'/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JToggleButton id='Mt0' text='model0.f0' onActionPerformed='model0.setF0(!model0.isF0())'/> + </cell> + <cell> + <JToggleButton id='Mt1' text='model0.f1' onActionPerformed='model0.setF1(!model0.isF1())' + javaBean='new JToggleButton()'/> + </cell> + <cell> + <JButton text="model0.file..." + onActionPerformed='model0.setFile(org.nuiton.util.FileUtil.getFile(this,new String[0]))'/> + </cell> + </row> + + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cit0' selected='{((DemoUIModel)model1).isF0()}' text='model1.isF0()'/> + <JCheckBox id='cit1' selected='{((DemoUIModel)model1).isF1()}' text='model1.isF1()'/> + <JCheckBox id='cit0O1' selected='{((DemoUIModel)model1).isF0() || ((DemoUIModel)model1).isF1()}' + text='model1.isF0() || model1.isF1()'/> + <JCheckBox id='cit0A1' + selected='{((DemoUIModel)model1).isF0() && ((DemoUIModel)model1).isF1()}' + text='model1.isF0() && model1.isF1()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JCheckBox id='cigett0' selected='{getModel1().isF0()}' text='getModel1().isF0()'/> + <JCheckBox id='cigett1' selected='{getModel1().isF1()}' text='getModel1().isF1()'/> + <JCheckBox id='cigett0O1' selected='{getModel1().isF0() || getModel1().isF1()}' + text='getModel1().isF0() || getModel1().isF1()'/> + <JCheckBox id='cigett0A1' selected='{getModel1().isF0() && getModel1().isF1()}' + text='getModel1().isF0() && getModel1().isF1()'/> + </JPanel> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel layout="{new GridLayout(1,0)}"> + <JTextArea id='cIfile' border='{new TitledBorder("model1.getFile().getAbsolutePath()")}' + text='{model1.getFile().getAbsolutePath()}' + visible='{$bindings.containsKey("cIfile.text")}'/> + <JTextArea id='cIgetfile' border='{new TitledBorder("getModel1().getFile().getAbsolutePath()")}' + text='{getModel1().getFile().getAbsolutePath()}' + visible='{$bindings.containsKey("cIgetfile.text")}'/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JToggleButton id='It0' text='model1.f0' onActionPerformed='model1.setF0(!model1.isF0())'/> + </cell> + <cell> + <JToggleButton id='It1' text='model1.f1' onActionPerformed='model1.setF1(!model1.isF1())' + javaBean='new JToggleButton()'/> + </cell> + <cell> + <JButton text="model1.file..." + onActionPerformed='model1.setFile(org.nuiton.util.FileUtil.getFile(this,new String[0]))'/> + </cell> + </row> + + <row> + <cell columns="3"> + <JPanel layout="{new BorderLayout()}"> + <JTextArea id="bindingsLabel" editable='false' text='{$bindings.size() + " bindings."}'/> + <JScrollPane constraints='BorderLayout.CENTER' columnHeaderView='{bindingsLabel}'> + <JList id="bindings" model='{new DefaultListModel()}' font-size='10'/> + </JScrollPane> + </JPanel> + </cell> + </row> + </Table> + + +</jaxx.demo.DemoPanel> Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DefaultDemoUIModel.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DefaultDemoUIModel.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DefaultDemoUIModel.java 2009-12-21 20:11:57 UTC (rev 1692) @@ -0,0 +1,137 @@ +package jaxx.demo.feature.databinding; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; + +/** + * Created: 3 déc. 2009 + * + * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin + * @version $Revision$ + * <p/> + * Mise a jour: $Date$ par : + * $Author: tchemit $ + */ +public class DefaultDemoUIModel implements DemoUIModel { + + + protected java.io.File file; + protected java.io.File file1; + protected java.lang.Boolean f1 = false; + protected java.lang.Boolean f0 = false; + + protected javax.swing.JToggleButton t1; + protected javax.swing.JToggleButton t0; + + public static final String PROPERTY_T1 = "t1"; + public static final String PROPERTY_F1 = "f1"; + public static final String PROPERTY_F0 = "f0"; + public static final String PROPERTY_FILE = "file"; + + protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + + protected static final Log log = LogFactory.getLog(DefaultDemoUIModel.class); + + /*---------------------------------------------------------------------------------*/ + /*-- public acessor methods -------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + + public java.lang.Boolean getF0() { + return f0; + } + + public java.lang.Boolean getF1() { + return f1; + } + + @Override + public java.io.File getFile() { + return file; + } + + public java.io.File getFile1() { + return file1; + } + + @Override + public javax.swing.JToggleButton getT0() { + return t0; + } + + @Override + public javax.swing.JToggleButton getT1() { + return t1; + } + + @Override + public java.lang.Boolean isF0() { + return f0 != null && f0; + } + + @Override + public java.lang.Boolean isF1() { + return f1 != null && f1; + } + + /*---------------------------------------------------------------------------------*/ + /*-- public mutator methods -------------------------------------------------------*/ + /*---------------------------------------------------------------------------------*/ + + @Override + public void setF0(java.lang.Boolean newValue) { + java.lang.Boolean oldValue = this.f0; + this.f0 = newValue; + firePropertyChange(PROPERTY_F0, oldValue, newValue); + } + + @Override + public void setF1(java.lang.Boolean newValue) { + java.lang.Boolean oldValue = this.f1; + this.f1 = newValue; + firePropertyChange(PROPERTY_F1, oldValue, newValue); + } + + @Override + public void setFile(java.io.File newValue) { + java.io.File oldValue = this.file; + this.file = newValue; + firePropertyChange(PROPERTY_FILE, oldValue, newValue); + } + + + public void setT1(javax.swing.JToggleButton newValue) { + javax.swing.JToggleButton oldValue = this.t1; + this.t1 = newValue; + firePropertyChange(PROPERTY_T1, oldValue, newValue); + } + + @Override + public void firePropertyChange(String name, Object oldValue, Object newValue) { + pcs.firePropertyChange(name, oldValue, newValue); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + @Override + public void addPropertyChangeListener(String property, PropertyChangeListener listener) { + pcs.addPropertyChangeListener(property, listener); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + @Override + public void removePropertyChangeListener(String property, PropertyChangeListener listener) { + pcs.removePropertyChangeListener(property, listener); + } + + +} Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DefaultDemoUIModel.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DemoUIModel.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DemoUIModel.java (rev 0) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DemoUIModel.java 2009-12-21 20:11:57 UTC (rev 1692) @@ -0,0 +1,74 @@ +package jaxx.demo.feature.databinding; + +import javax.swing.*; +import java.io.File; + +/** + * Created: 2 déc. 2009 + * + * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin + * @version $Revision$ + * <p/> + * Mise a jour: $Date$ par : + * $Author: tchemit $ + */ +public interface DemoUIModel { + + Boolean isF0(); + + Boolean isF1(); + + void setF0(Boolean b); + + void setF1(Boolean b); + + JToggleButton getT0(); + + JToggleButton getT1(); + + File getFile(); + + void setFile(File newValue); + + /** + * All <code>JAXXObject</code> implements are capable of broadcasting <code>PropertyChangeEvent</code>, and + * furthermore (for technical reasons) must allow code in outside packages, specifically the JAXX runtime, + * to trigger these events. + * + * @param name the name of the property which changed + * @param oldValue the old value of the property + * @param newValue the new value of the property + */ + void firePropertyChange(String name, Object oldValue, Object newValue); + + /** + * Register a general {@link java.beans.PropertyChangeListener}. + * + * @param listener the listener to register + */ + void addPropertyChangeListener(java.beans.PropertyChangeListener listener); + + /** + * Register a {@link java.beans.PropertyChangeListener}. for the given {@code propertyName}. + * + * @param property the property name to listen + * @param listener the listener to register + */ + void addPropertyChangeListener(String property, java.beans.PropertyChangeListener listener); + + /** + * Unregister a general {@link java.beans.PropertyChangeListener}. + * + * @param listener the listener to unregister + */ + void removePropertyChangeListener(java.beans.PropertyChangeListener listener); + + /** + * Unregister a {@link java.beans.PropertyChangeListener}. for the given {@code propertyName}. + * + * @param property the property name to listen + * @param listener the listener to unregister + */ + void removePropertyChangeListener(String property, java.beans.PropertyChangeListener listener); + +} Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/DemoUIModel.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/fun/Calculator.css =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/fun/Calculator.css 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/fun/Calculator.css 2009-12-21 20:11:57 UTC (rev 1692) @@ -39,8 +39,12 @@ foreground: red; } -JButton:mouseover { +/*JButton:mouseover { font-weight: bold; +}*/ + +JButton.operator:mouseover { + font-weight: bold; } JButton.operator:mouseover { Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-en_GB.properties 2009-12-21 20:11:57 UTC (rev 1692) @@ -112,13 +112,32 @@ edit2=Edit 2 edit3=Edit 3 editor.getSelectedLocale()= +f0= +f1= +file...= form.ratio=Ratio form.text=Text form.text2=Text 2 form2.ratio=Form 2 Ratio form2.text=Form 2 Text form2.text2=Form 2 Text 2 +getModel0().isF0()= +getModel0().isF0()\ &&\ getModel0().isF1()= +getModel0().isF0()\ ||\ getModel0().isF1()= +getModel0().isF1()= +getModel1().isF0()= +getModel1().isF0()\ &&\ getModel1().isF1()= +getModel1().isF0()\ ||\ getModel1().isF1()= +getModel1().isF1()= +getT0().isSelected()= +getT0().isSelected()\ &&\ getT1().isSelected()= +getT0().isSelected()\ ||\ getT1().isSelected()= +getT1().isSelected()= i18neditor.popup.title= +isF0()= +isF0()\ &&\ isF1()= +isF0()\ ||\ isF1()= +isF1()= jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>For more informations, viste the <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">website of the project</a>. jaxxdemo.action.about=About... jaxxdemo.action.about.tip=About JAXXDemo... @@ -194,6 +213,20 @@ jaxxdemo.tree.fun=Fun jaxxdemo.warning.nimbus.landf=Could not init nymbus look and feel, you need at leasr version 1.6u10 of java. jaxxdemo.warning.no.ui=No ui environnement detected +model0.f0= +model0.f1= +model0.file...= +model0.isF0()= +model0.isF0()\ &&\ model0.isF1()= +model0.isF0()\ ||\ model0.isF1()= +model0.isF1()= +model1.f0= +model1.f1= +model1.file...= +model1.isF0()= +model1.isF0()\ &&\ model1.isF1()= +model1.isF0()\ ||\ model1.isF1()= +model1.isF1()= movies=Movies numbereditor.normal.float=Signed float numbereditor.normal.int=Signed integer @@ -204,6 +237,10 @@ numbereditor.without.auto.popup=Without auto popup show/hide\ label1= show/hide\ label2= +t0.isSelected()= +t0.isSelected()\ &&\ t1.isSelected()= +t0.isSelected()\ ||\ t1.isSelected()= +t1.isSelected()= test= valid= x= Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2009-12-21 20:11:01 UTC (rev 1691) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo-fr_FR.properties 2009-12-21 20:11:57 UTC (rev 1692) @@ -112,13 +112,32 @@ edit2=Editer 2 edit3=Editer 3 editor.getSelectedLocale()= +f0= +f1= +file...= form.ratio=Form \: ratio form.text=Form \: text form.text2=Form \: text2 form2.ratio=Form2 \: ratio form2.text=Form2 \: text form2.text2=Form2 \: text2 +getModel0().isF0()= +getModel0().isF0()\ &&\ getModel0().isF1()= +getModel0().isF0()\ ||\ getModel0().isF1()= +getModel0().isF1()= +getModel1().isF0()= +getModel1().isF0()\ &&\ getModel1().isF1()= +getModel1().isF0()\ ||\ getModel1().isF1()= +getModel1().isF1()= +getT0().isSelected()= +getT0().isSelected()\ &&\ getT1().isSelected()= +getT0().isSelected()\ ||\ getT1().isSelected()= +getT1().isSelected()= i18neditor.popup.title= +isF0()= +isF0()\ &&\ isF1()= +isF0()\ ||\ isF1()= +isF1()= jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">site du projet</a>. jaxxdemo.action.about=A propos jaxxdemo.action.about.tip=A propos de JAXX Demo... @@ -194,6 +213,20 @@ jaxxdemo.tree.fun=Fun jaxxdemo.warning.nimbus.landf=Le look and Feel Nimbus n'a pas \u00E9t\u00E9 trouv\u00E9, il faut au moins la version 1.6u10 de java. jaxxdemo.warning.no.ui=Aucun environnement graphique d\u00E9tect\u00E9 +model0.f0= +model0.f1= +model0.file...= +model0.isF0()= +model0.isF0()\ &&\ model0.isF1()= +model0.isF0()\ ||\ model0.isF1()= +model0.isF1()= +model1.f0= +model1.f1= +model1.file...= +model1.isF0()= +model1.isF0()\ &&\ model1.isF1()= +model1.isF0()\ ||\ model1.isF1()= +model1.isF1()= movies=Films numbereditor.normal.float=D\u00E9cimal primitif \: [%1$s] numbereditor.normal.int=Entier primitif \: [%1$s] @@ -204,6 +237,10 @@ numbereditor.without.auto.popup=Sans popup auto show/hide\ label1= show/hide\ label2= +t0.isSelected()= +t0.isSelected()\ &&\ t1.isSelected()= +t0.isSelected()\ ||\ t1.isSelected()= +t1.isSelected()= test= valid=valide x=x