Coverage Report - de.glossmaker.gui.gloss.main.TopPanel
 
Classes in this File Line Coverage Branch Coverage Complexity
TopPanel
0%
0/151
0%
0/40
2,158
TopPanel$1
0%
0/12
0%
0/8
2,158
TopPanel$2
0%
0/4
0%
0/2
2,158
TopPanel$3
0%
0/3
N/A
2,158
TopPanel$4
0%
0/4
0%
0/2
2,158
 
 1  
 package de.glossmaker.gui.gloss.main;
 2  
 
 3  
 import java.awt.Dimension;
 4  
 import java.awt.event.ActionEvent;
 5  
 import java.awt.event.ActionListener;
 6  
 import java.beans.PropertyChangeEvent;
 7  
 import java.beans.PropertyChangeListener;
 8  
 import java.util.ArrayList;
 9  
 
 10  
 import javax.help.CSH;
 11  
 import javax.swing.JLabel;
 12  
 import javax.swing.JPanel;
 13  
 import javax.swing.JTextField;
 14  
 
 15  
 import de.glossmaker.gloss.datastructure.GlossItem;
 16  
 import de.glossmaker.gloss.datastructure.GlossItems;
 17  
 import de.glossmaker.gloss.datastructure.gui.Config;
 18  
 import de.glossmaker.gloss.listener.EActionCommands;
 19  
 import de.glossmaker.gloss.observer.GlossItemsChangePublisher;
 20  
 import de.glossmaker.gloss.observer.SelectionChangePublisher;
 21  
 import de.glossmaker.gui.gloss.AUpdateDocumentListener;
 22  
 import de.glossmaker.gui.gloss.bars.HelpItemChangeListener;
 23  
 import de.glossmaker.gui.gloss.help.HelpSystem;
 24  
 import javax.swing.JCheckBox;
 25  
 
 26  
 /**
 27  
  * 
 28  
  * 
 29  
  * @author Markus Flingelli
 30  
  */
 31  0
 public class TopPanel extends JPanel implements PropertyChangeListener {
 32  
         private static final long serialVersionUID = -7326870290987505301L;
 33  0
         private JLabel mKeyLabel = null;
 34  0
         private JLabel mHeadingLabel = null;
 35  0
         private JLabel mWordLabel = null;
 36  
         
 37  0
         private JTextField mKeyTextField = null;
 38  0
         private JTextField mHeadingTextField = null;
 39  0
         private JTextField mWordTextField = null;
 40  
         
 41  0
         private GlossItem mSelectedItem = null;
 42  
         
 43  0
         private AUpdateDocumentListener mKeyTextDocumentListener = null;
 44  0
         private AUpdateDocumentListener mHeadingTextDocumentListener = null;
 45  0
         private AUpdateDocumentListener mWordTextDocumentListener = null;
 46  
         private boolean isAutoUpdateEnabled;
 47  
         
 48  0
         private GlossItemsChangePublisher mGlossItemsChangePublisher = null;
 49  
         private JCheckBox mAutoUpdate;
 50  
         
 51  
         private void updateFromWord() {
 52  0
                 if (mSelectedItem != null) {
 53  0
                         mGlossItemsChangePublisher.setWord(mSelectedItem, TopPanel.this.mWordTextField.getText(), TopPanel.this.isAutoUpdateEnabled);
 54  
                 }
 55  0
         }
 56  
         
 57  0
         public TopPanel(GlossItems items) {
 58  0
                 initialize();
 59  0
                 isAutoUpdateEnabled = Config.getInstance().isAutoUpdateEnabled();
 60  0
                 mGlossItemsChangePublisher = GlossItemsChangePublisher.getInstance(items);
 61  0
                 SelectionChangePublisher.getInstance().addPropertyChangeListener(this);
 62  0
                 GlossItemsChangePublisher.getInstance(items).addPropertyChangeListener(this);
 63  
                 
 64  0
                 mAutoUpdate = new JCheckBox("Auto Update Heading & Key");
 65  0
                 mAutoUpdate.setName("auto_update");
 66  0
                 mAutoUpdate.setSelected(isAutoUpdateEnabled);
 67  0
                 mAutoUpdate.addActionListener(new ActionListener() {
 68  
                         
 69  
                         @Override
 70  
                         public void actionPerformed(ActionEvent event) {
 71  0
                                 if (event.getSource() instanceof JCheckBox) {
 72  0
                                         JCheckBox cb = (JCheckBox) event.getSource();
 73  0
                                         isAutoUpdateEnabled = cb.isSelected();
 74  0
                                         mKeyTextField.setEditable(!isAutoUpdateEnabled);
 75  0
                                         mKeyTextField.setFocusable(mKeyTextField.isEditable());
 76  0
                                         mHeadingTextField.setEditable(!isAutoUpdateEnabled);
 77  0
                                         mHeadingTextField.setFocusable(mHeadingTextField.isEditable());
 78  0
                                         Config.getInstance().setAutoUpdateEnabled(isAutoUpdateEnabled);
 79  0
                                         if (isAutoUpdateEnabled) {
 80  0
                                                 updateFromWord();
 81  
                                         }
 82  
                                 }
 83  0
                         }
 84  
                 });                
 85  0
                 mAutoUpdate.addChangeListener(new HelpItemChangeListener("section.auto_update"));
 86  0
                 mAutoUpdate.setBounds(165, 30, 218, 23);
 87  0
                 add(mAutoUpdate);
 88  0
         }
 89  
         
 90  
         private JTextField getKeyTextField() {
 91  0
                 if (mKeyTextField == null) {
 92  0
                         mKeyTextField = new JTextField(7);
 93  
                         // for GUI test
 94  0
                         mKeyTextField.setName("key_input");
 95  0
                         mKeyTextField.setBounds(165, 80, 150, 20);
 96  0
                         mKeyTextField.setEnabled(false);
 97  0
                         mKeyTextField.setEditable(false);
 98  0
                         CSH.setHelpIDString(mKeyTextField, "section.input_panel.key");
 99  0
                         mKeyTextField.addActionListener(new CSH.DisplayHelpFromFocus(HelpSystem.getInstance().getHelpSet(), "javax.help.MainWindow", null));
 100  0
                         mKeyTextDocumentListener = new AUpdateDocumentListener() {                                
 101  
                                 @Override
 102  
                                 public void updateData() {
 103  0
                                         if (mSelectedItem != null) {
 104  0
                                                 mGlossItemsChangePublisher.setKey(mSelectedItem, TopPanel.this.mKeyTextField.getText());
 105  
                                         }
 106  0
                                 }
 107  
                         };
 108  0
                         mKeyTextField.addFocusListener(new TopPanelFocusListener(mKeyTextField));
 109  
                 }
 110  
                 
 111  0
                 return mKeyTextField;
 112  
         }
 113  
         
 114  
         private JTextField getWordTextField() {
 115  0
                 if (mWordTextField == null) {
 116  0
                         mWordTextField = new JTextField(7);
 117  
                         // for GUI test
 118  0
                         mWordTextField.setName("word_input");
 119  0
                         mWordTextField.setBounds(165, 5, 150, 20);
 120  0
                         mWordTextField.setEnabled(false);
 121  0
                         mWordTextField.setEditable(false);
 122  0
                         CSH.setHelpIDString(mWordTextField, "section.input_panel.word");
 123  0
                         mWordTextField.addActionListener(new CSH.DisplayHelpFromFocus(HelpSystem.getInstance().getHelpSet(), "javax.help.MainWindow", null));
 124  0
                         mWordTextDocumentListener = new AUpdateDocumentListener() {
 125  
                                 
 126  
                                 @Override
 127  
                                 public void updateData() {
 128  0
                                         updateFromWord();
 129  0
                                 }
 130  
                         };
 131  0
                         mWordTextField.addFocusListener(new TopPanelFocusListener(mWordTextField));
 132  
                 }
 133  
                 
 134  0
                 return mWordTextField;
 135  
         }
 136  
         
 137  
         private JTextField getHeadingTextField() {
 138  0
                 if (mHeadingTextField == null) {
 139  0
                         mHeadingTextField = new JTextField(2);
 140  
                         // for GUI test
 141  0
                         mHeadingTextField.setName("heading_input");
 142  0
                         mHeadingTextField.setBounds(165, 55, 25, 20);
 143  0
                         mHeadingTextField.setEnabled(false);
 144  0
                         mHeadingTextField.setEditable(false);
 145  0
                         CSH.setHelpIDString(mHeadingTextField, "section.input_panel.heading");
 146  0
                         mHeadingTextField.addActionListener(new CSH.DisplayHelpFromFocus(HelpSystem.getInstance().getHelpSet(), "javax.help.MainWindow", null));
 147  0
                         mHeadingTextDocumentListener = new AUpdateDocumentListener() {
 148  
                                 
 149  
                                 @Override
 150  
                                 public void updateData() {
 151  0
                                         if (mSelectedItem != null) {
 152  0
                                                 mGlossItemsChangePublisher.setHeading(mSelectedItem, TopPanel.this.mHeadingTextField.getText());
 153  
                                         }
 154  0
                                 }
 155  
                         };
 156  0
                         mHeadingTextField.addFocusListener(new TopPanelFocusListener(mHeadingTextField));
 157  
                 }
 158  
                 
 159  0
                 return mHeadingTextField;
 160  
         }
 161  
         
 162  
         private void initialize() {
 163  0
                 this.setLayout(null);
 164  0
                 this.setPreferredSize(new Dimension(433, 120));
 165  
                 
 166  
                 // create labels
 167  0
                 mHeadingLabel = new JLabel("Heading");
 168  0
                 mHeadingLabel.setBounds(5, 55, 150, 20);
 169  0
                 mKeyLabel = new JLabel("Key");
 170  0
                 mKeyLabel.setBounds(5, 80, 150, 20);
 171  0
                 mWordLabel = new JLabel("Word");
 172  0
                 mWordLabel.setBounds(5, 5, 150, 20);
 173  
                         
 174  0
                 this.add(mHeadingLabel);
 175  0
                 this.add(getHeadingTextField());
 176  0
                 this.add(mKeyLabel);
 177  0
                 this.add(getKeyTextField());
 178  0
                 this.add(mWordLabel);
 179  0
                 this.add(getWordTextField());
 180  0
         }
 181  
 
 182  
         private void remomveAllDocumentListener() {
 183  0
                 mKeyTextField.getDocument().removeDocumentListener(mKeyTextDocumentListener);
 184  0
                 mHeadingTextField.getDocument().removeDocumentListener(mHeadingTextDocumentListener);
 185  0
                 mWordTextField.getDocument().removeDocumentListener(mWordTextDocumentListener);
 186  0
         }
 187  
         
 188  
         private void addAllDocumentListener() {
 189  0
                 mKeyTextField.getDocument().addDocumentListener(mKeyTextDocumentListener);
 190  0
                 mHeadingTextField.getDocument().addDocumentListener(mHeadingTextDocumentListener);
 191  0
                 mWordTextField.getDocument().addDocumentListener(mWordTextDocumentListener);
 192  0
         }
 193  
         
 194  
         private void updateDisplayedData() {                
 195  0
                 if (mSelectedItem != null) {
 196  0
                         remomveAllDocumentListener();
 197  0
                         mHeadingTextField.setText(mSelectedItem.getHeading());
 198  0
                         mWordTextField.setText(mSelectedItem.getWord());
 199  0
                         mKeyTextField.setText(mSelectedItem.getKey());                                        
 200  0
                         addAllDocumentListener();
 201  
                 }                
 202  0
         }
 203  
         
 204  
         private void enableTextFields(boolean enabled) {
 205  0
                 mWordTextField.setEnabled(enabled);
 206  0
                 mWordTextField.setEditable(enabled);
 207  0
                 mKeyTextField.setEnabled(enabled);
 208  0
                 mHeadingTextField.setEnabled(enabled);
 209  0
                 mKeyTextField.setEditable(!isAutoUpdateEnabled);
 210  0
                 mHeadingTextField.setEditable(!isAutoUpdateEnabled);
 211  0
         }
 212  
         
 213  
         private void updateWord(String word) {
 214  0
                 mWordTextField.getDocument().removeDocumentListener(mWordTextDocumentListener);
 215  0
                 mWordTextField.setText(word);
 216  0
                 mWordTextField.getDocument().addDocumentListener(mWordTextDocumentListener);
 217  0
         }
 218  
         
 219  
         private void updateKey(String key) {
 220  0
                 mKeyTextField.getDocument().removeDocumentListener(mKeyTextDocumentListener);
 221  0
                 mKeyTextField.setText(key);
 222  0
                 mKeyTextField.getDocument().addDocumentListener(mKeyTextDocumentListener);
 223  0
         }
 224  
         
 225  
         private void updateHeading(String heading) {
 226  0
                 mHeadingTextField.getDocument().removeDocumentListener(mHeadingTextDocumentListener);
 227  0
                 mHeadingTextField.setText(heading);
 228  0
                 mHeadingTextField.getDocument().addDocumentListener(mHeadingTextDocumentListener);
 229  0
         }
 230  
         
 231  
         private void updateTextFieldsWithBlanks() {
 232  0
                 updateHeading("");
 233  0
                 updateKey("");
 234  0
                 updateWord("");
 235  0
         }
 236  
         
 237  
         @Override
 238  
         public void propertyChange(PropertyChangeEvent event) {
 239  0
                 if (event.getPropertyName().equals(EActionCommands.TREE_SELECTION_CHANGED.toString())) {                        
 240  0
                         mSelectedItem = (GlossItem) event.getNewValue();                        
 241  0
                         updateDisplayedData();
 242  0
                         enableTextFields(true);
 243  0
                 } else if (event.getPropertyName().equals(EActionCommands.GLOSS_ITEM_REMOVED.toString())) {
 244  0
                         updateTextFieldsWithBlanks();
 245  0
                         enableTextFields(false);
 246  0
                 } else if (event.getPropertyName().equals(EActionCommands.CREATE_NEW_FILE.toString()) ||
 247  
                                 event.getPropertyName().equals(EActionCommands.OPEN_FILE.toString())) {
 248  0
                         updateTextFieldsWithBlanks();
 249  0
                         enableTextFields(false);
 250  0
                 } else if (event.getPropertyName().equals(EActionCommands.FIRE_UNDO.toString())) {
 251  0
                         if ( ((String)event.getNewValue()).equals(EActionCommands.GLOSS_ITEM_HEADING_CHANGED.toString())) {
 252  0
                                 updateHeading(mSelectedItem.getHeading());
 253  0
                         } else if ( ((String)event.getNewValue()).equals(EActionCommands.GLOSS_ITEM_KEY_CHANGED.toString())) {
 254  0
                                 updateKey(mSelectedItem.getKey());
 255  0
                         } if ( ((String)event.getNewValue()).equals(EActionCommands.GLOSS_ITEM_WORD_CHANGED.toString())) {
 256  0
                                 updateWord(mSelectedItem.getWord());
 257  0
                         } else if (((String)event.getNewValue()).equals(EActionCommands.GLOSS_ITEM_PER_AUTO_UPDATE_CHANGED.toString())) {
 258  0
                                 updateWord(mSelectedItem.getWord());
 259  0
                                 updateKey(mSelectedItem.getKey());
 260  0
                                 updateHeading(mSelectedItem.getHeading());
 261  
                         }
 262  0
                 } else if (event.getPropertyName().equals(EActionCommands.GLOSS_ITEM_PER_AUTO_UPDATE_CHANGED.toString())) {
 263  
                         @SuppressWarnings("unchecked")
 264  0
                         ArrayList<Object> oldValues = (ArrayList<Object>) event.getOldValue();
 265  0
                         GlossItem item = (GlossItem) oldValues.get(1);
 266  0
                         updateHeading(item.getHeading());
 267  0
                         updateKey(item.getKey());
 268  0
                 } else if (event.getPropertyName().equals(EActionCommands.UPDATE_TOPPANEL.toString())) {
 269  0
                         GlossItem item = (GlossItem) event.getNewValue();
 270  0
                         if (item != null) {
 271  0
                                 updateKey(item.getKey());
 272  0
                                 updateHeading(item.getHeading());
 273  0
                                 updateWord(item.getWord());
 274  
                         }
 275  0
                 } else if (event.getPropertyName().equals(EActionCommands.GLOSS_ITEM_WORD_IN_TREE_CHANGED.toString())) {
 276  0
                         String word = (String) event.getNewValue();
 277  0
                         updateWord(word);
 278  
                 }
 279  0
         }
 280  
 }