Coverage Report - cs.pancava.caltha.Editor
 
Classes in this File Line Coverage Branch Coverage Complexity
Editor
0%
0/80
N/A
1.167
Editor$1
0%
0/3
N/A
1.167
Editor$2
0%
0/3
N/A
1.167
 
 1  
 /* $Id: Editor.java 14 2008-12-07 16:56:26Z mihlon $ */
 2  
 
 3  
 //////////////////////////////////////////////////////////////////////////////
 4  
 //                                                                          //
 5  
 //   This program is free software: you can redistribute it and/or modify   //
 6  
 //   it under the terms of the GNU General Public License as published by   //
 7  
 //   the Free Software Foundation, either version 3 of the License, or      //
 8  
 //   at your option any later version.                                      //
 9  
 //                                                                          //
 10  
 //   This program is distributed in the hope that it will be useful,        //
 11  
 //   but WITHOUT ANY WARRANTY; without even the implied warranty of         //
 12  
 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
 13  
 //   GNU General Public License for more details.                           //
 14  
 //                                                                          //
 15  
 //   You should have received a copy of the GNU General Public License      //
 16  
 //   along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
 17  
 //                                                                          //
 18  
 //////////////////////////////////////////////////////////////////////////////
 19  
 
 20  
 package cs.pancava.caltha;
 21  
 
 22  
 import cs.pancava.caltha.desktop.EditorDesktop;
 23  
 import cs.pancava.caltha.desktop.EditorDesktopNone;
 24  
 import cs.pancava.caltha.desktop.EditorDesktopTextBasedGames;
 25  
 import java.awt.BorderLayout;
 26  
 import java.awt.Toolkit;
 27  
 import java.util.Locale;
 28  
 import java.util.MissingResourceException;
 29  
 import java.util.ResourceBundle;
 30  
 import javax.swing.JFrame;
 31  
 import javax.swing.JMenuBar;
 32  
 import javax.swing.JOptionPane;
 33  
 import javax.swing.JPanel;
 34  
 import javax.swing.JToolBar;
 35  
 
 36  
 /**
 37  
  * <p><b>Vytvori hlavni GUI editoru pro vytvareni RPG sveta.</b></p>
 38  
  *
 39  
  * @author Milan Vaclavik<br />
 40  
  * @version $Revision: 14 $<br />
 41  
  * $LastChangedBy: mihlon $
 42  
  */
 43  0
 public class Editor extends JPanel
 44  
 {
 45  
     /**
 46  
      * Identifikace tridy - datum vzniku tridy :).
 47  
      */
 48  
     private static final long serialVersionUID = 20080430225750L;
 49  
 
 50  
     /**
 51  
      * Ukazatel na narodni prostredi.
 52  
      */
 53  
     private static Locale czLocale;
 54  
 
 55  
     /**
 56  
      * Vnitrni cast editoru.
 57  
      */
 58  
     private static EditorDesktop eDesktop;
 59  
 
 60  
     /**
 61  
      * Reference na hlavni obekt - Samotny Editor.
 62  
      */
 63  
     private static Editor calthaEditor;
 64  
 
 65  
     /**
 66  
      * Ukazatel na zdroj prostredku.
 67  
      */
 68  
     private static ResourceBundle resourcesBundle;
 69  
 
 70  
     /**
 71  
      * Udava verzi programu.
 72  
      */
 73  0
     private static String svnVersion = "$Revision: 14 $";
 74  
 
 75  
     /**
 76  
      * Jmeno aplikace v titulku hlavniho okna.
 77  
      */
 78  
     private static String editorNameS;
 79  
 
 80  
     /**
 81  
      * Odkaz na hlavni okno programu.
 82  
      */
 83  
     private static JFrame mainFrame;
 84  
 
 85  
     /**
 86  
      * Horni cast editoru (menu, tlacitka).
 87  
      */
 88  
     private JPanel header;
 89  
 
 90  
     /**
 91  
      * Reference na hlavni menu.
 92  
      */
 93  
     private MainMenu menu;
 94  
 
 95  
     /**
 96  
      * Konstruktor, ktery vytvari GUI programu.
 97  
      */
 98  
     Editor()
 99  0
     {
 100  
         // Povoleni dekorace oken
 101  
         // Pokud se povoli, tak blbne zmena velikosti podle ikon v hlavice panelu !!!
 102  
         // JFrame.setDefaultLookAndFeelDecorated(true);
 103  
 
 104  0
         Editor.initializeResources();
 105  
 
 106  
         // Definuje rozmisteni komponent - layout manager
 107  0
         this.createLayout();
 108  
 
 109  
         // Vytvori horni cast editoru
 110  0
         this.createHeaderDesktop();
 111  
 
 112  
         // Vytvori vnitrni cast editoru
 113  0
         this.createBodyDesktop();
 114  0
     }
 115  
 
 116  
     /**
 117  
      * Zobrazi chybovy dialog, ktery informuje o tom, ze programu chybi, nebo
 118  
      * ze je poskozen soubor prostredku - lokalizace.
 119  
      * @param msg String : Chybova zprava vracena JVM.
 120  
      */
 121  
     public static void errorMissingResource(final String msg)
 122  
     {
 123  
         // MUSI ZUSTAT !!!! JAK JINAK BY SE TO ZOBRAZILO :) !!!!
 124  0
         Editor.showDialog("Soubor prostředků pro aplikaci Caltha nebyl nalezen nebo je poškozen !\n"
 125  
                         + "Program nebude správně fungovat !!!\n"
 126  
                         + "\nResources for application Caltha not found !!!"
 127  
                         + "\n" + msg,
 128  
                           "Error",
 129  
                           JOptionPane.ERROR_MESSAGE);
 130  0
     }
 131  
 
 132  
     /**
 133  
      * Vraci referenci na hlavni program.
 134  
      * @return Editor : Reference na hlavni obekt programu.
 135  
      */
 136  
     public static Editor getCalthaEditor()
 137  
     {
 138  0
         return Editor.calthaEditor;
 139  
     }
 140  
 
 141  
     /**
 142  
      * Vrati referenci na ceske narodni prostredi.
 143  
      * @return Locale : Reference na ceske narodni prostredi.
 144  
      */
 145  
     public static Locale getCzLocale()
 146  
     {
 147  0
         return Editor.czLocale;
 148  
     }
 149  
 
 150  
     /**
 151  
      * Vrati referenci na hlavni telo editoru.
 152  
      * @return EditorDesktop : Reference na havni plochu editoru.
 153  
      */
 154  
     public static EditorDesktop getEditorDesktop()
 155  
     {
 156  0
         return Editor.eDesktop;
 157  
     }
 158  
 
 159  
     /**
 160  
      * Vraci aktual;ni SVN cislo verze projektu.
 161  
      * @return String : Aktualni verze projektu.
 162  
      */
 163  
     public static String getSvnVersion()
 164  
     {
 165  0
         return Editor.svnVersion;
 166  
     }
 167  
 
 168  
     /**
 169  
      * Vraci lokalizovany text.
 170  
      * @param name String : Klic do souboru prostredku.
 171  
      * @return String : Lokalizovany text urceny klicen do souboru prostredku.
 172  
      */
 173  
     public static String getResourcesBundleString(final String name)
 174  
     {
 175  0
         return Editor.resourcesBundle.getString(name);
 176  
     }
 177  
 
 178  
     /**
 179  
      * Nastavi referenci na hlavni telo editoru.
 180  
      * @param editor EditorDesktop : Reference na novou plochu editoru.
 181  
      */
 182  
     static void setEditorDesktop(final int editor)
 183  
     {
 184  0
         switch (editor)
 185  
         {
 186  
             case EditorDesktop.EDITOR_NONE:
 187  0
                                                         Editor.calthaEditor.createBodyDesktopNone();
 188  0
                                                         break;
 189  
             case EditorDesktop.EDITOR_TEXT_BASED_GAMES:
 190  0
                                                         Editor.calthaEditor.createBodyDesktopTextBasedGames();
 191  0
                                                         break;
 192  
             default:
 193  0
                                                         Editor.calthaEditor.createBodyDesktopNone();
 194  
         }
 195  0
     }
 196  
 
 197  
     /**
 198  
      * Inicializace souboru prostredku (lokalizace).
 199  
      */
 200  
     private static void initializeResources()
 201  
     {
 202  0
         Editor.czLocale = new Locale("cs", "CZ");
 203  
         try
 204  
         {
 205  0
             Editor.resourcesBundle = ResourceBundle.getBundle("Caltha", Editor.czLocale);
 206  
         }
 207  0
         catch (MissingResourceException e)
 208  
         {
 209  
             // Soubor prostredku chybi, nebo je poskozen.
 210  0
             Editor.errorMissingResource(e.getMessage());
 211  0
         }
 212  0
     }
 213  
 
 214  
     /**
 215  
      * Zobrazi dialog.
 216  
      * @param msg String   : Vlastni zprava dialogu.
 217  
      * @param title String : Popisek dialogu.
 218  
      * @param typ int      : Typ dialogu.
 219  
      */
 220  
     public static void showDialog(final String msg, final String title, final int typ)
 221  
     {
 222  0
         new Thread(new Runnable()
 223  0
         {
 224  
             @Override
 225  
             public void run()
 226  
             {
 227  
                     // Zobrazeni dialogoveho okna.
 228  
                     // Dokud ho neuzavreme stiskem tlacitka, nemuzeme nic jineho delat.
 229  
                     // POZOR NA DIAKRITIKY VE TRETIM PARAMETRU !!!!!!
 230  
                     // ZAVISI NA NASTAVENI OPERACNIHO SYSTEMU, JAVA TO NEZAJISTUJE !!!!
 231  0
                     JOptionPane.showMessageDialog(null, msg, title, typ);
 232  0
             }
 233  
         }).start();
 234  0
     }
 235  
 
 236  
     /**
 237  
      * Zobrazi chybovou zpravu, ze nesouhlasi klice pro lokalizaci textu.
 238  
      * TATO METODA NESMI POUZIVAT LOKALIZOVANY TEXT Z *.PROPERTIES, JELIKOZ
 239  
      * LOKALIZACNI ZDROJ MUZE BYT CELY SPATNY !!!
 240  
      * Anglicky popis chyby zajisti prijata zprava z vyhozene vyjimky.
 241  
      * @param error String : Podrobna chybova zprava.
 242  
      */
 243  
     public static void showDialogMissingResources(final String error)
 244  
     {
 245  0
         final Object[] options = {"OK"};
 246  0
         JOptionPane.showOptionDialog(null,
 247  
                                      "Spatne klice pro lokalizaci !" + "\n" + error,
 248  
                                      "Error",
 249  
                                      JOptionPane.DEFAULT_OPTION,
 250  
                                      JOptionPane.QUESTION_MESSAGE,
 251  
                                      null,
 252  
                                      options,
 253  
                                      options[0]
 254  
                                     );
 255  
         // Doslo k zavazne chybe ! Cely program nemusi spravne fungovat !!!
 256  0
         System.exit(0);
 257  0
     }
 258  
 
 259  
     /**
 260  
      * Nastavi referenci na soubor prostredku.
 261  
      * @param resourceB : Odkaz na soubor prostredku.
 262  
      */
 263  
     public static void setResourcesBundle(final ResourceBundle resourceB)
 264  
     {
 265  0
         Editor.resourcesBundle = resourceB;
 266  0
     }
 267  
 
 268  
     /**
 269  
      * Vytvori a zobrazi graficke rozhrani aplikace.
 270  
      */
 271  
     private static void createAndShowGUI()
 272  
     {
 273  0
         Editor.calthaEditor = new Editor();
 274  
 
 275  
         try
 276  
         {
 277  0
             Editor.editorNameS = Editor.resourcesBundle.getString("cs.pancava.caltha.Editor-createAndShowGUI_editorNameS");
 278  
         }
 279  0
         catch (MissingResourceException e)
 280  
         {
 281  0
             Editor.showDialog("" + e.getMessage(), "", JOptionPane.ERROR_MESSAGE);
 282  
             // Moc nevadi, ze je klic spatny, protoze promenna editorNameS muze mit hodnotu null,
 283  
             // jelikoz lze tuto hodnotu bezproblemu pouzit v metode JFrame !
 284  0
             Editor.editorNameS = "(Caltha) RPG editor";
 285  0
         }
 286  
 
 287  
         // Vytvoreni hlavniho okna editoru
 288  0
         Editor.mainFrame = new JFrame(Editor.editorNameS);
 289  0
         Editor.mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 290  
 
 291  
         // Pridani komponenty do kontejneru  - tim zajistime graficky vystup
 292  0
         Editor.mainFrame.getContentPane().add(Editor.calthaEditor);
 293  
 
 294  
         // Nastaveni velikosti hlavniho okna programu na velikost rozliseni obrazovky.
 295  0
         Editor.mainFrame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
 296  
 
 297  0
         Editor.mainFrame.setVisible(true);
 298  
         // Nastavi, zda-lze menit rozmery aplikace za behu
 299  0
         Editor.mainFrame.setResizable(true);
 300  0
     }
 301  
 
 302  
     /**
 303  
      * Hlavni spousteci metoda editoru, ktera vytvori GUI editoru.
 304  
      * @param args String[] : Parametry z prikazove radky.
 305  
      */
 306  
     public static void main(final String[] args)
 307  
     {
 308  0
         javax.swing.SwingUtilities.invokeLater(new Runnable()
 309  0
         {
 310  
             @Override
 311  
             public void run()
 312  
             {
 313  0
                 Editor.createAndShowGUI();
 314  0
             }
 315  
         });
 316  0
     }
 317  
 
 318  
     /**
 319  
      * Volano pri zmene jazyka - lokalizace.
 320  
      */
 321  
     protected final void updateText()
 322  
     {
 323  0
         Editor.editorNameS = Editor.resourcesBundle.getString("cs.pancava.caltha.Editor-createAndShowGUI_editorNameS");
 324  0
         Editor.mainFrame.setTitle(Editor.editorNameS);
 325  0
     }
 326  
 
 327  
     /**
 328  
      * Vytvori hlavni cast plochy editoru - prostor, kde se budou zobrazovat
 329  
      * jednotliva okna.
 330  
      */
 331  
     private void createBodyDesktop()
 332  
     {
 333  0
         Editor.eDesktop = new EditorDesktopNone();
 334  
 
 335  0
         this.add(Editor.eDesktop.getMainDesktop(), BorderLayout.CENTER);
 336  0
     }
 337  
 
 338  
     /**
 339  
      * Zobrazime praznou plochu - nebyl vybran zadny editor.
 340  
      */
 341  
     private void createBodyDesktopNone()
 342  
     {
 343  
         // Odstranime predchozi komponentu - editor z plochy programu.
 344  0
         this.remove(Editor.eDesktop.getMainDesktop());
 345  
 
 346  
         // Vytvorime novou plochu editoru.
 347  0
         Editor.eDesktop = new EditorDesktopNone();
 348  
 
 349  
         // Vlozime plochu editoru do programu.
 350  0
         this.add(Editor.eDesktop.getMainDesktop(), BorderLayout.CENTER);
 351  
 
 352  
         // Zajistime spravne vykresleni nove plochy editoru.
 353  0
         Editor.eDesktop.resizeWin();
 354  0
         Editor.calthaEditor.validate();
 355  0
     }
 356  
 
 357  
     /**
 358  
      * Zobrazime plochy editoru pro tvorbu textovych her.
 359  
      */
 360  
     private void createBodyDesktopTextBasedGames()
 361  
     {
 362  
         // Odstranime predchozi komponentu - editor z plochy programu.
 363  0
         this.remove(Editor.eDesktop.getMainDesktop());
 364  
 
 365  
         // Vytvorime novou plochu editoru.
 366  0
         Editor.eDesktop = new EditorDesktopTextBasedGames();
 367  
 
 368  
         // Vlozime plochu editoru do programu.
 369  0
         this.add(Editor.eDesktop.getMainDesktop(), BorderLayout.CENTER);
 370  
 
 371  
         // Zajistime spravne vykresleni nove plochy editoru.
 372  0
         Editor.eDesktop.resizeWin();
 373  0
         Editor.calthaEditor.validate();
 374  0
     }
 375  
 
 376  
     /**
 377  
      * Vytvori horni cast editoru - roletove menu, menu tlacitek.
 378  
      */
 379  
     private void createHeaderDesktop()
 380  
     {
 381  0
         this.header = new JPanel();
 382  
 
 383  0
         this.header.setLayout(new BorderLayout());
 384  
 
 385  
         // Vytvori a vlozi menu
 386  0
         this.header.add(this.createMenu(), BorderLayout.NORTH);
 387  
 
 388  
         // Vytvori oddelitelny panel s tlacitky
 389  0
         this.header.add(this.createToolbar(), BorderLayout.SOUTH);
 390  
 
 391  0
         this.add(this.header, BorderLayout.NORTH);
 392  0
     }
 393  
 
 394  
     /**
 395  
      * Definuje rozmisteni komponent - layout manager.
 396  
      */
 397  
     private void createLayout()
 398  
     {
 399  0
         this.setLayout(new BorderLayout());
 400  0
     }
 401  
 
 402  
     /**
 403  
      * Vytvori a zobrazi hlavni menu.
 404  
      * @return JMenuBar : Ukazatel na prave vytvorene menu.
 405  
      */
 406  
     private JMenuBar createMenu()
 407  
     {
 408  0
         this.menu = new MainMenu();
 409  
 
 410  0
         return this.menu.getMenuBar();
 411  
     }
 412  
 
 413  
     /**
 414  
      * Vytvori oddelitelny panel s tlacitky.
 415  
      * @return JToolBar : Ukazatel na prave vytvoreny panel s tlacitky.
 416  
      */
 417  
     private JToolBar createToolbar()
 418  
     {
 419  
         // TODO: Pridat panel s tlacitky.
 420  
         // return new Buttons().getButtonsToolbar();
 421  
 
 422  0
         return new JToolBar();
 423  
     }
 424  
 }