Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
February 2013
- 3 participants
- 26 discussions
r2562 - in trunk/jaxx-runtime: . src/main/java/jaxx/runtime/swing
by maven-release@users.nuiton.org 15 Feb '13
by maven-release@users.nuiton.org 15 Feb '13
15 Feb '13
Author: maven-release
Date: 2013-02-15 11:40:42 +0100 (Fri, 15 Feb 2013)
New Revision: 2562
Url: http://nuiton.org/projects/jaxx/repository/revisions/2562
Log:
prepare release
Modified:
trunk/jaxx-runtime/pom.xml
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java
Modified: trunk/jaxx-runtime/pom.xml
===================================================================
--- trunk/jaxx-runtime/pom.xml 2013-02-08 23:05:17 UTC (rev 2561)
+++ trunk/jaxx-runtime/pom.xml 2013-02-15 10:40:42 UTC (rev 2562)
@@ -54,6 +54,11 @@
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
<dependency>
<groupId>commons-beanutils</groupId>
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java 2013-02-08 23:05:17 UTC (rev 2561)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java 2013-02-15 10:40:42 UTC (rev 2562)
@@ -9,18 +9,18 @@
* Copyright (C) 2012 Ifremer
* %%
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
+ * 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 Public License for more details.
+ * GNU General Lesser Public License for more details.
*
- * You should have received a copy of the GNU General Public
+ * 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/gpl-3.0.html>.
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
* #L%
*/
@@ -379,4 +379,4 @@
}
}
}
-}
\ No newline at end of file
+}
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java 2013-02-08 23:05:17 UTC (rev 2561)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java 2013-02-15 10:40:42 UTC (rev 2562)
@@ -9,18 +9,18 @@
* Copyright (C) 2012 Ifremer
* %%
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
+ * 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 Public License for more details.
+ * GNU General Lesser Public License for more details.
*
- * You should have received a copy of the GNU General Public
+ * 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/gpl-3.0.html>.
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
* #L%
*/
@@ -459,4 +459,4 @@
return source.getParent().getSize();
}
}
-}
\ No newline at end of file
+}
1
0
r2561 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
by tchemit@users.nuiton.org 08 Feb '13
by tchemit@users.nuiton.org 08 Feb '13
08 Feb '13
Author: tchemit
Date: 2013-02-09 00:05:17 +0100 (Sat, 09 Feb 2013)
New Revision: 2561
Url: http://nuiton.org/projects/jaxx/repository/revisions/2561
Log:
fixes #2524: Add a sort model on BeanComboBoxModel
Modified:
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java 2013-02-07 22:26:31 UTC (rev 2560)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java 2013-02-08 23:05:17 UTC (rev 2561)
@@ -232,6 +232,17 @@
}
/**
+ * Sort data of the model.
+ *
+ * @since 2.5.10
+ */
+ public void sortData() {
+
+ // just update UI should do the math of this
+ updateUI(ui.getIndex(), ui.isReverseSort());
+ }
+
+ /**
* Modifie l'état autoComplete de l'ui.
*
* @param oldValue l'ancienne valeur
1
0
r2560 - in trunk/jaxx-validator/src/main: java/jaxx/runtime/validator/swing resources/i18n resources/icons
by kmorin@users.nuiton.org 07 Feb '13
by kmorin@users.nuiton.org 07 Feb '13
07 Feb '13
Author: kmorin
Date: 2013-02-07 23:26:31 +0100 (Thu, 07 Feb 2013)
New Revision: 2560
Url: http://nuiton.org/projects/jaxx/repository/revisions/2560
Log:
resolves #2504 Create a button to show a popup with a validation table
Added:
trunk/jaxx-validator/src/main/resources/icons/action-alert-error.png
trunk/jaxx-validator/src/main/resources/icons/action-alert-info.png
trunk/jaxx-validator/src/main/resources/icons/action-alert-none.png
trunk/jaxx-validator/src/main/resources/icons/action-alert-warning.png
Removed:
trunk/jaxx-validator/src/main/resources/icons/action-table-error.png
Modified:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java 2013-02-07 22:08:45 UTC (rev 2559)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java 2013-02-07 22:26:31 UTC (rev 2560)
@@ -25,6 +25,8 @@
* #L%
*/
+import java.awt.Component;
+import java.awt.Point;
import jaxx.runtime.SwingUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -40,10 +42,23 @@
import javax.swing.ListSelectionModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.HierarchyBoundsAdapter;
+import java.awt.event.HierarchyEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import jaxx.runtime.swing.ComponentMover;
+import jaxx.runtime.swing.ComponentResizer;
+import org.jdesktop.swingx.JXTitledPanel;
+import org.nuiton.validator.NuitonValidatorScope;
+import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
+
/**
* Button which opens a popup containing a table with the errors found
* by registered validators.
@@ -53,7 +68,8 @@
*/
public class SwingValidatorMessageWidget extends JToggleButton {
- private static final Log log = LogFactory.getLog(SwingValidatorMessageWidget.class);
+ private static final Log log =
+ LogFactory.getLog(SwingValidatorMessageWidget.class);
private static final long serialVersionUID = 1L;
@@ -63,9 +79,60 @@
protected JTable errorTable = new JTable();
+ protected Point popupPosition = null;
+
public SwingValidatorMessageWidget() {
- super(SwingUtil.createActionIcon("table-error"));
+ super(SwingUtil.createActionIcon("alert-none"));
+ setToolTipText(_("tutti.validator.alert.none"));
+ errorTableModel.addTableModelListener(new TableModelListener() {
+
+ public void tableChanged(TableModelEvent e) {
+ int alerts = errorTableModel.getRowCount();
+ String label;
+ switch (alerts) {
+ case 0:
+ label = n_("validator.messageWidget.alert.none");
+ break;
+ case 1:
+ label = n_("validator.messageWidget.alert.one");
+ break;
+ default:
+ label = n_("validator.messageWidget.alert.several");
+ }
+
+ NuitonValidatorScope maxScope;
+ String icon;
+ if (alerts == 0) {
+ icon = "alert-none";
+
+ } else {
+ maxScope = NuitonValidatorScope.INFO;
+ for (int i = 0; i < alerts; i++) {
+ NuitonValidatorScope scope = errorTableModel.getRow(i).getScope();
+ int diff = scope.compareTo(maxScope);
+ if (diff < 0) {
+ maxScope = scope;
+ }
+ }
+ switch (maxScope) {
+ case INFO:
+ icon = "alert-info";
+ break;
+ case WARNING:
+ icon = "alert-warning";
+ break;
+ default:
+ icon = "alert-error";
+
+ }
+ }
+
+ setToolTipText(_(label, alerts));
+ setIcon(SwingUtil.createActionIcon(icon));
+ }
+ });
+
errorTable.setModel(errorTableModel);
errorTable.setRowSelectionAllowed(true);
errorTable.setAutoCreateRowSorter(true);
@@ -79,9 +146,41 @@
JScrollPane scrollPanel = new JScrollPane(errorTable);
scrollPanel.setColumnHeaderView(errorTable.getTableHeader());
- popup.add(scrollPanel);
+
+ JXTitledPanel titledPanel = new JXTitledPanel(_("validator.messageWidget.title"), scrollPanel);
+ popup.add(titledPanel);
+ popup.setTitle(_("validator.messageWidget.title"));
popup.setSize(800, 300);
+ popup.setAlwaysOnTop(true);
+ popup.setUndecorated(true);
+ ComponentResizer cr = new ComponentResizer();
+ cr.registerComponent(popup);
+ ComponentMover cm = new ComponentMover();
+ cm.setDragInsets(cr.getDragInsets());
+ cm.registerComponent(popup);
+
+ popup.addWindowListener(new WindowAdapter() {
+
+ @Override
+ public void windowClosing(WindowEvent e) {
+ setSelected(false);
+ }
+
+ });
+
+ popup.addComponentListener(new ComponentAdapter() {
+
+ @Override
+ public void componentMoved(ComponentEvent e) {
+ Component component = e.getComponent();
+ if (component.isShowing()) {
+ popupPosition = component.getLocationOnScreen();
+ }
+ }
+
+ });
+
addActionListener(new ActionListener() {
@Override
@@ -93,13 +192,17 @@
}
}
});
- popup.addWindowListener(new WindowAdapter() {
+ addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
+
@Override
- public void windowClosing(WindowEvent e) {
- setSelected(false);
+ public void ancestorMoved(HierarchyEvent e) {
+ if (popupPosition == null && isShowing()) {
+ Point point = new Point(getLocationOnScreen());
+ point.translate(-popup.getWidth() + getWidth(), -popup.getHeight());
+ popup.setLocation(point);
+ }
}
-
});
// add a auto-close action
@@ -118,14 +221,23 @@
setSelected(false);
}
});
+
}
+ /**
+ * Registers a validator.
+ *
+ * @param validator
+ */
public void registerValidator(SwingValidator validator) {
errorTableModel.registerValidator(validator);
+ validator.reloadBean();
}
+ /** Clears all the validators. */
public void clearValidators() {
errorTableModel.clearValidators();
+ errorTableModel.clear();
}
}
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties 2013-02-07 22:08:45 UTC (rev 2559)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties 2013-02-07 22:26:31 UTC (rev 2560)
@@ -1,3 +1,4 @@
+tutti.validator.alert.none=
validator.bean.header=Object
validator.bean.header.tip=Object on which message occurs
validator.bean.tip=
@@ -7,6 +8,10 @@
validator.message.header=Message
validator.message.header.tip=Message
validator.message.tip=Message \: %1$s
+validator.messageWidget.alert.none=No report
+validator.messageWidget.alert.one=1 report
+validator.messageWidget.alert.several=%s reports
+validator.messageWidget.title=Control report
validator.scope.header=...
validator.scope.header.tip=Severity of the message
validator.scope.tip=Message scope \: '%1$s'
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties 2013-02-07 22:08:45 UTC (rev 2559)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties 2013-02-07 22:26:31 UTC (rev 2560)
@@ -1,3 +1,4 @@
+tutti.validator.alert.none=
validator.bean.header=
validator.bean.header.tip=
validator.bean.tip=
@@ -7,6 +8,10 @@
validator.message.header=Mensaje
validator.message.header.tip=El texto del mensaje
validator.message.tip=Mensaje \: %1$s
+validator.messageWidget.alert.none=No alertar
+validator.messageWidget.alert.one=1 alertar
+validator.messageWidget.alert.several=%s alertas
+validator.messageWidget.title=Informe de prueba
validator.row.header=
validator.row.header.tip=
validator.row.tip=
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties 2013-02-07 22:08:45 UTC (rev 2559)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties 2013-02-07 22:26:31 UTC (rev 2560)
@@ -1,3 +1,4 @@
+tutti.validator.alert.none=
validator.bean.header=Objet
validator.bean.header.tip=L'objet
validator.bean.tip=
@@ -7,6 +8,10 @@
validator.message.header=Message
validator.message.header.tip=Le texte du message
validator.message.tip=Message \: %1$s
+validator.messageWidget.alert.none=Aucune alerte
+validator.messageWidget.alert.one=1 alerte
+validator.messageWidget.alert.several=%s alertes
+validator.messageWidget.title=Rapport de contrôles
validator.scope.header=...
validator.scope.header.tip=Le type de message
validator.scope.tip=Type de message \: '%1$s'
Added: trunk/jaxx-validator/src/main/resources/icons/action-alert-error.png
===================================================================
(Binary files differ)
Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-alert-error.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/jaxx-validator/src/main/resources/icons/action-alert-info.png
===================================================================
(Binary files differ)
Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-alert-info.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/jaxx-validator/src/main/resources/icons/action-alert-none.png
===================================================================
(Binary files differ)
Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-alert-none.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/jaxx-validator/src/main/resources/icons/action-alert-warning.png
===================================================================
(Binary files differ)
Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-alert-warning.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Deleted: trunk/jaxx-validator/src/main/resources/icons/action-table-error.png
===================================================================
(Binary files differ)
1
0
07 Feb '13
Author: kmorin
Date: 2013-02-07 23:08:45 +0100 (Thu, 07 Feb 2013)
New Revision: 2559
Url: http://nuiton.org/projects/jaxx/repository/revisions/2559
Log:
- refs #2504 Create a button to show a popup with a validation table
Added:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentMover.java 2013-02-07 22:08:45 UTC (rev 2559)
@@ -0,0 +1,382 @@
+package jaxx.runtime.swing;
+
+/*
+ * #%L
+ * Tutti :: UI
+ * $Id: ComponentMover.java 70 2012-12-14 23:13:54Z tchemit $
+ * $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-ui-swing/src/main/java… $
+ * %%
+ * Copyright (C) 2012 Ifremer
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.GraphicsEnvironment;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+/**
+ * This class allows you to move a Component by using a mouse. The Component
+ * moved can be a high level Window (ie. Window, Frame, Dialog) in which case
+ * the Window is moved within the desktop. Or the Component can belong to a
+ * Container in which case the Component is moved within the Container.
+ * <p/>
+ * When moving a Window, the listener can be added to a child Component of
+ * the Window. In this case attempting to move the child will result in the
+ * Window moving. For example, you might create a custom "Title Bar" for an
+ * undecorated Window and moving of the Window is accomplished by moving the
+ * title bar only. Multiple components can be registered as "window movers".
+ * <p/>
+ * Components can be registered when the class is created. Additional
+ * components can be added at any time using the registerComponent() method.
+ *
+ * @since 2.5.10
+ */
+public class ComponentMover extends MouseAdapter {
+ private Insets dragInsets = new Insets(0, 0, 0, 0);
+
+ private Dimension snapSize = new Dimension(1, 1);
+
+ private Insets edgeInsets = new Insets(0, 0, 0, 0);
+
+ private boolean changeCursor = true;
+
+ private boolean autoLayout = false;
+
+ private Class destinationClass;
+
+ private Component destinationComponent;
+
+ private Component destination;
+
+ private Component source;
+
+ private Point pressed;
+
+ private Point location;
+
+ private Cursor originalCursor;
+
+ private boolean autoscrolls;
+
+ private boolean potentialDrag;
+
+
+ /**
+ * Constructor for moving individual components. The components must be
+ * regisetered using the registerComponent() method.
+ */
+ public ComponentMover() {
+ }
+
+ /**
+ * Constructor to specify a Class of Component that will be moved when
+ * drag events are generated on a registered child component. The events
+ * will be passed to the first ancestor of this specified class.
+ *
+ * @param destinationClass the Class of the ancestor component
+ * @param components the Components to be registered for forwarding
+ * drag events to the ancestor Component.
+ */
+ public ComponentMover(Class destinationClass, Component... components) {
+ this.destinationClass = destinationClass;
+ registerComponent(components);
+ }
+
+ /**
+ * Constructor to specify a parent component that will be moved when drag
+ * events are generated on a registered child component.
+ *
+ * @param destinationComponent the component drage events should be forwareded to
+ * @param components the Components to be registered for forwarding drag
+ * events to the parent component to be moved
+ */
+ public ComponentMover(Component destinationComponent, Component... components) {
+ this.destinationComponent = destinationComponent;
+ registerComponent(components);
+ }
+
+ /**
+ * Get the auto layout property
+ *
+ * @return the auto layout property
+ */
+ public boolean isAutoLayout() {
+ return autoLayout;
+ }
+
+ /**
+ * Set the auto layout property
+ *
+ * @param autoLayout when true layout will be invoked on the parent container
+ */
+ public void setAutoLayout(boolean autoLayout) {
+ this.autoLayout = autoLayout;
+ }
+
+ /**
+ * Get the change cursor property
+ *
+ * @return the change cursor property
+ */
+ public boolean isChangeCursor() {
+ return changeCursor;
+ }
+
+ /**
+ * Set the change cursor property
+ *
+ * @param changeCursor when true the cursor will be changed to the
+ * Cursor.MOVE_CURSOR while the mouse is pressed
+ */
+ public void setChangeCursor(boolean changeCursor) {
+ this.changeCursor = changeCursor;
+ }
+
+ /**
+ * Get the drag insets
+ *
+ * @return the drag insets
+ */
+ public Insets getDragInsets() {
+ return dragInsets;
+ }
+
+ /**
+ * Set the drag insets. The insets specify an area where mouseDragged
+ * events should be ignored and therefore the component will not be moved.
+ * This will prevent these events from being confused with a
+ * MouseMotionListener that supports component resizing.
+ *
+ * @param dragInsets
+ */
+ public void setDragInsets(Insets dragInsets) {
+ this.dragInsets = dragInsets;
+ }
+
+ /**
+ * Get the bounds insets
+ *
+ * @return the bounds insets
+ */
+ public Insets getEdgeInsets() {
+ return edgeInsets;
+ }
+
+ /**
+ * Set the edge insets. The insets specify how close to each edge of the parent
+ * component that the child component can be moved. Positive values means the
+ * component must be contained within the parent. Negative values means the
+ * component can be moved outside the parent.
+ *
+ * @param edgeInsets
+ */
+ public void setEdgeInsets(Insets edgeInsets) {
+ this.edgeInsets = edgeInsets;
+ }
+
+ /**
+ * Remove listeners from the specified component
+ *
+ * @param components the component the listeners are removed from
+ */
+ public void deregisterComponent(Component... components) {
+ for (Component component : components)
+ component.removeMouseListener(this);
+ }
+
+ /**
+ * Add the required listeners to the specified component
+ *
+ * @param components the component the listeners are added to
+ */
+ public void registerComponent(Component... components) {
+ for (Component component : components)
+ component.addMouseListener(this);
+ }
+
+ /**
+ * Get the snap size
+ *
+ * @return the snap size
+ */
+ public Dimension getSnapSize() {
+ return snapSize;
+ }
+
+ /**
+ * Set the snap size. Forces the component to be snapped to
+ * the closest grid position. Snapping will occur when the mouse is
+ * dragged half way.
+ */
+ public void setSnapSize(Dimension snapSize) {
+ if (snapSize.width < 1
+ || snapSize.height < 1)
+ throw new IllegalArgumentException("Snap sizes must be greater than 0");
+
+ this.snapSize = snapSize;
+ }
+
+ /**
+ * Setup the variables used to control the moving of the component:
+ * <p/>
+ * source - the source component of the mouse event
+ * destination - the component that will ultimately be moved
+ * pressed - the Point where the mouse was pressed in the destination
+ * component coordinates.
+ */
+ @Override
+ public void mousePressed(MouseEvent e) {
+ source = e.getComponent();
+ int width = source.getSize().width - dragInsets.left - dragInsets.right;
+ int height = source.getSize().height - dragInsets.top - dragInsets.bottom;
+ Rectangle r = new Rectangle(dragInsets.left, dragInsets.top, width, height);
+
+ if (r.contains(e.getPoint()))
+ setupForDragging(e);
+ }
+
+ private void setupForDragging(MouseEvent e) {
+ source.addMouseMotionListener(this);
+ potentialDrag = true;
+
+ // Determine the component that will ultimately be moved
+
+ if (destinationComponent != null) {
+ destination = destinationComponent;
+ } else if (destinationClass == null) {
+ destination = source;
+ } else // forward events to destination component
+ {
+ destination = SwingUtilities.getAncestorOfClass(destinationClass, source);
+ }
+
+ pressed = e.getLocationOnScreen();
+ location = destination.getLocation();
+
+ if (changeCursor) {
+ originalCursor = source.getCursor();
+ source.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+ }
+
+ // Making sure autoscrolls is false will allow for smoother dragging of
+ // individual components
+
+ if (destination instanceof JComponent) {
+ JComponent jc = (JComponent) destination;
+ autoscrolls = jc.getAutoscrolls();
+ jc.setAutoscrolls(false);
+ }
+ }
+
+ /**
+ * Move the component to its new location. The dragged Point must be in
+ * the destination coordinates.
+ */
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ Point dragged = e.getLocationOnScreen();
+ int dragX = getDragDistance(dragged.x, pressed.x, snapSize.width);
+ int dragY = getDragDistance(dragged.y, pressed.y, snapSize.height);
+
+ int locationX = location.x + dragX;
+ int locationY = location.y + dragY;
+
+ // Mouse dragged events are not generated for every pixel the mouse
+ // is moved. Adjust the location to make sure we are still on a
+ // snap value.
+
+ while (locationX < edgeInsets.left)
+ locationX += snapSize.width;
+
+ while (locationY < edgeInsets.top)
+ locationY += snapSize.height;
+
+ Dimension d = getBoundingSize(destination);
+
+ while (locationX + destination.getSize().width + edgeInsets.right > d.width)
+ locationX -= snapSize.width;
+
+ while (locationY + destination.getSize().height + edgeInsets.bottom > d.height)
+ locationY -= snapSize.height;
+
+ // Adjustments are finished, move the component
+
+ destination.setLocation(locationX, locationY);
+ }
+
+ /*
+ * Determine how far the mouse has moved from where dragging started
+ * (Assume drag direction is down and right for positive drag distance)
+ */
+ private int getDragDistance(int larger, int smaller, int snapSize) {
+ int halfway = snapSize / 2;
+ int drag = larger - smaller;
+ drag += (drag < 0) ? -halfway : halfway;
+ drag = (drag / snapSize) * snapSize;
+
+ return drag;
+ }
+
+ /*
+ * Get the bounds of the parent of the dragged component.
+ */
+ private Dimension getBoundingSize(Component source) {
+ if (source instanceof Window) {
+ GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ Rectangle bounds = env.getMaximumWindowBounds();
+ return new Dimension(bounds.width, bounds.height);
+ } else {
+ return source.getParent().getSize();
+ }
+ }
+
+ /** Restore the original state of the Component */
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ if (!potentialDrag) return;
+
+ source.removeMouseMotionListener(this);
+ potentialDrag = false;
+
+ if (changeCursor)
+ source.setCursor(originalCursor);
+
+ if (destination instanceof JComponent) {
+ ((JComponent) destination).setAutoscrolls(autoscrolls);
+ }
+
+ // Layout the components on the parent container
+
+ if (autoLayout) {
+ if (destination instanceof JComponent) {
+ ((JComponent) destination).revalidate();
+ } else {
+ destination.validate();
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/ComponentResizer.java 2013-02-07 22:08:45 UTC (rev 2559)
@@ -0,0 +1,462 @@
+package jaxx.runtime.swing;
+
+/*
+ * #%L
+ * Tutti :: UI
+ * $Id: ComponentResizer.java 70 2012-12-14 23:13:54Z tchemit $
+ * $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-ui-swing/src/main/java… $
+ * %%
+ * Copyright (C) 2012 Ifremer
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.GraphicsEnvironment;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The ComponentResizer allows you to resize a component by dragging a border
+ * of the component.
+ *
+ * @since 2.5.10
+ */
+public class ComponentResizer extends MouseAdapter {
+ private final static Dimension MINIMUM_SIZE = new Dimension(10, 10);
+
+ private final static Dimension MAXIMUM_SIZE =
+ new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
+
+ private static Map<Integer, Integer> cursors = new HashMap<Integer, Integer>();
+
+ {
+ cursors.put(1, Cursor.N_RESIZE_CURSOR);
+ cursors.put(2, Cursor.W_RESIZE_CURSOR);
+ cursors.put(4, Cursor.S_RESIZE_CURSOR);
+ cursors.put(8, Cursor.E_RESIZE_CURSOR);
+ cursors.put(3, Cursor.NW_RESIZE_CURSOR);
+ cursors.put(9, Cursor.NE_RESIZE_CURSOR);
+ cursors.put(6, Cursor.SW_RESIZE_CURSOR);
+ cursors.put(12, Cursor.SE_RESIZE_CURSOR);
+ }
+
+ private Insets dragInsets;
+
+ private Dimension snapSize;
+
+ private int direction;
+
+ protected static final int NORTH = 1;
+
+ protected static final int WEST = 2;
+
+ protected static final int SOUTH = 4;
+
+ protected static final int EAST = 8;
+
+ private Cursor sourceCursor;
+
+ private boolean resizing;
+
+ private Rectangle bounds;
+
+ private Point pressed;
+
+ private boolean autoscrolls;
+
+ private Dimension minimumSize = MINIMUM_SIZE;
+
+ private Dimension maximumSize = MAXIMUM_SIZE;
+
+ /**
+ * Convenience contructor. All borders are resizable in increments of
+ * a single pixel. Components must be registered separately.
+ */
+ public ComponentResizer() {
+ this(new Insets(5, 5, 5, 5), new Dimension(1, 1));
+ }
+
+ /**
+ * Convenience contructor. All borders are resizable in increments of
+ * a single pixel. Components can be registered when the class is created
+ * or they can be registered separately afterwards.
+ *
+ * @param components components to be automatically registered
+ */
+ public ComponentResizer(Component... components) {
+ this(new Insets(5, 5, 5, 5), new Dimension(1, 1), components);
+ }
+
+ /**
+ * Convenience contructor. Eligible borders are resisable in increments of
+ * a single pixel. Components can be registered when the class is created
+ * or they can be registered separately afterwards.
+ *
+ * @param dragInsets Insets specifying which borders are eligible to be
+ * resized.
+ * @param components components to be automatically registered
+ */
+ public ComponentResizer(Insets dragInsets, Component... components) {
+ this(dragInsets, new Dimension(1, 1), components);
+ }
+
+ /**
+ * Create a ComponentResizer.
+ *
+ * @param dragInsets Insets specifying which borders are eligible to be
+ * resized.
+ * @param snapSize Specify the dimension to which the border will snap to
+ * when being dragged. Snapping occurs at the halfway mark.
+ * @param components components to be automatically registered
+ */
+ public ComponentResizer(Insets dragInsets, Dimension snapSize, Component... components) {
+ setDragInsets(dragInsets);
+ setSnapSize(snapSize);
+ registerComponent(components);
+ }
+
+ /**
+ * Get the drag insets
+ *
+ * @return the drag insets
+ */
+ public Insets getDragInsets() {
+ return dragInsets;
+ }
+
+ /**
+ * Set the drag dragInsets. The insets specify an area where mouseDragged
+ * events are recognized from the edge of the border inwards. A value of
+ * 0 for any size will imply that the border is not resizable. Otherwise
+ * the appropriate drag cursor will appear when the mouse is inside the
+ * resizable border area.
+ *
+ * @param dragInsets Insets to control which borders are resizeable.
+ */
+ public void setDragInsets(Insets dragInsets) {
+ validateMinimumAndInsets(minimumSize, dragInsets);
+
+ this.dragInsets = dragInsets;
+ }
+
+ /**
+ * Get the components maximum size.
+ *
+ * @return the maximum size
+ */
+ public Dimension getMaximumSize() {
+ return maximumSize;
+ }
+
+ /**
+ * Specify the maximum size for the component. The component will still
+ * be constrained by the size of its parent.
+ *
+ * @param maximumSize the maximum size for a component.
+ */
+ public void setMaximumSize(Dimension maximumSize) {
+ this.maximumSize = maximumSize;
+ }
+
+ /**
+ * Get the components minimum size.
+ *
+ * @return the minimum size
+ */
+ public Dimension getMinimumSize() {
+ return minimumSize;
+ }
+
+ /**
+ * Specify the minimum size for the component. The minimum size is
+ * constrained by the drag insets.
+ *
+ * @param minimumSize the minimum size for a component.
+ */
+ public void setMinimumSize(Dimension minimumSize) {
+ validateMinimumAndInsets(minimumSize, dragInsets);
+
+ this.minimumSize = minimumSize;
+ }
+
+ /**
+ * Remove listeners from the specified component
+ *
+ * @param components the component the listeners are removed from
+ */
+ public void deregisterComponent(Component... components) {
+ for (Component component : components) {
+ component.removeMouseListener(this);
+ component.removeMouseMotionListener(this);
+ }
+ }
+
+ /**
+ * Add the required listeners to the specified component
+ *
+ * @param components the component the listeners are added to
+ */
+ public void registerComponent(Component... components) {
+ for (Component component : components) {
+ component.addMouseListener(this);
+ component.addMouseMotionListener(this);
+ }
+ }
+
+ /**
+ * Get the snap size.
+ *
+ * @return the snap size.
+ */
+ public Dimension getSnapSize() {
+ return snapSize;
+ }
+
+ /**
+ * Control how many pixels a border must be dragged before the size of
+ * the component is changed. The border will snap to the size once
+ * dragging has passed the halfway mark.
+ *
+ * @param snapSize Dimension object allows you to separately spcify a
+ * horizontal and vertical snap size.
+ */
+ public void setSnapSize(Dimension snapSize) {
+ this.snapSize = snapSize;
+ }
+
+ /**
+ * When the components minimum size is less than the drag insets then
+ * we can't determine which border should be resized so we need to
+ * prevent this from happening.
+ */
+ private void validateMinimumAndInsets(Dimension minimum, Insets drag) {
+ int minimumWidth = drag.left + drag.right;
+ int minimumHeight = drag.top + drag.bottom;
+
+ if (minimum.width < minimumWidth
+ || minimum.height < minimumHeight) {
+ String message = "Minimum size cannot be less than drag insets";
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ /**
+ */
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ Component source = e.getComponent();
+ Point location = e.getPoint();
+ direction = 0;
+
+ if (location.x < dragInsets.left)
+ direction += WEST;
+
+ if (location.x > source.getWidth() - dragInsets.right - 1)
+ direction += EAST;
+
+ if (location.y < dragInsets.top)
+ direction += NORTH;
+
+ if (location.y > source.getHeight() - dragInsets.bottom - 1)
+ direction += SOUTH;
+
+ // Mouse is no longer over a resizable border
+
+ if (direction == 0) {
+ source.setCursor(sourceCursor);
+ } else // use the appropriate resizable cursor
+ {
+ int cursorType = cursors.get(direction);
+ Cursor cursor = Cursor.getPredefinedCursor(cursorType);
+ source.setCursor(cursor);
+ }
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ if (!resizing) {
+ Component source = e.getComponent();
+ sourceCursor = source.getCursor();
+ }
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ if (!resizing) {
+ Component source = e.getComponent();
+ source.setCursor(sourceCursor);
+ }
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ // The mouseMoved event continually updates this variable
+
+ if (direction == 0) return;
+
+ // Setup for resizing. All future dragging calculations are done based
+ // on the original bounds of the component and mouse pressed location.
+
+ resizing = true;
+
+ Component source = e.getComponent();
+ pressed = e.getPoint();
+ SwingUtilities.convertPointToScreen(pressed, source);
+ bounds = source.getBounds();
+
+ // Making sure autoscrolls is false will allow for smoother resizing
+ // of components
+
+ if (source instanceof JComponent) {
+ JComponent jc = (JComponent) source;
+ autoscrolls = jc.getAutoscrolls();
+ jc.setAutoscrolls(false);
+ }
+ }
+
+ /** Restore the original state of the Component */
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ resizing = false;
+
+ Component source = e.getComponent();
+ source.setCursor(sourceCursor);
+
+ if (source instanceof JComponent) {
+ ((JComponent) source).setAutoscrolls(autoscrolls);
+ }
+ }
+
+ /**
+ * Resize the component ensuring location and size is within the bounds
+ * of the parent container and that the size is within the minimum and
+ * maximum constraints.
+ * <p/>
+ * All calculations are done using the bounds of the component when the
+ * resizing started.
+ */
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ if (resizing == false) return;
+
+ Component source = e.getComponent();
+ Point dragged = e.getPoint();
+ SwingUtilities.convertPointToScreen(dragged, source);
+
+ changeBounds(source, direction, bounds, pressed, dragged);
+ }
+
+ protected void changeBounds(Component source, int direction, Rectangle bounds, Point pressed, Point current) {
+ // Start with original locaton and size
+
+ int x = bounds.x;
+ int y = bounds.y;
+ int width = bounds.width;
+ int height = bounds.height;
+
+ // Resizing the West or North border affects the size and location
+
+ if (WEST == (direction & WEST)) {
+ int drag = getDragDistance(pressed.x, current.x, snapSize.width);
+ int maximum = Math.min(width + x, maximumSize.width);
+ drag = getDragBounded(drag, snapSize.width, width, minimumSize.width, maximum);
+
+ x -= drag;
+ width += drag;
+ }
+
+ if (NORTH == (direction & NORTH)) {
+ int drag = getDragDistance(pressed.y, current.y, snapSize.height);
+ int maximum = Math.min(height + y, maximumSize.height);
+ drag = getDragBounded(drag, snapSize.height, height, minimumSize.height, maximum);
+
+ y -= drag;
+ height += drag;
+ }
+
+ // Resizing the East or South border only affects the size
+
+ if (EAST == (direction & EAST)) {
+ int drag = getDragDistance(current.x, pressed.x, snapSize.width);
+ Dimension boundingSize = getBoundingSize(source);
+ int maximum = Math.min(boundingSize.width - x, maximumSize.width);
+ drag = getDragBounded(drag, snapSize.width, width, minimumSize.width, maximum);
+ width += drag;
+ }
+
+ if (SOUTH == (direction & SOUTH)) {
+ int drag = getDragDistance(current.y, pressed.y, snapSize.height);
+ Dimension boundingSize = getBoundingSize(source);
+ int maximum = Math.min(boundingSize.height - y, maximumSize.height);
+ drag = getDragBounded(drag, snapSize.height, height, minimumSize.height, maximum);
+ height += drag;
+ }
+
+ source.setBounds(x, y, width, height);
+ source.validate();
+ }
+
+ /*
+ * Determine how far the mouse has moved from where dragging started
+ */
+ private int getDragDistance(int larger, int smaller, int snapSize) {
+ int halfway = snapSize / 2;
+ int drag = larger - smaller;
+ drag += (drag < 0) ? -halfway : halfway;
+ drag = (drag / snapSize) * snapSize;
+
+ return drag;
+ }
+
+ /*
+ * Adjust the drag value to be within the minimum and maximum range.
+ */
+ private int getDragBounded(int drag, int snapSize, int dimension, int minimum, int maximum) {
+ while (dimension + drag < minimum)
+ drag += snapSize;
+
+ while (dimension + drag > maximum)
+ drag -= snapSize;
+
+
+ return drag;
+ }
+
+ /*
+ * Keep the size of the component within the bounds of its parent.
+ */
+ private Dimension getBoundingSize(Component source) {
+ if (source instanceof Window) {
+ GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ Rectangle bounds = env.getMaximumWindowBounds();
+ return new Dimension(bounds.width, bounds.height);
+ } else {
+ return source.getParent().getSize();
+ }
+ }
+}
\ No newline at end of file
1
0
r2558 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
by kmorin@users.nuiton.org 06 Feb '13
by kmorin@users.nuiton.org 06 Feb '13
06 Feb '13
Author: kmorin
Date: 2013-02-06 11:40:00 +0100 (Wed, 06 Feb 2013)
New Revision: 2558
Url: http://nuiton.org/projects/jaxx/repository/revisions/2558
Log:
debug double list had twice the universe
Modified:
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2013-02-05 09:02:11 UTC (rev 2557)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2013-02-06 10:40:00 UTC (rev 2558)
@@ -115,18 +115,15 @@
*/
public void setUniverse(List<O> universe) {
if (universe == null) {
- universe = Lists.newArrayList();
+ this.universe = Lists.newArrayList();
+ } else {
+ this.universe = Lists.newArrayList(universe);
}
- this.universe = Lists.newArrayList(universe);
resetUniverse();
}
protected void resetUniverse() {
- universeModel.clear();
- universeModel.addAllElements(universe);
- for (O item : universe) {
- universeModel.addElement(item);
- }
+ universeModel.setAllElements(universe);
}
public ListModel getSelectedModel() {
1
0
r2557 - in trunk: jaxx-runtime/src/main/java/jaxx/runtime jaxx-runtime/src/main/java/jaxx/runtime/swing/model jaxx-validator/src/main/java/jaxx/runtime/validator/swing jaxx-validator/src/main/resources/icons jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
by tchemit@users.nuiton.org 05 Feb '13
by tchemit@users.nuiton.org 05 Feb '13
05 Feb '13
Author: tchemit
Date: 2013-02-05 10:02:11 +0100 (Tue, 05 Feb 2013)
New Revision: 2557
Url: http://nuiton.org/projects/jaxx/repository/revisions/2557
Log:
fixes #2520: Introduce a new comboBoxModel which does not use a Vector
fixes #2521: Introduce a new listModel which does not use a Vector
fixes #2522: Improve the DoubleListBean api
Added:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultComboBoxModel.java
trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java
Modified:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java
trunk/jaxx-validator/src/main/resources/icons/action-table-error.png
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.css
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2013-02-05 09:02:11 UTC (rev 2557)
@@ -27,6 +27,8 @@
import jaxx.runtime.swing.Item;
import jaxx.runtime.swing.JAXXComboBox;
import jaxx.runtime.swing.editor.BooleanCellEditor;
+import jaxx.runtime.swing.model.JaxxDefaultComboBoxModel;
+import jaxx.runtime.swing.model.JaxxDefaultListModel;
import jaxx.runtime.swing.renderer.BooleanCellRenderer;
import jaxx.runtime.swing.renderer.EmptyNumberTableCellRenderer;
import jaxx.runtime.swing.renderer.EnumTableCellRenderer;
@@ -37,6 +39,7 @@
import org.jdesktop.jxlayer.plaf.LayerUI;
import org.jdesktop.swingx.JXTreeTable;
+import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
@@ -50,6 +53,7 @@
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTree;
+import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -199,23 +203,41 @@
*/
public static void fillComboBox(JComboBox combo, Collection<?> data,
Object select) {
- if (!(combo.getModel() instanceof DefaultComboBoxModel)) {
+
+ ComboBoxModel comboBoxModel = combo.getModel();
+
+ if (comboBoxModel instanceof JaxxDefaultComboBoxModel) {
+ JaxxDefaultComboBoxModel model =
+ (JaxxDefaultComboBoxModel) comboBoxModel;
+
+ // evince the model
+ model.removeListDataListener(combo);
+
+ // set data
+ model.setAllElements((Collection) data);
+
+ // attach the model
+ model.addListDataListener(combo);
+ model.setSelectedItem(select);
+ } else if (comboBoxModel instanceof DefaultComboBoxModel) {
+ DefaultComboBoxModel model = (DefaultComboBoxModel) combo.getModel();
+ // evince the model
+ model.removeListDataListener(combo);
+ model.removeAllElements();
+ if (data != null) {
+ for (Object o : data) {
+ model.addElement(o);
+ }
+ }
+ // attach the model
+ model.addListDataListener(combo);
+ model.setSelectedItem(select);
+ } else {
throw new IllegalArgumentException(
"this method need a DefaultComboBoxModel for " +
"this model but was " + combo.getModel().getClass());
}
- DefaultComboBoxModel model = (DefaultComboBoxModel) combo.getModel();
- // evince the model
- model.removeListDataListener(combo);
- model.removeAllElements();
- if (data != null) {
- for (Object o : data) {
- model.addElement(o);
- }
- }
- // attach the model
- model.addListDataListener(combo);
- model.setSelectedItem(select);
+
}
/**
@@ -226,23 +248,35 @@
* @param select the object to select in combo after reflling his model
*/
public static void fillList(JList list, Collection<?> data, Object select) {
- if (!(list.getModel() instanceof DefaultListModel)) {
+ ListModel listModel = list.getModel();
+ if (listModel instanceof JaxxDefaultListModel) {
+ JaxxDefaultListModel model = (JaxxDefaultListModel) listModel;
+
+ // evince the model
+// model.removeListDataListener(combo);
+ model.setAllElements(data);
+
+ // attach the model
+// model.addListDataListener(combo);
+ list.setSelectedValue(select, true);
+ } else if (listModel instanceof DefaultListModel) {
+ DefaultListModel model = (DefaultListModel) listModel;
+ // evince the model
+// model.removeListDataListener(combo);
+ model.removeAllElements();
+ if (data != null) {
+ for (Object o : data) {
+ model.addElement(o);
+ }
+ }
+ // attach the model
+// model.addListDataListener(combo);
+ list.setSelectedValue(select, true);
+ } else {
throw new IllegalArgumentException(
"this method need a DefaultListModel for this model " +
- "but was " + list.getModel().getClass());
+ "but was " + listModel.getClass());
}
- DefaultListModel model = (DefaultListModel) list.getModel();
- // evince the model
-// model.removeListDataListener(combo);
- model.removeAllElements();
- if (data != null) {
- for (Object o : data) {
- model.addElement(o);
- }
- }
- // attach the model
-// model.addListDataListener(combo);
- list.setSelectedValue(select, true);
}
/**
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultComboBoxModel.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultComboBoxModel.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultComboBoxModel.java 2013-02-05 09:02:11 UTC (rev 2557)
@@ -0,0 +1,181 @@
+package jaxx.runtime.swing.model;
+
+/*
+ * #%L
+ * JAXX :: Runtime
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2013 CodeLutin, Tony Chemit
+ * %%
+ * 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>.
+ * #L%
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+
+import javax.swing.AbstractListModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.MutableComboBoxModel;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * To replace the {@link DefaultComboBoxModel} which used {@link Vector}.
+ * <p/>
+ * Add some new methods to {@link #addAllElements(Collection)} or
+ * {@link #setAllElements(Collection)}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.10
+ */
+public class JaxxDefaultComboBoxModel<E> extends AbstractListModel implements MutableComboBoxModel, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ protected List<E> delegate;
+
+ protected E selectedObject;
+
+ public JaxxDefaultComboBoxModel() {
+ delegate = new ArrayList<E>();
+ }
+
+ public JaxxDefaultComboBoxModel(E... items) {
+ delegate = new ArrayList<E>(items.length);
+
+ int i, c;
+ for (i = 0, c = items.length; i < c; i++)
+ delegate.add(items[i]);
+
+ if (getSize() > 0) {
+ selectedObject = getElementAt(0);
+ }
+ }
+
+ public JaxxDefaultComboBoxModel(Collection<E> v) {
+ delegate = new ArrayList<E>(v);
+
+ if (getSize() > 0) {
+ selectedObject = getElementAt(0);
+ }
+ }
+
+ @Override
+ public void setSelectedItem(Object anObject) {
+ if ((selectedObject != null && !selectedObject.equals(anObject)) ||
+ selectedObject == null && anObject != null) {
+ selectedObject = (E) anObject;
+ fireContentsChanged(this, -1, -1);
+ }
+ }
+
+ public int getIndexOf(E anObject) {
+ return delegate.indexOf(anObject);
+ }
+
+
+ public void setAllElements(Collection<E> objects) {
+ removeAllElements();
+ addAllElements(objects);
+ }
+
+ public void addAllElements(Collection<E> objects) {
+ if (CollectionUtils.isNotEmpty(objects)) {
+ int firstIndex = delegate.size();
+ this.delegate.addAll(objects);
+ int lastIndex = delegate.size() - 1;
+ if (lastIndex > -1) {
+ fireIntervalAdded(this, firstIndex, lastIndex);
+ }
+ }
+ }
+
+ /** Empties the list. */
+ public void removeAllElements() {
+ if (delegate.size() > 0) {
+ int firstIndex = 0;
+ int lastIndex = delegate.size() - 1;
+ delegate.clear();
+ selectedObject = null;
+ fireIntervalRemoved(this, firstIndex, lastIndex);
+ } else {
+ selectedObject = null;
+ }
+ }
+
+ @Override
+ public E getSelectedItem() {
+ return selectedObject;
+ }
+
+ @Override
+ public int getSize() {
+ return delegate.size();
+ }
+
+ @Override
+ public E getElementAt(int index) {
+ E result;
+
+ if (index >= 0 && index < delegate.size()) {
+ result = delegate.get(index);
+ } else {
+ result = null;
+ }
+ return result;
+ }
+
+ @Override
+ public void addElement(Object anObject) {
+ delegate.add((E) anObject);
+ fireIntervalAdded(this, delegate.size() - 1, delegate.size() - 1);
+ if (delegate.size() == 1 && selectedObject == null && anObject != null) {
+ setSelectedItem(anObject);
+ }
+ }
+
+ @Override
+ public void insertElementAt(Object anObject, int index) {
+ delegate.add(index, (E) anObject);
+ fireIntervalAdded(this, index, index);
+ }
+
+ @Override
+ public void removeElementAt(int index) {
+ if (getElementAt(index) == selectedObject) {
+ if (index == 0) {
+ setSelectedItem(getSize() == 1 ? null : getElementAt(index + 1));
+ } else {
+ setSelectedItem(getElementAt(index - 1));
+ }
+ }
+
+ delegate.remove(index);
+
+ fireIntervalRemoved(this, index, index);
+ }
+
+ @Override
+ public void removeElement(Object anObject) {
+ int index = delegate.indexOf(anObject);
+ if (index != -1) {
+ removeElementAt(index);
+ }
+ }
+}
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultComboBoxModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java (rev 0)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java 2013-02-05 09:02:11 UTC (rev 2557)
@@ -0,0 +1,553 @@
+package jaxx.runtime.swing.model;
+
+/*
+ * #%L
+ * JAXX :: Runtime
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2013 CodeLutin, Tony Chemit
+ * %%
+ * 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>.
+ * #L%
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+
+import javax.swing.AbstractListModel;
+import javax.swing.DefaultListModel;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.NoSuchElementException;
+import java.util.Vector;
+
+/**
+ * To replace the {@link DefaultListModel} which used {@link Vector}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.10
+ */
+public class JaxxDefaultListModel<E> extends AbstractListModel {
+
+ private static final long serialVersionUID = 1L;
+
+ private ArrayList<E> delegate = new ArrayList<E>();
+
+ /**
+ * Returns the number of components in this list.
+ * <p/>
+ * This method is identical to <code>size</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * This method exists in conjunction with <code>setSize</code> so that
+ * <code>size</code> is identifiable as a JavaBean property.
+ *
+ * @return the number of components in this list
+ * @see #size()
+ */
+ @Override
+ public int getSize() {
+ return delegate.size();
+ }
+
+ /**
+ * Returns the component at the specified index.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>get(int)</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @param index an index into this list
+ * @return the component at the specified index
+ * @throws ArrayIndexOutOfBoundsException if the <code>index</code>
+ * is negative or greater than the current size of this
+ * list
+ * @see #get(int)
+ */
+ @Override
+ public E getElementAt(int index) {
+ return delegate.get(index);
+ }
+
+// /**
+// * Copies the components of this list into the specified array.
+// * The array must be big enough to hold all the objects in this list,
+// * else an <code>IndexOutOfBoundsException</code> is thrown.
+// *
+// * @param anArray the array into which the components get copied
+// * @see Vector#copyInto(Object[])
+// */
+// public void copyInto(Object anArray[]) {
+// delegate.copyInto(anArray);
+// }
+
+ /**
+ * Trims the capacity of this list to be the list's current size.
+ *
+ * @see Vector#trimToSize()
+ */
+ public void trimToSize() {
+ delegate.trimToSize();
+ }
+
+ /**
+ * Increases the capacity of this list, if necessary, to ensure
+ * that it can hold at least the number of components specified by
+ * the minimum capacity argument.
+ *
+ * @param minCapacity the desired minimum capacity
+ * @see Vector#ensureCapacity(int)
+ */
+ public void ensureCapacity(int minCapacity) {
+ delegate.ensureCapacity(minCapacity);
+ }
+
+ /**
+ * Sets the size of this list.
+ *
+ * @param newSize the new size of this list
+ * @see Vector#setSize(int)
+ */
+ public void setSize(int newSize) {
+ int oldSize = delegate.size();
+ delegate.ensureCapacity(newSize);
+ if (oldSize > newSize) {
+ fireIntervalRemoved(this, newSize, oldSize - 1);
+ } else if (oldSize < newSize) {
+ fireIntervalAdded(this, oldSize, newSize - 1);
+ }
+ }
+
+ /**
+ * Returns the current capacity of this list.
+ *
+ * @return the current capacity
+ * @see Vector#capacity()
+ */
+ public int capacity() {
+ return delegate.size();
+ }
+
+ /**
+ * Returns the number of components in this list.
+ *
+ * @return the number of components in this list
+ * @see Vector#size()
+ */
+ public int size() {
+ return delegate.size();
+ }
+
+ /**
+ * Tests whether this list has any components.
+ *
+ * @return <code>true</code> if and only if this list has
+ * no components, that is, its size is zero;
+ * <code>false</code> otherwise
+ * @see Vector#isEmpty()
+ */
+ public boolean isEmpty() {
+ return delegate.isEmpty();
+ }
+
+// /**
+// * Returns an enumeration of the components of this list.
+// *
+// * @return an enumeration of the components of this list
+// * @see Vector#elements()
+// */
+// public Enumeration<E> elements() {
+// return delegate.iterator().elements();
+// }
+
+ /**
+ * Tests whether the specified object is a component in this list.
+ *
+ * @param elem an object
+ * @return <code>true</code> if the specified object
+ * is the same as a component in this list
+ * @see Vector#contains(Object)
+ */
+ public boolean contains(E elem) {
+ return delegate.contains(elem);
+ }
+
+ /**
+ * Searches for the first occurrence of <code>elem</code>.
+ *
+ * @param elem an object
+ * @return the index of the first occurrence of the argument in this
+ * list; returns <code>-1</code> if the object is not found
+ * @see Vector#indexOf(Object)
+ */
+ public int indexOf(E elem) {
+ return delegate.indexOf(elem);
+ }
+
+ /**
+ * Searches for the first occurrence of <code>elem</code>, beginning
+ * the search at <code>index</code>.
+ *
+ * @param elem an desired component
+ * @param index the index from which to begin searching
+ * @return the index where the first occurrence of <code>elem</code>
+ * is found after <code>index</code>; returns <code>-1</code>
+ * if the <code>elem</code> is not found in the list
+ * @see Vector#indexOf(Object, int)
+ */
+ public int indexOf(E elem, int index) {
+ return delegate.indexOf(elem);
+ }
+
+ /**
+ * Returns the index of the last occurrence of <code>elem</code>.
+ *
+ * @param elem the desired component
+ * @return the index of the last occurrence of <code>elem</code>
+ * in the list; returns <code>-1</code> if the object is not found
+ * @see Vector#lastIndexOf(Object)
+ */
+ public int lastIndexOf(E elem) {
+ return delegate.lastIndexOf(elem);
+ }
+
+ /**
+ * Searches backwards for <code>elem</code>, starting from the
+ * specified index, and returns an index to it.
+ *
+ * @param elem the desired component
+ * @param index the index to start searching from
+ * @return the index of the last occurrence of the <code>elem</code>
+ * in this list at position less than <code>index</code>;
+ * returns <code>-1</code> if the object is not found
+ * @see Vector#lastIndexOf(Object, int)
+ */
+ public int lastIndexOf(E elem, int index) {
+ return delegate.lastIndexOf(elem);
+ }
+
+ /**
+ * Returns the component at the specified index.
+ * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+ * is negative or not less than the size of the list.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>get(int)</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @param index an index into this list
+ * @return the component at the specified index
+ * @see #get(int)
+ * @see Vector#elementAt(int)
+ */
+ public E elementAt(int index) {
+ return delegate.get(index);
+ }
+
+ /**
+ * Returns the first component of this list.
+ * Throws a <code>NoSuchElementException</code> if this
+ * vector has no components.
+ *
+ * @return the first component of this list
+ * @see Vector#firstElement()
+ */
+ public E firstElement() {
+ if (isEmpty()) {
+ throw new NoSuchElementException();
+ }
+ return delegate.get(0);
+ }
+
+ /**
+ * Returns the last component of the list.
+ * Throws a <code>NoSuchElementException</code> if this vector
+ * has no components.
+ *
+ * @return the last component of the list
+ * @see Vector#lastElement()
+ */
+ public E lastElement() {
+ if (isEmpty()) {
+ throw new NoSuchElementException();
+ }
+ return delegate.get(delegate.size() - 1);
+ }
+
+ /**
+ * Sets the component at the specified <code>index</code> of this
+ * list to be the specified element. The previous component at that
+ * position is discarded.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+ * is invalid.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>set(int,Object)</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @param element what the component is to be set to
+ * @param index the specified index
+ * @see #set(int, Object)
+ * @see Vector#setElementAt(Object, int)
+ */
+ public void setElementAt(E element, int index) {
+ delegate.set(index, element);
+ fireContentsChanged(this, index, index);
+ }
+
+ /**
+ * Deletes the component at the specified index.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+ * is invalid.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>remove(int)</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @param index the index of the object to remove
+ * @see #remove(int)
+ * @see Vector#removeElementAt(int)
+ */
+ public void removeElementAt(int index) {
+ delegate.remove(index);
+ fireIntervalRemoved(this, index, index);
+ }
+
+ /**
+ * Inserts the specified element as a component in this list at the
+ * specified <code>index</code>.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index
+ * is invalid.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>add(int,Object)</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @param element the component to insert
+ * @param index where to insert the new component
+ * @throws ArrayIndexOutOfBoundsException if the index was invalid
+ * @see #add(int, Object)
+ * @see Vector#insertElementAt(Object, int)
+ */
+ public void insertElementAt(E element, int index) {
+ delegate.set(index, element);
+ fireIntervalAdded(this, index, index);
+ }
+
+ /**
+ * Adds the specified component to the end of this list.
+ *
+ * @param element the component to be added
+ * @see Vector#addElement(Object)
+ */
+ public void addElement(E element) {
+ int index = delegate.size();
+ delegate.add(element);
+ fireIntervalAdded(this, index, index);
+ }
+
+ /**
+ * Removes the first (lowest-indexed) occurrence of the argument
+ * from this list.
+ *
+ * @param obj the component to be removed
+ * @return <code>true</code> if the argument was a component of this
+ * list; <code>false</code> otherwise
+ * @see Vector#removeElement(Object)
+ */
+ public boolean removeElement(E obj) {
+ int index = indexOf(obj);
+ boolean rv = delegate.remove(obj);
+ if (index >= 0) {
+ fireIntervalRemoved(this, index, index);
+ }
+ return rv;
+ }
+
+
+ /**
+ * Removes all components from this list and sets its size to zero.
+ * <blockquote>
+ * <b>Note:</b> Although this method is not deprecated, the preferred
+ * method to use is <code>clear</code>, which implements the
+ * <code>List</code> interface defined in the 1.2 Collections framework.
+ * </blockquote>
+ *
+ * @see #clear()
+ * @see Vector#removeAllElements()
+ */
+ public void removeAllElements() {
+ int index1 = delegate.size() - 1;
+ delegate.clear();
+ if (index1 >= 0) {
+ fireIntervalRemoved(this, 0, index1);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return delegate.toString();
+ }
+
+
+ /* The remaining methods are included for compatibility with the
+ * Java 2 platform Vector class.
+ */
+
+ /**
+ * Returns an array containing all of the elements in this list in the
+ * correct order.
+ *
+ * @return an array containing the elements of the list
+ * @see Vector#toArray()
+ */
+ public Object[] toArray() {
+ Object[] rv = delegate.toArray();
+ return rv;
+ }
+
+ /**
+ * Returns the element at the specified position in this list.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code>
+ * if the index is out of range
+ * (<code>index < 0 || index >= size()</code>).
+ *
+ * @param index index of element to return
+ */
+ public E get(int index) {
+ return delegate.get(index);
+ }
+
+ /**
+ * Replaces the element at the specified position in this list with the
+ * specified element.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code>
+ * if the index is out of range
+ * (<code>index < 0 || index >= size()</code>).
+ *
+ * @param index index of element to replace
+ * @param element element to be stored at the specified position
+ * @return the element previously at the specified position
+ */
+ public E set(int index, E element) {
+ E rv = delegate.set(index, element);
+ fireContentsChanged(this, index, index);
+ return rv;
+ }
+
+ /**
+ * Inserts the specified element at the specified position in this list.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code> if the
+ * index is out of range
+ * (<code>index < 0 || index > size()</code>).
+ *
+ * @param index index at which the specified element is to be inserted
+ * @param element element to be inserted
+ */
+ public void add(int index, E element) {
+ delegate.add(index, element);
+ fireIntervalAdded(this, index, index);
+ }
+
+ public void setAllElements(Collection<E> objects) {
+ removeAllElements();
+ addAllElements(objects);
+ }
+
+ public void addAllElements(Collection<E> elements) {
+ if (CollectionUtils.isNotEmpty(elements)) {
+
+ int firstIndex = delegate.size();
+ this.delegate.addAll(elements);
+ int lastIndex = delegate.size() - 1;
+ if (lastIndex > -1) {
+ fireIntervalAdded(this, firstIndex, lastIndex);
+ }
+ }
+ }
+
+ /**
+ * Removes the element at the specified position in this list.
+ * Returns the element that was removed from the list.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code>
+ * if the index is out of range
+ * (<code>index < 0 || index >= size()</code>).
+ *
+ * @param index the index of the element to removed
+ * @return the element previously at the specified position
+ */
+ public E remove(int index) {
+ E rv = delegate.remove(index);
+ fireIntervalRemoved(this, index, index);
+ return rv;
+ }
+
+ /**
+ * Removes all of the elements from this list. The list will
+ * be empty after this call returns (unless it throws an exception).
+ */
+ public void clear() {
+ int index1 = delegate.size() - 1;
+ delegate.clear();
+ if (index1 >= 0) {
+ fireIntervalRemoved(this, 0, index1);
+ }
+ }
+
+ /**
+ * Deletes the components at the specified range of indexes.
+ * The removal is inclusive, so specifying a range of (1,5)
+ * removes the component at index 1 and the component at index 5,
+ * as well as all components in between.
+ * <p/>
+ * Throws an <code>ArrayIndexOutOfBoundsException</code>
+ * if the index was invalid.
+ * Throws an <code>IllegalArgumentException</code> if
+ * <code>fromIndex > toIndex</code>.
+ *
+ * @param fromIndex the index of the lower end of the range
+ * @param toIndex the index of the upper end of the range
+ * @see #remove(int)
+ */
+ public void removeRange(int fromIndex, int toIndex) {
+ if (fromIndex > toIndex) {
+ throw new IllegalArgumentException("fromIndex must be <= toIndex");
+ }
+ for (int i = toIndex; i >= fromIndex; i--) {
+ delegate.remove(i);
+ }
+ fireIntervalRemoved(this, fromIndex, toIndex);
+ }
+
+
+
+ /*
+ public void addAll(Collection c) {
+ }
+
+ public void addAll(int index, Collection c) {
+ }*/
+}
\ No newline at end of file
Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java 2013-02-05 09:02:11 UTC (rev 2557)
@@ -1,14 +1,34 @@
package jaxx.runtime.validator.swing;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
+/*
+ * #%L
+ * JAXX :: Validator
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2013 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>.
+ * #L%
+ */
+
+import jaxx.runtime.SwingUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JDialog;
@@ -18,32 +38,34 @@
import javax.swing.JToggleButton;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import jaxx.runtime.SwingUtil;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
/**
- * Button which opens a popup containing a table with the errors found
+ * Button which opens a popup containing a table with the errors found
* by registered validators.
- *
+ *
* @author kmorin <kmorin(a)codelutin.com>
* @since 2.5.10
*/
public class SwingValidatorMessageWidget extends JToggleButton {
private static final Log log = LogFactory.getLog(SwingValidatorMessageWidget.class);
-
+
+ private static final long serialVersionUID = 1L;
+
protected SwingValidatorMessageTableModel errorTableModel = new SwingValidatorMessageTableModel();
-
+
protected JDialog popup = new JDialog();
-
+
protected JTable errorTable = new JTable();
-
+
public SwingValidatorMessageWidget() {
super(SwingUtil.createActionIcon("table-error"));
-
+
errorTable.setModel(errorTableModel);
errorTable.setRowSelectionAllowed(true);
errorTable.setAutoCreateRowSorter(true);
@@ -51,20 +73,20 @@
errorTable.setCellSelectionEnabled(false);
errorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
errorTable.setFillsViewportHeight(true);
-
+
SwingValidatorUtil.installUI(errorTable,
new SwingValidatorMessageTableRenderer());
-
+
JScrollPane scrollPanel = new JScrollPane(errorTable);
scrollPanel.setColumnHeaderView(errorTable.getTableHeader());
popup.add(scrollPanel);
popup.setSize(800, 300);
-
+
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- if(isSelected()) {
+ if (isSelected()) {
popup.setVisible(true);
} else {
popup.dispose();
@@ -77,9 +99,9 @@
public void windowClosing(WindowEvent e) {
setSelected(false);
}
-
+
});
-
+
// add a auto-close action
JRootPane rootPane = popup.getRootPane();
@@ -97,13 +119,13 @@
}
});
}
-
+
public void registerValidator(SwingValidator validator) {
errorTableModel.registerValidator(validator);
}
-
+
public void clearValidators() {
errorTableModel.clearValidators();
}
-
+
}
Property changes on: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-table-error.png
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css 2013-02-05 09:02:11 UTC (rev 2557)
@@ -70,6 +70,7 @@
}
#combobox {
+ model: {new JaxxDefaultComboBoxModel<O>()};
selectedItem:{getSelectedItem()};
enabled:{isEnabled()};
editable:{isEditable()};
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx 2013-02-05 09:02:11 UTC (rev 2557)
@@ -28,6 +28,7 @@
onFocusGained='combobox.requestFocus()' onFocusLost='hidePopup()'>
<import>
+ jaxx.runtime.swing.model.JaxxDefaultComboBoxModel
org.nuiton.util.decorator.JXPathDecorator
javax.swing.border.TitledBorder
</import>
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.css
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.css 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.css 2013-02-05 09:02:11 UTC (rev 2557)
@@ -21,13 +21,9 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>.
* #L%
*/
-#model {
- universeModel:{universeList.getModel()};
- selectedModel:{selectedList.getModel()};
-}
#universeList {
- model:{new DefaultListModel()};
+ model:{model.getUniverseModel()};
}
#addButton {
@@ -37,7 +33,7 @@
}
#selectedList {
- model:{new DefaultListModel()};
+ model:{model.getSelectedModel()};
}
#removeButton {
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx 2013-02-05 09:02:11 UTC (rev 2557)
@@ -24,6 +24,7 @@
<Table genericType='O' implements='jaxx.runtime.bean.BeanTypeAware<O>'>
<import>
+ jaxx.runtime.swing.model.JaxxDefaultListModel
org.nuiton.util.decorator.JXPathDecorator
javax.swing.DefaultListModel
</import>
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2013-01-09 18:40:51 UTC (rev 2556)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2013-02-05 09:02:11 UTC (rev 2557)
@@ -25,11 +25,11 @@
*/
import com.google.common.collect.Lists;
+import jaxx.runtime.swing.model.JaxxDefaultListModel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.beans.AbstractSerializableBean;
-import javax.swing.DefaultListModel;
import javax.swing.ListModel;
import java.util.ArrayList;
import java.util.List;
@@ -57,13 +57,13 @@
protected List<O> universe = new ArrayList<O>();
/** Model containing the remaining available items */
- protected ListModel universeModel = new DefaultListModel();
+ protected JaxxDefaultListModel<O> universeModel = new JaxxDefaultListModel<O>();
/** List of the selected items */
protected List<O> selected = new ArrayList<O>();
/** Model containing the selected items */
- protected ListModel selectedModel = new DefaultListModel();
+ protected JaxxDefaultListModel<O> selectedModel = new JaxxDefaultListModel<O>();
protected boolean addEnabled;
@@ -94,7 +94,7 @@
selected = Lists.newArrayList();
}
this.selected.clear();
- ((DefaultListModel) selectedModel).clear();
+ selectedModel.clear();
addToSelected(selected);
}
@@ -122,9 +122,10 @@
}
protected void resetUniverse() {
- ((DefaultListModel) universeModel).clear();
+ universeModel.clear();
+ universeModel.addAllElements(universe);
for (O item : universe) {
- ((DefaultListModel) universeModel).addElement(item);
+ universeModel.addElement(item);
}
}
@@ -132,17 +133,17 @@
return selectedModel;
}
- public void setSelectedModel(ListModel selectedModel) {
- this.selectedModel = selectedModel;
- }
+// public void setSelectedModel(ListModel selectedModel) {
+// this.selectedModel = selectedModel;
+// }
public ListModel getUniverseModel() {
return universeModel;
}
- public void setUniverseModel(ListModel universeModel) {
- this.universeModel = universeModel;
- }
+// public void setUniverseModel(ListModel universeModel) {
+// this.universeModel = universeModel;
+// }
/**
* Adds an item to the selected items.
@@ -151,8 +152,8 @@
*/
public void addToSelected(O item) {
selected.add(item);
- ((DefaultListModel) selectedModel).addElement(item);
- ((DefaultListModel) universeModel).removeElement(item);
+ selectedModel.addElement(item);
+ universeModel.removeElement(item);
}
/**
@@ -163,8 +164,8 @@
public void addToSelected(List<O> items) {
selected.addAll(items);
for (O item : items) {
- ((DefaultListModel) selectedModel).addElement(item);
- ((DefaultListModel) universeModel).removeElement(item);
+ selectedModel.addElement(item);
+ universeModel.removeElement(item);
}
}
@@ -175,7 +176,7 @@
*/
public void removeFromSelected(O item) {
selected.remove(item);
- ((DefaultListModel) selectedModel).removeElement(item);
+ selectedModel.removeElement(item);
addToUniverseList(item);
}
@@ -187,7 +188,7 @@
public void removeFromSelected(List<O> items) {
selected.removeAll(items);
for (O item : items) {
- ((DefaultListModel) selectedModel).removeElement(item);
+ selectedModel.removeElement(item);
addToUniverseList(item);
}
}
@@ -219,27 +220,25 @@
* @param item the item to add to the universe list
*/
protected void addToUniverseList(O item) {
- DefaultListModel universeDefaultListModel = (DefaultListModel) universeModel;
- // the maximum index where we should insert the item is its index
+ // the maximum index where we should insert the item is its index
// in the list of all the available items
int index = universe.indexOf(item);
// if the index is upper than the size of the list of the remaining available items,
// get the size of this list
- int insertionIndex = Math.min(index, universeDefaultListModel.getSize());
+ int insertionIndex = Math.min(index, universeModel.getSize());
// we decrease the index to insert until we meet an item whose index
// in the list of all the available index is lower than the one of the item
// we want to insert
while (insertionIndex > 0) {
- O o = (O) universeDefaultListModel.get(--insertionIndex);
+ O o = universeModel.get(--insertionIndex);
int oIndex = universe.indexOf(o);
if (oIndex < index) {
insertionIndex++;
break;
}
}
- ;
- universeDefaultListModel.add(insertionIndex, item);
+ universeModel.add(insertionIndex, item);
}
}
1
0