diff --git a/databrowser-gui/pom_cea.xml b/databrowser-gui/pom_cea.xml index ee55bb116d2ab8c3f01044eeac46e8a6097fe657..a75f18899e08cd24e84bce84d4982e4fe24561ef 100644 --- a/databrowser-gui/pom_cea.xml +++ b/databrowser-gui/pom_cea.xml @@ -11,6 +11,11 @@ <description>Contains all interfaces common to all modules</description> <dependencies> + <dependency> + <groupId>fr.cea.irfu</groupId> + <artifactId>IrfuPlugin</artifactId> + <version>1.3.0</version> + </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> @@ -21,6 +26,11 @@ <artifactId>databrowser-core</artifactId> <version>1.3.0</version> </dependency> + <dependency> + <groupId>org.cdma.gui.plugin</groupId> + <artifactId>cdma-plugin</artifactId> + <version>1.3.0</version> + </dependency> <!-- comete https://svn.code.sf.net/p/comete/ --> <dependency> <groupId>fr.soleil.lib.comete</groupId> @@ -43,17 +53,17 @@ <version>2.0.6</version> </dependency> <!-- composant swing x --> -<!-- <dependency> --> -<!-- <groupId>org.jdesktop.swingx</groupId> --> -<!-- <artifactId>swingx</artifactId> --> -<!-- <version>1.0</version> --> -<!-- </dependency> --> + <!-- <dependency> --> + <!-- <groupId>org.jdesktop.swingx</groupId> --> + <!-- <artifactId>swingx</artifactId> --> + <!-- <version>1.0</version> --> + <!-- </dependency> --> <!-- https://mvnrepository.com/artifact/org.swinglabs/swingx --> -<!-- <dependency> --> -<!-- <groupId>org.swinglabs</groupId> --> -<!-- <artifactId>swingx</artifactId> --> -<!-- <version>1.6</version> --> -<!-- </dependency> --> + <!-- <dependency> --> + <!-- <groupId>org.swinglabs</groupId> --> + <!-- <artifactId>swingx</artifactId> --> + <!-- <version>1.6</version> --> + <!-- </dependency> --> <!-- https://mvnrepository.com/artifact/org.swinglabs.swingx/swingx-all --> <dependency> diff --git a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/DataBrowser.java b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/DataBrowser.java index 7c35bf02e5c26800838befce6fef09cbc9c8a890..c3ca11fc2c36866d9c2246c44a5493852e6e5fbd 100644 --- a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/DataBrowser.java +++ b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/DataBrowser.java @@ -68,6 +68,7 @@ import fr.soleil.comete.definition.listener.IMouseListener; import fr.soleil.comete.definition.widget.properties.ChartProperties; import fr.soleil.comete.definition.widget.util.CometeColor; import fr.soleil.comete.definition.widget.util.CometeFont; +import fr.soleil.comete.definition.widget.util.IDrawingThreadManager; import fr.soleil.comete.swing.util.ErrorNotificationDelegate; import fr.soleil.data.controller.BasicBooleanTargetController; import fr.soleil.data.mediator.Mediator; @@ -720,5 +721,11 @@ public class DataBrowser extends JPanel { public void notifyForError(String message, Throwable error) { errorNotificationDelegate.notifyForError(message, error); } + + @Override + public IDrawingThreadManager getDrawingThreadManager() { + // TODO Auto-generated method stub + return null; + } } } diff --git a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/information/InformationViewer.java b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/information/InformationViewer.java index 19ef20856e667ec487aa96209c560b7bf7e33e73..e10bdb3d50c650967a611b34bf74a0fc2957a339 100644 --- a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/information/InformationViewer.java +++ b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/information/InformationViewer.java @@ -52,267 +52,272 @@ import fr.soleil.data.service.IKey; public class InformationViewer extends JPanel implements IDataBrowserItemListener, ITreeNodeSelectionListener { - private static final long serialVersionUID = 2081341564550369265L; - - private static final Logger LOGGER = LoggerFactory.getLogger(InformationViewer.class); - private JXTable table; - private InformationTableModel tableModel; - private IKey currentItemKey; - private final DataBrowserController controller; - - public InformationViewer(final DataBrowserController controller) { - this.controller = controller; - initComponents(); - layoutComponents(); - } - - private void initComponents() { - tableModel = new InformationTableModel(); - - table = new JXTable() { - - private static final long serialVersionUID = -6649326773223734002L; - - @Override - public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) { - Component c = super.prepareRenderer(renderer, row, column); - if (c instanceof JComponent) { - JComponent jc = (JComponent) c; - // set a tooltip on cells with hidden text - if (c.getPreferredSize().width > this.getCellRect(row, column, false).width) { - jc.setToolTipText((String) getValueAt(row, column)); - } else { - jc.setToolTipText(null); - } - } - return c; - } - - @Override - public Point getToolTipLocation(MouseEvent event) { - Point result = super.getToolTipLocation(event); - - if (result == null) { - int rowAtPoint = rowAtPoint(event.getPoint()); - int columnAtPoint = columnAtPoint(event.getPoint()); - Rectangle cellRect = getCellRect(rowAtPoint, columnAtPoint, true); - result = cellRect.getLocation(); - result.translate(-3, -1); - } - - return result; - } - }; - // set a specific column factory to allow referring each column with its enum constant - table.setColumnFactory(new ColumnFactory() { - @Override - public void configureTableColumn(final TableModel model, final TableColumnExt columnExt) { - super.configureTableColumn(model, columnExt); - columnExt.setIdentifier(Columns.values()[columnExt.getModelIndex()]); - } - }); - // set the model after the column factory - table.setModel(tableModel); - - table.setFillsViewportHeight(false); - table.getTableHeader().setReorderingAllowed(false); - // Value column is not sortable - table.getColumnExt(Columns.VALUE).setSortable(false); - // initially sort Property column in ascending order - table.setSortOrder(Columns.PROPERTY, SortOrder.ASCENDING); - - TableColumn dataTypeColumn = table.getColumnExt(Columns.VALUE); - DataType[] editableTypes = new DataType[] { DataType.SPECTRUM, DataType.IMAGE }; - final JComboBox<DataType> dataTypeCombo = new JComboBox<>(editableTypes); - dataTypeCombo.setEditable(false); - dataTypeColumn.setCellEditor(new DefaultCellEditor(dataTypeCombo)); - JComboBox<DataType> allDataTypesCombo = new JComboBox<>(editableTypes); - allDataTypesCombo.setEditable(false); - ComboBoxTableCellRenderer<DataType> dataTypeRenderer = new ComboBoxTableCellRenderer<>(allDataTypesCombo); - table.setDefaultRenderer(Object.class, dataTypeRenderer); - - dataTypeCombo.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(final ActionEvent e) { - if (controller != null) { - DataType dataType = (DataType) dataTypeCombo.getSelectedItem(); - // TODO found bug - LOGGER.trace("controller.changeItemType({}, {})", currentItemKey, dataType); - controller.changeItemType(currentItemKey, dataType); - } - } - }); - - } - - private void layoutComponents() { - JScrollPane tableScrollPane = new JScrollPane(table); - - setLayout(new BorderLayout()); - add(tableScrollPane, BorderLayout.CENTER); - } - - private void setKey(final IKey itemKey) { - setKey(itemKey == null ? null : DataSourceManager.getProducerFromKey(itemKey), itemKey); - } - - private void setKey(final IDataSourceBrowser browser, final IKey itemKey) { - if (currentItemKey != itemKey) { - currentItemKey = itemKey; - if (currentItemKey == null) { - DataBrowser.runInEDT(new Runnable() { - @Override - public void run() { - tableModel.clear(); - } - }); - } else { - if (browser != null) { - tableModel.setEditable(browser.isTypeModifiable()); - final Map<String, String> informationMap = browser.getInformations(currentItemKey); - DataBrowser.runInEDT(new Runnable() { - - @Override - public void run() { - tableModel.setInformations(informationMap); - // deactivated as it had some undesired side effects -// table.packAll(); - } - - }); - } - } - } - } - - protected void todo() { - - } - - // --------------------------------------- - // IDataBrowserItemListener implementation - // --------------------------------------- - - @Override - public void onItemSelected(final DataBrowserItemEvent event) { - setKey(event.getItem().getKey()); - } - - @Override - public void onItemDeselected(final DataBrowserItemEvent event) { - if (event.getItem().getKey() == currentItemKey) { - setKey(null); - } - } - - @Override - public void onItemOpened(final DataBrowserItemEvent event) { - Item item = event.getItem(); - if (item.getKey() != null) { - IDataSourceBrowser browser = DataSourceManager.getProducerFromKey(item.getKey()); - if (browser != null) { - tableModel.setEditable(browser.isTypeModifiable()); - } - } - } - - @Override - public void onItemClosed(final DataBrowserItemEvent event) { - // nop - } - - @Override - public void onItemAxisChanged(final DataBrowserItemEvent event) { - // nop - } - - // ----------------------------------------- - // ITreeNodeSelectionListener implementation - // ----------------------------------------- - - @Override - public void selectionChanged(final TreeNodeSelectionEvent event) { - boolean selected = event.isSelected(); - - if (selected) { - DataBrowserTree tree = (DataBrowserTree) event.getSource(); - IDataSourceBrowser selectedBrowser = tree.getSelectedBrowser(); - - ITreeNode[] concernedNodes = event.getConcernedNodes(); - IKey key = null; - for (ITreeNode selectedNode : concernedNodes) { - Object data = selectedNode.getData(); - if ((data != null) && (data instanceof IKey)) { - key = (IKey) data; - setKey(selectedBrowser, key); - } else { - setKey(null, null); - } - } - } else { - setKey(null, null); - } - } - - // ///////////// // - // Inner classes // - // ///////////// // - - protected class ComboBoxTableCellRenderer<T> extends DefaultTableCellRenderer implements TableCellRenderer { - - private static final long serialVersionUID = -2221517937430093527L; - - protected final JComboBox<T> combo; - protected Font classicFont; - protected Font editFont; - - public ComboBoxTableCellRenderer(JComboBox<T> combo) { - this.combo = combo; - this.classicFont = getFont(); - deriveFont(); - } - - @Override - public void setFont(Font font) { - super.setFont(font); - if ((font != null) && (!font.isBold()) && (!font.isItalic())) { - this.classicFont = font; - deriveFont(); - } - } - - protected void deriveFont() { - if (classicFont == null) { - editFont = null; - } else { - editFont = classicFont.deriveFont(classicFont.getStyle() | Font.BOLD | Font.ITALIC); - } - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, - int row, int column) { - Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if (value != null) { - combo.setSelectedItem(value); - if (value.equals(combo.getSelectedItem())) { - component = combo; - } else { - boolean editable = false; - for (int i = 0; i < table.getColumnCount() && (!editable); i++) { - if (table.isCellEditable(row, i)) { - editable = true; - } - } - if (editable) { - component.setFont(editFont); - } else { - component.setFont(classicFont); - } - } - } - return component; - } - } + private static final long serialVersionUID = 2081341564550369265L; + + private static final Logger LOGGER = LoggerFactory.getLogger(InformationViewer.class); + private JXTable table; + private InformationTableModel tableModel; + private IKey currentItemKey; + private final DataBrowserController controller; + + public InformationViewer(final DataBrowserController controller) { + this.controller = controller; + initComponents(); + layoutComponents(); + } + + private void initComponents() { + tableModel = new InformationTableModel(); + + table = new JXTable() { + + private static final long serialVersionUID = -6649326773223734002L; + + @Override + public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) { + Component c = super.prepareRenderer(renderer, row, column); + if (c instanceof JComponent) { + JComponent jc = (JComponent) c; + // set a tooltip on cells with hidden text + if (c.getPreferredSize().width > this.getCellRect(row, column, false).width) { + jc.setToolTipText((String) getValueAt(row, column)); + } else { + jc.setToolTipText(null); + } + } + return c; + } + + @Override + public Point getToolTipLocation(MouseEvent event) { + Point result = super.getToolTipLocation(event); + + if (result == null) { + int rowAtPoint = rowAtPoint(event.getPoint()); + int columnAtPoint = columnAtPoint(event.getPoint()); + Rectangle cellRect = getCellRect(rowAtPoint, columnAtPoint, true); + result = cellRect.getLocation(); + result.translate(-3, -1); + } + + return result; + } + }; + // set a specific column factory to allow referring each column with its enum + // constant + table.setColumnFactory(new ColumnFactory() { + @Override + public void configureTableColumn(final TableModel model, final TableColumnExt columnExt) { + super.configureTableColumn(model, columnExt); + columnExt.setIdentifier(Columns.values()[columnExt.getModelIndex()]); + } + }); + // set the model after the column factory + table.setModel(tableModel); + + table.setFillsViewportHeight(false); + table.getTableHeader().setReorderingAllowed(false); + // Value column is not sortable + table.getColumnExt(Columns.VALUE).setSortable(false); + // initially sort Property column in ascending order + table.setSortOrder(Columns.PROPERTY, SortOrder.ASCENDING); + + TableColumn dataTypeColumn = table.getColumnExt(Columns.VALUE); + DataType[] editableTypes = new DataType[] { DataType.SPECTRUM, DataType.IMAGE }; + final JComboBox<DataType> dataTypeCombo = new JComboBox<>(editableTypes); + dataTypeCombo.setEditable(false); + dataTypeColumn.setCellEditor(new DefaultCellEditor(dataTypeCombo)); + JComboBox<DataType> allDataTypesCombo = new JComboBox<>(editableTypes); + allDataTypesCombo.setEditable(false); + ComboBoxTableCellRenderer<DataType> dataTypeRenderer = new ComboBoxTableCellRenderer<>(allDataTypesCombo); + table.setDefaultRenderer(Object.class, dataTypeRenderer); + + dataTypeCombo.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(final ActionEvent e) { + if (controller != null) { + DataType dataType = (DataType) dataTypeCombo.getSelectedItem(); + // TODO found bug + LOGGER.trace("controller.changeItemType({}, {})", currentItemKey, dataType); + controller.changeItemType(currentItemKey, dataType); + } + } + }); + + } + + private void layoutComponents() { + JScrollPane tableScrollPane = new JScrollPane(table); + + setLayout(new BorderLayout()); + add(tableScrollPane, BorderLayout.CENTER); + } + + private void setKey(final IKey itemKey) { + setKey(itemKey == null ? null : DataSourceManager.getProducerFromKey(itemKey), itemKey); + } + + private void setKey(final IDataSourceBrowser browser, final IKey itemKey) { + if (currentItemKey != itemKey) { + currentItemKey = itemKey; + if (currentItemKey == null) { + DataBrowser.runInEDT(new Runnable() { + @Override + public void run() { + tableModel.clear(); + } + }); + } else { + if (browser != null) { + tableModel.setEditable(browser.isTypeModifiable()); + try { + final Map<String, String> informationMap = browser.getInformations(currentItemKey); + + DataBrowser.runInEDT(new Runnable() { + + @Override + public void run() { + tableModel.setInformations(informationMap); + // deactivated as it had some undesired side effects + // table.packAll(); + } + }); + } catch (Exception e) { + controller.showErrorDialog(e.getMessage(), "Cannot set Key"); + } + } + } + } + } + + protected void todo() { + + } + + // --------------------------------------- + // IDataBrowserItemListener implementation + // --------------------------------------- + + @Override + public void onItemSelected(final DataBrowserItemEvent event) { + setKey(event.getItem().getKey()); + } + + @Override + public void onItemDeselected(final DataBrowserItemEvent event) { + if (event.getItem().getKey() == currentItemKey) { + setKey(null); + } + } + + @Override + public void onItemOpened(final DataBrowserItemEvent event) { + Item item = event.getItem(); + if (item.getKey() != null) { + IDataSourceBrowser browser = DataSourceManager.getProducerFromKey(item.getKey()); + if (browser != null) { + tableModel.setEditable(browser.isTypeModifiable()); + } + } + } + + @Override + public void onItemClosed(final DataBrowserItemEvent event) { + // nop + } + + @Override + public void onItemAxisChanged(final DataBrowserItemEvent event) { + // nop + } + + // ----------------------------------------- + // ITreeNodeSelectionListener implementation + // ----------------------------------------- + + @Override + public void selectionChanged(final TreeNodeSelectionEvent event) { + boolean selected = event.isSelected(); + + if (selected) { + DataBrowserTree tree = (DataBrowserTree) event.getSource(); + IDataSourceBrowser selectedBrowser = tree.getSelectedBrowser(); + + ITreeNode[] concernedNodes = event.getConcernedNodes(); + IKey key = null; + for (ITreeNode selectedNode : concernedNodes) { + Object data = selectedNode.getData(); + if ((data != null) && (data instanceof IKey)) { + key = (IKey) data; + setKey(selectedBrowser, key); + } else { + setKey(null, null); + } + } + } else { + setKey(null, null); + } + } + + // ///////////// // + // Inner classes // + // ///////////// // + + protected class ComboBoxTableCellRenderer<T> extends DefaultTableCellRenderer implements TableCellRenderer { + + private static final long serialVersionUID = -2221517937430093527L; + + protected final JComboBox<T> combo; + protected Font classicFont; + protected Font editFont; + + public ComboBoxTableCellRenderer(JComboBox<T> combo) { + this.combo = combo; + this.classicFont = getFont(); + deriveFont(); + } + + @Override + public void setFont(Font font) { + super.setFont(font); + if ((font != null) && (!font.isBold()) && (!font.isItalic())) { + this.classicFont = font; + deriveFont(); + } + } + + protected void deriveFont() { + if (classicFont == null) { + editFont = null; + } else { + editFont = classicFont.deriveFont(classicFont.getStyle() | Font.BOLD | Font.ITALIC); + } + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (value != null) { + combo.setSelectedItem(value); + if (value.equals(combo.getSelectedItem())) { + component = combo; + } else { + boolean editable = false; + for (int i = 0; i < table.getColumnCount() && (!editable); i++) { + if (table.isCellEditable(row, i)) { + editable = true; + } + } + if (editable) { + component.setFont(editFont); + } else { + component.setFont(classicFont); + } + } + } + return component; + } + } } diff --git a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/ChartSpectrumViewer.java b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/ChartSpectrumViewer.java index 43e7f07b939c15d30beea006e95b70b499b1a151..049a04f261f915eab82cb37afa339025a6d46e0c 100644 --- a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/ChartSpectrumViewer.java +++ b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/ChartSpectrumViewer.java @@ -63,7 +63,6 @@ public class ChartSpectrumViewer extends AbstractItemViewer<ChartSpectrumItem> public ChartSpectrumViewer(final DataBrowserController controller) { super(controller, false); - playerPanel = null; settableMenu = false; markerEnabled = true; initComponents(); @@ -100,6 +99,9 @@ public class ChartSpectrumViewer extends AbstractItemViewer<ChartSpectrumItem> splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); splitPane.setOneTouchExpandable(true); playerScrollPane = new JScrollPane(); + + //Add player panel if necessary + // spectrumY1Items = new ArrayList<IKey>(); // spectrumY2Items = new ArrayList<IKey>(); @@ -146,6 +148,8 @@ public class ChartSpectrumViewer extends AbstractItemViewer<ChartSpectrumItem> // Check if the item is already add in the viewer writeDataFrame.addItem(item); ChartSpectrumItem spectrumItem = displayedItems.get(item.getKey()); + + // Menu of writeDataFrame is visible if add source writable boolean settableSource = writeDataFrame.isSettableSource(item); if (settableSource) { @@ -156,10 +160,18 @@ public class ChartSpectrumViewer extends AbstractItemViewer<ChartSpectrumItem> // Should be always null if (spectrumItem == null) { spectrumItem = new ChartSpectrumItem(this, item, controller, markerEnabled); - displayedItems.put(item.getKey(), spectrumItem); spectrumItem.addChartSpectrumItemListener(this); } + + this.playerPanel = spectrumItem.getPlayerPanel(); + if (playerPanel != null) { + playerScrollPane.setViewportView(playerPanel); + splitPane.setLeftComponent(playerScrollPane); + // splitPane.resetToPreferredSizes(); + splitPane.setResizeWeight(0.3); + } + if ((item != null) && (spectrumItem != null)) { AxisType axis = item.getAxis(); @@ -226,7 +238,6 @@ public class ChartSpectrumViewer extends AbstractItemViewer<ChartSpectrumItem> playerPanel = spectrumItem.getPlayerPanel(); if (playerPanel != null) { - playerScrollPane.setViewportView(playerPanel); splitPane.setLeftComponent(playerScrollPane); // splitPane.resetToPreferredSizes(); diff --git a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/SpectrumViewer.java b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/SpectrumViewer.java index fd99d0e5d407c2c2339b459d534383cf5661c9cd..2790680b278aebf45414e51ead935529db11931a 100644 --- a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/SpectrumViewer.java +++ b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/item/SpectrumViewer.java @@ -95,6 +95,9 @@ public class SpectrumViewer extends JTabbedPane implements IItemViewer { // nop break; } + if(itemViewer != null) { + setSelectedComponent((Component)itemViewer); + } return itemViewer; } diff --git a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/tree/TreeViewer.java b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/tree/TreeViewer.java index eacfc0409bc44ebdabb204559294b9471d688f4c..859fd2a751848c823f60f7dc29517c9d19e5e926 100644 --- a/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/tree/TreeViewer.java +++ b/databrowser-gui/src/main/java/org/cdma/gui/databrowser/view/tree/TreeViewer.java @@ -319,7 +319,7 @@ public class TreeViewer extends JPanel implements MouseListener, ITreeNodeSelect } }; closeItem = new AbstractActionExt(DataBrowser.MESSAGES.getString("Action.SourceTree.CloseItem"), - DataBrowser.ICONS.getIcon("Action.CloseSource")) { + DataBrowser.ICONS.getIcon("Action.RemoveItems")) { private static final long serialVersionUID = 6581422153408721280L;