2 new revisions: Revision: aab8b175abf6 Author: John Boyer <john.boyer@xxxxxxxxxxxxxxxxx> Date: Fri May 4 01:12:16 2012 Log: implemennting Multi-document interface http://code.google.com/p/brailleblaster/source/detail?r=aab8b175abf6 Revision: 25d0c51b11cc Author: John Boyer <john.boyer@xxxxxxxxxxxxxxxxx> Date: Fri May 4 01:52:02 2012 Log: making nested UTD class an independent class http://code.google.com/p/brailleblaster/source/detail?r=25d0c51b11cc ============================================================================== Revision: aab8b175abf6 Author: John Boyer <john.boyer@xxxxxxxxxxxxxxxxx> Date: Fri May 4 01:12:16 2012 Log: implemennting Multi-document interface http://code.google.com/p/brailleblaster/source/detail?r=aab8b175abf6 Modified: /src/main/org/brailleblaster/wordprocessor/BBMenu.java /src/main/org/brailleblaster/wordprocessor/DocumentManager.java /src/main/org/brailleblaster/wordprocessor/RecentDocuments.java /src/main/org/brailleblaster/wordprocessor/WPManager.java =======================================--- /src/main/org/brailleblaster/wordprocessor/BBMenu.java Mon Apr 30 20:55:37 2012 +++ /src/main/org/brailleblaster/wordprocessor/BBMenu.java Fri May 4 01:12:16 2012
@@ -1,30 +1,30 @@ /* BrailleBlaster Braille Transcription Application - * - * Copyright (C) 2010, 2012 - * ViewPlus Technologies, Inc. www.viewplus.com - * and - * Abilitiessoft, Inc. www.abilitiessoft.com - * All rights reserved - * - * This file may contain code borrowed from files produced by various - * Java development teams. These are gratefully acknoledged. - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the Apache 2.0 License, as given at - * http://www.apache.org/licenses/ - * - * This file 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 Apache 2.0 License for more details. - * - * You should have received a copy of the Apache 2.0 License along with - * this program; see the file LICENSE. - * If not, see - * http://www.apache.org/licenses/ - * - * Maintained by John J. Boyer john.boyer@xxxxxxxxxxxxxxxxx -*/ + * + * Copyright (C) 2010, 2012 + * ViewPlus Technologies, Inc. www.viewplus.com + * and + * Abilitiessoft, Inc. www.abilitiessoft.com + * All rights reserved + * + * This file may contain code borrowed from files produced by various + * Java development teams. These are gratefully acknoledged. + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the Apache 2.0 License, as given at + * http://www.apache.org/licenses/ + * + * This file 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 Apache 2.0 License for more details. + * + * You should have received a copy of the Apache 2.0 License along with + * this program; see the file LICENSE. + * If not, see + * http://www.apache.org/licenses/ + * + * Maintained by John J. Boyer john.boyer@xxxxxxxxxxxxxxxxx + */ package org.brailleblaster.wordprocessor; @@ -41,623 +41,631 @@ class BBMenu { -/** -* This class contains all the menus. -*/ - -final Menu menuBar; - -/* All the menu items are member fields so they can be accessed outside -* the constructor. This might be done for example with setEnabled(false) -* to indicate that a menu item is unavailable. -*/ -MenuItem newItem; -MenuItem openItem; -MenuItem recentItem; -MenuItem importItem; -MenuItem saveItem; -MenuItem saveAsItem; -MenuItem embosserSetupItem; -MenuItem embosserPreviewItem; -MenuItem embossInkPreviewItem; -MenuItem embossNowItem; -MenuItem embossInkNowItem; -MenuItem printPageSetupItem; -MenuItem printPreviewItem; -MenuItem printItem; -MenuItem languageItem; -MenuItem closeItem; -MenuItem exitItem; -MenuItem undoItem; -MenuItem redoItem; -MenuItem cutItem; -MenuItem copyItem; -MenuItem pasteItem; -MenuItem searchItem; -MenuItem replaceItem; -MenuItem spellCheckItem; -MenuItem boldToggleItem; -MenuItem italicToggleItem; -MenuItem underlineToggleItem; -MenuItem zoomImageItem; -MenuItem selectAllItem; -MenuItem createStyleItem; -MenuItem nextElementItem; -MenuItem assocSelectionItem; -MenuItem lockSelectionItem; -MenuItem unlockSelectionItem; -MenuItem editLockedItem; -MenuItem keybdBrlToggleItem; -MenuItem cursorFollowItem; -MenuItem dragCursorItem; -MenuItem increaseFontSizeItem; -MenuItem decreaseFontSizeItem; -MenuItem increaseContrastItem; -MenuItem decreaseContrastItem; -MenuItem showOutlineItem; -MenuItem braillePresentationItem; -MenuItem formatLikeBrailleItem; -MenuItem showPageBreaksItem; -MenuItem xtranslateItem; -MenuItem backTranslateItem; -MenuItem translationTemplatesItem; -MenuItem inLineMathItem; -MenuItem displayedMathItem; -MenuItem inLineGraphicItem; -MenuItem displayedGraphicItem; -MenuItem tableItem; -MenuItem brlFormatItem; -MenuItem brailleASCIIItem; -MenuItem showTranslationTemplatesItem; -MenuItem showFormatTemplatesItem; -MenuItem changeSettingsItem; -MenuItem readManualItem; -MenuItem helpInfoItem; -MenuItem tutorialsItem; -MenuItem checkUpdatesItem; -MenuItem aboutItem; - -BBMenu (final DocumentManager dm) { -LocaleHandler lh = new LocaleHandler(); - -/* Note that the values in the setText methods are keys for -* localization. They are not intended to be seen by the user. -* Capitalization should follow the convention for names in Java, but -* this is not always consistent. Values, with proper capitalization, are -* shown in the files in the dist/programData/lang subdirectory. -*/ - -// Set up menu bar -menuBar = new Menu (dm.documentWindow, SWT.BAR); -MenuItem fileItem = new MenuItem (menuBar, SWT.CASCADE); -fileItem.setText (lh.localValue("&File")); -MenuItem editItem = new MenuItem (menuBar, SWT.CASCADE); -editItem.setText (lh.localValue("&Edit")); -MenuItem viewItem = new MenuItem (menuBar, SWT.CASCADE); -viewItem.setText (lh.localValue("&View")); -MenuItem translateItem = new MenuItem (menuBar, SWT.CASCADE); -translateItem.setText (lh.localValue("&Translate")); -MenuItem insertItem = new MenuItem (menuBar, SWT.CASCADE); -insertItem.setText (lh.localValue("&Insert")); -MenuItem advancedItem = new MenuItem (menuBar, SWT.CASCADE); -advancedItem.setText (lh.localValue("&Advanced")); -MenuItem helpItem = new MenuItem (menuBar, SWT.CASCADE); -helpItem.setText (lh.localValue("&Help")); - -// Set up file menu -Menu fileMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -newItem = new MenuItem (fileMenu, SWT.PUSH); -newItem.setText (lh.localValue("&New")); -newItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -if (BBIni.debugging()) { -dm.setReturn (WP.NewDocument); -} -else { -dm.fileNew(); -} -} -}); -openItem = new MenuItem (fileMenu, SWT.PUSH); -openItem.setText (lh.localValue("&Open")); -openItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -if (BBIni.debugging()) { -dm.setReturn (WP.OpenDocumentGetFile); -} else { -dm.fileOpen(); -} -} -}); -recentItem = new MenuItem (fileMenu, SWT.PUSH); -recentItem.setText (lh.localValue("&Recent")); -recentItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.recentDocuments(); -} -}); -importItem = new MenuItem (fileMenu, SWT.PUSH); -importItem.setText (lh.localValue("&Import")); -importItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -saveItem = new MenuItem (fileMenu, SWT.PUSH); -saveItem.setText (lh.localValue("&Save")); -saveItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -saveAsItem = new MenuItem (fileMenu, SWT.PUSH); -saveAsItem.setText (lh.localValue("Save&As")); -saveAsItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.fileSaveAs(); -} -}); -embosserSetupItem = new MenuItem (fileMenu, SWT.PUSH); -embosserSetupItem.setText (lh.localValue("&EmbosserSetup")); -embosserSetupItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -embosserPreviewItem = new MenuItem (fileMenu, SWT.PUSH); -embosserPreviewItem.setText (lh.localValue("Embosser&Preview")); -embosserPreviewItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -embossInkPreviewItem = new MenuItem (fileMenu, SWT.PUSH); -embossInkPreviewItem.setText (lh.localValue("Emboss&InkPreview")); -embossInkPreviewItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -embossNowItem = new MenuItem (fileMenu, SWT.PUSH); -embossNowItem.setText (lh.localValue("Emboss&Now!")); -embossNowItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.fileEmbossNow(); -} -}); -embossInkNowItem = new MenuItem (fileMenu, SWT.PUSH); -embossInkNowItem.setText (lh.localValue("EmbossInkN&ow")); -embossInkNowItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -printPageSetupItem = new MenuItem (fileMenu, SWT.PUSH); -printPageSetupItem.setText (lh.localValue("PrintPageS&etup")); -printPageSetupItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -printPreviewItem = new MenuItem (fileMenu, SWT.PUSH); -printPreviewItem.setText (lh.localValue("PrintP&review")); -printPreviewItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -printItem = new MenuItem (fileMenu, SWT.PUSH); -printItem.setText (lh.localValue("&Print")); -printItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -languageItem = new MenuItem (fileMenu, SWT.PUSH); -languageItem.setText (lh.localValue("&Language")); -languageItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -closeItem = new MenuItem (fileMenu, SWT.PUSH); -closeItem.setText (lh.localValue("&close")); -closeItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -if (BBIni.debugging()) { -dm.setReturn (WP.DocumentClosed); -} -else { -dm.setReturn (WP.BBClosed); -} -} -}); -if (!BBIni.getPlatformName().equals("cocoa")) { -exitItem = new MenuItem (fileMenu, SWT.PUSH); -exitItem.setText (lh.localValue("e&xit")); -exitItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.setReturn (WP.BBClosed); -} -}); -} -fileItem.setMenu (fileMenu); - -// Set up edit menu -Menu editMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -undoItem = new MenuItem (editMenu, SWT.PUSH); -undoItem.setText (lh.localValue("&Undo")); -undoItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -if (BBIni.debugging()) { -dm.setReturn (WP.SwitchDocuments); -} else { -dm.placeholder(); -} -} -}); -redoItem = new MenuItem (editMenu, SWT.PUSH); -redoItem.setText (lh.localValue("&Redo")); -redoItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -cutItem = new MenuItem (editMenu, SWT.PUSH); -cutItem.setText (lh.localValue("&Cut")); -cutItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -copyItem = new MenuItem (editMenu, SWT.PUSH); -copyItem.setText (lh.localValue("c&Opy")); -copyItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -pasteItem = new MenuItem (editMenu, SWT.PUSH); -pasteItem.setText (lh.localValue("&Paste")); -pasteItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -searchItem = new MenuItem (editMenu, SWT.PUSH); -searchItem.setText (lh.localValue("&Search")); -searchItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -replaceItem = new MenuItem (editMenu, SWT.PUSH); -replaceItem.setText (lh.localValue("&Replace")); -replaceItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -spellCheckItem = new MenuItem (editMenu, SWT.PUSH); -spellCheckItem.setText (lh.localValue("&SpellCheck")); -spellCheckItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -boldToggleItem = new MenuItem (editMenu, SWT.PUSH); -boldToggleItem.setText (lh.localValue("&BoldToggle")); -boldToggleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -italicToggleItem = new MenuItem (editMenu, SWT.PUSH); -italicToggleItem.setText (lh.localValue("&ItalicToggle")); -italicToggleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -underlineToggleItem = new MenuItem (editMenu, SWT.PUSH); -underlineToggleItem.setText (lh.localValue("&UnderlineToggle")); -underlineToggleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -zoomImageItem = new MenuItem (editMenu, SWT.PUSH); -zoomImageItem.setText (lh.localValue("&ZoomImage")); -zoomImageItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -selectAllItem = new MenuItem (editMenu, SWT.PUSH); -selectAllItem.setText (lh.localValue("&SelectAll")); -selectAllItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -createStyleItem = new MenuItem (editMenu, SWT.PUSH); -createStyleItem.setText (lh.localValue("&CreateStyle")); -createStyleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -nextElementItem = new MenuItem (editMenu, SWT.PUSH); -nextElementItem.setText (lh.localValue("&NexstElement")); -nextElementItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -assocSelectionItem = new MenuItem (editMenu, SWT.PUSH); -assocSelectionItem.setText (lh.localValue("&AssocSelection")); -assocSelectionItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -lockSelectionItem = new MenuItem (editMenu, SWT.PUSH); -lockSelectionItem.setText (lh.localValue("&LockSelection")); -lockSelectionItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -unlockSelectionItem = new MenuItem (editMenu, SWT.PUSH); -unlockSelectionItem.setText (lh.localValue("&UnlockSelection")); -unlockSelectionItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -editLockedItem = new MenuItem (editMenu, SWT.PUSH); -editLockedItem.setText (lh.localValue("&EditLocked")); -editLockedItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -keybdBrlToggleItem = new MenuItem (editMenu, SWT.PUSH); -keybdBrlToggleItem.setText (lh.localValue("&KeybdBrlToggle")); -keybdBrlToggleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -cursorFollowItem = new MenuItem (editMenu, SWT.PUSH); -cursorFollowItem.setText (lh.localValue("&CursorFollow")); -cursorFollowItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -dragCursorItem = new MenuItem (editMenu, SWT.PUSH); -dragCursorItem.setText (lh.localValue("&DragCursor")); -dragCursorItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -editItem.setMenu (editMenu); - -// Set up view menu -Menu viewMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -increaseFontSizeItem = new MenuItem (viewMenu, SWT.PUSH); -increaseFontSizeItem.setText (lh.localValue("&IncreaseFontSize")); -increaseFontSizeItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -decreaseFontSizeItem = new MenuItem (viewMenu, SWT.PUSH); -decreaseFontSizeItem.setText (lh.localValue("&DecreaseFintSize")); -decreaseFontSizeItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -increaseContrastItem = new MenuItem (viewMenu, SWT.PUSH); -increaseContrastItem.setText (lh.localValue("&IncreaseContrast")); -increaseContrastItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -decreaseContrastItem = new MenuItem (viewMenu, SWT.PUSH); -decreaseContrastItem.setText (lh.localValue("&DecreaseContrast")); -decreaseContrastItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -showOutlineItem = new MenuItem (viewMenu, SWT.PUSH); -showOutlineItem.setText (lh.localValue("&ShowOutline")); -showOutlineItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -braillePresentationItem = new MenuItem (viewMenu, SWT.PUSH); -braillePresentationItem.setText (lh.localValue("&BraillePresentation")); -braillePresentationItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -formatLikeBrailleItem = new MenuItem (viewMenu, SWT.PUSH); -formatLikeBrailleItem.setText (lh.localValue("&FormatLikeBraille")); -formatLikeBrailleItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -showPageBreaksItem = new MenuItem (viewMenu, SWT.PUSH); -showPageBreaksItem.setText (lh.localValue("&ShowPageBreaks")); -showPageBreaksItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -viewItem.setMenu (viewMenu); - -// Set up translate menu -Menu translateMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -xtranslateItem = new MenuItem (translateMenu, SWT.PUSH); -xtranslateItem.setText (lh.localValue("&Translate")); -xtranslateItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.translate(); -} -}); -backTranslateItem = new MenuItem (translateMenu, SWT.PUSH); -backTranslateItem.setText -(lh.localValue("&BackTranslate")); -backTranslateItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -translationTemplatesItem = new MenuItem (translateMenu, -SWT.PUSH); -translationTemplatesItem.setText -(lh.localValue("&TranslationTemplates")); -translationTemplatesItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -translateItem.setMenu (translateMenu); - -// Set up insert menu -Menu insertMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -inLineMathItem = new MenuItem (insertMenu, SWT.PUSH); -inLineMathItem.setText (lh.localValue("&InLineMath")); -inLineMathItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -displayedMathItem = new MenuItem (insertMenu, SWT.PUSH); -displayedMathItem.setText (lh.localValue("&DisplayedMath")); -displayedMathItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -inLineGraphicItem = new MenuItem (insertMenu, SWT.PUSH); -inLineGraphicItem.setText (lh.localValue("&InLineGraphic")); -inLineGraphicItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -displayedGraphicItem = new MenuItem (insertMenu, SWT.PUSH); -displayedGraphicItem.setText (lh.localValue("&DisplayedGraphic")); -displayedGraphicItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -tableItem = new MenuItem (insertMenu, SWT.PUSH); -tableItem.setText (lh.localValue("&Table")); -tableItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -insertItem.setMenu (insertMenu); - -// Set up advanced menu -Menu advancedMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -brlFormatItem = new MenuItem (advancedMenu, SWT.PUSH); -brlFormatItem.setText (lh.localValue("&BrailleFormat")); -brlFormatItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -brailleASCIIItem = new MenuItem (advancedMenu, SWT.PUSH); -brailleASCIIItem.setText (lh.localValue("&brailleASCIITable")); -brailleASCIIItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -showTranslationTemplatesItem = new MenuItem (advancedMenu, -SWT.PUSH); -showTranslationTemplatesItem.setText -(lh.localValue("&ShowTranslationTemplates")); -showTranslationTemplatesItem.addSelectionListener (new -SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -showFormatTemplatesItem = new MenuItem (advancedMenu, -SWT.PUSH); -showFormatTemplatesItem.setText (lh.localValue("&ShowFormatTemplates")); -showFormatTemplatesItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -dm.placeholder(); -} -}); -changeSettingsItem = new MenuItem (advancedMenu, -SWT.PUSH); -changeSettingsItem.setText (lh.localValue("&changeSettings")); -changeSettingsItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new SettingsDialog().open(); -} -}); -advancedItem.setMenu (advancedMenu); - -// Set up help menu -Menu helpMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); -aboutItem = new MenuItem (helpMenu, SWT.PUSH); -aboutItem.setText (lh.localValue("&About")); -aboutItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new UserHelp(WP.AboutBB); -} -}); -helpInfoItem = new MenuItem (helpMenu, SWT.PUSH); -helpInfoItem.setText (lh.localValue("&helpInfo")); -helpInfoItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new UserHelp(WP.HelpInfo); -} -}); -tutorialsItem = new MenuItem (helpMenu, SWT.PUSH); -tutorialsItem.setText (lh.localValue("&Tutorials")); -tutorialsItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new UserHelp(WP.ReadTutorial); -} -}); -readManualItem = new MenuItem (helpMenu, SWT.PUSH); -readManualItem.setText (lh.localValue("&ReadManuals")); -readManualItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new UserHelp(WP.ReadManuals); -} -}); -checkUpdatesItem = new MenuItem (helpMenu, SWT.PUSH); -checkUpdatesItem.setText (lh.localValue("&CheckUpdates")); -checkUpdatesItem.addSelectionListener (new SelectionAdapter() { -public void widgetSelected (SelectionEvent e) { -new UserHelp (WP.CheckUpdates); -} -}); -helpItem.setMenu (helpMenu); - -// Activate menus when documentWindow shell is opened -dm.documentWindow.setMenuBar (menuBar); -} + /** + * This class contains all the menus. + */ + + final Menu menuBar; + + /* All the menu items are member fields so they can be accessed outside+ * the constructor. This might be done for example with setEnabled(false)
+ * to indicate that a menu item is unavailable. + */ + MenuItem newItem; + MenuItem openItem; + MenuItem recentItem; + MenuItem importItem; + MenuItem saveItem; + MenuItem saveAsItem; + MenuItem embosserSetupItem; + MenuItem embosserPreviewItem; + MenuItem embossInkPreviewItem; + MenuItem embossNowItem; + MenuItem embossInkNowItem; + MenuItem printPageSetupItem; + MenuItem printPreviewItem; + MenuItem printItem; + MenuItem languageItem; + MenuItem closeItem; + MenuItem exitItem; + MenuItem undoItem; + MenuItem redoItem; + MenuItem cutItem; + MenuItem copyItem; + MenuItem pasteItem; + MenuItem searchItem; + MenuItem replaceItem; + MenuItem spellCheckItem; + MenuItem boldToggleItem; + MenuItem italicToggleItem; + MenuItem underlineToggleItem; + MenuItem zoomImageItem; + MenuItem selectAllItem; + MenuItem createStyleItem; + MenuItem nextElementItem; + MenuItem assocSelectionItem; + MenuItem lockSelectionItem; + MenuItem unlockSelectionItem; + MenuItem editLockedItem; + MenuItem keybdBrlToggleItem; + MenuItem cursorFollowItem; + MenuItem dragCursorItem; + MenuItem increaseFontSizeItem; + MenuItem decreaseFontSizeItem; + MenuItem increaseContrastItem; + MenuItem decreaseContrastItem; + MenuItem showOutlineItem; + MenuItem braillePresentationItem; + MenuItem formatLikeBrailleItem; + MenuItem showPageBreaksItem; + MenuItem xtranslateItem; + MenuItem backTranslateItem; + MenuItem translationTemplatesItem; + MenuItem inLineMathItem; + MenuItem displayedMathItem; + MenuItem inLineGraphicItem; + MenuItem displayedGraphicItem; + MenuItem tableItem; + MenuItem brlFormatItem; + MenuItem brailleASCIIItem; + MenuItem showTranslationTemplatesItem; + MenuItem showFormatTemplatesItem; + MenuItem changeSettingsItem; + MenuItem readManualItem; + MenuItem helpInfoItem; + MenuItem tutorialsItem; + MenuItem checkUpdatesItem; + MenuItem aboutItem; + + //5/3 + MenuItem swtichItem; + + BBMenu (final DocumentManager dm) { + LocaleHandler lh = new LocaleHandler(); + + /* Note that the values in the setText methods are keys for + * localization. They are not intended to be seen by the user.+ * Capitalization should follow the convention for names in Java, but + * this is not always consistent. Values, with proper capitalization, are
+ * shown in the files in the dist/programData/lang subdirectory. + */ + + // Set up menu bar + menuBar = new Menu (dm.documentWindow, SWT.BAR); + MenuItem fileItem = new MenuItem (menuBar, SWT.CASCADE); + fileItem.setText (lh.localValue("&File")); + MenuItem editItem = new MenuItem (menuBar, SWT.CASCADE); + editItem.setText (lh.localValue("&Edit")); + MenuItem viewItem = new MenuItem (menuBar, SWT.CASCADE); + viewItem.setText (lh.localValue("&View")); + MenuItem translateItem = new MenuItem (menuBar, SWT.CASCADE); + translateItem.setText (lh.localValue("&Translate")); + MenuItem insertItem = new MenuItem (menuBar, SWT.CASCADE); + insertItem.setText (lh.localValue("&Insert")); + MenuItem advancedItem = new MenuItem (menuBar, SWT.CASCADE); + advancedItem.setText (lh.localValue("&Advanced")); + MenuItem helpItem = new MenuItem (menuBar, SWT.CASCADE); + helpItem.setText (lh.localValue("&Help")); + + // Set up file menu + Menu fileMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); + newItem = new MenuItem (fileMenu, SWT.PUSH); + newItem.setText (lh.localValue("&New")); + newItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + if (BBIni.debugging()) { + dm.setReturn (WP.NewDocument); + } + else { + dm.fileNew(); + } + } + }); + openItem = new MenuItem (fileMenu, SWT.PUSH); + openItem.setText (lh.localValue("&Open")); + openItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + if (BBIni.debugging()) { + dm.setReturn (WP.OpenDocumentGetFile); + } else { + dm.fileOpen(); + } + } + }); + + //5/3 just a tmp place to test the switch function + swtichItem = new MenuItem (fileMenu, SWT.PUSH); + swtichItem.setText (lh.localValue("S&wtich")); + swtichItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.setReturn(WP.SwitchDocuments); + } + }); + + recentItem = new MenuItem (fileMenu, SWT.PUSH); + recentItem.setText (lh.localValue("&Recent")); + recentItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.recentDocuments(); + } + }); + importItem = new MenuItem (fileMenu, SWT.PUSH); + importItem.setText (lh.localValue("&Import")); + importItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + saveItem = new MenuItem (fileMenu, SWT.PUSH); + saveItem.setText (lh.localValue("&Save")); + saveItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + saveAsItem = new MenuItem (fileMenu, SWT.PUSH); + saveAsItem.setText (lh.localValue("Save&As")); + saveAsItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.fileSaveAs(); + } + }); + embosserSetupItem = new MenuItem (fileMenu, SWT.PUSH); + embosserSetupItem.setText (lh.localValue("&EmbosserSetup")); + embosserSetupItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + embosserPreviewItem = new MenuItem (fileMenu, SWT.PUSH); + embosserPreviewItem.setText (lh.localValue("Embosser&Preview")); + embosserPreviewItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + embossInkPreviewItem = new MenuItem (fileMenu, SWT.PUSH); + embossInkPreviewItem.setText (lh.localValue("Emboss&InkPreview")); + embossInkPreviewItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + embossNowItem = new MenuItem (fileMenu, SWT.PUSH); + embossNowItem.setText (lh.localValue("Emboss&Now!")); + embossNowItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.fileEmbossNow(); + } + }); + embossInkNowItem = new MenuItem (fileMenu, SWT.PUSH); + embossInkNowItem.setText (lh.localValue("EmbossInkN&ow")); + embossInkNowItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + printPageSetupItem = new MenuItem (fileMenu, SWT.PUSH); + printPageSetupItem.setText (lh.localValue("PrintPageS&etup")); + printPageSetupItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + printPreviewItem = new MenuItem (fileMenu, SWT.PUSH); + printPreviewItem.setText (lh.localValue("PrintP&review")); + printPreviewItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + printItem = new MenuItem (fileMenu, SWT.PUSH); + printItem.setText (lh.localValue("&Print")); + printItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + languageItem = new MenuItem (fileMenu, SWT.PUSH); + languageItem.setText (lh.localValue("&Language")); + languageItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + closeItem = new MenuItem (fileMenu, SWT.PUSH); + closeItem.setText (lh.localValue("&close")); + closeItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.setReturn (WP.DocumentClosed); + } + }); + if (!BBIni.getPlatformName().equals("cocoa")) { + exitItem = new MenuItem (fileMenu, SWT.PUSH); + exitItem.setText (lh.localValue("e&xit")); + exitItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.setReturn (WP.BBClosed); + } + }); + } + fileItem.setMenu (fileMenu); + + // Set up edit menu + Menu editMenu = new Menu (dm.documentWindow, SWT.DROP_DOWN); + undoItem = new MenuItem (editMenu, SWT.PUSH); + undoItem.setText (lh.localValue("&Undo")); + undoItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + if (BBIni.debugging()) { + dm.setReturn (WP.SwitchDocuments); + } else { + dm.placeholder(); + } + } + }); + redoItem = new MenuItem (editMenu, SWT.PUSH); + redoItem.setText (lh.localValue("&Redo")); + redoItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + cutItem = new MenuItem (editMenu, SWT.PUSH); + cutItem.setText (lh.localValue("&Cut")); + cutItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + copyItem = new MenuItem (editMenu, SWT.PUSH); + copyItem.setText (lh.localValue("c&Opy")); + copyItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + pasteItem = new MenuItem (editMenu, SWT.PUSH); + pasteItem.setText (lh.localValue("&Paste")); + pasteItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + searchItem = new MenuItem (editMenu, SWT.PUSH); + searchItem.setText (lh.localValue("&Search")); + searchItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + replaceItem = new MenuItem (editMenu, SWT.PUSH); + replaceItem.setText (lh.localValue("&Replace")); + replaceItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + spellCheckItem = new MenuItem (editMenu, SWT.PUSH); + spellCheckItem.setText (lh.localValue("&SpellCheck")); + spellCheckItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + boldToggleItem = new MenuItem (editMenu, SWT.PUSH); + boldToggleItem.setText (lh.localValue("&BoldToggle")); + boldToggleItem.addSelectionListener (new SelectionAdapter() { + public void widgetSelected (SelectionEvent e) { + dm.placeholder(); + } + }); + italicToggleItem = new MenuItem (editMenu, SWT.PUSH); + italicToggleItem.setText (lh.localValue("&ItalicToggle")); ***The diff for this file has been truncated for email.*** =======================================--- /src/main/org/brailleblaster/wordprocessor/DocumentManager.java Wed May 2 03:17:34 2012 +++ /src/main/org/brailleblaster/wordprocessor/DocumentManager.java Fri May 4 01:12:16 2012
@@ -30,6 +30,7 @@ import org.eclipse.swt.*; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Event; @@ -52,7 +53,7 @@ import javax.print.PrintException; import org.eclipse.swt.widgets.Listener; import org.brailleblaster.settings.Welcome; - +import org.eclipse.swt.widgets.MessageBox; class DocumentManager { /** @@ -89,6 +90,10 @@ int mode = 0; UTD utd; String buffer; + boolean finished = false; + private volatile boolean stopRequested = false; + static final boolean[] flags = new boolean[WPManager.getMaxNumDocs()]; + /** * Constructor that sets things up for a new document. @@ -103,6 +108,12 @@ tempPath = BBIni.getTempFilesPath() + BBIni.getFileSep(); louisutdml = liblouisutdml.getInstance(); documentWindow = new Shell (display, SWT.SHELL_TRIM); + documentWindow.addListener(SWT.Close, new Listener(){ + public void handleEvent(Event event) { + setReturn(WP.DocumentClosed);+ //this way clicking close box is equivalent to the 'close' item on the menu
+ } + }); layout = new FormLayout(); documentWindow.setLayout (layout); rd= new RecentDocuments(); @@ -121,7 +132,7 @@ } }); documentWindow.open(); - setWindowTitle ("untitled"); + setWindowTitle (" untitled"); if (documentNumber == 0) { new Welcome(); // This then calls the settings dialogs. } @@ -131,24 +142,22 @@ openFirstDocument(); } utd = new UTD(); - while (!documentWindow.isDisposed() && returnReason == 0) { + + boolean stop = false;+ while (!documentWindow.isDisposed() && (!stop)&&(returnReason == 0)) {
if (!display.readAndDispatch()) display.sleep(); - } - if (!BBIni.debugging()) { - documentWindow.dispose(); - return; - } - switch (returnReason) { - case WP.DocumentClosed: - case WP.BBClosed: - finish(); - break; - default: - //documentWindow.setVisible (false); - break; - } - } + for(boolean b:flags){ + stop |= b; + } + } + //get here iff the window is disposed, or someone has a reason + if(flags[documentNumber]){ + WPManager.setCurDoc(documentNumber); + flags[documentNumber] =false; //all should be false now + } + //Then back to WPManager + } /** * This nested class encapsulates hnadling of the Universal @@ -438,6 +447,7 @@ */ void finish() { documentWindow.dispose(); + finished = true; } /** @@ -448,9 +458,12 @@ switch (reason) { case WP.SwitchDocuments: if (WPManager.haveOtherDocuments()) { + //System.out.println("Switching to next"); returnReason = reason; + flags[documentNumber] = true;//this fires the interrupt return true; } + new Notify("There is only one document."); return false; case WP.NewDocument: returnReason = reason; @@ -467,6 +480,8 @@ default: break; } + //WPManager.setCurDoc(documentNumber); + flags[documentNumber] = true;//this fires the interrupt return true; } @@ -478,7 +493,14 @@ if (documentWindow.isDisposed()) return; documentWindow.forceActive(); - returnReason = 0; + boolean stop = false; + while (!documentWindow.isDisposed() && (!stop)) { + if (!documentWindow.getDisplay().readAndDispatch()) + documentWindow.getDisplay().sleep(); + for(boolean b:DocumentManager.getflags()){ + stop |= b; + } + } } void openFirstDocument() { @@ -523,8 +545,10 @@ int numChars; void fileOpen () { - if (BBIni.debugging() && doc != null) { + // if (BBIni.debugging() && doc != null) { + if (doc != null){ returnReason = WP.OpenDocumentGetFile; + flags[documentNumber] = true; return; } Shell shell = new Shell (display, SWT.DIALOG_TRIM); @@ -561,7 +585,9 @@ //Use threading to keep the control of the window new Thread() { public void run() { + while (!stopRequested) { walkTree (rootElement); + } } } .start(); @@ -593,6 +619,7 @@ } } } + stopRequested = true; } void fileSave() { @@ -724,6 +751,9 @@ } } + int getCount(){ + return documentNumber; + } void fileEmbossNow () { if (translatedFileName == null) { translate(); @@ -752,9 +782,30 @@ new Notify ("This menu item is not yet implemented. Sorry."); } + boolean isFinished(){ + return finished; + } + void recentDocuments(){ rd.open(); } + + //5/3 + void switchDocuments(){ + + } + + static boolean[] getflags(){ + return flags; + } + + static void setflags(int i,boolean b){ + flags[i] = b; + } + + static void printflags(){ + for(boolean b:flags) System.out.print (b+", "); + } } =======================================--- /src/main/org/brailleblaster/wordprocessor/RecentDocuments.java Mon Apr 30 20:55:37 2012 +++ /src/main/org/brailleblaster/wordprocessor/RecentDocuments.java Fri May 4 01:12:16 2012
@@ -27,6 +27,7 @@ */ package org.brailleblaster.wordprocessor; + import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -35,7 +36,6 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; - import org.eclipse.swt.*; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -47,29 +47,28 @@ import org.brailleblaster.BBIni; import org.brailleblaster.util.Notify; - /** * Pick a document from those recently opened and return its absolute * path. */ -public class RecentDocuments { +class RecentDocuments { Shell shell; Combo combo;ArrayList<String> recentDocsList;//this contains the full path and name of recent files String[] recentDocsArr;//this contains only the name of a file if there's no duplicates of it
File file; - private String userSettings; + private String recentFiles; private static final int MAX_NUM_FILES=50; private String fileSep; RecentDocuments() { - userSettings = BBIni.getRecentDocs(); + recentFiles = BBIni.getRecentDocs(); fileSep = BBIni.getFileSep(); - file = new File(userSettings); + file = new File(recentFiles); readList(); } - public void open(){ + void open() { readList(); processDocsList(); Display display = BBIni.getDisplay(); @@ -84,7 +83,7 @@ data.minimumWidth = 300; data.grabExcessHorizontalSpace = true; combo.setLayoutData(data); - combo.addSelectionListener(new SelectionAdapter(){ + combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int key = combo.getSelectionIndex(); String value = combo.getText(); @@ -107,39 +106,39 @@ shell.dispose(); } - private void processDocsList(){ + private void processDocsList() {recentDocsArr = recentDocsList.toArray(new String[recentDocsList.size()]);
boolean[] dupArr = new boolean[recentDocsArr.length]; for(boolean b:dupArr) b=false; - for( int i=0; (i < recentDocsArr.length-1)&&(!dupArr[i]);i++){ + for( int i=0; (i < recentDocsArr.length-1)&&(!dupArr[i]);i++) { String s1 = recentDocsArr[i]; int index = s1.lastIndexOf(fileSep); if (index>=0) s1 = s1.substring(index); - for(int j=i+1; (j< recentDocsArr.length)&&(!dupArr[j]); j++){ + for(int j=i+1; (j< recentDocsArr.length)&&(!dupArr[j]); j++) { String s2 = recentDocsArr[j]; index = s2.lastIndexOf(fileSep); if (index>=0) s2 = s2.substring(index); - if(s1.equals(s2)){ + if(s1.equals(s2)) { dupArr[i]=true; dupArr[j]=true; } } } - for(int i=0; i<recentDocsArr.length;i++){ + for(int i=0; i<recentDocsArr.length;i++) { if(!dupArr[i])recentDocsArr[i] = recentDocsArr[i].substring(recentDocsArr[i].lastIndexOf(fileSep)+1);
} } - public void addDocument(String document){ - if(document!=null){ + void addDocument(String document) { + if(document!=null) { recentDocsList.remove(document); recentDocsList.add(0, document);if(recentDocsList.size()>MAX_NUM_FILES) recentDocsList.remove(MAX_NUM_FILES);
storeList();} } - private void storeList(){ + private void storeList() { BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(file)); @@ -147,7 +146,7 @@ new Notify(e.getMessage()); } try { - for( String s:recentDocsList){ + for( String s:recentDocsList) { writer.write(s); writer.newLine(); } @@ -163,7 +162,7 @@ } - private void readList(){ + private void readList() { //May need to set Charset when there are special characters //Charset charset = Charset.forName("US-ASCII"); BufferedReader reader = null; =======================================--- /src/main/org/brailleblaster/wordprocessor/WPManager.java Tue Nov 22 17:05:56 2011 +++ /src/main/org/brailleblaster/wordprocessor/WPManager.java Fri May 4 01:12:16 2012
@@ -1,30 +1,30 @@ /* BrailleBlaster Braille Transcription Application - * - * Copyright (C) 2010, 2012 - * ViewPlus Technologies, Inc. www.viewplus.com - * and - * Abilitiessoft, Inc. www.abilitiessoft.com - * All rights reserved - * - * This file may contain code borrowed from files produced by various - * Java development teams. These are gratefully acknoledged. - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the Apache 2.0 License, as given at - * http://www.apache.org/licenses/ - * - * This file 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 Apache 2.0 License for more details. - * - * You should have received a copy of the Apache 2.0 License along with - * this program; see the file LICENSE. - * If not, see - * http://www.apache.org/licenses/ - * - * Maintained by John J. Boyer john.boyer@xxxxxxxxxxxxxxxxx -*/ + * + * Copyright (C) 2010, 2012 + * ViewPlus Technologies, Inc. www.viewplus.com + * and + * Abilitiessoft, Inc. www.abilitiessoft.com + * All rights reserved + * + * This file may contain code borrowed from files produced by various + * Java development teams. These are gratefully acknoledged. + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the Apache 2.0 License, as given at + * http://www.apache.org/licenses/ + * + * This file 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 Apache 2.0 License for more details. + * + * You should have received a copy of the Apache 2.0 License along with + * this program; see the file LICENSE. + * If not, see + * http://www.apache.org/licenses/ + * + * Maintained by John J. Boyer john.boyer@xxxxxxxxxxxxxxxxx + */ package org.brailleblaster.wordprocessor; @@ -35,130 +35,176 @@ import org.brailleblaster.util.YesNoChoice; import org.brailleblaster.util.ShowBriefly; import org.brailleblaster.util.Notify; +import java.util.ArrayList; public class WPManager { -/**- * This is the controller for the whole word processing operation. It is the
- * entry point for the word processor, and therefore the only public class. - */ - -String fileName = null; -int action; -private Display display; -private static DocumentManager[] documents = new DocumentManager[8]; -private static int documentIndex; - -/** - * This constructor is the entry point to the word prodessor. It gets - * things set up, handles multiple documents, etc. - */ - -public WPManager(String fileName) { -this.fileName = fileName; -if (fileName != null) { -action = WP.DocumentFromCommandLine; -} else { -action = WP.NewDocument; -} -display = BBIni.getDisplay(); -if (display == null) { -System.out.println ("Could not find graphical interface environment"); -System.exit(1); -} -checkLiblouisutdml(); -documentIndex = 0; -DocumentManager curDoc; -curDoc = documents[documentIndex] = new DocumentManager(display, -documentIndex, action, fileName); -if (!BBIni.debugging()) { -return; -} -do { -switch (curDoc.returnReason) { -case WP.DocumentClosed: -documents[documentIndex] = null; -int moveIndex = documentIndex; -while (documents[moveIndex + 1] != null) { -documents[documentIndex] = documents[moveIndex++]; -} -if (documents[documentIndex] == null) { -documentIndex = 0; -} -if (documents[documentIndex] == null) { -return; -} -curDoc = documents[documentIndex]; -curDoc.resume(); -break; -case WP.SwitchDocuments: -documentIndex++; -if (documents[documentIndex] != null) { -curDoc = documents[documentIndex]; -curDoc.resume(); -} else { -documentIndex = 0; -curDoc = documents[documentIndex]; -curDoc.resume(); -} -break; -case WP.NewDocument: -documentIndex++; -if (documentIndex >= documents.length) { -new Notify ("Too many documents"); -curDoc.resume(); -break; -} -curDoc = documents[documentIndex] = new DocumentManager(display, -documentIndex, WP.NewDocument, fileName); -break; -case WP.OpenDocumentGetFile: -documentIndex++; -if (documentIndex >= documents.length) { -new Notify ("Too many documents"); -curDoc.resume(); -break; -} -curDoc = documents[documentIndex] = new DocumentManager(display, -documentIndex, WP.OpenDocumentGetFile, fileName); -break; -case WP.BBClosed: -for (documentIndex = 0; documentIndex < documents.length; -documentIndex++) { -if (documents[documentIndex] != null) { -documents[documentIndex].finish(); -} -documents[documentIndex] = null; -} -return; -default: -break; -} -} while (curDoc.returnReason != WP.BBClosed); -} - -void checkLiblouisutdml() { -if (BBIni.haveLiblouisutdml()) { -return; -} -if (new YesNoChoice -("The Braille facility is not usable." + " See the log." -+ " Do you wish to continue?") -.result == SWT.NO) { -System.exit(1); -} -} - -/** -* Cjheck to see if there are other documents. -*/ -static boolean haveOtherDocuments() { -for (int checkIndex = 0; checkIndex < documents.length; checkIndex++) { -if (checkIndex != documentIndex && documents[checkIndex] != null) { -return true; -} -} -return false; -} - -} + /**+ * This is the controller for the whole word processing operation. It is the + * entry point for the word processor, and therefore the only public class.
+ */ + + String fileName = null; + int action; + private Display display;+ private static final int MAX_NUM_DOCS = 4;//the max limit of total number of docs can have at the same time + private static DocumentManager[] documents = new DocumentManager[MAX_NUM_DOCS];
+ private static int documentIndex; + private static DocumentManager curDoc; + + private static boolean isDeactiated = false; + private static DocumentManager prevDoc; + private static int prevIndex= -1; + + /** + * This constructor is the entry point to the word prodessor. It gets + * things set up, handles multiple documents, etc. + */ + + public WPManager(String fileName) { + this.fileName = fileName; + if (fileName != null) { + action = WP.DocumentFromCommandLine; + } else { + action = WP.NewDocument; + } + display = BBIni.getDisplay(); + if (display == null) {+ System.out.println ("Could not find graphical interface environment");
+ System.exit(1); + } + checkLiblouisutdml(); + documentIndex = 0; + curDoc = documents[0] =new DocumentManager(display, + documentIndex, action, fileName) ; + do { + findTrigger(); + switch (curDoc.returnReason) { + case WP.DocumentClosed://6 + documents[documentIndex].finish();+ if (getNextAvailableDoc() == -1) return; //no more docs, exit
+ WPManager.resumeAll(documentIndex); + break; + case WP.SwitchDocuments://4 + //+ System.out.println("Swithcing...from "+ documentIndex+ "to" +getNextAvailableDoc() );
+ documentIndex = getNextAvailableDoc(); + curDoc = documents[documentIndex]; + curDoc.resume(); + break; + case WP.NewDocument://1 + if (getNextAvailablePos() == -1){ + new Notify ("Too many documents"); + curDoc.resume(); + break; + } + documentIndex = getNextAvailablePos();+ curDoc = documents[documentIndex] = new DocumentManager(display,
+ documentIndex, WP.NewDocument, fileName); + break; + case WP.OpenDocumentGetFile://2 + if (getNextAvailablePos() == -1){ + new Notify ("Too many documents"); + curDoc.resume(); + break; + } + documentIndex = getNextAvailablePos();+ curDoc = documents[documentIndex] = new DocumentManager(display,
+ documentIndex, WP.OpenDocumentGetFile, fileName); + break; + case WP.BBClosed://7 + while(getNextAvailableDoc()!= -1){ + documents[getNextAvailableDoc()].finish(); + } + return; + default: + break; + } + } while (curDoc.returnReason != WP.BBClosed); + } + + private static void findTrigger(){ + int number = -1; + int i = 0; + for(boolean b:DocumentManager.getflags()){ + if(b) { + number=i; + break; + } + i++; + } + if(number != -1) + { + DocumentManager.setflags(number, false); + documentIndex = number; + curDoc = documents[documentIndex]; + } + } + + //resume all the windows except the one with documentNumber + public static void resumeAll(int documentNumber){ + for(int i = 0 ; i< documents.length; i++){ + if(i != documentNumber) { + if(documents[i] != null) documents[i].resume(); + } + } + } + + static int getNextAvailableDoc(){ + //search in higher index first for the next available index + //index-> MAX + for(int i = documentIndex+1; i <MAX_NUM_DOCS; i++){ + if( documents[i] != null){ + if(documents[i].isFinished())documents[i] = null; + else return i; + } + } + //0->index + for(int i = 0; i <= documentIndex; i++){ + if( documents[i] != null){ + if(documents[i].isFinished())documents[i] = null; + else return i; + } + } + //if no availabe doc + return -1; + } + + int getNextAvailablePos(){+ //see if there is available postion for one more document, -1 if it is full
+ for(int i = 0; i <MAX_NUM_DOCS; i++){ + if( documents[i] == null) return i;+ else if (documents[i].isFinished()){documents[i] = null; return i;}
+ } + return -1; + } + + void checkLiblouisutdml() { + if (BBIni.haveLiblouisutdml()) { + return; + } + if (new YesNoChoice + ("The Braille facility is not usable." + " See the log." + + " Do you wish to continue?") + .result == SWT.NO) { + System.exit(1); + } + } + + static void setCurDoc(int documentNumber){+ //System.out.println("Something triggers current doc to change, now documentIndex = " + documentNumber );
+ documentIndex = documentNumber; + curDoc = documents[documentIndex];; + } + + /** + * Check to see if there are other documents. + */ + static boolean haveOtherDocuments() { + return (getNextAvailableDoc()!= -1); + } + + static int getMaxNumDocs(){ + return MAX_NUM_DOCS; + } +} ============================================================================== Revision: 25d0c51b11cc Author: John Boyer <john.boyer@xxxxxxxxxxxxxxxxx> Date: Fri May 4 01:52:02 2012 Log: making nested UTD class an independent class http://code.google.com/p/brailleblaster/source/detail?r=25d0c51b11cc Modified: /src/main/org/brailleblaster/wordprocessor/DocumentManager.java =======================================--- /src/main/org/brailleblaster/wordprocessor/DocumentManager.java Fri May 4 01:12:16 2012 +++ /src/main/org/brailleblaster/wordprocessor/DocumentManager.java Fri May 4 01:52:02 2012
@@ -73,6 +73,7 @@ BBToolBar toolBar; BBMenu menu; RecentDocuments rd; + UTD utd; AbstractView activeView; DaisyView daisy; BrailleView braille; @@ -88,7 +89,6 @@ String logFile = "Translate.log"; String configSettings = null; int mode = 0; - UTD utd; String buffer; boolean finished = false; private volatile boolean stopRequested = false; @@ -117,6 +117,7 @@ layout = new FormLayout(); documentWindow.setLayout (layout); rd= new RecentDocuments(); + utd = new UTD(this); menu = new BBMenu (this); toolBar = new BBToolBar (this); daisy = new DaisyView (documentWindow); @@ -141,8 +142,6 @@ } else if (action == WP.DocumentFromCommandLine) { openFirstDocument(); } - utd = new UTD(); - boolean stop = false;while (!documentWindow.isDisposed() && (!stop)&&(returnReason == 0)) {
if (!display.readAndDispatch()) @@ -159,281 +158,6 @@ //Then back to WPManager } - /** - * This nested class encapsulates hnadling of the Universal - * TactileDocument Markup Language (UTDML); - */ - private class UTD { - - int braillePageNumber; //number of braille pages - String firstTableName; - int dpi; // resolution - int paperWidth; - int paperHeight; - int leftMargin; - int rightMargin; - int topMargin; - int bottomMargin; - int currentBraillePageNumber; - int currentPrintPageNumber; - int[] brlIndex; - int brlIndexPos; - int[] brlonlyIndex; - int brlonlyIndexPos; - Node beforeBrlNode; - Node beforeBrlonlyNode; - private boolean firstPage; - private boolean firstLineOnPage; - StringBuilder brailleLine = new StringBuilder (100); - StringBuilder printLine = new StringBuilder (100); - - void displayTranslatedFile() { - beforeBrlNode = null; - beforeBrlonlyNode = null; - brlIndex = null; - brlIndexPos = 0; - brlonlyIndex = null; - brlonlyIndexPos = 0; - firstPage = true; - firstLineOnPage = true; - braillePageNumber = 0; //number of braille pages - firstTableName = null; - dpi = 0; // resolution - paperWidth = 0; - paperHeight = 0; - leftMargin = 0; - rightMargin = 0; - topMargin = 0; - bottomMargin = 0; - currentBraillePageNumber = 0; - currentPrintPageNumber = 0; - Builder parser = new Builder(); - try { - doc = parser.build (translatedFileName); - } catch (ParsingException e) { - new Notify ("Malformed document"); - return; - } - catch (IOException e) { - new Notify ("Could not open " + translatedFileName); - return; - } - Element rootElement = doc.getRootElement(); - findBrlNodes (rootElement); - } - - private void findBrlNodes (Element node) { - Node newNode; - Element element; - String elementName; - for (int i = 0; i < node.getChildCount(); i++) { - newNode = node.getChild(i); - if (newNode instanceof Element) { - element = (Element)newNode; - elementName = element.getLocalName(); - if (elementName.equals ("meta")) { - doUtdMeta (element); - } else if (elementName.equals ("brl")) { - if (i > 0) { - beforeBrlNode = newNode.getChild(i - 1); - } else { - beforeBrlNode = null; - } - doBrlNode (element); - } else { - findBrlNodes (element); - } - } - } - } - - private void doUtdMeta (Element node) { - if (braillePageNumber != 0) { - return; - } - String metaContent; - metaContent = node.getAttributeValue ("name"); - if (!(metaContent.equals ("utd"))) { - return; - } - metaContent = node.getAttributeValue ("content"); - String[] keysValues = metaContent.split (" ", 20); - for (int i = 0; i < keysValues.length; i++) { - String keyValue[] = keysValues[i].split ("=", 2); - if (keyValue[0].equals ("BraillePageNumber")) - braillePageNumber = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("firstTableName")) - firstTableName = keyValue[1]; - else if (keyValue[0].equals ("dpi")) - dpi = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("paperWidth")) - paperWidth = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("paperHeight")) - paperHeight = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("leftMargin")) - leftMargin = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("rightMargin")) - rightMargin = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("topMargin")) - topMargin = Integer.parseInt (keyValue[1]); - else if (keyValue[0].equals ("bottomMargin")) - bottomMargin = Integer.parseInt (keyValue[1]); - } - return; - } - - void showLines () { - brailleLine.append ("\n"); - braille.view.append (brailleLine.toString()); - brailleLine.delete (0, brailleLine.length()); - printLine.append ("\n"); - daisy.view.append (printLine.toString()); - printLine.delete (0, printLine.length()); - } - - private void doBrlNode (Element node) {- String[] indices = node.getAttributeValue ("index").split (" ", 20000);
- if (indices != null) { - brlIndex = new int[indices.length]; - for (int i = 0; i < indices.length; i++) { - brlIndex[i] = Integer.parseInt (indices[i]); - } - } - brlIndexPos = 0; - indices = null; - Node newNode; - Element element; - String elementName; - for (int i = 0; i < node.getChildCount(); i++) { - newNode = node.getChild(i); - if (newNode instanceof Element) { - element = (Element)newNode; - elementName = element.getLocalName(); - if (elementName.equals ("newpage")) { - doNewpage (element); - } else if (elementName.equals ("newline")) { - doNewline (element); - } else if (elementName.equals ("span")) { - doSpanNode (element); - } else if (elementName.equals ("graphic")) { - doGraphic (element); - } - } - else if (newNode instanceof Text) { - doTextNode (newNode); - } - } - finishBrlNode(); - brlIndex = null; - brlIndexPos = 0; - } - - private void doSpanNode (Element node) { - String whichSpan = node.getAttributeValue ("class"); - if (whichSpan.equals ("brlonly")) { - doBrlonlyNode (node); - } - else if (whichSpan.equals ("locked")) { - doLockedNode (node); - } - } - - private void doBrlonlyNode (Element node) { - Node newNode; - Element element; - String elementName; - for (int i = 0; i < node.getChildCount(); i++) { - newNode = node.getChild(i); - if (newNode instanceof Element) { - element = (Element)newNode; - elementName = element.getLocalName(); - if (elementName.equals ("brl")) { - insideBrlonly (node); - } - } - else if (newNode instanceof Text) { - beforeBrlonlyNode = newNode; - } - } - } - - private void insideBrlonly (Element node) {- String[] indices = node.getAttributeValue ("index").split (" ", 20000);
- if (indices != null) { - brlonlyIndex = new int[indices.length]; - for (int i = 0; i < indices.length; i++) { - brlonlyIndex[i] = Integer.parseInt (indices[i]); - } - } - brlonlyIndexPos = 0; - indices = null; - Node newNode; - Element element; - String elementName; - for (int i = 0; i < node.getChildCount(); i++) { - newNode = node.getChild(i); - if (newNode instanceof Element) { - element = (Element)newNode; - elementName = element.getLocalName(); - if (elementName.equals ("newpage")) { - doNewpage (element); - } else if (elementName.equals ("newline")) { - doNewline (element); - } else if (elementName.equals ("graphic")) { - doGraphic (element); - } - } - else if (newNode instanceof Text) { - doBrlonlyTextNode (newNode); - } - } - brlonlyIndex = null; - brlonlyIndexPos = 0; - } - - private void doLockedNode (Element node) { - } - - private void doNewpage (Element node) { - String pageNumber = node.getAttributeValue ("brlnumber"); - currentBraillePageNumber = Integer.parseInt (pageNumber); - pageNumber = node.getAttributeValue ("printnumber"); - currentPrintPageNumber = Integer.parseInt (pageNumber); - firstLineOnPage = true; - if (firstPage) { - firstPage = false; - return; - } - showLines(); - } - - private void doNewline (Element node) {- String[] horVertPos = node.getAttributeValue ("xy").split (",", 2);
- if (firstLineOnPage) { - firstLineOnPage = false; - return; - } - showLines(); - } - - private void doTextNode (Node node) { - Text text = (Text)node; - brailleLine.append (text.getValue()); - } - - private void doBrlonlyTextNode (Node node) { - Text text = (Text)node; - brailleLine.append (text.getValue()); - } - - private void doGraphic (Element node) { - } - - private void finishBrlNode() { - return; - } - - } /** * Handle application shutdown signal from OS;