| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| Editor |
|
| 1.1666666666666667;1.167 | ||||
| Editor$1 |
|
| 1.1666666666666667;1.167 | ||||
| Editor$2 |
|
| 1.1666666666666667;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 | } |