1 /* 2 ***************************************************************************** 3 * Copyright (C) 2000-2004, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ***************************************************************************** 6 */ 7 package com.ibm.rbm.gui; 8 9 import java.awt.*; 10 import java.awt.event.*; 11 12 import javax.swing.*; 13 import javax.swing.text.JTextComponent; 14 15 import com.ibm.rbm.*; 16 17 /** 18 * The class used to display statistics 19 */ 20 class RBStatisticsPanel extends JPanel { 21 RBManager rbm; 22 Bundle bundle; 23 24 // Components - Bundle 25 JLabel jLabelStatsTitle; 26 27 JLabel jLabelStatsName; 28 JLabel jLabelStatsComment; 29 JLabel jLabelStatsManager; 30 JLabel jLabelStatsLanguage; 31 JLabel jLabelStatsCountry; 32 JLabel jLabelStatsVariant; 33 JLabel jLabelStatsNumTrans; 34 JLabel jLabelStatsNumUntrans; 35 36 JTextField jTextFieldStatsName; 37 JTextField jTextFieldStatsComment; 38 JTextField jTextFieldStatsManager; 39 JTextField jTextFieldStatsLanguage; 40 JTextField jTextFieldStatsCountry; 41 JTextField jTextFieldStatsVariant; 42 43 JButton updateButton; 44 45 Box boxStatsLeftRight1; 46 Box boxStatsLeftRight2; 47 48 // Components - bundle manager 49 JLabel titleLabel; 50 JLabel numFileLabel; 51 JLabel numDupLabel; 52 JLabel numGroupLabel; 53 JLabel numItemLabel; 54 55 JList groupList; 56 JList fileList; 57 JList dupList; 58 59 JScrollPane groupScroll; 60 JScrollPane dupScroll; 61 JScrollPane fileScroll; 62 63 JPanel filePanel; 64 JPanel itemPanel; 65 JPanel groupPanel; 66 67 JButton fileButton; 68 JButton groupButton; 69 JButton itemButton; 70 71 Box mainBox; 72 Box dupBox; 73 74 setBundle(Bundle b)75 public void setBundle(Bundle b) { 76 rbm = null; 77 if (bundle == null) { 78 bundle = b; 79 initComponents(); 80 } else if (bundle != b) { 81 bundle = b; 82 updateComponents(); 83 } 84 } 85 setManager(RBManager m)86 public void setManager(RBManager m) { 87 bundle = null; 88 if (rbm == null) { 89 rbm = m; 90 initComponents(); 91 } else if (rbm != m) { 92 rbm = m; 93 updateComponents(); 94 } 95 } 96 removeElements()97 public void removeElements() { 98 if (rbm != null || bundle != null) { 99 rbm = null; 100 bundle = null; 101 initComponents(); 102 } 103 } 104 initComponents()105 public void initComponents() { 106 // Initialize components 107 if (bundle != null) { 108 RBManagerGUI.debugMsg("Initializing components for Resource File"); 109 int untranslated = bundle.getUntranslatedItemsSize(); 110 111 jLabelStatsTitle = new JLabel(bundle.name); 112 113 jLabelStatsName = new JLabel(Resources.getTranslation("languagestats_title")); 114 jLabelStatsComment = new JLabel(Resources.getTranslation("languagestats_comment")); 115 jLabelStatsManager = new JLabel(Resources.getTranslation("languagestats_manager")); 116 jLabelStatsLanguage = new JLabel(Resources.getTranslation("languagestats_language")); 117 jLabelStatsCountry = new JLabel(Resources.getTranslation("languagestats_country")); 118 jLabelStatsVariant = new JLabel(Resources.getTranslation("languagestats_variant")); 119 jLabelStatsNumTrans = new JLabel(Resources.getTranslation("languagestats_item_count") + " " + 120 String.valueOf(bundle.allItems.size())); 121 jLabelStatsNumUntrans = new JLabel(Resources.getTranslation("languagestats_translation_count") + 122 String.valueOf(untranslated)); 123 124 jTextFieldStatsName = new JTextField((bundle.name == null ? Resources.getTranslation("untitled") : bundle.name)); 125 jTextFieldStatsComment = new JTextField((bundle.comment == null ? "" : bundle.comment)); 126 jTextFieldStatsManager = new JTextField((bundle.manager == null ? "" : bundle.manager)); 127 jTextFieldStatsLanguage = new JTextField((bundle.language == null ? "" : bundle.language),25); 128 jTextFieldStatsCountry = new JTextField((bundle.country == null ? "" : bundle.country),25); 129 jTextFieldStatsVariant = new JTextField((bundle.variant == null ? "" : bundle.variant),25); 130 131 boxStatsLeftRight1 = new Box(BoxLayout.X_AXIS); 132 boxStatsLeftRight2 = new Box(BoxLayout.X_AXIS); 133 134 updateButton = new JButton(Resources.getTranslation("button_update")); 135 updateButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_update_trigger"))); 136 137 // Set up the components 138 jLabelStatsTitle.setFont(new Font("SansSerif",Font.PLAIN,18)); 139 140 ButtonEnablerFocusListener befl = new ButtonEnablerFocusListener(updateButton); 141 142 // Add listeners 143 updateButton.addActionListener(new ActionListener(){ 144 public void actionPerformed(ActionEvent ev) { 145 updateBundleInfo(); 146 } 147 }); 148 149 jTextFieldStatsName.addFocusListener(befl); 150 jTextFieldStatsComment.addFocusListener(befl); 151 jTextFieldStatsManager.addFocusListener(befl); 152 jTextFieldStatsLanguage.addFocusListener(befl); 153 jTextFieldStatsCountry.addFocusListener(befl); 154 jTextFieldStatsVariant.addFocusListener(befl); 155 156 jTextFieldStatsName.setColumns(35); 157 jTextFieldStatsComment.setColumns(35); 158 jTextFieldStatsManager.setColumns(35); 159 jTextFieldStatsLanguage.setColumns(25); 160 jTextFieldStatsCountry.setColumns(25); 161 jTextFieldStatsVariant.setColumns(25); 162 163 //updateButton.setEnabled(false); 164 165 // Update the display 166 if (mainBox != null){ 167 mainBox.removeAll(); 168 } else { 169 mainBox = new Box(BoxLayout.Y_AXIS); 170 } 171 if (dupBox != null) 172 dupBox.removeAll(); 173 removeAll(); 174 mainBox.add(jLabelStatsTitle); 175 mainBox.add(Box.createVerticalStrut(10)); 176 mainBox.add(jLabelStatsName); 177 mainBox.add(jTextFieldStatsName); 178 mainBox.add(Box.createVerticalStrut(5)); 179 mainBox.add(jLabelStatsComment); 180 mainBox.add(jTextFieldStatsComment); 181 mainBox.add(Box.createVerticalStrut(5)); 182 mainBox.add(jLabelStatsManager); 183 mainBox.add(jTextFieldStatsManager); 184 mainBox.add(Box.createVerticalStrut(5)); 185 mainBox.add(jLabelStatsLanguage); 186 mainBox.add(jTextFieldStatsLanguage); 187 mainBox.add(Box.createVerticalStrut(5)); 188 mainBox.add(jLabelStatsCountry); 189 mainBox.add(jTextFieldStatsCountry); 190 mainBox.add(Box.createVerticalStrut(5)); 191 mainBox.add(jLabelStatsVariant); 192 mainBox.add(jTextFieldStatsVariant); 193 mainBox.add(Box.createVerticalStrut(5)); 194 mainBox.add(jLabelStatsNumTrans); 195 mainBox.add(Box.createVerticalStrut(5)); 196 mainBox.add(jLabelStatsNumUntrans); 197 mainBox.add(Box.createVerticalStrut(10)); 198 mainBox.add(updateButton); 199 mainBox.add(Box.createHorizontalGlue()); 200 if (!(getLayout() instanceof FlowLayout)) { 201 setLayout(new FlowLayout()); 202 } 203 add(mainBox); 204 } else if (rbm != null) { 205 RBManagerGUI.debugMsg("Initializing components for Resource Bundle"); 206 titleLabel = new JLabel(rbm.getBaseClass() + " - " + Resources.getTranslation("baseclass")); 207 208 numFileLabel = new JLabel(Resources.getTranslation("basestats_file_count") + " " + rbm.getNumberLanguages()); 209 numGroupLabel = new JLabel(Resources.getTranslation("basestats_group_count") + " " + rbm.getNumberGroups()); 210 numItemLabel = new JLabel(Resources.getTranslation("basestats_item_count") + " " + rbm.getNumberTotalTranslations()); 211 numDupLabel = new JLabel(Resources.getTranslation("basestats_duplicates_count") + " " + rbm.getNumberDuplicates()); 212 213 fileList = new JList(rbm.getLanguageListingVector()); 214 groupList = new JList(rbm.getGroupListingVector()); 215 dupList = new JList(rbm.getDuplicatesListingVector()); 216 217 fileButton = new JButton(Resources.getTranslation("button_add_file")); 218 groupButton = new JButton(Resources.getTranslation("button_add_group")); 219 itemButton = new JButton(Resources.getTranslation("button_add_resource")); 220 221 filePanel = new JPanel(); 222 groupPanel = new JPanel(); 223 itemPanel = new JPanel(); 224 225 fileScroll = new JScrollPane(fileList); 226 groupScroll = new JScrollPane(groupList); 227 dupScroll = new JScrollPane(dupList); 228 229 if (mainBox == null) { 230 mainBox = new Box(BoxLayout.Y_AXIS); 231 } else { 232 mainBox.removeAll(); 233 } 234 dupBox = new Box(BoxLayout.Y_AXIS); 235 236 // Set up the components 237 filePanel.setLayout(new BorderLayout()); 238 groupPanel.setLayout(new BorderLayout()); 239 itemPanel.setLayout(new BorderLayout()); 240 241 filePanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), 242 Resources.getTranslation("basestats_file_group"))); 243 groupPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), 244 Resources.getTranslation("basestats_group_group"))); 245 itemPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), 246 Resources.getTranslation("basestats_item_group"))); 247 248 titleLabel.setFont(new Font("SansSerif",Font.PLAIN,18)); 249 250 fileButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_add_file_trigger"))); 251 groupButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_add_group_trigger"))); 252 itemButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_add_resource_trigger"))); 253 254 // Add listeners 255 fileButton.addActionListener(new ActionListener(){ 256 public void actionPerformed(ActionEvent ev) { 257 Container c = ((JButton)ev.getSource()).getParent(); 258 RBManagerGUI gui = null; 259 while (!(c.getParent() instanceof RBManagerGUI)) c = c.getParent(); 260 gui = (RBManagerGUI)c.getParent(); 261 gui.createResourceFile(); 262 } 263 }); 264 265 groupButton.addActionListener(new ActionListener(){ 266 public void actionPerformed(ActionEvent ev) { 267 Container c = ((JButton)ev.getSource()).getParent(); 268 RBManagerGUI gui = null; 269 while (!(c.getParent() instanceof RBManagerGUI)) c = c.getParent(); 270 gui = (RBManagerGUI)c.getParent(); 271 gui.createBundleGroup(); 272 } 273 }); 274 275 itemButton.addActionListener(new ActionListener(){ 276 public void actionPerformed(ActionEvent ev) { 277 Container c = ((JButton)ev.getSource()).getParent(); 278 RBManagerGUI gui = null; 279 while (!(c.getParent() instanceof RBManagerGUI)) c = c.getParent(); 280 gui = (RBManagerGUI)c.getParent(); 281 gui.createBundleItem(); 282 } 283 }); 284 285 // Update the display 286 filePanel.removeAll(); 287 filePanel.add(numFileLabel, BorderLayout.NORTH); 288 filePanel.add(fileScroll, BorderLayout.CENTER); 289 filePanel.add(fileButton, BorderLayout.SOUTH); 290 291 groupPanel.removeAll(); 292 groupPanel.add(numGroupLabel, BorderLayout.NORTH); 293 groupPanel.add(groupScroll, BorderLayout.CENTER); 294 groupPanel.add(groupButton, BorderLayout.SOUTH); 295 296 dupBox.removeAll(); 297 dupBox.add(numDupLabel); 298 dupBox.add(dupScroll); 299 300 itemPanel.removeAll(); 301 itemPanel.add(numItemLabel, BorderLayout.NORTH); 302 itemPanel.add(dupBox, BorderLayout.CENTER); 303 itemPanel.add(itemButton, BorderLayout.SOUTH); 304 305 mainBox.removeAll(); 306 mainBox.add(titleLabel); 307 mainBox.add(Box.createVerticalStrut(10)); 308 mainBox.add(filePanel); 309 mainBox.add(Box.createVerticalStrut(10)); 310 mainBox.add(groupPanel); 311 mainBox.add(Box.createVerticalStrut(10)); 312 mainBox.add(itemPanel); 313 314 removeAll(); 315 if (!(getLayout() instanceof BorderLayout)) 316 setLayout(new BorderLayout()); 317 add(mainBox, BorderLayout.CENTER); 318 updateComponents(); 319 } else { 320 removeAll(); 321 } 322 repaint(); 323 } 324 updateComponents()325 public void updateComponents() { 326 if (bundle != null) { 327 int untranslated = bundle.getUntranslatedItemsSize(); 328 329 jLabelStatsTitle.setText(bundle.name); 330 331 jTextFieldStatsName.setText(bundle.name == null ? Resources.getTranslation("untitled") : bundle.name); 332 jTextFieldStatsComment.setText(bundle.comment == null ? "" : bundle.comment); 333 jTextFieldStatsManager.setText(bundle.manager == null ? "" : bundle.manager); 334 jTextFieldStatsLanguage.setText(bundle.language == null ? "" : bundle.language); 335 jTextFieldStatsCountry.setText(bundle.country == null ? "" : bundle.country); 336 jTextFieldStatsVariant.setText(bundle.variant == null ? "" : bundle.variant); 337 jLabelStatsNumTrans.setText(Resources.getTranslation("languagestats_item_count") + " " + 338 String.valueOf(bundle.allItems.size())); 339 jLabelStatsNumUntrans.setText(Resources.getTranslation("languagestats_translation_count") + 340 String.valueOf(untranslated)); 341 } else if (rbm == null) { 342 removeAll(); 343 } 344 345 } 346 updateBundleInfo()347 void updateBundleInfo() { 348 bundle.name = jTextFieldStatsName.getText().trim(); 349 bundle.comment = jTextFieldStatsComment.getText().trim(); 350 bundle.manager = jTextFieldStatsManager.getText().trim(); 351 bundle.language = jTextFieldStatsLanguage.getText().trim(); 352 bundle.country = jTextFieldStatsCountry.getText().trim(); 353 bundle.variant = jTextFieldStatsVariant.getText().trim(); 354 updateButton.setEnabled(false); 355 } 356 RBStatisticsPanel()357 public RBStatisticsPanel() { 358 super(); 359 bundle = null; 360 rbm = null; 361 } 362 363 } 364 365 class ButtonEnablerFocusListener implements FocusListener { 366 JButton button; 367 String beforeText = null; 368 ButtonEnablerFocusListener(JButton button)369 public ButtonEnablerFocusListener(JButton button) { 370 super(); 371 this.button = button; 372 } 373 focusGained(FocusEvent ev)374 public void focusGained(FocusEvent ev) { 375 Object o = ev.getSource(); 376 if (o instanceof JTextComponent) { 377 JTextComponent jtc = (JTextComponent)o; 378 beforeText = jtc.getText(); 379 } 380 } 381 focusLost(FocusEvent ev)382 public void focusLost(FocusEvent ev) { 383 Object o = ev.getSource(); 384 if (o instanceof JTextComponent) { 385 JTextComponent jtc = (JTextComponent)o; 386 String afterText = jtc.getText(); 387 if (!afterText.equals(beforeText)) button.setEnabled(true); 388 } else button.setEnabled(true); 389 } 390 } 391 392