--- /dev/null
+/*
+ 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
+
+ }
+
+}