/* * Zettelkasten - nach Luhmann * Copyright (C) 2001-2015 by Daniel Lüdecke (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 können es unter den Bedingungen der GNU * General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben * und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (wenn Sie möchten) * jeder späteren Version. * * Die Veröffentlichung 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 FÜR 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); } // the accelerator for the "updateView" action if (!findElement(DESKTOPKEYS,"toggleNotesVisibility")) { acckey=new Element("key"); acckey.setAttribute("action", "toggleNotesVisibility"); acckey.setText("shift F11"); 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; } } }