JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / fr / orsay / lri / varna / controlers / ControleurBaseSpecialColorEditor.java
diff --git a/srcjar/fr/orsay/lri/varna/controlers/ControleurBaseSpecialColorEditor.java b/srcjar/fr/orsay/lri/varna/controlers/ControleurBaseSpecialColorEditor.java
new file mode 100644 (file)
index 0000000..b0700cc
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases.
+ Copyright (C) 2008  Kevin Darty, Alain Denise and Yann Ponty.
+ electronic mail : Yann.Ponty@lri.fr
+ paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France
+
+ This file is part of VARNA version 3.1.
+ VARNA version 3.1 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.
+
+ VARNA version 3.1 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 VARNA version 3.1.
+ If not, see http://www.gnu.org/licenses.
+ */
+package fr.orsay.lri.varna.controlers;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import fr.orsay.lri.varna.components.BaseSpecialColorEditor;
+import fr.orsay.lri.varna.models.BaseList;
+import fr.orsay.lri.varna.models.rna.ModeleBase;
+
+/**
+ * BH SwingJS - additions here to allow asynchronous JColorChooser  
+ */
+public class ControleurBaseSpecialColorEditor implements ActionListener, ComponentListener {  // BH SwingJS
+
+       private BaseSpecialColorEditor _specialColorEditor;
+
+       private int _selectedRow;
+       private int _selectedCol;
+       private Color _selectedColor;
+       private String _selectedColTitle;
+
+       public ControleurBaseSpecialColorEditor(BaseSpecialColorEditor specialColorEditor) {
+               _specialColorEditor = specialColorEditor;
+       }
+
+       /**
+        * Handles events from the editor button and from the dialog's OK button.
+        */
+       public void actionPerformed(ActionEvent e) {
+               if (BaseSpecialColorEditor.getEDIT().equals(e.getActionCommand())) {
+                       // The user has clicked the cell, so
+                       // bring up the dialog.
+                       _specialColorEditor.getButton().setBackground(
+                                       _specialColorEditor.getCurrentColor());
+                       _specialColorEditor.getColorChooser().setColor(
+                                       _specialColorEditor.getCurrentColor());
+                       
+                       // BH SwingJS in JavaScript, this is not modal. 
+                       // We have to set a callback to stop the editing.
+                       
+                       _specialColorEditor.getDialog().removeComponentListener(this);
+                       _specialColorEditor.getDialog().addComponentListener(this);
+                       _specialColorEditor.getDialog().setVisible(true);
+                       
+                       
+                       // Make the renderer reappear.
+                       // BH SwingJS not so fast...
+                       //_specialColorEditor.callFireEditingStopped();
+
+               } else { // User pressed dialog's "OK" button.
+                       _specialColorEditor.setCurrentColor(_specialColorEditor
+                                       .getColorChooser().getColor());
+
+                       _selectedRow = _specialColorEditor.get_vueBases().getTable()
+                                       .getSelectedRow();
+
+                       _selectedCol = _specialColorEditor.get_vueBases().getTable()
+                                       .getSelectedColumn();
+
+                       _selectedColor = _specialColorEditor.getCurrentColor();
+
+                       _selectedColTitle = _specialColorEditor.get_vueBases()
+                                       .getSpecialTableModel().getColumnName(_selectedCol);
+                       BaseList lb = _specialColorEditor.get_vueBases().getDataAt(_selectedRow);
+                       for(ModeleBase mb: lb.getBases())
+                       {
+                               applyColor(_selectedColTitle, _selectedColor,mb);
+                       }
+                       _specialColorEditor.get_vueBases().get_vp().repaint();
+               }
+       }
+
+
+       private void applyColor(String titreCol, Color couleur, ModeleBase mb) {
+               if (titreCol.equals("Inner Color")) {
+                       mb.getStyleBase()
+                                       .setBaseInnerColor(couleur);
+               } else if (titreCol.equals("Outline Color")) {
+                       mb.getStyleBase()
+                                       .setBaseOutlineColor(couleur);
+               } else if (titreCol.equals("Name Color")) {
+                       mb.getStyleBase()
+                                       .setBaseNameColor(couleur);
+               } else if (titreCol.equals("Number Color")) {
+                       mb.getStyleBase()
+                                       .setBaseNumberColor(couleur);
+               }
+
+       }
+
+
+       @Override
+       public void componentResized(ComponentEvent e) {
+       }
+
+       @Override
+       public void componentMoved(ComponentEvent e) {
+       }
+
+       @Override
+       public void componentShown(ComponentEvent e) {
+       }
+
+       @Override
+       public void componentHidden(ComponentEvent e) {
+               
+               _specialColorEditor.callFireEditingStopped(); // BH SwingJS -- need to catch this
+               
+       }
+
+}