Author: sletellier Date: 2012-06-14 17:47:32 +0200 (Thu, 14 Jun 2012) New Revision: 2331 Url: http://nuiton.org/repositories/revision/jaxx/2331 Log: - fixes #2138 : Use FileEditor to input File in ApplicationConfigUI - create demo ui - refs #2137 : improve FileEditor and demo Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/FileEditorDemo.jaxx trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditor.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditorHandler.java trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigCategoryUI.css trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/FileEditorDemo.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/FileEditorDemo.jaxx 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/FileEditorDemo.jaxx 2012-06-14 15:47:32 UTC (rev 2331) @@ -28,7 +28,10 @@ <String id='title' javaBean='"Open file"'/> <String id='exts' javaBean='"txt, png"'/> - <String id='extsDescription' javaBean='"Text (*.txt), Images (*.png)"'/> + <String id='extsDescription' javaBean='"Text (*.txt), Image (*.png)"'/> + <Boolean id='acceptAllFileFilterUsed' javaBean='Boolean.TRUE'/> + <Boolean id='directoryEnabled' javaBean='Boolean.TRUE'/> + <Boolean id='fileEnabled' javaBean='Boolean.FALSE'/> <Table fill='both'> <row> @@ -43,10 +46,31 @@ </row> <row> <cell fill='horizontal' weightx='1'> + <JLabel text='jaxxdemo.fileEditor.directoryEnabled'/> + </cell> + <cell fill='horizontal' weightx='1'> + <JCheckBox id='directoryEnabledField' + selected='{isDirectoryEnabled()}' + onActionPerformed='setDirectoryEnabled(directoryEnabledField.isSelected())'/> + </cell> + </row> + <row> + <cell fill='horizontal' weightx='1'> + <JLabel text='jaxxdemo.fileEditor.fileEnabled'/> + </cell> + <cell fill='horizontal' weightx='1'> + <JCheckBox id='fileEnabledField' + selected='{isFileEnabled()}' + onActionPerformed='setFileEnabled(fileEnabledField.isSelected())'/> + </cell> + </row> + <row> + <cell fill='horizontal' weightx='1'> <JLabel text='jaxxdemo.fileEditor.extsLbl'/> </cell> <cell fill='horizontal' weightx='1'> <JTextField id='extsField' + enabled='{isFileEnabled()}' text='{getExts()}' onKeyReleased='setExts(extsField.getText())'/> </cell> @@ -57,15 +81,29 @@ </cell> <cell fill='horizontal' weightx='1'> <JTextField id='extsDescriptionField' + enabled='{isFileEnabled()}' text='{getExtsDescription()}' onKeyReleased='setExtsDescription(extsDescriptionField.getText())'/> </cell> </row> <row> + <cell fill='horizontal' weightx='1'> + <JLabel text='jaxxdemo.fileEditor.acceptAllFileFilterUsed'/> + </cell> + <cell fill='horizontal' weightx='1'> + <JCheckBox id='acceptAllFileFilterUsedField' + selected='{isAcceptAllFileFilterUsed()}' + onActionPerformed='setAcceptAllFileFilterUsed(acceptAllFileFilterUsedField.isSelected())'/> + </cell> + </row> + <row> <cell fill='horizontal' weightx='1' columns='2'> <FileEditor id='fileChooser' title='{getTitle()}' exts='{getExts()}' + directoryEnabled='{isDirectoryEnabled()}' + fileEnabled='{isFileEnabled()}' + acceptAllFileFilterUsed='{isAcceptAllFileFilterUsed()}' extsDescription='{getExtsDescription()}'/> </cell> </row> 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 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties 2012-06-14 15:47:32 UTC (rev 2331) @@ -195,8 +195,11 @@ jaxxdemo.feature.databinding=Data Binding jaxxdemo.feature.nav=Jaxx nav API jaxxdemo.feature.validation=Validation +jaxxdemo.fileEditor.acceptAllFileFilterUsed=Allow all FileFilter +jaxxdemo.fileEditor.directoryEnabled=Enable directory selection jaxxdemo.fileEditor.extsDescLbl=Extensions description (separated by comma, ex \: text (*.txt), images (*.png)) jaxxdemo.fileEditor.extsLbl=Extensions (separated by comma, ex \: txt, png) +jaxxdemo.fileEditor.fileEnabled=Enable file selection jaxxdemo.fileEditor.titleLbl=Open dialog title jaxxdemo.fun=Fun jaxxdemo.i18neditor.configuration=Configuration Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-06-14 15:47:32 UTC (rev 2331) @@ -195,8 +195,11 @@ jaxxdemo.feature.databinding=Data binding jaxxdemo.feature.nav=API JAXX pour les arbres jaxxdemo.feature.validation=Validation +jaxxdemo.fileEditor.acceptAllFileFilterUsed=Accèpte tout les FileFilter +jaxxdemo.fileEditor.directoryEnabled=Activer la sélection des files jaxxdemo.fileEditor.extsDescLbl=Description des extensions (séparées par des virgules, ex \: Texte (*.txt), Images (*.png)) jaxxdemo.fileEditor.extsLbl=Extensions (separated by comma, ex \: txt, png) +jaxxdemo.fileEditor.fileEnabled=Activer la sélection des fichiers jaxxdemo.fileEditor.titleLbl=Titre du dialog d'ouverture de fichier jaxxdemo.fun=Fun jaxxdemo.i18neditor.configuration=Configuration 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 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties 2012-06-14 15:47:32 UTC (rev 2331) @@ -195,8 +195,11 @@ jaxxdemo.feature.databinding=Data binding jaxxdemo.feature.nav=API JAXX pour les arbres jaxxdemo.feature.validation=Validation +jaxxdemo.fileEditor.acceptAllFileFilterUsed=Accèpte tout les FileFilter +jaxxdemo.fileEditor.directoryEnabled=Activer la sélection des files jaxxdemo.fileEditor.extsDescLbl=Description des extensions (séparées par des virgules, ex \: Texte (*.txt), Images (*.png)) jaxxdemo.fileEditor.extsLbl=Extensions (separated by comma, ex \: txt, png) +jaxxdemo.fileEditor.fileEnabled=Activer la sélection des fichiers jaxxdemo.fileEditor.titleLbl=Titre de la fenêtre de sélection de fichier jaxxdemo.fun=Fun jaxxdemo.i18neditor.configuration=Configuration Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditor.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditor.jaxx 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditor.jaxx 2012-06-14 15:47:32 UTC (rev 2331) @@ -33,6 +33,10 @@ <Boolean id='acceptAllFileFilterUsed' javaBean='Boolean.TRUE'/> + <Boolean id='directoryEnabled' javaBean='Boolean.TRUE'/> + + <Boolean id='fileEnabled' javaBean='Boolean.TRUE'/> + <File id='selectedFile' javaBean='null'/> <File id='startFile' javaBean='null'/> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditorHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditorHandler.java 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/FileEditorHandler.java 2012-06-14 15:47:32 UTC (rev 2331) @@ -59,31 +59,61 @@ fc.setDialogTitle(view.getTitle()); fc.setAcceptAllFileFilterUsed(view.getAcceptAllFileFilterUsed()); - String extsAsString = view.getExts(); - if (extsAsString != null) { + // TODO sletellier 14/06/2012 : activate multi selection +// boolean multiSelectionEnabled = view.isMultiSelectionEnabled(); +// fc.setMultiSelectionEnabled(multiSelectionEnabled); - // extentions can be separted by comma - String[] exts = extsAsString.split(SEPARATOR_REGEX); - String[] descs = view.getExtsDescription().split(SEPARATOR_REGEX); - for (int i = 0;i<exts.length;i++) { + // used to enable directory selection + boolean directoryEnabled = view.isDirectoryEnabled(); + if (directoryEnabled) { + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } - // use ext if no desc found - String ext = exts[i]; - String desc = ext; - if (descs.length > i) { - desc = descs[i]; - } + // used to enable file selection + boolean fileEnabled = view.isFileEnabled(); + if (fileEnabled) { - fc.addChoosableFileFilter(new ExtentionFileFiler(ext, desc)); + if (directoryEnabled) { + + // both + fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + } else { + fc.setFileSelectionMode(JFileChooser.FILES_ONLY); } + String extsAsString = view.getExts(); + if (extsAsString != null) { + + // extentions can be separted by comma + String[] exts = extsAsString.split(SEPARATOR_REGEX); + String[] descs = view.getExtsDescription().split(SEPARATOR_REGEX); + for (int i = 0;i<exts.length;i++) { + + // use ext if no desc found + String ext = exts[i]; + String desc = ext; + if (descs.length > i) { + desc = descs[i]; + } + + fc.addChoosableFileFilter(new ExtentionFileFiler(ext, desc)); + } + } } + // directory or/and file must be enabled + if (!directoryEnabled && !fileEnabled) { + throw new IllegalArgumentException("You must enable at least file or directory to open dialog"); + } + // show dialog - fc.showOpenDialog(view); + int returnVal = fc.showOpenDialog(view); + if (returnVal == JFileChooser.APPROVE_OPTION) { - // get selected to display in ui - File file = fc.getSelectedFile(); - view.setSelectedFile(file); + // get selected to display in ui + File file = fc.getSelectedFile(); + + view.setSelectedFile(file); + } } public static class ExtentionFileFiler extends FileFilter { Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigCategoryUI.css =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigCategoryUI.css 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigCategoryUI.css 2012-06-14 15:47:32 UTC (rev 2331) @@ -50,6 +50,7 @@ rowSelectionAllowed:false; autoCreateRowSorter:true; autoResizeMode:{JTable.AUTO_RESIZE_ALL_COLUMNS}; + rowHeight:25; } #reset{ Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java 2012-06-14 13:17:44 UTC (rev 2330) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java 2012-06-14 15:47:32 UTC (rev 2331) @@ -25,19 +25,20 @@ package jaxx.runtime.swing.editor.config; -import jaxx.runtime.swing.editor.config.model.ConfigTableModel; - +import java.awt.Component; +import java.io.File; +import java.util.EventObject; +import java.util.Locale; +import javax.swing.AbstractCellEditor; import javax.swing.DefaultCellEditor; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.table.TableCellEditor; -import java.awt.Component; -import java.util.EventObject; -import java.util.Locale; - import jaxx.runtime.swing.editor.ClassCellEditor; import jaxx.runtime.swing.editor.EnumEditor; +import jaxx.runtime.swing.editor.FileEditor; import jaxx.runtime.swing.editor.LocaleEditor; +import jaxx.runtime.swing.editor.config.model.ConfigTableModel; import jaxx.runtime.swing.editor.config.model.OptionModel; /** @@ -106,22 +107,25 @@ TableCellEditor editor = table.getDefaultEditor(type); TableCellEditor defaultEditor = table.getDefaultEditor(Object.class); //TODO always Search from option.getEditor() and store editor as cache - if (editor == defaultEditor) { + if (editor.equals(defaultEditor)) { // find not a specialized editor for the type if (type.isEnum()) { // add a EnumEditor to table editor = new DefaultCellEditor(EnumEditor.newEditor((Class<Enum>) type)); table.setDefaultEditor(type, editor); - } else if (type == Class.class) { + + } else if (type.equals(Class.class)) { editor = new ClassCellEditor(); table.setDefaultEditor(type, editor); - } //else if (type == File.class){ - // TODO a FileEditor - // table.setDefaultEditor(type, delegate); - //} - else if (type.equals(Locale.class)) { + + } else if (type.equals(File.class)){ + editor = new FileCellEditor(); + table.setDefaultEditor(type, editor); + + } else if (type.equals(Locale.class)) { editor = new DefaultCellEditor(LocaleEditor.newEditor()); table.setDefaultEditor(Locale.class, editor); + } else { editor = table.getDefaultEditor(String.class); } @@ -135,4 +139,25 @@ protected boolean hasDelegate() { return delegate != null; } + + protected static class FileCellEditor extends AbstractCellEditor + implements TableCellEditor { + + protected FileEditor fileEditor; + + public FileCellEditor() { + fileEditor = new FileEditor(); + } + + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + fileEditor.setSelectedFile((File)value); + return fileEditor; + } + + @Override + public Object getCellEditorValue() { + return fileEditor.getSelectedFile(); + } + } }