forked from LupusNobilis/java-org.hwo.ui
WIP161028
parent
82124f8e9e
commit
b563f61a1c
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/org.hwo"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/org.hwo"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.source=1.8
|
org.eclipse.jdt.core.compiler.source=1.7
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.hwo.models.TableMapper;
|
package org.hwo.models.TableMapper;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.EventQueue;
|
||||||
import java.awt.MouseInfo;
|
import java.awt.MouseInfo;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
|
@ -25,7 +27,12 @@ import javax.swing.JFrame;
|
||||||
import javax.swing.JTable;
|
import javax.swing.JTable;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
import javax.swing.table.AbstractTableModel;
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
<<<<<<< Updated upstream
|
||||||
import javax.swing.table.TableRowSorter;
|
import javax.swing.table.TableRowSorter;
|
||||||
|
=======
|
||||||
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
|
import javax.swing.table.TableCellRenderer;
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
import org.hwo.csv.CSV;
|
import org.hwo.csv.CSV;
|
||||||
import org.hwo.csv.CSVRecord;
|
import org.hwo.csv.CSVRecord;
|
||||||
|
@ -37,6 +44,9 @@ import org.hwo.ui.KeyStrokeListener;
|
||||||
import org.hwo.ui.KeyStrokeParameters;
|
import org.hwo.ui.KeyStrokeParameters;
|
||||||
import org.w3c.dom.views.AbstractView;
|
import org.w3c.dom.views.AbstractView;
|
||||||
|
|
||||||
|
import static org.hwo.logging.Logging.*;
|
||||||
|
import static org.hwo.logging.LogLevel.*;
|
||||||
|
|
||||||
public class TableMapper extends AbstractTableModel
|
public class TableMapper extends AbstractTableModel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -279,6 +289,9 @@ public class TableMapper extends AbstractTableModel
|
||||||
|
|
||||||
private KeyStrokeHelper keyStrokeHelper;
|
private KeyStrokeHelper keyStrokeHelper;
|
||||||
|
|
||||||
|
private TableMapperColorSourceInterface
|
||||||
|
colorSourceInterface;
|
||||||
|
|
||||||
public TableMapper(Class<?> clazz,JTable table)
|
public TableMapper(Class<?> clazz,JTable table)
|
||||||
{
|
{
|
||||||
this.tableMapperListeners = new LinkedList<TableMapperListener>();
|
this.tableMapperListeners = new LinkedList<TableMapperListener>();
|
||||||
|
@ -312,8 +325,14 @@ public class TableMapper extends AbstractTableModel
|
||||||
table.setModel(this);
|
table.setModel(this);
|
||||||
table.setColumnModel(new TableMapperColumnModel(this));
|
table.setColumnModel(new TableMapperColumnModel(this));
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
table.setAutoCreateRowSorter(false);
|
table.setAutoCreateRowSorter(false);
|
||||||
setSortingEnabled(true);
|
setSortingEnabled(true);
|
||||||
|
=======
|
||||||
|
table.setAutoCreateRowSorter(true);
|
||||||
|
|
||||||
|
table.setDefaultRenderer(Object.class, new TableCellRenderer());
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
mouseAdapter = new MouseAdapter() {
|
mouseAdapter = new MouseAdapter() {
|
||||||
|
|
||||||
|
@ -330,6 +349,7 @@ public class TableMapper extends AbstractTableModel
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
table.addMouseListener(mouseAdapter);
|
||||||
|
|
||||||
if (InteractiveObjectHelper.isInteractiveObject(editorObjectClass))
|
if (InteractiveObjectHelper.isInteractiveObject(editorObjectClass))
|
||||||
setEditorEnabled(true);
|
setEditorEnabled(true);
|
||||||
|
@ -367,6 +387,7 @@ public class TableMapper extends AbstractTableModel
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
private void initializeJTable(){
|
private void initializeJTable(){
|
||||||
if (sortingEnabled){
|
if (sortingEnabled){
|
||||||
this.jTable.setRowSorter(new TableRowSorter<TableMapper>(this));
|
this.jTable.setRowSorter(new TableRowSorter<TableMapper>(this));
|
||||||
|
@ -382,6 +403,13 @@ public class TableMapper extends AbstractTableModel
|
||||||
public void setSortingEnabled(boolean sortingEnabled) {
|
public void setSortingEnabled(boolean sortingEnabled) {
|
||||||
this.sortingEnabled = sortingEnabled;
|
this.sortingEnabled = sortingEnabled;
|
||||||
initializeJTable();
|
initializeJTable();
|
||||||
|
=======
|
||||||
|
public TableMapperColorSourceInterface getColorSourceInterface() {
|
||||||
|
return colorSourceInterface;
|
||||||
|
}
|
||||||
|
public void setColorSourceInterface(TableMapperColorSourceInterface colorSourceInterface) {
|
||||||
|
this.colorSourceInterface = colorSourceInterface;
|
||||||
|
>>>>>>> Stashed changes
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addListSelectionListener(ListSelectionListener listener)
|
public void addListSelectionListener(ListSelectionListener listener)
|
||||||
|
@ -646,12 +674,21 @@ public class TableMapper extends AbstractTableModel
|
||||||
this.p_rows.add(row);
|
this.p_rows.add(row);
|
||||||
//fireTableRowsInserted(getRowCount()-1, getRowCount()-1);
|
//fireTableRowsInserted(getRowCount()-1, getRowCount()-1);
|
||||||
fireTableDataChanged();
|
fireTableDataChanged();
|
||||||
|
|
||||||
|
if (TableMapperValue.class.isInstance(row)){
|
||||||
|
TableMapperValue tmv = (TableMapperValue)row;
|
||||||
|
tmv.assignTableMapper(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void removeRow(Object row)
|
public void removeRow(Object row)
|
||||||
{
|
{
|
||||||
int index = this.p_rows.indexOf(row);
|
int index = this.p_rows.indexOf(row);
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
{
|
{
|
||||||
|
if (TableMapperValue.class.isInstance(row)){
|
||||||
|
TableMapperValue tmv = (TableMapperValue)row;
|
||||||
|
tmv.assignTableMapper(this);
|
||||||
|
}
|
||||||
this.p_rows.remove(index);
|
this.p_rows.remove(index);
|
||||||
fireTableRowsDeleted(index, index);
|
fireTableRowsDeleted(index, index);
|
||||||
};
|
};
|
||||||
|
@ -821,6 +858,28 @@ public class TableMapper extends AbstractTableModel
|
||||||
this.p_editoronpointer = b;
|
this.p_editoronpointer = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void signalRowChanged(Object row){
|
||||||
|
if (p_rows.contains(row)){
|
||||||
|
fireTableRowsUpdated(p_rows.indexOf(row), p_rows.indexOf(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class TableCellRenderer extends DefaultTableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
|
||||||
|
int row, int column) {
|
||||||
|
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
|
||||||
|
|
||||||
|
if (colorSourceInterface != null){
|
||||||
|
c.setForeground( colorSourceInterface.getColor(getRow(row), column, hasFocus, isSelected) );
|
||||||
|
c.setBackground( colorSourceInterface.getBackgroundColor(getRow(row), column, hasFocus, isSelected) );
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package org.hwo.models.TableMapper;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
public interface TableMapperColorSourceInterface {
|
||||||
|
|
||||||
|
public Color getColor(Object row,int column,boolean hasFocus,boolean isSelected);
|
||||||
|
public Color getBackgroundColor(Object row,int column,boolean hasFocus,boolean isSelected);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.hwo.models.TableMapper;
|
||||||
|
|
||||||
|
public interface TableMapperValue {
|
||||||
|
|
||||||
|
void assignTableMapper(TableMapper tableMapper);
|
||||||
|
void unassignTableMapper(TableMapper tableMapper);
|
||||||
|
}
|
|
@ -0,0 +1,153 @@
|
||||||
|
package org.hwo.ui;
|
||||||
|
|
||||||
|
import java.awt.KeyboardFocusManager;
|
||||||
|
|
||||||
|
import java.awt.Window;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
|
||||||
|
import javax.swing.JInternalFrame;
|
||||||
|
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
* Copies the fix for bug 6505027 from Java 7
|
||||||
|
|
||||||
|
* http://hg.openjdk.java.net/jdk7/jdk7/jdk/rev/f727cac13697
|
||||||
|
|
||||||
|
* Some support code (private) needed to be copied as well
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class InternalFrameFix extends JInternalFrame {
|
||||||
|
|
||||||
|
public InternalFrameFix() {
|
||||||
|
|
||||||
|
addPropertyChangeListenerIfNecessary();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private java.awt.Component lastFocusOwner;
|
||||||
|
|
||||||
|
private void setLastFocusOwner(java.awt.Component lastFocusOwner) {
|
||||||
|
|
||||||
|
this.lastFocusOwner = lastFocusOwner;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean initializedFocusPropertyChangeListener = false;
|
||||||
|
|
||||||
|
private static void addPropertyChangeListenerIfNecessary() {
|
||||||
|
|
||||||
|
if (!initializedFocusPropertyChangeListener) {
|
||||||
|
|
||||||
|
PropertyChangeListener focusListener =
|
||||||
|
|
||||||
|
new FocusPropertyChangeListener();
|
||||||
|
|
||||||
|
initializedFocusPropertyChangeListener = true;
|
||||||
|
|
||||||
|
KeyboardFocusManager.getCurrentKeyboardFocusManager().
|
||||||
|
|
||||||
|
addPropertyChangeListener(focusListener);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FocusPropertyChangeListener implements
|
||||||
|
|
||||||
|
PropertyChangeListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
|
||||||
|
public void propertyChange(PropertyChangeEvent e) {
|
||||||
|
|
||||||
|
if (e.getPropertyName().equals("permanentFocusOwner")) {
|
||||||
|
|
||||||
|
updateLastFocusOwner((java.awt.Component) e.getNewValue());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateLastFocusOwner(java.awt.Component component) {
|
||||||
|
|
||||||
|
if (component != null) {
|
||||||
|
|
||||||
|
java.awt.Component parent = component;
|
||||||
|
|
||||||
|
while (parent != null && !(parent instanceof Window)) {
|
||||||
|
|
||||||
|
if (parent instanceof InternalFrameFix) {
|
||||||
|
|
||||||
|
// Update lastFocusOwner for parent.
|
||||||
|
|
||||||
|
((InternalFrameFix) parent).setLastFocusOwner(component);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
parent = parent.getParent();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
|
||||||
|
public void restoreSubcomponentFocus() {
|
||||||
|
|
||||||
|
if (isIcon()) {
|
||||||
|
|
||||||
|
super.restoreSubcomponentFocus(); //delegated to super implementation, because it's correct there
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
java.awt.Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
|
||||||
|
|
||||||
|
if ((component == null) || !SwingUtilities.isDescendingFrom(component, this)) {
|
||||||
|
|
||||||
|
// FocusPropertyChangeListener will eventually update
|
||||||
|
|
||||||
|
// lastFocusOwner. As focus requests are asynchronous
|
||||||
|
|
||||||
|
// lastFocusOwner may be accessed before it has been correctly
|
||||||
|
|
||||||
|
// updated. To avoid any problems, lastFocusOwner is immediately
|
||||||
|
|
||||||
|
// set, assuming the request will succeed.
|
||||||
|
|
||||||
|
setLastFocusOwner(getMostRecentFocusOwner());
|
||||||
|
|
||||||
|
if (lastFocusOwner == null) {
|
||||||
|
|
||||||
|
// Make sure focus is restored somewhere, so that
|
||||||
|
|
||||||
|
// we don't leave a focused component in another frame while
|
||||||
|
|
||||||
|
// this frame is selected.
|
||||||
|
|
||||||
|
setLastFocusOwner(getContentPane());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lastFocusOwner.hasFocus()) {
|
||||||
|
|
||||||
|
lastFocusOwner.requestFocus();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -15,11 +15,12 @@ import org.hwo.ui.diagram.LinearScaler;
|
||||||
import org.hwo.ui.diagram.PlotLabeler;
|
import org.hwo.ui.diagram.PlotLabeler;
|
||||||
import org.hwo.ui.diagram.PlotPainter;
|
import org.hwo.ui.diagram.PlotPainter;
|
||||||
import org.hwo.ui.diagram.PlotProvider2;
|
import org.hwo.ui.diagram.PlotProvider2;
|
||||||
|
import org.hwo.ui.diagram.PlotProviderListener;
|
||||||
import org.hwo.ui.diagram.Scaler;
|
import org.hwo.ui.diagram.Scaler;
|
||||||
import org.hwo.ui.diagram.SimplePlotLabeler;
|
import org.hwo.ui.diagram.SimplePlotLabeler;
|
||||||
import org.hwo.ui.diagram.SimplePlotProvider;
|
import org.hwo.ui.diagram.SimplePlotProvider;
|
||||||
|
|
||||||
public class JDiagram extends JComponent {
|
public class JDiagram extends JComponent implements PlotProviderListener {
|
||||||
|
|
||||||
private PlotProvider2
|
private PlotProvider2
|
||||||
plotProvider;
|
plotProvider;
|
||||||
|
@ -75,6 +76,7 @@ public class JDiagram extends JComponent {
|
||||||
setMinimumSize(new Dimension(80, 80));
|
setMinimumSize(new Dimension(80, 80));
|
||||||
setDoubleBuffered(true);
|
setDoubleBuffered(true);
|
||||||
|
|
||||||
|
|
||||||
defaultLabeler = new SimplePlotLabeler();
|
defaultLabeler = new SimplePlotLabeler();
|
||||||
abszissLabeler = defaultLabeler;
|
abszissLabeler = defaultLabeler;
|
||||||
|
|
||||||
|
@ -93,7 +95,13 @@ public class JDiagram extends JComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlotProvider(PlotProvider2 plotProvider) {
|
public void setPlotProvider(PlotProvider2 plotProvider) {
|
||||||
|
if (this.plotProvider != null)
|
||||||
|
this.plotProvider.removePlotProviderListener(this);
|
||||||
|
|
||||||
this.plotProvider = plotProvider;
|
this.plotProvider = plotProvider;
|
||||||
|
if (this.plotProvider != null)
|
||||||
|
this.plotProvider.addPlotProviderListener(this);
|
||||||
|
|
||||||
fundamentalsChanged();
|
fundamentalsChanged();
|
||||||
}
|
}
|
||||||
public PlotProvider2 getPlotProvider() {
|
public PlotProvider2 getPlotProvider() {
|
||||||
|
@ -558,4 +566,11 @@ public class JDiagram extends JComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fundamentalsChanged(PlotProvider2 plotProvider) {
|
||||||
|
fundamentalsChanged();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.awt.FlowLayout;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
import java.awt.Dialog.ModalExclusionType;
|
import java.awt.Dialog.ModalExclusionType;
|
||||||
|
@ -13,6 +14,8 @@ import java.awt.GridBagLayout;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.JWindow;
|
||||||
|
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
@ -21,8 +24,14 @@ public class JInputDialog extends JDialog {
|
||||||
|
|
||||||
|
|
||||||
public static String show(String title,String message,String preload){
|
public static String show(String title,String message,String preload){
|
||||||
|
return show(null,title,message,preload);
|
||||||
|
}
|
||||||
|
public static String show(JFrame parent,String title,String message,String preload){
|
||||||
|
|
||||||
JInputDialog jid = new JInputDialog();
|
JInputDialog jid = new JInputDialog();
|
||||||
|
if (parent != null){
|
||||||
|
jid.setLocationRelativeTo(parent);
|
||||||
|
}
|
||||||
jid.setTitle(title);
|
jid.setTitle(title);
|
||||||
jid.lMessage.setText(message);
|
jid.lMessage.setText(message);
|
||||||
jid.setInputText(preload);
|
jid.setInputText(preload);
|
||||||
|
|
|
@ -24,6 +24,12 @@ public class JMappedTable extends JTable {
|
||||||
this.tableMapper.removeTableMapperListener(tableMapperListener);
|
this.tableMapper.removeTableMapperListener(tableMapperListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setEditorEnabled(boolean enabled){
|
||||||
|
tableMapper.setEditorEnabled(enabled);
|
||||||
|
}
|
||||||
|
public boolean isEditorEnabled(){
|
||||||
|
return tableMapper.isEditorEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,4 +219,20 @@ public class AnnotatedPlotProvider implements PlotProvider2{
|
||||||
public Float getPositionMaximum() {
|
public Float getPositionMaximum() {
|
||||||
return this.values.size()-1.0f;
|
return this.values.size()-1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LinkedList<PlotProviderListener> plotProviderListeners = new LinkedList<PlotProviderListener>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPlotProviderListener(PlotProviderListener listener) {
|
||||||
|
plotProviderListeners.add(listener);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void removePlotProviderListener(PlotProviderListener listener) {
|
||||||
|
plotProviderListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireFundamentalsChanged(){
|
||||||
|
for (PlotProviderListener l: plotProviderListeners)
|
||||||
|
l.fundamentalsChanged(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,4 +18,7 @@ public interface PlotProvider2 {
|
||||||
|
|
||||||
public Color[] getColors();
|
public Color[] getColors();
|
||||||
|
|
||||||
|
public void addPlotProviderListener(PlotProviderListener listener);
|
||||||
|
public void removePlotProviderListener(PlotProviderListener listener);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.hwo.ui.diagram;
|
||||||
|
|
||||||
|
public interface PlotProviderListener {
|
||||||
|
|
||||||
|
void fundamentalsChanged(PlotProvider2 plotProvider);
|
||||||
|
|
||||||
|
}
|
|
@ -41,11 +41,13 @@ public class SimplePlotLabeler implements PlotLabeler {
|
||||||
String.format("%%.%df",-digits),
|
String.format("%%.%df",-digits),
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
} else {
|
} else if (digits > 0){
|
||||||
return String.format(
|
return String.format(
|
||||||
String.format("%%%d.2f",-digits),
|
String.format("%%%d.2f",digits),
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
return String.format("%4f",value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.hwo.ui.diagram;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
public class SimplePlotProvider implements PlotProvider2 {
|
public class SimplePlotProvider implements PlotProvider2 {
|
||||||
|
|
||||||
|
@ -104,4 +105,20 @@ public class SimplePlotProvider implements PlotProvider2 {
|
||||||
return (float)0;
|
return (float)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private LinkedList<PlotProviderListener> plotProviderListeners = new LinkedList<PlotProviderListener>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPlotProviderListener(PlotProviderListener listener) {
|
||||||
|
plotProviderListeners.add(listener);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void removePlotProviderListener(PlotProviderListener listener) {
|
||||||
|
plotProviderListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireFundamentalsChanged(){
|
||||||
|
for (PlotProviderListener l: plotProviderListeners)
|
||||||
|
l.fundamentalsChanged(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package org.hwo.ui.jtable;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
|
||||||
|
import javax.swing.JTable;
|
||||||
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
|
|
||||||
|
public class ExtendedTableCellRenderer extends DefaultTableCellRenderer {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
|
||||||
|
int row, int column) {
|
||||||
|
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
|
||||||
|
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,149 @@
|
||||||
|
package org.hwo.ui.tree;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.event.TreeModelEvent;
|
||||||
|
import javax.swing.event.TreeModelListener;
|
||||||
|
import javax.swing.tree.TreeModel;
|
||||||
|
import javax.swing.tree.TreePath;
|
||||||
|
|
||||||
|
import org.hwo.StringHelper;
|
||||||
|
|
||||||
|
public class AutomatedTreeModel implements TreeModel,AutomatedTreeNodeListener {
|
||||||
|
|
||||||
|
List<TreeModelListener> treeModelListeners;
|
||||||
|
AutomatedTreeNode root;
|
||||||
|
|
||||||
|
public AutomatedTreeModel() {
|
||||||
|
treeModelListeners = new LinkedList<>();
|
||||||
|
this.root = new InternalRootNode();
|
||||||
|
this.root.addAutomatedTreeNodeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutomatedTreeModel(AutomatedTreeNode root) {
|
||||||
|
treeModelListeners = new LinkedList<>();
|
||||||
|
this.root = root;
|
||||||
|
this.root.addAutomatedTreeNodeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getRoot() {
|
||||||
|
return this.root;
|
||||||
|
}
|
||||||
|
public void setRoot(AutomatedTreeNode root) {
|
||||||
|
this.root.removeAutomatedTreeNodeListener(this);
|
||||||
|
this.root = root;
|
||||||
|
this.root.addAutomatedTreeNodeListener(this);
|
||||||
|
fireTreeStructureChanged(new TreeModelEvent(this.root, new Object[]{ this.root }));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTreeModelListener(TreeModelListener l) {
|
||||||
|
treeModelListeners.add(l);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void removeTreeModelListener(TreeModelListener l) {
|
||||||
|
treeModelListeners.remove(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getChild(Object parent, int index) {
|
||||||
|
AutomatedTreeNode node = (AutomatedTreeNode)parent;
|
||||||
|
return node.getChild(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildCount(Object parent) {
|
||||||
|
AutomatedTreeNode node = (AutomatedTreeNode)parent;
|
||||||
|
return node.getChildren().length;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIndexOfChild(Object parent, Object child) {
|
||||||
|
AutomatedTreeNode node = (AutomatedTreeNode)parent;
|
||||||
|
return node.getIndexOfChild((AutomatedTreeNode)child);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLeaf(Object parent) {
|
||||||
|
AutomatedTreeNode node = (AutomatedTreeNode)parent;
|
||||||
|
return node.getChildren().length > 0 ? false : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void valueForPathChanged(TreePath path, Object newValue) {
|
||||||
|
System.err.println("valueForPathChanged(...)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class InternalRootNode extends AutomatedTreeNode {
|
||||||
|
|
||||||
|
public InternalRootNode() {
|
||||||
|
super(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(AutomatedTreeNode o) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ROOT NODE";
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void childInserted(AutomatedTreeNode node, AutomatedTreeNode child) {
|
||||||
|
TreeModelEvent tme = new TreeModelEvent(
|
||||||
|
node,
|
||||||
|
node.getPath(),
|
||||||
|
new int[]{ node.getIndexOfChild( child ) },
|
||||||
|
new Object[]{ child }
|
||||||
|
);
|
||||||
|
|
||||||
|
System.err.println(String.format("childInserted: %s [ %d = %s ]",StringHelper.join(Arrays.asList(tme.getPath()), "." ),tme.getChildIndices()[0],tme.getChildren()[0] ));
|
||||||
|
|
||||||
|
fireTreeNodesInserted(tme);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void childRemoved(AutomatedTreeNode node, AutomatedTreeNode child, int index) {
|
||||||
|
TreeModelEvent tme = new TreeModelEvent(
|
||||||
|
node,
|
||||||
|
node.getPath(),
|
||||||
|
new int[]{ index },
|
||||||
|
new Object[]{ child }
|
||||||
|
);
|
||||||
|
|
||||||
|
System.err.println(String.format("childRemoved: %s [ %d = %s ]",StringHelper.join(Arrays.asList(tme.getPath()), "." ),tme.getChildIndices()[0],tme.getChildren()[0].toString() ));
|
||||||
|
|
||||||
|
fireTreeNodesRemoved(tme);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireTreeNodesChanged(TreeModelEvent e){
|
||||||
|
for (TreeModelListener l: this.treeModelListeners)
|
||||||
|
l.treeNodesChanged(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireTreeNodesInserted(TreeModelEvent e){
|
||||||
|
for (TreeModelListener l: this.treeModelListeners)
|
||||||
|
l.treeNodesInserted(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireTreeNodesRemoved(TreeModelEvent e){
|
||||||
|
for (TreeModelListener l: this.treeModelListeners)
|
||||||
|
l.treeNodesRemoved(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireTreeStructureChanged(TreeModelEvent e){
|
||||||
|
for (TreeModelListener l: this.treeModelListeners)
|
||||||
|
l.treeStructureChanged(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
package org.hwo.ui.tree;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hwo.collections.SortedList;
|
||||||
|
|
||||||
|
public abstract class AutomatedTreeNode implements Comparable<AutomatedTreeNode>, AutomatedTreeNodeListener {
|
||||||
|
|
||||||
|
AutomatedTreeNode parent;
|
||||||
|
LinkedList<AutomatedTreeNodeListener>
|
||||||
|
automatedTreeNodeListeners;
|
||||||
|
SortedList<AutomatedTreeNode> children;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AutomatedTreeNode(AutomatedTreeNode parent){
|
||||||
|
this.parent = parent;
|
||||||
|
this.automatedTreeNodeListeners = new LinkedList<AutomatedTreeNodeListener>();
|
||||||
|
this.children = new SortedList<AutomatedTreeNode>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAutomatedTreeNodeListener(AutomatedTreeNodeListener listener){
|
||||||
|
this.automatedTreeNodeListeners.add(listener);
|
||||||
|
};
|
||||||
|
|
||||||
|
public void removeAutomatedTreeNodeListener(AutomatedTreeNodeListener listener){
|
||||||
|
this.automatedTreeNodeListeners.remove(listener);
|
||||||
|
};
|
||||||
|
|
||||||
|
private void fireChildInserted(AutomatedTreeNode parent,AutomatedTreeNode child){
|
||||||
|
for (AutomatedTreeNodeListener l: automatedTreeNodeListeners){
|
||||||
|
l.childInserted(parent, child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireChildRemoved(AutomatedTreeNode parent,AutomatedTreeNode child, int index){
|
||||||
|
for (AutomatedTreeNodeListener l: automatedTreeNodeListeners){
|
||||||
|
l.childRemoved(parent, child, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutomatedTreeNode[] getChildren(){
|
||||||
|
return children.toArray(new AutomatedTreeNode[0]);
|
||||||
|
};
|
||||||
|
|
||||||
|
public boolean addChild(AutomatedTreeNode child){
|
||||||
|
if (children.add(child)){
|
||||||
|
child.addAutomatedTreeNodeListener(this);
|
||||||
|
fireChildInserted(this,child);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
public boolean removeChild(AutomatedTreeNode child){
|
||||||
|
int index = children.indexOf(child);
|
||||||
|
if (children.remove(child)){
|
||||||
|
child.removeAutomatedTreeNodeListener(this);
|
||||||
|
fireChildRemoved(this,child,index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
public AutomatedTreeNode getChild(int index){
|
||||||
|
return children.get(index);
|
||||||
|
};
|
||||||
|
|
||||||
|
public int getIndexOfChild(AutomatedTreeNode child){
|
||||||
|
return children.indexOf(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutomatedTreeNode[] getPath(){
|
||||||
|
List<AutomatedTreeNode> path = new LinkedList<AutomatedTreeNode>();
|
||||||
|
getPath( path );
|
||||||
|
return path.toArray(new AutomatedTreeNode[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void getPath(List<AutomatedTreeNode> pathlist){
|
||||||
|
if (this.parent != null)
|
||||||
|
this.parent.getPath(pathlist);
|
||||||
|
pathlist.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasChild(AutomatedTreeNode child){
|
||||||
|
return children.contains(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void childInserted(AutomatedTreeNode node, AutomatedTreeNode child) {
|
||||||
|
fireChildInserted(node, child);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void childRemoved(AutomatedTreeNode node, AutomatedTreeNode child, int index) {
|
||||||
|
fireChildRemoved(node, child, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package org.hwo.ui.tree;
|
||||||
|
|
||||||
|
public interface AutomatedTreeNodeListener {
|
||||||
|
|
||||||
|
void childInserted(AutomatedTreeNode node,AutomatedTreeNode child);
|
||||||
|
void childRemoved(AutomatedTreeNode node,AutomatedTreeNode child,int index);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package org.hwo.ui.tree;
|
||||||
|
|
||||||
|
public class BaseSimpleTreeElement {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.hwo.ui.tree;
|
||||||
|
|
||||||
|
import javax.swing.plaf.basic.BasicTreeUI.SelectionModelPropertyChangeHandler;
|
||||||
|
|
||||||
|
public abstract class PooledAutomatedTreeNode extends AutomatedTreeNode {
|
||||||
|
|
||||||
|
private AutomatedTreeNode[] pool;
|
||||||
|
|
||||||
|
public PooledAutomatedTreeNode(AutomatedTreeNode parent) {
|
||||||
|
super(parent);
|
||||||
|
this.pool = new PooledAutomatedTreeNode[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public PooledAutomatedTreeNode(AutomatedTreeNode parent,AutomatedTreeNode[] pool) {
|
||||||
|
super(parent);
|
||||||
|
this.pool = pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutomatedTreeNode[] getPool() {
|
||||||
|
return pool;
|
||||||
|
}
|
||||||
|
public void setPool(AutomatedTreeNode[] pool) {
|
||||||
|
for (AutomatedTreeNode c: getChildren()){
|
||||||
|
removeChild(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.pool = pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean show(int index){
|
||||||
|
if (!hasChild(pool[index])){
|
||||||
|
addChild(pool[index]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public boolean hide(int index){
|
||||||
|
if (hasChild(pool[index])){
|
||||||
|
removeChild(pool[index]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue