Java tutorial
/* * Zettelkasten - nach Luhmann ** Copyright (C) 2001-2014 by Daniel Ldecke (http://www.danielluedecke.de) * * Homepage: http://zettelkasten.danielluedecke.de * * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program 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 GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; * if not, see <http://www.gnu.org/licenses/>. * * * Dieses Programm ist freie Software. Sie knnen es unter den Bedingungen der GNU * General Public License, wie von der Free Software Foundation verffentlicht, weitergeben * und/oder modifizieren, entweder gem Version 3 der Lizenz oder (wenn Sie mchten) * jeder spteren Version. * * Die Verffentlichung dieses Programms erfolgt in der Hoffnung, da es Ihnen von Nutzen sein * wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder * der VERWENDBARKEIT FR EINEN BESTIMMTEN ZWECK. Details finden Sie in der * GNU General Public License. * * Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm * erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. */ package de.danielluedecke.zettelkasten.database; import de.danielluedecke.zettelkasten.util.Constants; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import org.jdom2.Document; import org.jdom2.Element; /** * * @author danielludecke */ public class AcceleratorKeys { /** * The xml file which stores all accelerator key information of the main window. * This data is loaded and saved within the CSettings class. The data is get/set * via getFile/setFile methods (see below) */ private final Document acceleratorKeysMain; /** * The xml file which stores all accelerator key information of the new entry window. * This data is loaded and saved within the CSettings class. The data is get/set * via getFile/setFile methods (see below) */ private final Document acceleratorKeysNewEntry; /** * The xml file which stores all accelerator key information of the desktop window. * This data is loaded and saved within the CSettings class. The data is get/set * via getFile/setFile methods (see below) */ private final Document acceleratorKeysDesktop; /** * The xml file which stores all accelerator key information of the search results window. * This data is loaded and saved within the CSettings class. The data is get/set * via getFile/setFile methods (see below) */ private final Document acceleratorKeysSearchResults; /** * this is the mask key. on mac os, we ususally have the "meta"-key as mask, * on windows or linux, however, ctrl is used */ private String mask = null; private String delkey = null; private String pluskey = null; private String minuskey = null; private String renamekey = null; private String historykey = null; private String numbersign = null; private String ctrlkey = null; /** * Constant used as parameter for the getCount method */ public static final int MAINKEYS = 1; /** * Constant used as parameter for the getCount method */ public static final int NEWENTRYKEYS = 2; /** * Constant used as parameter for the getCount method */ public static final int DESKTOPKEYS = 3; /** * Constant used as parameter for the getCount method */ public static final int SEARCHRESULTSKEYS = 4; /** * The accelerator keys class. This class manages the accelerator keys. The user can define * own accelerator keys for each relevant action. Retrieving and setting this user defined * data is done by this class. * <br> * <br> * An XML-File could look like this:<br> * <br> * <acceleratorkeys><br> * <key action="newEntry">control n</key><br> * <key action="openDocument">control o</key><br> * </acceleratorkeys><br> */ public AcceleratorKeys() { // init the xml file which should store the accelerator keys acceleratorKeysMain = new Document(new Element("acceleratorkeys")); // init the xml file which should store the accelerator keys acceleratorKeysNewEntry = new Document(new Element("acceleratorkeys")); // init the xml file which should store the accelerator keys acceleratorKeysDesktop = new Document(new Element("acceleratorkeys")); // init the xml file which should store the accelerator keys acceleratorKeysSearchResults = new Document(new Element("acceleratorkeys")); // init a default acceleratotr table initAcceleratorKeys(); } /** * This method inits a default accelerator table. Usually, the CSettings-class loads * information from an xml file and overwrites these default settings, by passing the loaded * xml file via "setAcceleratorFile" to this class (see below) */ public final void initAcceleratorKeys() { // check out which os we have, and set the appropriate mask-key if (System.getProperty("os.name").toLowerCase().startsWith("mac os")) { mask = "meta"; delkey = "BACK_SPACE"; pluskey = "CLOSE_BRACKET"; minuskey = "SLASH"; renamekey = "meta ENTER"; historykey = "control shift"; numbersign = "BACK_SLASH"; ctrlkey = "control"; } else { mask = "control"; delkey = "DELETE"; pluskey = "PLUS"; minuskey = "MINUS"; renamekey = "F2"; historykey = "alt"; numbersign = "NUMBER_SIGN"; ctrlkey = "control"; } // We separate the initialisation of the accelerator tables for each // window to keep an better overiew. initMainKeys(); initNewEntryKeys(); initDesktopKeys(); initSearchResultsKeys(); } /** * This method inits the accelerator table of the main window's menus. We separate * the initialisation of the accelerator tables for each window to keep an better * overiew. * * This method creates all the acceleratorkeys-child-elements, but only, if they don't * already exist. We do this because when loading older acceleratorkeys-xml-document-structures, * we might have new elements that would not be initialised. but now we can call this * method after loading the xml-document, and create elements and default values for all * new elements. This ensures compatibility to older/news settings-file-versions. */ private void initMainKeys() { // this is our element variable which will be used below to set all the child elements Element acckey; // now we have to go through an endless list of accelerator keys. it is important // that the attribute values have exactly the same spelling like the actions' names // which can be found in the properties-files (resources). This ensures we can easily // assign accelerator keys to actions: // // javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(zettelkasten.ZettelkastenApp.class).getContext().getActionMap(ZettelkastenView.class, this); // AbstractAction ac = (AbstractAction) actionMap.get(CAcceleratorKey.getActionName()); // KeyStroke ks = KeyStroke.getKeyStroke(CAcceleratorKey.getAccelerator()); // ac.putValue(AbstractAction.ACCELERATOR_KEY, ks); // // The actions of the main window's file menu // // the accelerator for the "newEntry" action if (!findElement(MAINKEYS, "newEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "newEntry"); acckey.setText(mask + " N"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "insertEntry" action if (!findElement(MAINKEYS, "insertEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "insertEntry"); acckey.setText(mask + " I"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "quickNewEntry" action if (!findElement(MAINKEYS, "quickNewEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "quickNewEntry"); acckey.setText(mask + " alt N"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "quickNewEntryWithTitle" action if (!findElement(MAINKEYS, "quickNewEntryWithTitle")) { acckey = new Element("key"); acckey.setAttribute("action", "quickNewEntryWithTitle"); acckey.setText(mask + " shift N"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "openDocument" action if (!findElement(MAINKEYS, "openDocument")) { acckey = new Element("key"); acckey.setAttribute("action", "openDocument"); acckey.setText(mask + " O"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "saveDocument" action if (!findElement(MAINKEYS, "saveDocument")) { acckey = new Element("key"); acckey.setAttribute("action", "saveDocument"); acckey.setText(mask + " S"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "saveDocumentAs" action if (!findElement(MAINKEYS, "saveDocumentAs")) { acckey = new Element("key"); acckey.setAttribute("action", "saveDocumentAs"); acckey.setText(mask + " shift S"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "importWindow" action if (!findElement(MAINKEYS, "importWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "importWindow"); acckey.setText(mask + " shift I"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "exportWindow" action if (!findElement(MAINKEYS, "exportWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "exportWindow"); acckey.setText(mask + " shift E"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "quit" action if (!findElement(MAINKEYS, "quit")) { acckey = new Element("key"); acckey.setAttribute("action", "quit"); acckey.setText(mask + " Q"); acceleratorKeysMain.getRootElement().addContent(acckey); } // // The actions of the main window's edit menu // // the accelerator for the "copyPlain" action if (!findElement(MAINKEYS, "copyPlain")) { acckey = new Element("key"); acckey.setAttribute("action", "copyPlain"); acckey.setText(mask + " shift C"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "editEntry" action if (!findElement(MAINKEYS, "editEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "editEntry"); acckey.setText(mask + " E"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "deleteCurrentEntry" action if (!findElement(MAINKEYS, "deleteCurrentEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "deleteCurrentEntry"); acckey.setText(mask + " shift " + delkey); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "manualInsertEntry" action if (!findElement(MAINKEYS, "manualInsertEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "manualInsertEntry"); acckey.setText(mask + " alt I"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "manualInsertLinks" action if (!findElement(MAINKEYS, "manualInsertLinks")) { acckey = new Element("key"); acckey.setAttribute("action", "manualInsertLinks"); acckey.setText(mask + " alt L"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "selectAllText" action if (!findElement(MAINKEYS, "selectAllText")) { acckey = new Element("key"); acckey.setAttribute("action", "selectAllText"); acckey.setText(mask + " A"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "addToDesktop" action if (!findElement(MAINKEYS, "addToDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "addToDesktop"); acckey.setText("F9"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "addToBookmark" action if (!findElement(MAINKEYS, "addToBookmark")) { acckey = new Element("key"); acckey.setAttribute("action", "addToBookmark"); acckey.setText(mask + " B"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "updateDisplay" action if (!findElement(MAINKEYS, "updateDisplay")) { acckey = new Element("key"); acckey.setAttribute("action", "updateDisplay"); acckey.setText("F5"); acceleratorKeysMain.getRootElement().addContent(acckey); } // // The actions of the main window's find menu // // the accelerator for the "find" action if (!findElement(MAINKEYS, "find")) { acckey = new Element("key"); acckey.setAttribute("action", "find"); acckey.setText(mask + " F"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "replace" action if (!findElement(MAINKEYS, "replace")) { acckey = new Element("key"); acckey.setAttribute("action", "replace"); acckey.setText(mask + " R"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "findLive" action if (!findElement(MAINKEYS, "findLive")) { acckey = new Element("key"); acckey.setAttribute("action", "findLive"); acckey.setText(mask + " shift F"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showFirstEntry" action if (!findElement(MAINKEYS, "showFirstEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "showFirstEntry"); acckey.setText(mask + " shift " + minuskey); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "gotoEntry" action if (!findElement(MAINKEYS, "gotoEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "gotoEntry"); acckey.setText(mask + " G"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showRandomEntry" action if (!findElement(MAINKEYS, "showRandomEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "showRandomEntry"); acckey.setText(ctrlkey + " " + numbersign); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "historyFor" action if (!findElement(MAINKEYS, "historyFor")) { acckey = new Element("key"); acckey.setAttribute("action", "historyFor"); acckey.setText(historykey + " RIGHT"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "historyBack" action if (!findElement(MAINKEYS, "historyBack")) { acckey = new Element("key"); acckey.setAttribute("action", "historyBack"); acckey.setText(historykey + " LEFT"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showLastEntry" action if (!findElement(MAINKEYS, "showLastEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "showLastEntry"); acckey.setText(mask + " shift " + pluskey); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showPrevEntry" action if (!findElement(MAINKEYS, "showPrevEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "showPrevEntry"); acckey.setText(mask + " " + minuskey); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showNextEntry" action if (!findElement(MAINKEYS, "showNextEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "showNextEntry"); acckey.setText(mask + " " + pluskey); acceleratorKeysMain.getRootElement().addContent(acckey); } // // The actions of the main window's view menu // // the accelerator for the "menuShowLinks" action if (!findElement(MAINKEYS, "menuShowLinks")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowLinks"); acckey.setText(mask + " F1"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowLuhmann" action if (!findElement(MAINKEYS, "menuShowLuhmann")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowLuhmann"); acckey.setText(mask + " F2"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowKeywords" action if (!findElement(MAINKEYS, "menuShowKeywords")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowKeywords"); acckey.setText(mask + " F3"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowAuthors" action if (!findElement(MAINKEYS, "menuShowAuthors")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowAuthors"); acckey.setText(mask + " F4"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowTitles" action if (!findElement(MAINKEYS, "menuShowTitles")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowTitles"); acckey.setText(mask + " F5"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowCluster" action if (!findElement(MAINKEYS, "menuShowCluster")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowCluster"); acckey.setText(mask + " F6"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowBookmarks" action if (!findElement(MAINKEYS, "menuShowBookmarks")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowBookmarks"); acckey.setText(mask + " F7"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "menuShowAttachments" action if (!findElement(MAINKEYS, "menuShowAttachments")) { acckey = new Element("key"); acckey.setAttribute("action", "menuShowAttachments"); acckey.setText(mask + " F8"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showSearchResultWindow" action if (!findElement(MAINKEYS, "showSearchResultWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "showSearchResultWindow"); acckey.setText("F3"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showDesktopWindow" action if (!findElement(MAINKEYS, "showDesktopWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "showDesktopWindow"); acckey.setText("F4"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "showNewEntryWindow" action if (!findElement(MAINKEYS, "showNewEntryWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "showNewEntryWindow"); acckey.setText("F11"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "highlightKeywords" action if (!findElement(MAINKEYS, "highlightKeywords")) { acckey = new Element("key"); acckey.setAttribute("action", "highlightKeywords"); acckey.setText("F7"); acceleratorKeysMain.getRootElement().addContent(acckey); } // // The actions of the main window's popup menu // // the accelerator for the "addToKeywordList" action if (!findElement(MAINKEYS, "addToKeywordList")) { acckey = new Element("key"); acckey.setAttribute("action", "addToKeywordList"); acckey.setText(mask + " shift K"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "setSelectionAsTitle" action if (!findElement(MAINKEYS, "setSelectionAsTitle")) { acckey = new Element("key"); acckey.setAttribute("action", "setSelectionAsTitle"); acckey.setText(mask + " alt U"); acceleratorKeysMain.getRootElement().addContent(acckey); } // the accelerator for the "setFirstLineAsTitle" action if (!findElement(MAINKEYS, "setFirstLineAsTitle")) { acckey = new Element("key"); acckey.setAttribute("action", "setFirstLineAsTitle"); acckey.setText(mask + " shift U"); acceleratorKeysMain.getRootElement().addContent(acckey); } } /** * This methos inits the accelerator table of the new entry window's menus. We separate * the initialisation of the accelerator tables for each window to keep an better * overiew. */ private void initNewEntryKeys() { // this is our element variable which will be used below to set all the child elements Element acckey; // now we have to go through an endless list of accelerator keys. it is important // that the attribute values have exactly the same spelling like the actions' names // which can be found in the properties-files (resources). This ensures we can easily // assign accelerator keys to actions: // // javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(zettelkasten.ZettelkastenApp.class).getContext().getActionMap(ZettelkastenView.class, this); // AbstractAction ac = (AbstractAction) actionMap.get(CAcceleratorKey.getActionName()); // KeyStroke ks = KeyStroke.getKeyStroke(CAcceleratorKey.getAccelerator()); // ac.putValue(AbstractAction.ACCELERATOR_KEY, ks); // // The actions of the new entry window's file menu // // the accelerator for the "closeWindow" action if (!findElement(NEWENTRYKEYS, "closeWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "closeWindow"); acckey.setText(mask + " W"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "applyChanges" action if (!findElement(NEWENTRYKEYS, "applyChanges")) { acckey = new Element("key"); acckey.setAttribute("action", "applyChanges"); acckey.setText(mask + " shift S"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "retrieveKeywordsFromDisplayedEntry" action if (!findElement(NEWENTRYKEYS, "retrieveKeywordsFromDisplayedEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "retrieveKeywordsFromDisplayedEntry"); acckey.setText(mask + " alt G"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // // The actions of the new entry window's edit menu // // the accelerator for the "selecteAllText" action if (!findElement(NEWENTRYKEYS, "selecteAllText")) { acckey = new Element("key"); acckey.setAttribute("action", "selecteAllText"); acckey.setText(mask + " A"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "addSegmentFromQuickList" action if (!findElement(NEWENTRYKEYS, "addSegmentFromQuickList")) { acckey = new Element("key"); acckey.setAttribute("action", "addSegmentFromQuickList"); acckey.setText(mask + " shift G"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "addKeywordFromSelection" action if (!findElement(NEWENTRYKEYS, "addKeywordFromSelection")) { acckey = new Element("key"); acckey.setAttribute("action", "addKeywordFromSelection"); acckey.setText(mask + " shift K"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "addTitleFromSelection" action if (!findElement(NEWENTRYKEYS, "addTitleFromSelection")) { acckey = new Element("key"); acckey.setAttribute("action", "addTitleFromSelection"); acckey.setText(mask + " alt U"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "addTitleFromFirstLine" action if (!findElement(NEWENTRYKEYS, "addTitleFromFirstLine")) { acckey = new Element("key"); acckey.setAttribute("action", "addTitleFromFirstLine"); acckey.setText(mask + " shift U"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "undoAction" action if (!findElement(NEWENTRYKEYS, "undoAction")) { acckey = new Element("key"); acckey.setAttribute("action", "undoAction"); acckey.setText(mask + " Z"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "redoAction" action if (!findElement(NEWENTRYKEYS, "redoAction")) { acckey = new Element("key"); acckey.setAttribute("action", "redoAction"); acckey.setText(mask + " shift Z"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "replace" action if (!findElement(NEWENTRYKEYS, "replace")) { acckey = new Element("key"); acckey.setAttribute("action", "replace"); acckey.setText(mask + " H"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // // The actions of the new entry window's insert menu // // the accelerator for the "addAuthorFromMenu" action if (!findElement(NEWENTRYKEYS, "addAuthorFromMenu")) { acckey = new Element("key"); acckey.setAttribute("action", "addAuthorFromMenu"); acckey.setText(mask + " shift L"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertFootnote" action if (!findElement(NEWENTRYKEYS, "insertFootnote")) { acckey = new Element("key"); acckey.setAttribute("action", "insertFootnote"); acckey.setText(mask + " shift N"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertImage" action if (!findElement(NEWENTRYKEYS, "insertImage")) { acckey = new Element("key"); acckey.setAttribute("action", "insertImage"); acckey.setText(mask + " shift I"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertTable" action if (!findElement(NEWENTRYKEYS, "insertTable")) { acckey = new Element("key"); acckey.setAttribute("action", "insertTable"); acckey.setText(mask + " shift T"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertHyperlink" action if (!findElement(NEWENTRYKEYS, "insertHyperlink")) { acckey = new Element("key"); acckey.setAttribute("action", "insertHyperlink"); acckey.setText(mask + " K"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertManualLink" action if (!findElement(NEWENTRYKEYS, "insertManualLink")) { acckey = new Element("key"); acckey.setAttribute("action", "insertManualLink"); acckey.setText(mask + " shift M"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertAttachment" action if (!findElement(NEWENTRYKEYS, "insertAttachment")) { acckey = new Element("key"); acckey.setAttribute("action", "insertAttachment"); acckey.setText(mask + " shift A"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertSymbol" action if (!findElement(NEWENTRYKEYS, "insertSymbol")) { acckey = new Element("key"); acckey.setAttribute("action", "insertSymbol"); acckey.setText(mask + " alt S"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertForm" action if (!findElement(NEWENTRYKEYS, "insertForm")) { acckey = new Element("key"); acckey.setAttribute("action", "insertForm"); acckey.setText(mask + " shift F"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "insertManualTimestamp" action if (!findElement(NEWENTRYKEYS, "insertManualTimestamp")) { acckey = new Element("key"); acckey.setAttribute("action", "insertManualTimestamp"); acckey.setText(mask + " F7"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // // The actions of the new entry window's format menu // // the accelerator for the "formatBold" action if (!findElement(NEWENTRYKEYS, "formatBold")) { acckey = new Element("key"); acckey.setAttribute("action", "formatBold"); acckey.setText(mask + " B"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatItalic" action if (!findElement(NEWENTRYKEYS, "formatItalic")) { acckey = new Element("key"); acckey.setAttribute("action", "formatItalic"); acckey.setText(mask + " I"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatUnderline" action if (!findElement(NEWENTRYKEYS, "formatUnderline")) { acckey = new Element("key"); acckey.setAttribute("action", "formatUnderline"); acckey.setText(mask + " U"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatStrikeThrough" action if (!findElement(NEWENTRYKEYS, "formatStrikeThrough")) { acckey = new Element("key"); acckey.setAttribute("action", "formatStrikeThrough"); acckey.setText(mask + " D"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatSup" action if (!findElement(NEWENTRYKEYS, "formatSup")) { acckey = new Element("key"); acckey.setAttribute("action", "formatSup"); acckey.setText(mask + " " + pluskey); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatSub" action if (!findElement(NEWENTRYKEYS, "formatSub")) { acckey = new Element("key"); acckey.setAttribute("action", "formatSub"); acckey.setText(ctrlkey + " " + numbersign); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatHeading1" action if (!findElement(NEWENTRYKEYS, "formatHeading1")) { acckey = new Element("key"); acckey.setAttribute("action", "formatHeading1"); acckey.setText(mask + " shift H"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatHeading2" action if (!findElement(NEWENTRYKEYS, "formatHeading2")) { acckey = new Element("key"); acckey.setAttribute("action", "formatHeading2"); acckey.setText(mask + " alt H"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatCite" action if (!findElement(NEWENTRYKEYS, "formatCite")) { acckey = new Element("key"); acckey.setAttribute("action", "formatCite"); acckey.setText(mask + " shift C"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatCode" action if (!findElement(NEWENTRYKEYS, "formatCode")) { acckey = new Element("key"); acckey.setAttribute("action", "formatCode"); acckey.setText(mask + " alt C"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatFont" action if (!findElement(NEWENTRYKEYS, "formatFont")) { acckey = new Element("key"); acckey.setAttribute("action", "formatFont"); acckey.setText(mask + " alt F"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatQuote" action if (!findElement(NEWENTRYKEYS, "formatQuote")) { acckey = new Element("key"); acckey.setAttribute("action", "formatQuote"); acckey.setText(mask + " shift 2"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "alignCenter" action if (!findElement(NEWENTRYKEYS, "alignCenter")) { acckey = new Element("key"); acckey.setAttribute("action", "alignCenter"); acckey.setText(mask + " E"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "alignLeft" action if (!findElement(NEWENTRYKEYS, "alignLeft")) { acckey = new Element("key"); acckey.setAttribute("action", "alignLeft"); acckey.setText(mask + " L"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "alignRight" action if (!findElement(NEWENTRYKEYS, "alignRight")) { acckey = new Element("key"); acckey.setAttribute("action", "alignRight"); acckey.setText(mask + " R"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "alignMargin" action if (!findElement(NEWENTRYKEYS, "alignMargin")) { acckey = new Element("key"); acckey.setAttribute("action", "alignMargin"); acckey.setText(mask + " shift R"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatHighlight" action if (!findElement(NEWENTRYKEYS, "formatHighlight")) { acckey = new Element("key"); acckey.setAttribute("action", "formatHighlight"); acckey.setText(mask + " M"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatList" action if (!findElement(NEWENTRYKEYS, "formatList")) { acckey = new Element("key"); acckey.setAttribute("action", "formatList"); acckey.setText(mask + " alt L"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatList" action if (!findElement(NEWENTRYKEYS, "formatOrderedList")) { acckey = new Element("key"); acckey.setAttribute("action", "formatOrderedList"); acckey.setText(mask + " alt N"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "formatColor" action if (!findElement(NEWENTRYKEYS, "formatColor")) { acckey = new Element("key"); acckey.setAttribute("action", "formatColor"); acckey.setText(mask + " T"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // // The actions of the new entry window's window menu // // the accelerator for the "setFocusToEditPane" action if (!findElement(NEWENTRYKEYS, "setFocusToEditPane")) { acckey = new Element("key"); acckey.setAttribute("action", "setFocusToEditPane"); acckey.setText(mask + " F2"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "setFocusToKeywordList" action if (!findElement(NEWENTRYKEYS, "setFocusToKeywordList")) { acckey = new Element("key"); acckey.setAttribute("action", "setFocusToKeywordList"); acckey.setText(mask + " F3"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } // the accelerator for the "setFocusToAuthorList" action if (!findElement(NEWENTRYKEYS, "setFocusToAuthorList")) { acckey = new Element("key"); acckey.setAttribute("action", "setFocusToAuthorList"); acckey.setText(mask + " F4"); acceleratorKeysNewEntry.getRootElement().addContent(acckey); } } /** * This methos inits the accelerator table of the desktop window's menus. We separate * the initialisation of the accelerator tables for each window to keep an better * overiew. */ private void initDesktopKeys() { // this is our element variable which will be used below to set all the child elements Element acckey; // now we have to go through an endless list of accelerator keys. it is important // that the attribute values have exactly the same spelling like the actions' names // which can be found in the properties-files (resources). This ensures we can easily // assign accelerator keys to actions: // // javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(zettelkasten.ZettelkastenApp.class).getContext().getActionMap(ZettelkastenView.class, this); // AbstractAction ac = (AbstractAction) actionMap.get(CAcceleratorKey.getActionName()); // KeyStroke ks = KeyStroke.getKeyStroke(CAcceleratorKey.getAccelerator()); // ac.putValue(AbstractAction.ACCELERATOR_KEY, ks); // // The actions of the desktop window's file menu // // the accelerator for the "newDesktop" action if (!findElement(DESKTOPKEYS, "newDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "newDesktop"); acckey.setText(mask + " shift N"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "addBullet" action if (!findElement(DESKTOPKEYS, "addBullet")) { acckey = new Element("key"); acckey.setAttribute("action", "addBullet"); acckey.setText(mask + " B"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "addEntry" action if (!findElement(DESKTOPKEYS, "addEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "addEntry"); acckey.setText(mask + " alt N"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "addLuhmann" action if (!findElement(DESKTOPKEYS, "addLuhmann")) { acckey = new Element("key"); acckey.setAttribute("action", "addLuhmann"); acckey.setText(mask + " alt I"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "insertEntry" action if (!findElement(DESKTOPKEYS, "insertEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "insertEntry"); acckey.setText(mask + " N"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "exportDesktop" action if (!findElement(DESKTOPKEYS, "exportDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "exportDesktop"); acckey.setText(mask + " shift E"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "exportMultipleDesktop" action if (!findElement(DESKTOPKEYS, "exportMultipleDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "exportMultipleDesktop"); acckey.setText(mask + " shift X"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "printContent" action if (!findElement(DESKTOPKEYS, "printContent")) { acckey = new Element("key"); acckey.setAttribute("action", "printContent"); acckey.setText(mask + " P"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "closeWindow" action if (!findElement(DESKTOPKEYS, "closeWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "closeWindow"); acckey.setText(mask + " W"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // // The actions of the desktop window's edit menu // // the accelerator for the "cutNode" action if (!findElement(DESKTOPKEYS, "cutNode")) { acckey = new Element("key"); acckey.setAttribute("action", "cutNode"); acckey.setText(mask + " X"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "copyNode" action if (!findElement(DESKTOPKEYS, "copyNode")) { acckey = new Element("key"); acckey.setAttribute("action", "copyNode"); acckey.setText(mask + " C"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "pasteNode" action if (!findElement(DESKTOPKEYS, "pasteNode")) { acckey = new Element("key"); acckey.setAttribute("action", "pasteNode"); acckey.setText(mask + " V"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "editEntry" action if (!findElement(DESKTOPKEYS, "editEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "editEntry"); acckey.setText(mask + " alt E"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "modifiyEntry" action if (!findElement(DESKTOPKEYS, "modifiyEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "modifiyEntry"); acckey.setText(mask + " E"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "applyModificationsToOriginalEntry" action if (!findElement(DESKTOPKEYS, "applyModificationsToOriginalEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "applyModificationsToOriginalEntry"); acckey.setText(mask + " shift P"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "applyAllModificationsToOriginalEntries" action if (!findElement(DESKTOPKEYS, "applyAllModificationsToOriginalEntries")) { acckey = new Element("key"); acckey.setAttribute("action", "applyAllModificationsToOriginalEntries"); acckey.setText(mask + " alt P"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "moveNodeUp" action if (!findElement(DESKTOPKEYS, "moveNodeUp")) { acckey = new Element("key"); acckey.setAttribute("action", "moveNodeUp"); acckey.setText(mask + " UP"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "moveNodeDown" action if (!findElement(DESKTOPKEYS, "moveNodeDown")) { acckey = new Element("key"); acckey.setAttribute("action", "moveNodeDown"); acckey.setText(mask + " DOWN"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "renameBullet" action if (!findElement(DESKTOPKEYS, "renameBullet")) { acckey = new Element("key"); acckey.setAttribute("action", "renameBullet"); acckey.setText(renamekey); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "commentNode" action if (!findElement(DESKTOPKEYS, "commentNode")) { acckey = new Element("key"); acckey.setAttribute("action", "commentNode"); acckey.setText(mask + " K"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "deleteNode" action if (!findElement(DESKTOPKEYS, "deleteNode")) { acckey = new Element("key"); acckey.setAttribute("action", "deleteNode"); acckey.setText(delkey); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // // The actions of the desktop window's find menu // // the accelerator for the "findLive" action if (!findElement(DESKTOPKEYS, "findLive")) { acckey = new Element("key"); acckey.setAttribute("action", "findLive"); acckey.setText(mask + " shift F"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "findLiveNext" action if (!findElement(DESKTOPKEYS, "findLiveNext")) { acckey = new Element("key"); acckey.setAttribute("action", "findLiveNext"); acckey.setText(mask + " G"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // the accelerator for the "findLivePrev" action if (!findElement(DESKTOPKEYS, "findLivePrev")) { acckey = new Element("key"); acckey.setAttribute("action", "findLivePrev"); acckey.setText(mask + " shift G"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } // // The actions of the desktop window's view menu // // the accelerator for the "updateView" action if (!findElement(DESKTOPKEYS, "updateView")) { acckey = new Element("key"); acckey.setAttribute("action", "updateView"); acckey.setText("F5"); acceleratorKeysDesktop.getRootElement().addContent(acckey); } } /** * This methos inits the accelerator table of the desktop window's menus. We separate * the initialisation of the accelerator tables for each window to keep an better * overiew. */ private void initSearchResultsKeys() { // this is our element variable which will be used below to set all the child elements Element acckey; // now we have to go through an endless list of accelerator keys. it is important // that the attribute values have exactly the same spelling like the actions' names // which can be found in the properties-files (resources). This ensures we can easily // assign accelerator keys to actions: // // javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(zettelkasten.ZettelkastenApp.class).getContext().getActionMap(ZettelkastenView.class, this); // AbstractAction ac = (AbstractAction) actionMap.get(CAcceleratorKey.getActionName()); // KeyStroke ks = KeyStroke.getKeyStroke(CAcceleratorKey.getAccelerator()); // ac.putValue(AbstractAction.ACCELERATOR_KEY, ks); // // The actions of the search results window's edit menu // // the accelerator for the "removeSearchResult" action if (!findElement(SEARCHRESULTSKEYS, "removeSearchResult")) { acckey = new Element("key"); acckey.setAttribute("action", "removeSearchResult"); acckey.setText(mask + " shift " + delkey); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "removeAllSearchResults" action if (!findElement(SEARCHRESULTSKEYS, "removeAllSearchResults")) { acckey = new Element("key"); acckey.setAttribute("action", "removeAllSearchResults"); acckey.setText(mask + " alt shift " + delkey); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "exportEntries" action if (!findElement(SEARCHRESULTSKEYS, "exportEntries")) { acckey = new Element("key"); acckey.setAttribute("action", "exportEntries"); acckey.setText(mask + " shift E"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "closeWindow" action if (!findElement(SEARCHRESULTSKEYS, "closeWindow")) { acckey = new Element("key"); acckey.setAttribute("action", "closeWindow"); acckey.setText(mask + " W"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // // The actions of the search results window's edit menu // // the accelerator for the "selectAll" action if (!findElement(SEARCHRESULTSKEYS, "selectAll")) { acckey = new Element("key"); acckey.setAttribute("action", "selectAll"); acckey.setText(mask + " A"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "editEntry" action if (!findElement(SEARCHRESULTSKEYS, "editEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "editEntry"); acckey.setText(mask + " E"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "findAndReplace" action if (!findElement(SEARCHRESULTSKEYS, "findAndReplace")) { acckey = new Element("key"); acckey.setAttribute("action", "findAndReplace"); acckey.setText(mask + " R"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "removeEntry" action if (!findElement(SEARCHRESULTSKEYS, "removeEntry")) { acckey = new Element("key"); acckey.setAttribute("action", "removeEntry"); acckey.setText(delkey); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "addToManLinks" action if (!findElement(SEARCHRESULTSKEYS, "addToManLinks")) { acckey = new Element("key"); acckey.setAttribute("action", "addToManLinks"); acckey.setText(mask + " alt L"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "addToLuhmann" action if (!findElement(SEARCHRESULTSKEYS, "addToLuhmann")) { acckey = new Element("key"); acckey.setAttribute("action", "addToLuhmann"); acckey.setText(mask + " alt I"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "addToBookmarks" action if (!findElement(SEARCHRESULTSKEYS, "addToBookmarks")) { acckey = new Element("key"); acckey.setAttribute("action", "addToBookmarks"); acckey.setText(mask + " B"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "addToDesktop" action if (!findElement(SEARCHRESULTSKEYS, "addToDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "addToDesktop"); acckey.setText("F9"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "showEntryInDesktop" action if (!findElement(SEARCHRESULTSKEYS, "showEntryInDesktop")) { acckey = new Element("key"); acckey.setAttribute("action", "showEntryInDesktop"); acckey.setText(mask + " F9"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "toggleHighlightResults" action if (!findElement(SEARCHRESULTSKEYS, "toggleHighlightResults")) { acckey = new Element("key"); acckey.setAttribute("action", "toggleHighlightResults"); acckey.setText("F7"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } // the accelerator for the "switchLayout" action if (!findElement(SEARCHRESULTSKEYS, "switchLayout")) { acckey = new Element("key"); acckey.setAttribute("action", "switchLayout"); acckey.setText(mask + " F7"); acceleratorKeysSearchResults.getRootElement().addContent(acckey); } } /** * Retrieves an xml-file with the requested accelerator information. This method is called * from within the CSettings-class, which handles the loading and saving of these xml files. * * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what (uses constants, see global field definition at top of source) * @return */ public Document getDocument(int what) { // init variable Document doc; // select the right xml document, depending on which accelerator table is requested switch (what) { case MAINKEYS: doc = acceleratorKeysMain; break; case NEWENTRYKEYS: doc = acceleratorKeysNewEntry; break; case DESKTOPKEYS: doc = acceleratorKeysDesktop; break; case SEARCHRESULTSKEYS: doc = acceleratorKeysSearchResults; break; default: doc = acceleratorKeysMain; break; } return doc; } /** * This method sets an accelerator file. This method called from within the CSettings class * where the data is loaded and the file/infiormation is passed to this method. * * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what (uses constants, see global field definition at top of source) * @param af */ public void setDocument(int what, Document af) { // select the right xml document, depending on which accelerator table is requested // TODO wieder entfernen // switch (what) { // case MAINKEYS: acceleratorKeysMain=af; break; // case NEWENTRYKEYS: acceleratorKeysNewEntry=af; break; // case DESKTOPKEYS: acceleratorKeysDesktop=af; break; // case SEARCHRESULTSKEYS: acceleratorKeysSearchResults=af; break; // default: acceleratorKeysMain=af; break; // } } /** * This method returns the size of one of the xml data files. Following constants should * be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what (uses constants, see global field definition at top of source) * @return the size of the requested data file */ public int getCount(int what) { return getDocument(what).getRootElement().getContentSize(); } /** * This methods returns the accelerator key of a given position in the xml-file * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what (uses constants, see global field definition at top of source) * @param pos (a valid position of an element) * @return the string containing the accelerator key or an empty string if nothing was found */ public String getAcceleratorKey(int what, int pos) { // retrieve the element Element acckey = retrieveElement(what, pos); // if the element was not found, return an empty string if (null == acckey) { return ""; } // else the value (i.e. the accelerator key string) return acckey.getText(); } /** * This methods returns the accelerator key of a given position in the xml-file * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what uses constants, see global field definition at top of source * @param actionname the attribute (i.e. the action's name) we want to find * @return the string containing the accelerator key or null if nothing was found */ public String getAcceleratorKey(int what, String actionname) { // retrieve the element Element acckey = retrieveElement(what, actionname); // if the element was not found, return an empty string if (null == acckey) { return null; } // else the value (i.e. the accelerator key string) return acckey.getText(); } /** * This methods returns the accelerator key of a given position in the xml-file * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what uses constants, see global field definition at top of source * @param pos a valid position of an element * @return the string containing the accelerator key or an empty string if nothing was found */ public String getAcceleratorAction(int what, int pos) { // retrieve the element Element acckey = retrieveElement(what, pos); // return the matching string value of the element String retval; // if the element was not found, return an empty string if (null == acckey) { retval = ""; } // else the value (i.e. the accelerator key string) else { retval = acckey.getAttributeValue("action"); } return retval; } /** * This method sets an accelerator key of an related action. To change an accelerator key, * provide the action's name and the keystroke-value as string parameters. furthermore, we * have to tell the method, to which file the changes should be applied (param what). * * Following constants should be used as parameters:<br> * MAINKEYS<br> * NEWENTRYKEYS<br> * DESKTOPKEYS<br> * SEARCHRESULTSKEYS<br> * * @param what (uses constants, see global field definition at top of source) * @param action (the action's name, as string, e.g. "newEntry") * @param keystroke (the keystroke, e.g. "ctrl N" (win/linux) or "meta O" (mac) */ public void setAccelerator(int what, String action, String keystroke) { // create a list of all elements from the xml file try { List<?> elementList = getDocument(what).getRootElement().getContent(); // and an iterator for the loop below Iterator<?> iterator = elementList.iterator(); // counter for the return value if a found element attribute matches the parameter int cnt = 1; // iterate loop while (iterator.hasNext()) { // retrieve each single element Element acckey = (Element) iterator.next(); // if action-attribute matches the parameter string... if (action.equals(acckey.getAttributeValue("action"))) { // ...set the new keystroke acckey.setText(keystroke); // and leave method return; } // else increase counter cnt++; } } catch (IllegalStateException e) { Constants.zknlogger.log(Level.WARNING, e.getLocalizedMessage()); } } /** * This method looks for the occurence of the attribute "attr". All elements of * an xml-file are searched for the given attribute. If an element contains that * atrtribut, the method returns true, false otherwise. * * @param doc (the xml-document where to look for the attribute) * @param attr (the attribute we want to find) * @return {@code true} if we have an element that contains that attribute, false otherwise */ private boolean findElement(int what, String attr) { // create a list of all elements from the acceleratorkeys xml file try { List<?> elementList = getDocument(what).getRootElement().getContent(); // if we have any elements at all, go on if (elementList.size() > 0) { // and an iterator for the loop below Iterator<?> iterator = elementList.iterator(); // iterate loop while (iterator.hasNext()) { // retrieve each single element Element entry = (Element) iterator.next(); // try to get the requested element String sv = entry.getAttributeValue("action"); // if it exists, return true if (sv != null && sv.equals(attr)) { return true; } } // if no attribute was found, return false return false; } else { return false; } } catch (IllegalStateException e) { return false; } } /** * This method looks for the occurence of the attribute "attr". All elements of * an xml-file are searched for the given attribute. If an element contains that * atrtribut, it is returned. * * @param doc the xml-document where to look for the attribute * @param attr the attribute (i.e. the action's name) we want to find * @return the element which matches the given action-name {@code attr} inside the document {@code doc}, * or null if no match was found */ private Element retrieveElement(int what, String attr) { // create a list of all elements from the acceleratorkeys xml file try { List<?> elementList = getDocument(what).getRootElement().getContent(); // if we have any elements at all, go on if (elementList.size() > 0) { // and an iterator for the loop below Iterator<?> iterator = elementList.iterator(); // iterate loop while (iterator.hasNext()) { // retrieve each single element Element entry = (Element) iterator.next(); // try to get the requested element String sv = entry.getAttributeValue("action"); // if it exists, return true if (sv != null && sv.equals(attr)) { return entry; } } } return null; } catch (IllegalStateException e) { return null; } } /** * This function retrieves an element of a xml document at a given * position. The position is a value from 1 to (size of xml file) - in contrary * to usual array handling where the range is from 0 to (size-1). * * @param doc (the xml document where to look for elements) * @param pos (the position of the element) * @return the element if a match was found, otherwise null) */ private Element retrieveElement(int what, int pos) { // create a list of all elements from the given xml file try { List<?> elementList = getDocument(what).getRootElement().getContent(); // and return the requestet Element try { return (Element) elementList.get(pos - 1); } catch (IndexOutOfBoundsException e) { return null; } } catch (IllegalStateException e) { return null; } } }