Menu Hotkeys and Toolbars
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 19 Apr 2011 15:52:49 +0000 (15:52 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 19 Apr 2011 15:52:49 +0000 (15:52 +0000)
Dynamic Hotkey sets

New cataloging toolbar

New updates to circ toolbar

New menu items and updates to menus in admin menu area

Toolbar/hotkey settings can be saved to workstation prefs from admin -> workstation administration

Update org unit setting for button_bar to be a string, circ or cat by default to pick those two toolbars

Author: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Jason Etheridge <jason@esilibrary.com>
git-svn-id: svn://svn.open-ils.org/ILS/trunk@20207 dcc99617-32d9-48b4-a31d-7c20da2025e4

26 files changed:
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.client_menus.sql [new file with mode: 0644]
Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/chrome/content/auth/controller.js
Open-ILS/xul/staff_client/chrome/content/main/main.js
Open-ILS/xul/staff_client/chrome/content/main/menu.js
Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul
Open-ILS/xul/staff_client/chrome/content/main/menu_frame_overlay.xul
Open-ILS/xul/staff_client/chrome/content/util/file.js
Open-ILS/xul/staff_client/chrome/content/util/network.js
Open-ILS/xul/staff_client/chrome/locale/en-US/offline.properties
Open-ILS/xul/staff_client/chrome/skin/global.css
Open-ILS/xul/staff_client/chrome/skin/hotkeys/Default.keyset [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/hotkeys/Minimal.keyset [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/hotkeys/None.keyset [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/hotkeys/README [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/Arrow-rightup-small_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_famiglia_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_indici_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_lente_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_libro_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/Search_Items_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/center_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/hotkeys_disable_toolbar.png [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/skin/media/images/licenses.txt
Open-ILS/xul/staff_client/defaults/preferences/prefs.js

index 4aeeccc..c60998f 100644 (file)
@@ -1885,7 +1885,12 @@ INSERT into config.org_unit_setting_type
 ( 'ui.general.button_bar',
     oils_i18n_gettext('ui.general.button_bar', 'Button bar', 'coust', 'label'),
     oils_i18n_gettext('ui.general.button_bar', 'Button bar', 'coust', 'description'),
-    'bool'),
+    'string'),
+
+( 'ui.general.hotkeyset',
+    oils_i18n_gettext('ui.general.hotkeyset', 'Default Hotkeyset', 'coust', 'label'),
+    oils_i18n_gettext('ui.general.hotkeyset', 'Default Hotkeyset for clients (filename without the .keyset)', 'coust', 'description'),
+    'string'),
 
 ( 'circ.hold_shelf_status_delay',
     oils_i18n_gettext('circ.hold_shelf_status_delay', 'Hold Shelf Status Delay', 'coust', 'label'),
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.client_menus.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.client_menus.sql
new file mode 100644 (file)
index 0000000..fd642c1
--- /dev/null
@@ -0,0 +1,14 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('XXXX');
+
+UPDATE config.org_unit_setting_type SET datatype = 'string' WHERE name = 'ui.general.button_bar';
+
+INSERT INTO config.org_unit_setting_type ( name, label, description, datatype) VALUES ('ui.general.hotkeyset', 'Default Hotkeyset', 'Default Hotkeyset for clients (filename without the .keyset)', 'string');
+
+UPDATE actor.org_unit_setting SET value='"circ"' WHERE name = 'ui.general.button_bar' AND value='true';
+
+UPDATE actor.org_unit_setting SET value='"none"' WHERE name = 'ui.general.button_bar' AND value='false';
+
+COMMIT;
+
index ef4c6cc..fb7e927 100644 (file)
 <!ENTITY staff.main.auth.status "Status">
 <!ENTITY staff.main.auth.version "Version">
 <!ENTITY staff.main.auth.workstation "Workstation">
+<!ENTITY staff.main.button_bar.none "None">
+<!ENTITY staff.main.button_bar.circ "Circulation">
+<!ENTITY staff.main.button_bar.cat "Cataloging">
 <!ENTITY staff.main.button_bar.check_out.label "Check Out">
 <!ENTITY staff.main.button_bar.check_out.accesskey "">
 <!ENTITY staff.main.button_bar.check_in.label "Check In">
 <!ENTITY staff.main.button_bar.patron_search.accesskey "">
 <!ENTITY staff.main.button_bar.patron_registration.label "Patron Registration">
 <!ENTITY staff.main.button_bar.patron_registration.accesskey "">
+<!ENTITY staff.main.button_bar.hotkeys_toggle "Toggle Hotkeys">
+<!ENTITY staff.main.button_bar.create_marc "Create Marc Record">
+<!ENTITY staff.main.button_bar.authority_manage "Manage Authorities">
+<!ENTITY staff.main.button_bar.retrieve_last_record "Retrieve Last Record">
 <!ENTITY staff.main.menu.acquisitions.accesskey "q">
 <!ENTITY staff.main.menu.acquisitions.label "Acquisitions">
 <!ENTITY staff.main.menu.admin.accesskey "-">
 <!ENTITY staff.main.menu.admin.label "Admin">
 <!ENTITY staff.main.menu.admin.local_admin.accesskey "L">
 <!ENTITY staff.main.menu.admin.local_admin.label "Local Administration">
+<!ENTITY staff.main.menu.admin.client.label "Workstation Administration">
+<!ENTITY staff.main.menu.admin.client.accesskey "W">
+<!ENTITY staff.main.menu.admin.client.hotkeys "Hotkeys">
+<!ENTITY staff.main.menu.admin.client.hotkeys.current "Current">
+<!ENTITY staff.main.menu.admin.client.hotkeys.toggle.label "Disable Hotkeys">
+<!ENTITY staff.main.menu.admin.client.hotkeys.toggle.accesskey "D">
+<!ENTITY staff.main.menu.admin.client.hotkeys.setworkstation.label "Set Workstation Default to Current">
+<!ENTITY staff.main.menu.admin.client.hotkeys.setworkstation.accesskey "">
+<!ENTITY staff.main.menu.admin.client.hotkeys.clearworkstation.label "Clear Workstation Default">
+<!ENTITY staff.main.menu.admin.client.hotkeys.clearworkstation.accesskey "">
+<!ENTITY staff.main.menu.admin.client.toolbars "Toolbars">
+<!ENTITY staff.main.menu.admin.client.toolbars.current "Current">
+<!ENTITY staff.main.menu.admin.client.toolbars.setworkstation.label "Set Workstation Default to Current">
+<!ENTITY staff.main.menu.admin.client.toolbars.setworkstation.accesskey "">
+<!ENTITY staff.main.menu.admin.client.toolbars.clearworkstation.label "Clear Workstation Default">
+<!ENTITY staff.main.menu.admin.client.toolbars.clearworkstation.accesskey "">
+<!ENTITY staff.main.menu.admin.client.toolbars.size "Icon Size">
+<!ENTITY staff.main.menu.admin.client.toolbars.size.large "Large">
+<!ENTITY staff.main.menu.admin.client.toolbars.size.small "Small">
+<!ENTITY staff.main.menu.admin.client.toolbars.mode "Mode">
+<!ENTITY staff.main.menu.admin.client.toolbars.mode.both "Icons and Labels">
+<!ENTITY staff.main.menu.admin.client.toolbars.mode.icons "Icons Only">
+<!ENTITY staff.main.menu.admin.client.toolbars.mode.text "Labels Only">
+<!ENTITY staff.main.menu.admin.client.toolbars.label_position "Label Position">
+<!ENTITY staff.main.menu.admin.client.toolbars.label_position.side "Next to icons">
+<!ENTITY staff.main.menu.admin.client.toolbars.label_position.under "Under icons">
 <!ENTITY staff.main.menu.admin.non_cat_type_edit.accesskey "n">
 <!ENTITY staff.main.menu.admin.non_cat_type_edit.label "Non-Cataloged Type Editor">
 <!ENTITY staff.main.menu.admin.offline_xacts.accesskey "T">
 <!ENTITY staff.main.menu.admin.xuleditor.label "XUL Test">
 <!ENTITY staff.main.menu.admin.venkman.label "Venkman">
 <!ENTITY staff.main.menu.admin.ping "Ping Server">
-<!ENTITY staff.main.menu.admin.toggle_buttonbar.accesskey "B">
-<!ENTITY staff.main.menu.admin.toggle_buttonbar.label "Toggle Button Bar">
 <!ENTITY staff.main.menu.admin.toggle_meters.accesskey "M">
 <!ENTITY staff.main.menu.admin.toggle_meters.label "Toggle Activity Meters">
 <!ENTITY staff.main.menu.cat.accesskey "g">
index 51a0ad2..2b3a14a 100644 (file)
@@ -549,7 +549,9 @@ auth.controller.prototype = {
 
         this.session.close();
         this.data.menu_perms = false;
+        this.data.current_hotkeyset = undefined;
         this.data.stash('menu_perms');
+        this.data.stash('current_hotkeyset');
 
         /* FIXME - need some locking or object destruction for the async tests */
         /* this.test_server( this.controller.view.server_prompt.value ); */
index 9aec40a..f13cbfe 100644 (file)
@@ -220,6 +220,70 @@ function get_menu_perms(indocument) {
     return false;
 }
 
+// Returns a list (cached or from filesystem) of hotkey sets
+function load_hotkey_sets() {
+    if(typeof(load_hotkey_sets.set_list) == 'undefined') {
+        load_hotkey_sets.set_list = [];
+        JSAN.use('util.file');
+        var file = new util.file();
+        var dirEntries = file.get('hotkeys','skin').directoryEntries;
+        while(dirEntries.hasMoreElements()) {
+            var entry = dirEntries.getNext();
+            entry.QueryInterface(Components.interfaces.nsIFile);
+            if(!entry.isFile()) continue;
+            if(!entry.leafName.match(/.+\.keyset$/)) continue;
+            var keysetname = entry.leafName.replace(/\.keyset$/,'');
+            load_hotkey_sets.set_list.push(keysetname);
+        }
+        file.close();
+    }
+    return load_hotkey_sets.set_list;
+}
+
+// Returns an array (cached or from filesystem) for a given hotkey set
+function get_hotkey_array(keyset_name) {
+    if(typeof(get_hotkey_array.keyset_cache) == 'undefined') {
+        get_hotkey_array.keyset_cache = {};
+    }
+    if(get_hotkey_array.keyset_cache[keyset_name])
+        return get_hotkey_array.keyset_cache[keyset_name];
+    JSAN.use('util.file');
+    var file = new util.file();
+    var keyset_raw;
+    try {
+        var keyset_file = file.get('hotkeys','skin');
+        keyset_file.append(keyset_name + ".keyset");
+        keyset_raw = file.get_content();
+        file.close();
+        var tempArray = [];
+
+        var keyset_lines = keyset_raw.trim().split("\n");
+        for(var line = 0; line < keyset_lines.length; line++) {
+            // Grab line, strip comments, strip leading/trailing whitespace
+            var curline = keyset_lines[line].replace(/\s*#.*$/,'').trim();
+            if(curline == "") continue; // Skip empty lines
+            // Split into pieces
+            var split_line = curline.split(',');
+            // We need at least 3 elements. Command, modifiers, keycode.
+            if(split_line.length < 3) continue;
+            // Trim each segment
+            split_line[0] = split_line[0].trim();
+            split_line[1] = split_line[1].trim();
+            split_line[2] = split_line[2].trim();
+            if(split_line.length > 3)
+                split_line[3] = split_line[3].trim();
+            // Skip empty commands
+            if(split_line[0] == "") continue;
+            // Push to array
+            tempArray.push(split_line);
+        }
+        get_hotkey_array.keyset_cache[keyset_name] = tempArray;
+        return tempArray;
+    } catch(E) { // Something went wrong.
+        return false;
+    }
+}
+
 function main_init() {
     dump('entering main_init()\n');
     try {
index b8b9f8a..ba8a97d 100644 (file)
@@ -33,6 +33,11 @@ main.menu.prototype = {
 
     'id_incr' : 0,
 
+    'toolbar' : 'none',
+    'toolbar_size' : 'large',
+    'toolbar_mode' : 'both',
+    'toolbar_labelpos' : 'side',
+
     'url_prefix' : function(url) {
         if (url.match(/^\//)) url = urls.remote + url;
         if (! url.match(/^(http|chrome):\/\//) && ! url.match(/^data:/) ) url = 'http://' + url;
@@ -55,10 +60,72 @@ main.menu.prototype = {
             eval( r.responseText );
         }
 
-        var button_bar = String( obj.data.hash.aous['ui.general.button_bar'] ) == 'true';
+        // Try workstation pref for button bar
+        var button_bar = xulG.pref.getCharPref('open-ils.menu.toolbar');
+
+        if (!button_bar) // No workstation pref? Try org unit pref.
+            button_bar = String( obj.data.hash.aous['ui.general.button_bar'] );
+
         if (button_bar) {
-            var x = document.getElementById('main_toolbar');
+            var x = document.getElementById('toolbar_' + button_bar);
             if (x) x.setAttribute('hidden','false');
+            this.toolbar = button_bar;
+        }
+
+        // Check for alternate Size pref
+        var toolbar_size = xulG.pref.getCharPref('open-ils.menu.toolbar.iconsize');
+        if(toolbar_size) this.toolbar_size = toolbar_size;
+        // Check for alternate Mode pref
+        var toolbar_mode = xulG.pref.getCharPref('open-ils.menu.toolbar.mode');
+        if(toolbar_mode) this.toolbar_mode = toolbar_mode;
+        // Check for alternate Label Position pref
+        var toolbar_labelpos = xulG.pref.getBoolPref('open-ils.menu.toolbar.labelbelow');
+        if(toolbar_labelpos) this.toolbar_labelpos = toolbar_labelpos;
+
+        if(button_bar || toolbar_size || toolbar_mode || toolbar_labelpos) {
+            var toolbox = document.getElementById('main_toolbox');
+            var toolbars = toolbox.getElementsByTagName('toolbar');
+            for(var i = 0; i < toolbars.length; i++) {
+                if(toolbars[i].id == 'toolbar_' + button_bar)
+                    toolbars[i].setAttribute('hidden', 'false');
+                else
+                    toolbars[i].setAttribute('hidden', 'true');
+                if(toolbar_mode) toolbars[i].setAttribute('mode', toolbar_mode);
+                if(toolbar_size) toolbars[i].setAttribute('iconsize', toolbar_size);
+                if(toolbar_labelpos) addCSSClass(toolbars[i], 'labelbelow');
+            }
+        }
+
+        if(button_bar) {
+            var x = document.getElementById('main.menu.admin.client.toolbars.current.popup');
+            if (x) {
+                var selectitems = x.getElementsByAttribute('value',button_bar);
+                if(selectitems.length > 0) selectitems[0].setAttribute('checked','true');
+            }
+        }
+
+        if(toolbar_size) {
+            var x = document.getElementById('main.menu.admin.client.toolbars.size.popup');
+            if (x) {
+                var selectitems = x.getElementsByAttribute('value',toolbar_size);
+                if(selectitems.length > 0) selectitems[0].setAttribute('checked','true');
+            }
+        }
+
+        if(toolbar_mode) {
+            var x = document.getElementById('main.menu.admin.client.toolbars.mode.popup');
+            if (x) {
+                var selectitems = x.getElementsByAttribute('value',toolbar_mode);
+                if(selectitems.length > 0) selectitems[0].setAttribute('checked','true');
+            }
+        }
+
+        if(toolbar_labelpos) {
+            var x = document.getElementById('main.menu.admin.client.toolbars.label_position.popup');
+            if (x) {
+                var selectitems = x.getElementsByAttribute('value',"under");
+                if(selectitems.length > 0) selectitems[0].setAttribute('checked','true');
+            }
         }
 
         var network_meter = String( obj.data.hash.aous['ui.network.progress_meter'] ) == 'true';
@@ -71,7 +138,26 @@ main.menu.prototype = {
 
         var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
                     getService(Components.interfaces.nsIWindowMediator);
-        wm.getMostRecentWindow('eg_main').get_menu_perms(document);
+        var mainwin = wm.getMostRecentWindow('eg_main');
+        mainwin.get_menu_perms(document);
+        var hotkeysets = mainwin.load_hotkey_sets();
+
+        var popupmenu = document.getElementById('main.menu.admin.client.hotkeys.current.popup');
+        
+        for(var i = 0; i < hotkeysets.length; i++) {
+            var keysetname = hotkeysets[i];
+            var menuitem = document.createElement('menuitem');
+            if(offlineStrings.testString('hotkey.' + keysetname))
+                menuitem.setAttribute('label',offlineStrings.getString('hotkey.' + keysetname));
+            else
+                menuitem.setAttribute('label',keysetname);
+            menuitem.setAttribute('value',keysetname);
+            menuitem.setAttribute('type','radio');
+            menuitem.setAttribute('name','menu_hotkey_current');
+            menuitem.setAttribute('command','cmd_hotkeys_set');
+            popupmenu.appendChild(menuitem);
+        }
+
         JSAN.use('util.network');
         var network = new util.network();
         network.set_user_status();
@@ -535,14 +621,6 @@ main.menu.prototype = {
                 }
             ],
 
-            'cmd_toggle_buttonbar' : [
-                ['oncommand'],
-                function() {
-                    var x = document.getElementById('main_toolbar');
-                    if (x) x.hidden = ! x.hidden;
-                }
-            ],
-
             'cmd_toggle_meters' : [
                 ['oncommand'],
                 function() {
@@ -1325,6 +1403,112 @@ main.menu.prototype = {
                     }
                 }
             ],
+            'cmd_hotkeys_toggle' : [
+                ['oncommand'],
+                function() {
+                    // Easy enough, toggle disabled on the keyset
+                    var keyset = document.getElementById("menu_frame_keys");
+                    var disabled = (keyset.getAttribute("disabled") == "true") ? "false" : "true";
+                    keyset.setAttribute("disabled", disabled);
+                    // Then find every menuitem/toolbarbutton for this command for a graphical hint
+                    var controls = document.getElementsByAttribute("command","cmd_hotkeys_toggle");
+                    for(var i = 0; i < controls.length; i++)
+                        controls[i].setAttribute("checked",disabled);
+                }
+            ],
+            'cmd_hotkeys_set' : [
+                ['oncommand'],
+                function(event) {
+                    obj.set_menu_hotkeys(event.explicitOriginalTarget.getAttribute('value'));
+                }
+            ],
+            'cmd_hotkeys_setworkstation' : [
+                ['oncommand'],
+                function() {
+                    xulG.pref.setCharPref('open-ils.menu.hotkeyset', obj.data.current_hotkeyset);
+                }
+            ],
+            'cmd_hotkeys_clearworkstation' : [
+                ['oncommand'],
+                function() {
+                    if(xulG.pref.prefHasUserValue('open-ils.menu.hotkeyset'))
+                        xulG.pref.clearUserPref('open-ils.menu.hotkeyset');
+                }
+            ],
+            'cmd_toolbar_set' : [
+                ['oncommand'],
+                function(event) {
+                    var newToolbar = event.explicitOriginalTarget.getAttribute('value');
+                    var toolbox = document.getElementById('main_toolbox');
+                    var toolbars = toolbox.getElementsByTagName('toolbar');
+                    for(var i = 0; i < toolbars.length; i++) {
+                        if(toolbars[i].id == 'toolbar_' + newToolbar)
+                            toolbars[i].setAttribute('hidden', 'false');
+                        else
+                            toolbars[i].setAttribute('hidden', 'true');
+                    }
+                    obj.toolbar = newToolbar;
+                }
+            ],
+            'cmd_toolbar_mode_set' : [
+                ['oncommand'],
+                function(event) {
+                    var newMode = event.explicitOriginalTarget.getAttribute('value');
+                    var toolbox = document.getElementById('main_toolbox');
+                    var toolbars = toolbox.getElementsByTagName('toolbar');
+                    for(var i = 0; i < toolbars.length; i++)
+                        toolbars[i].setAttribute("mode",newMode);
+                    obj.toolbar_mode = newMode;
+                }
+            ],
+            'cmd_toolbar_size_set' : [
+                ['oncommand'],
+                function(event) {
+                    var newSize = event.explicitOriginalTarget.getAttribute('value');
+                    var toolbox = document.getElementById('main_toolbox');
+                    var toolbars = toolbox.getElementsByTagName('toolbar');
+                    for(var i = 0; i < toolbars.length; i++)
+                        toolbars[i].setAttribute("iconsize",newSize);
+                    obj.toolbar_size = newSize;
+                }
+            ],
+            'cmd_toolbar_label_position_set' : [
+                ['oncommand'],
+                function(event) {
+                    var altPosition = (event.explicitOriginalTarget.getAttribute('value') == "under");
+                    var toolbox = document.getElementById('main_toolbox');
+                    var toolbars = toolbox.getElementsByTagName('toolbar');
+                    for(var i = 0; i < toolbars.length; i++) {
+                        if(altPosition)
+                            addCSSClass(toolbars[i], 'labelbelow');
+                        else
+                            removeCSSClass(toolbars[i], 'labelbelow');
+                    }
+                    obj.toolbar_labelpos = (altPosition ? "under" : "side");
+                }
+            ],
+            'cmd_toolbar_setworkstation' : [
+                ['oncommand'],
+                function() {
+                xulG.pref.setCharPref('open-ils.menu.toolbar', obj.toolbar);
+                xulG.pref.setCharPref('open-ils.menu.toolbar.iconsize', obj.toolbar_size);
+                xulG.pref.setCharPref('open-ils.menu.toolbar.mode', obj.toolbar_mode);
+                xulG.pref.setBoolPref('open-ils.menu.toolbar.labelbelow', (obj.toolbar_labelpos == "under"));
+                }
+            ],
+            'cmd_toolbar_clearworkstation' : [
+                ['oncommand'],
+                function() {
+                    if(xulG.pref.prefHasUserValue('open-ils.menu.toolbar'))
+                        xulG.pref.clearUserPref('open-ils.menu.toolbar');
+                    if(xulG.pref.prefHasUserValue('open-ils.menu.toolbar.iconsize'))
+                        xulG.pref.clearUserPref('open-ils.menu.toolbar.iconsize');
+                    if(xulG.pref.prefHasUserValue('open-ils.menu.toolbar.mode'))
+                        xulG.pref.clearUserPref('open-ils.menu.toolbar.mode');
+                    if(xulG.pref.prefHasUserValue('open-ils.menu.toolbar.labelbelow'))
+                        xulG.pref.clearUserPref('open-ils.menu.toolbar.labelbelow');
+                }
+            ],
         };
 
         JSAN.use('util.controller');
@@ -1411,17 +1595,20 @@ main.menu.prototype = {
 
     'command_tab' : function(event,url,params,content_params) {
         var newTab = false;
-        if(event && event.explicitOriginalTarget.nodeName == 'toolbarbutton' && event.explicitOriginalTarget.command == event.originalTarget.id) {
+        var myEvent = event;
+        if(event && event.sourceEvent) myEvent = event.sourceEvent;
+        // Note: The last event is not supposed to be myEvent in this if.
+        if(myEvent && myEvent.explicitOriginalTarget.nodeName.match(/toolbarbutton/) && myEvent.explicitOriginalTarget.command == event.originalTarget.id) {
             var value = xulG.pref.getIntPref('ui.key.accelKey');
             switch(value) {
                 case 17:
-                    newTab = event.ctrlKey;
+                    newTab = myEvent.ctrlKey;
                     break;
                 case 18:
-                    newTab = event.altKey;
+                    newTab = myEvent.altKey;
                     break;
                 case 224:
-                    newTab = event.metaKey;
+                    newTab = myEvent.metaKey;
                     break;
             }
             try {
@@ -1529,6 +1716,122 @@ commands:
 
     },
 
+    'set_menu_hotkeys' : function(hotkeyset) {
+        this.data.stash_retrieve();
+
+        var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
+                    getService(Components.interfaces.nsIWindowMediator);
+        var mainwin = wm.getMostRecentWindow('eg_main');
+        var explicit = false;
+        JSAN.use('util.network');
+        var network = new util.network();
+
+        if(hotkeyset) { // Explicit request
+            this.data.current_hotkeyset = hotkeyset;
+            this.data.stash('current_hotkeyset');
+            explicit = true;
+        }
+        else { // Non-explicit request?
+            if(this.data.current_hotkeyset) // Previous hotkeyset?
+                hotkeyset = this.data.current_hotkeyset; // Use it
+            else { // No previous? We need to decide on one!
+                // Load the list so we know if what we are being asked to load is valid.
+                var hotkeysets = mainwin.load_hotkey_sets();
+                if(!hotkeysets) return; // No sets = nothing to load. Which is probably an error, but meh.
+                hotkeysets.has = function(test) {
+                    for(i = 0; i < this.length; i++) {
+                        if(this[i] == test) return true;
+                    }
+                    return false;
+                }; 
+                // Try workstation (pref)
+                hotkeyset = xulG.pref.getCharPref('open-ils.menu.hotkeyset');
+
+                // Nothing or nothing valid?
+                if(!hotkeyset || !hotkeysets.has(hotkeyset)) {
+                    hotkeyset = this.data.hash.aous['ui.general.hotkeyset'];
+                }
+                // STILL nothing? Try Default.
+                if(!hotkeyset || !hotkeysets.has(hotkeyset)) {
+                    if(hotkeysets.has('Default'))
+                        hotkeyset = 'Default';
+                    else
+                        return false;
+                }
+                // And save whatever we are using.
+                this.data.current_hotkeyset = hotkeyset;
+                this.data.stash('current_hotkeyset');
+            }
+        }
+        // Clear out all the old hotkeys
+        var keyset = document.getElementById('menu_frame_keys');
+        var main_menu = document.getElementById('main_menubar');
+        if(keyset.hasChildNodes()) {
+            var menuitems = main_menu.getElementsByAttribute('key','*');
+            while(menuitems.length > 0) {
+                var menuitem = menuitems[0];
+                menuitem.removeAttribute('key');
+                // Trick/force mozilla to re-evaluate the menuitem
+                // If you want to take this trick for use *anywhere* in *any* project, regardless of licensing, please do
+                // Because it was a PITA to figure out
+                menuitem.style.display = 'none'; // Hide the item to force menu to clear spot
+                menuitem.removeAttribute('acceltext'); // Remove acceltext to clear out hotkey hint text
+                menuitem.parentNode.openPopupAtScreen(0,0,false); // Tell menupopup to redraw itself
+                menuitem.parentNode.hidePopup(); // And then make it go away right away.
+                menuitem.style.removeProperty('display'); // Restore normal css display
+            }
+            while(keyset.hasChildNodes()) keyset.removeChild(keyset.childNodes[0]);
+        }
+        keyset_lines = mainwin.get_hotkey_array(hotkeyset);
+        // Next, fill the keyset
+        for(var line = 0; line < keyset_lines.length; line++) {
+            // Create and populate our <key>
+            var key_node = document.createElement('key');
+            key_node.setAttribute('id',keyset_lines[line][0] + "_key");
+            key_node.setAttribute('command',keyset_lines[line][0]);
+            key_node.setAttribute('modifiers',keyset_lines[line][1]);
+            // If keycode starts with VK_ we assume it is a key code.
+            // Key codes go in the keycode attribute
+            // Regular keys (like "i") go in the key attribute
+            if(keyset_lines[line][2].match(/^VK_/))
+                key_node.setAttribute('keycode',keyset_lines[line][2]);
+            else
+                key_node.setAttribute('key',keyset_lines[line][2]);
+            // If a fourth option was specified, set keytext to it.
+            if(keyset_lines[line][3])
+                key_node.setAttribute('keytext',keyset_lines[line][3]);
+            // Add the new node to the DOM
+            keyset.appendChild(key_node);
+            // And populate all the menu items that should now display it
+            var menuitems = main_menu.getElementsByAttribute('command',keyset_lines[line][0]);
+            for(var i = 0; i < menuitems.length; i++) {
+                menuitems[i].setAttribute('key', keyset_lines[line][0] + "_key");
+                // Trick/force mozilla to re-evaluate the menuitem
+                menuitems[i].style.display = 'none'; // Hide the item to force menu to clear spot
+                menuitems[i].parentNode.openPopupAtScreen(0,0,false); // Tell menupopup to redraw itself
+                menuitems[i].parentNode.hidePopup(); // And then make it go away right away
+                menuitems[i].style.removeProperty('display'); // Restore normal css display
+            }
+        }
+        // If no keys, disable ability to toggle hotkeys (because why bother?)
+        var x = document.getElementById('cmd_hotkeys_toggle');
+        if(x) {
+            if(keyset.hasChildNodes())
+                x.removeAttribute('disabled');
+            else
+                x.setAttribute('disabled', 'true');
+        }
+        // Select the hotkey set in the menu
+        // This ensures that first window load OR remote window update shows properly
+        var hotkeylist = document.getElementById('main.menu.admin.client.hotkeys.current.popup');
+        var selectitems = hotkeylist.getElementsByAttribute('value',hotkeyset);
+        if(selectitems.length > 0) selectitems[0].setAttribute('checked','true');
+        // Tell other windows to update
+        if(explicit) {
+            network.set_user_status();
+        }
+    },
+
     'page_meter' : {
         'node' : document.getElementById('page_progress'),
         'on' : function() {
index f7c5c26..2dc7cb5 100644 (file)
@@ -62,7 +62,6 @@
     <command id="cmd_manage_offline_xacts" />
     <command id="cmd_download_patrons" />
     <command id="cmd_local_admin" />
-    <command id="cmd_toggle_buttonbar" />
     <command id="cmd_toggle_meters" />
 
     <command id="cmd_extension_manager" />
     <command id="cmd_server_admin_config_weight_assoc"
              perm="ADMIN_CIRC_MATRIX_MATCHPOINT ADMIN_HOLD_MATRIX_MATCHPOINT VIEW_CIRC_MATRIX_MATCHPOINT VIEW_HOLD_MATRIX_MATCHPOINT"
              />
-</commandset>
-
 
-<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
-<keyset id="menu_frame_keys">
-    <key id="new-window-key" modifiers="accel" key="N" command="cmd_new_window"/>
-    <key id="new-tab-key" modifiers="accel" key="T" command="cmd_new_tab"/>
-    <key id="open-key" modifiers="accel" key="O" command=""/>
-    <key id="save-key" modifiers="accel" key="S" command=""/>
-    <key id="close-tab-key" modifiers="accel" key="W" command="cmd_close_tab"/>
-    <key id="close-all-tabs-key" modifiers="accel,shift" key="W" command="cmd_close_all_tabs"/>
-    <key id="close-window-key" modifiers="accel" key="Q" command="cmd_close_window"/>
-    <key id="circ-checkout-key" keycode="VK_F1" command="cmd_circ_checkout"/>
-    <key id="circ-checkin-key" keycode="VK_F2" command="cmd_circ_checkin"/>
-    <key id="circ-renew-key" keycode="VK_F2" modifiers="control" command="cmd_circ_renew"/>
-    <key id="reprint-receipt-key" keycode="VK_F9" command="cmd_reprint"/>
-    <key id="search-opac-key" keycode="VK_F3" command="cmd_search_opac"/>
-    <key id="search-tcn-key" keycode="VK_F3" modifiers="shift" command="cmd_search_tcn"/>
-    <key id="patron-search-key" keycode="VK_F4" command="cmd_patron_search"/>
-    <key id="copy-status-key" keycode="VK_F5" command="cmd_copy_status"/>
-    <key id="circ-in-house-use-key" keycode="VK_F6" command="cmd_in_house_use"/>
-    <key id="circ-hold-capture-key" keycode="VK_F2" modifiers="shift" command="cmd_circ_hold_capture"/>
-    <key id="patron-register-key" keycode="VK_F1" modifiers="shift" command="cmd_patron_register"/>
-    <key id="retrieve_last_patron_key" keycode="VK_F8" command="cmd_retrieve_last_patron"/>
-    <key id="retrieve_last_record_key" keycode="VK_F8" modifiers="shift" command="cmd_retrieve_last_record"/>
-</keyset>
+    <command id="cmd_hotkeys_toggle" />
+    <command id="cmd_hotkeys_set" />
+    <command id="cmd_hotkeys_setworkstation" />
+    <command id="cmd_hotkeys_clearworkstation" />
+    <command id="cmd_toolbar_set" />
+    <command id="cmd_toolbar_setworkstation" />
+    <command id="cmd_toolbar_clearworkstation" />
+    <command id="cmd_toolbar_mode_set" />
+    <command id="cmd_toolbar_size_set" />
+    <command id="cmd_toolbar_label_position_set" />
+</commandset>
 
 <!-- The File menu on the main menu -->
 <menu id="main.menu.file" label="&staff.main.menu.file.label;" accesskey="&staff.main.menu.file.accesskey;" >
     <menupopup id="main.menu.file.popup">
-        <menuitem label="&staff.main.menu.file.new.label;" accesskey="&staff.main.menu.file.new.accesskey;" key="new-window-key" command="cmd_new_window"/>
-        <menuitem label="&staff.main.menu.file.new_tab.label;" accesskey="&staff.main.menu.file.new_tab.accesskey;" key="new-tab-key" command="cmd_new_tab"/>
+        <menuitem label="&staff.main.menu.file.new.label;" accesskey="&staff.main.menu.file.new.accesskey;" command="cmd_new_window"/>
+        <menuitem label="&staff.main.menu.file.new_tab.label;" accesskey="&staff.main.menu.file.new_tab.accesskey;" command="cmd_new_tab"/>
         <menuseparator />
-        <menuitem label="&staff.main.menu.file.close_tab.label;" accesskey="&staff.main.menu.file.close_tab.accesskey;" oldaccesskey="&staff.main.menu.file.close_tab.key;" key="close-tab-key" command="cmd_close_tab"/>
-        <menuitem label="&staff.main.menu.tabs.close;" accesskey="&staff.main.menu.tabs.close.accesskey;" key="close-all-tabs-key" command="cmd_close_all_tabs"/>
-        <menuitem label="&staff.main.menu.file.close.label;" accesskey="&staff.main.menu.file.close.accesskey;" oldaccesskey="&staff.main.menu.file.close.key;" key="close-window-key" command="cmd_close_window"/>
+        <menuitem label="&staff.main.menu.file.close_tab.label;" accesskey="&staff.main.menu.file.close_tab.accesskey;" command="cmd_close_tab"/>
+        <menuitem label="&staff.main.menu.tabs.close;" accesskey="&staff.main.menu.tabs.close.accesskey;" command="cmd_close_all_tabs"/>
+        <menuitem label="&staff.main.menu.file.close.label;" accesskey="&staff.main.menu.file.close.accesskey;" command="cmd_close_window"/>
         <menuseparator />
         <menuitem label="&staff.main.menu.quit;" accesskey="&staff.main.menu.quit.accesskey;" command="cmd_shutdown"/>
     </menupopup>
 <!-- The Circulation menu on the main menu -->
 <menu id="main.menu.circ" label="&staff.main.menu.circ.label;" accesskey="&staff.main.menu.circ.accesskey;">
     <menupopup id="main.menu.circ.popup">
-        <menuitem label="&staff.main.menu.circ.checkout.label;" accesskey="&staff.main.menu.circ.checkout.accesskey;" key="circ-checkout-key" command="cmd_circ_checkout"/>
-        <menuitem label="&staff.main.menu.circ.checkin.label;" accesskey="&staff.main.menu.circ.checkin.accesskey;" key="circ-checkin-key" command="cmd_circ_checkin"/>
-        <menuitem label="&staff.main.menu.circ.renew.label;" accesskey="&staff.main.menu.circ.renew.accesskey;" key="circ-renew-key" command="cmd_circ_renew"/>
-        <menuitem label="&staff.main.menu.circ.patron_registration.label;" accesskey="&staff.main.menu.circ.patron_registration.accesskey;" key="patron-register-key" command="cmd_patron_register"/>
+        <menuitem label="&staff.main.menu.circ.checkout.label;" accesskey="&staff.main.menu.circ.checkout.accesskey;" command="cmd_circ_checkout"/>
+        <menuitem label="&staff.main.menu.circ.checkin.label;" accesskey="&staff.main.menu.circ.checkin.accesskey;" command="cmd_circ_checkin"/>
+        <menuitem label="&staff.main.menu.circ.renew.label;" accesskey="&staff.main.menu.circ.renew.accesskey;" command="cmd_circ_renew"/>
+        <menuitem label="&staff.main.menu.circ.patron_registration.label;" accesskey="&staff.main.menu.circ.patron_registration.accesskey;" command="cmd_patron_register"/>
         <menuitem label="&staff.main.menu.circ.staged_patrons.label;" accesskey="&staff.main.menu.circ.staged_patrons.accesskey;" command="cmd_staged_patrons"/>
-        <menuitem label="&staff.main.menu.circ.patron_retrieve.label;" accesskey="&staff.main.menu.circ.patron_retrieve.accesskey;" command="cmd_retrieve_last_patron" key="retrieve_last_patron_key"/>
+        <menuitem label="&staff.main.menu.circ.patron_retrieve.label;" accesskey="&staff.main.menu.circ.patron_retrieve.accesskey;" command="cmd_retrieve_last_patron"/>
         <menuseparator />
-        <menuitem label="&staff.main.menu.circ.hold_capture.label;" accesskey="&staff.main.menu.circ.hold_capture.accesskey;" key="circ-hold-capture-key" command="cmd_circ_hold_capture"/>
+        <menuitem label="&staff.main.menu.circ.hold_capture.label;" accesskey="&staff.main.menu.circ.hold_capture.accesskey;" command="cmd_circ_hold_capture"/>
         <menuitem label="&staff.main.menu.circ.hold_pull.label;" accesskey="&staff.main.menu.circ.hold_pull.accesskey;" command="cmd_circ_hold_pull_list"/>
         <menuitem label="&staff.main.menu.circ.hold_browse.label;" command="cmd_browse_holds_shelf" accesskey="&staff.main.menu.circ.hold_browse.accesskey;"/>
-        <menuitem label="&staff.main.menu.circ.place_hold.label;" accesskey="&staff.main.menu.circ.place_hold.accesskey;" key="search-opac-key" command="cmd_search_opac"/>
+        <menuitem label="&staff.main.menu.circ.place_hold.label;" accesskey="&staff.main.menu.circ.place_hold.accesskey;" command="cmd_search_opac"/>
         <menuseparator />
-        <menuitem label="&staff.main.menu.circ.barcode.show_item;" accesskey="&staff.main.menu.circ.barcode.show_item.accesskey;" key="copy-status-key" command="cmd_copy_status"/>
-        <menuitem label="&staff.main.menu.circ.barcode.retrieve_patron;" accesskey="&staff.main.menu.circ.barcode.retrieve_patron.accesskey;" key="circ-checkout-key" command="cmd_circ_checkout"/>
+        <menuitem label="&staff.main.menu.circ.barcode.show_item;" accesskey="&staff.main.menu.circ.barcode.show_item.accesskey;" command="cmd_copy_status"/>
+        <menuitem label="&staff.main.menu.circ.barcode.retrieve_patron;" accesskey="&staff.main.menu.circ.barcode.retrieve_patron.accesskey;" command="cmd_circ_checkout"/>
         <menuitem label="&staff.main.menu.circ.verify_credentials;" accesskey="&staff.main.menu.circ.verify_credentials.accesskey;" command="cmd_verify_credentials"/>
         <menuitem label="&staff.main.menu.replace_barcode.label;" command="cmd_replace_barcode"/>
-        <menuitem label="&staff.main.menu.circ.in_house.label;" accesskey="&staff.main.menu.circ.in_house.accesskey;" key="circ-in-house-use-key" command="cmd_in_house_use"/>
+        <menuitem label="&staff.main.menu.circ.in_house.label;" accesskey="&staff.main.menu.circ.in_house.accesskey;" command="cmd_in_house_use"/>
         <menuitem command="cmd_scan_item_as_missing_pieces" label="&staff.main.menu.circ.scan_item_as_missing_pieces.label;" accesskey="&staff.main.menu.circ.scan_item_as_missing_pieces.accesskey;"/>
         <menuseparator />
-        <menuitem label="&staff.main.menu.circ.reprint.label;" accesskey="&staff.main.menu.circ.reprint.accesskey;" key="reprint-receipt-key" command="cmd_reprint"/>
+        <menuitem label="&staff.main.menu.circ.reprint.label;" accesskey="&staff.main.menu.circ.reprint.accesskey;" command="cmd_reprint"/>
         <menuitem label="&staff.main.menu.circ.offline.label;" command="cmd_standalone" accesskey="&staff.main.menu.circ.offline.accesskey;"/>
     </menupopup>
 </menu>
 <!-- The Cataloging menu on the main menu -->
 <menu id="main.menu.cat" label="&staff.main.menu.cat.label;" accesskey="&staff.main.menu.cat.accesskey;">
     <menupopup id="main.menu.cat.popup">
-        <menuitem label="&staff.main.menu.cat.bib_search.label;" accesskey="&staff.main.menu.cat.bib_search.accesskey;" key="search-opac-key" command="cmd_search_opac"/>
-        <menuitem label="&staff.main.menu.cat.search_tcn.label;" accesskey="&staff.main.menu.cat.search_tcn.accesskey;" key="search-tcn-key" command="cmd_search_tcn" />
-        <menuitem label="&staff.main.menu.cat.search_bib_id.label;" accesskey="&staff.main.menu.cat.search_bib_id.accesskey;" key="search-bib-id-key" command="cmd_search_bib_id" />
-        <menuitem label="&staff.main.menu.cat.copy_status.label;" accesskey="&staff.main.menu.cat.copy_status.accesskey;" key="copy-status-key" command="cmd_copy_status"/>
+        <menuitem label="&staff.main.menu.cat.bib_search.label;" accesskey="&staff.main.menu.cat.bib_search.accesskey;" command="cmd_search_opac"/>
+        <menuitem label="&staff.main.menu.cat.search_tcn.label;" accesskey="&staff.main.menu.cat.search_tcn.accesskey;" command="cmd_search_tcn" />
+        <menuitem label="&staff.main.menu.cat.search_bib_id.label;" accesskey="&staff.main.menu.cat.search_bib_id.accesskey;" command="cmd_search_bib_id" />
+        <menuitem label="&staff.main.menu.cat.copy_status.label;" accesskey="&staff.main.menu.cat.copy_status.accesskey;" command="cmd_copy_status"/>
         <menuseparator />
         <!--
         <menuitem disabled="true" label="&staff.main.menu.cat.dedup.label;" accesskey="&staff.main.menu.cat.dedup.accesskey;" command="cmd_broken"/>
         <menuitem command="cmd_marc_batch_edit" label="&staff.main.menu.cat.marc_batch_edit.label;" accesskey="&staff.main.menu.cat.marc_batch_edit.accesskey;"/>
         <menuseparator />
         <menuitem label="&staff.main.menu.replace_barcode.label;" command="cmd_replace_barcode"/>
-        <menuitem label="&staff.main.menu.cat.retrieve_last_record.label;" accesskey="&staff.main.menu.cat.retrieve_last_record.accesskey;" command="cmd_retrieve_last_record" key="retrieve_last_record_key"/>
+        <menuitem label="&staff.main.menu.cat.retrieve_last_record.label;" accesskey="&staff.main.menu.cat.retrieve_last_record.accesskey;" command="cmd_retrieve_last_record"/>
         <menuseparator />
         <menuitem label="&staff.main.menu.cat.authority_manage.label;" accesskey="&staff.main.menu.cat.authority_manage.accesskey;" command="cmd_authority_manage"/>
     </menupopup>
 <!-- The Search menu on the main menu -->
 <menu id="main.menu.search" label="&staff.main.menu.search.label;" accesskey="&staff.main.menu.search.accesskey;">
     <menupopup id="main.menu.search.popup">
-        <menuitem label="&staff.main.menu.search.patrons.label;" accesskey="&staff.main.menu.search.patrons.accesskey;" key="patron-search-key" command="cmd_patron_search" />
-        <menuitem label="&staff.main.menu.search.catalog.label;" accesskey="&staff.main.menu.search.catalog.accesskey;" key="search-opac-key" command="cmd_search_opac" />
-        <menuitem label="&staff.main.menu.search.record.label;" accesskey="&staff.main.menu.search.record.accesskey;" key="search-tcn-key" command="cmd_search_tcn" />
-        <menuitem label="&staff.main.menu.search.record_via_id.label;" accesskey="&staff.main.menu.search.record_via_id.accesskey;" key="search-bib-id-key" command="cmd_search_bib_id" />
-        <menuitem label="&staff.main.menu.search.copies.label;" accesskey="&staff.main.menu.search.copies.accesskey;" key="copy-status-key" command="cmd_copy_status"/>
-        <menuitem label="&staff.main.menu.search.patrons_barcode.label;" accesskey="&staff.main.menu.search.patrons_barcode.accesskey;" key="circ-checkout-key" command="cmd_circ_checkout"/>
+        <menuitem label="&staff.main.menu.search.patrons.label;" accesskey="&staff.main.menu.search.patrons.accesskey;" command="cmd_patron_search" />
+        <menuitem label="&staff.main.menu.search.catalog.label;" accesskey="&staff.main.menu.search.catalog.accesskey;" command="cmd_search_opac" />
+        <menuitem label="&staff.main.menu.search.record.label;" accesskey="&staff.main.menu.search.record.accesskey;" command="cmd_search_tcn" />
+        <menuitem label="&staff.main.menu.search.record_via_id.label;" accesskey="&staff.main.menu.search.record_via_id.accesskey;" command="cmd_search_bib_id" />
+        <menuitem label="&staff.main.menu.search.copies.label;" accesskey="&staff.main.menu.search.copies.accesskey;" command="cmd_copy_status"/>
+        <menuitem label="&staff.main.menu.search.patrons_barcode.label;" accesskey="&staff.main.menu.search.patrons_barcode.accesskey;" command="cmd_circ_checkout"/>
     </menupopup>
 </menu>
 
     </menupopup>
 </menu>
 
-<!-- The Help menu on the main menu -->
-<menu id="main.menu.admin" label="&staff.main.menu.admin.label;" accesskey="&staff.main.menu.admin.accesskey;" old_accesskey="&staff.main.menu.admin.key;">
+<!-- The Admin menu on the main menu -->
+<menu id="main.menu.admin" label="&staff.main.menu.admin.label;" accesskey="&staff.main.menu.admin.accesskey;">
     <menupopup id="main.menu.admin.popup">
         <menuitem id="oc_menuitem" label="&staff.main.menu.admin.change_session.label;" label_orig="&staff.main.menu.admin.change_session.label;" 
             accesskey="O" command="cmd_change_session"/>
         <menuitem label="&staff.main.menu.admin.download_patrons.label;" accesskey="&staff.main.menu.admin.download_patrons.accesskey;" command="cmd_download_patrons"/>
         <menuseparator />
 
+        <menu id="main.menu.admin.client" label="&staff.main.menu.admin.client.label;" accesskey="&staff.main.menu.admin.client.accesskey;">
+            <menupopup id="main.menu.admin.client.popup">
+                <menuitem command="cmd_local_admin_external_text_editor" label="&staff.server.admin.index.external_text_editor.label;" accesskey="&staff.server.admin.index.external_text_editor.accesskey;"/>
+                <menuitem label="&staff.server.admin.index.printer;" command="cmd_local_admin_printer"/>
+                <menuitem label="&staff.main.menu.admin.template_edit.label;" accesskey="&staff.main.menu.admin.template_edit.accesskey;" command="cmd_print_list_template_edit"/>
+                <menuitem label="&staff.server.admin.index.fonts_and_sounds;" command="cmd_local_admin_fonts_and_sounds"/>
+                <menu id="main.menu.admin.client.hotkeys" label="&staff.main.menu.admin.client.hotkeys;">
+                    <menupopup id="main.menu.admin.client.hotkeys.popup">
+                        <menuitem label="&staff.main.menu.admin.client.hotkeys.toggle.label;" accesskey="&staff.main.menu.admin.client.hotkeys.toggle.accesskey;" type="checkbox" autocheck="false" command="cmd_hotkeys_toggle"/>
+                        <menu id="main.menu.admin.client.hotkeys.current" label="&staff.main.menu.admin.client.hotkeys.current;">
+                            <menupopup id="main.menu.admin.client.hotkeys.current.popup">
+                            </menupopup>
+                        </menu>
+                        <menuseparator />
+                        <menuitem label="&staff.main.menu.admin.client.hotkeys.setworkstation.label;" accesskey="&staff.main.menu.admin.client.hotkeys.setworkstation.accesskey;" command="cmd_hotkeys_setworkstation"/>
+                        <menuitem label="&staff.main.menu.admin.client.hotkeys.clearworkstation.label;" accesskey="&staff.main.menu.admin.client.hotkeys.clearworkstation.accesskey;" command="cmd_hotkeys_clearworkstation"/>
+                    </menupopup>
+                </menu>
+                <menu id="main.menu.admin.client.toolbars" label="&staff.main.menu.admin.client.toolbars;">
+                    <menupopup id="main.menu.admin.client.toolbars.popup">
+                        <menu id="main.menu.admin.client.toolbars.current" label="&staff.main.menu.admin.client.toolbars.current;">
+                            <menupopup id="main.menu.admin.client.toolbars.current.popup">
+                                <menuitem name="current_toolbar" type="radio" label="&staff.main.button_bar.none;" value="none" command="cmd_toolbar_set" checked="true"/>
+                                <menuitem name="current_toolbar" type="radio" label="&staff.main.button_bar.circ;" value="circ" command="cmd_toolbar_set"/>
+                                <menuitem name="current_toolbar" type="radio" label="&staff.main.button_bar.cat;" value="cat" command="cmd_toolbar_set"/>
+                            </menupopup>
+                        </menu>
+                        <menu id="main.menu.admin.client.toolbars.mode" label="&staff.main.menu.admin.client.toolbars.mode;">
+                            <menupopup id="main.menu.admin.client.toolbars.mode.popup">
+                                <menuitem name="toolbar_mode" type="radio" label="&staff.main.menu.admin.client.toolbars.mode.both;" value="both" command="cmd_toolbar_mode_set" checked="true"/>
+                                <menuitem name="toolbar_mode" type="radio" label="&staff.main.menu.admin.client.toolbars.mode.icons;" value="icons" command="cmd_toolbar_mode_set"/>
+                                <menuitem name="toolbar_mode" type="radio" label="&staff.main.menu.admin.client.toolbars.mode.text;" value="text" command="cmd_toolbar_mode_set"/>
+                            </menupopup>
+                        </menu>
+                        <menu id="main.menu.admin.client.toolbars.label_position" label="&staff.main.menu.admin.client.toolbars.label_position;">
+                            <menupopup id="main.menu.admin.client.toolbars.label_position.popup">
+                                <menuitem name="toolbar_label_position" type="radio" label="&staff.main.menu.admin.client.toolbars.label_position.side;" value="side" command="cmd_toolbar_label_position_set" checked="true"/>
+                                <menuitem name="toolbar_label_position" type="radio" label="&staff.main.menu.admin.client.toolbars.label_position.under;" value="under" command="cmd_toolbar_label_position_set"/>
+                            </menupopup>
+                        </menu>
+                        <menu id="main.menu.admin.client.toolbars.size" label="&staff.main.menu.admin.client.toolbars.size;">
+                            <menupopup id="main.menu.admin.client.toolbars.size.popup">
+                                <menuitem name="toolbar_size" type="radio" label="&staff.main.menu.admin.client.toolbars.size.large;" value="large" command="cmd_toolbar_size_set" checked="true"/>
+                                <menuitem name="toolbar_size" type="radio" label="&staff.main.menu.admin.client.toolbars.size.small;" value="small" command="cmd_toolbar_size_set"/>
+                            </menupopup>
+                        </menu>
+                        <menuseparator />
+                        <menuitem label="&staff.main.menu.admin.client.toolbars.setworkstation.label;" accesskey="&staff.main.menu.admin.client.toolbars.setworkstation.accesskey;" command="cmd_toolbar_setworkstation"/>
+                        <menuitem label="&staff.main.menu.admin.client.toolbars.clearworkstation.label;" accesskey="&staff.main.menu.admin.client.toolbars.clearworkstation.accesskey;" command="cmd_toolbar_clearworkstation"/>
+                    </menupopup>
+                </menu>
+
+            </menupopup>
+        </menu>
         <menu id="main.menu.admin.local" label="&staff.main.menu.admin.local_admin.label;">
             <menupopup id="main.menu.admin.local.popup">
                 <menuitem command="cmd_local_admin_age_overdue_circulations_to_lost" label="&staff.server.admin.index.age_overdue_circulations_to_lost.label;" accesskey="&staff.server.admin.index.age_overdue_circulations_to_lost.accesskey;"/>
                 <menuitem label="&staff.server.admin.index.copy_locations;" command="cmd_local_admin_copy_locations"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.conify.copy_location_order.label;" command="cmd_local_admin_copy_location_order"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.copy_template.label;" accesskey="&staff.main.menu.admin.local_admin.copy_template.accesskey;" command="cmd_local_admin_copy_template"/>
-                <menuitem command="cmd_local_admin_external_text_editor" label="&staff.server.admin.index.external_text_editor.label;" accesskey="&staff.server.admin.index.external_text_editor.accesskey;"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.conify.idl_field_doc.label;" command="cmd_local_admin_idl_field_doc"/>
-                <menuitem label="&staff.server.admin.index.fonts_and_sounds;" command="cmd_local_admin_fonts_and_sounds"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.conify.grp_penalty_threshold.label;" command="cmd_local_admin_grp_penalty_threshold"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.hold_matrix_matchpoint.label;" command="cmd_local_admin_hold_matrix_matchpoint"/>
                 <menuitem label="&staff.server.admin.index.library_settings;" command="cmd_local_admin_lib_settings"/>
                 <menuitem label="&staff.server.admin.index.non_cataloged_types;" command="cmd_local_admin_non_cat_types"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.conify.action_trigger.label;" command="cmd_local_admin_action_trigger"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.patrons_due_refunds.label;" accesskey="&staff.main.menu.admin.local_admin.patrons_due_refunds.accesskey;" command="cmd_local_admin_patrons_due_refunds"/>
-                <menuitem label="&staff.server.admin.index.printer;" command="cmd_local_admin_printer"/>
-                <menuitem label="&staff.main.menu.admin.template_edit.label;" accesskey="&staff.main.menu.admin.template_edit.accesskey;" command="cmd_print_list_template_edit"/>
                 <menuitem command="cmd_local_admin_do_not_auto_attempt_print_setting" label="&staff.server.admin.index.do_not_auto_attempt_print_setting.label;" accesskey="&staff.server.admin.index.do_not_auto_attempt_print_setting.accesskey;"/>
                 <menuitem label="&staff.server.admin.index.reports;" command="cmd_local_admin_reports"/>
                 <menuitem label="&staff.main.menu.admin.local_admin.conify.standing_penalty.label;" command="cmd_local_admin_standing_penalty"/>
 
         <menuseparator />
         <menuitem label="&staff.main.menu.admin.user_edit.label;" accesskey="&staff.main.menu.admin.user_edit.accesskey;" command="cmd_adv_user_edit"/>
-        <menuitem label="&staff.main.menu.admin.toggle_buttonbar.label;" accesskey="&staff.main.menu.admin.toggle_buttonbar.accesskey;" command="cmd_toggle_buttonbar"/>
         <menuitem label="&staff.main.menu.admin.toggle_meters.label;" accesskey="&staff.main.menu.admin.toggle_meters.accesskey;" command="cmd_toggle_meters"/>
         <menuseparator />
         <menu id="main.menu.admin.sub" accesskey="&staff.main.menu.admin.developer.accesskey;" label="&staff.main.menu.admin.developer.label;">
                 <menuitem label="&staff.main.menu.admin.survey_wizard.label;" accesskey="&staff.main.menu.admin.survey_wizard.accesskey;" command="cmd_survey_wizard"/>
                 <menuseparator />
                 <menuitem label="&staff.main.menu.admin.public_opac.label;" command="cmd_public_opac" accesskey="&staff.main.menu.admin.public_opac.accesskey;"/>
-                <menuitem label="&staff.main.menu.admin.cmd_test.label;" old_accesskey="T" command="cmd_test"/>
+                <menuitem label="&staff.main.menu.admin.cmd_test.label;" command="cmd_test"/>
                 <menuitem label="&staff.main.menu.admin.xuleditor.label;" accesskey="&staff.main.menu.admin.xuleditor.accesskey;" command="cmd_xuleditor"/>
                 <menuitem label="&staff.main.menu.admin.fieldmapper.label;" accesskey="&staff.main.menu.admin.fieldmapper.accesskey;" command="cmd_fieldmapper"/>
                 <menuitem label="&staff.main.menu.admin.cmd_console.label;" accesskey="&staff.main.menu.admin.cmd_console.accesskey;" command="cmd_console"/>
index fdbed1d..48f8b5e 100644 (file)
@@ -22,7 +22,7 @@
                     <tab hidden="true" />
                 </tabs>
             </arrowscrollbox>
-            <toolbarbutton id="main_tabs_closebutton" class="tabs-closebutton close-button" oncommand="g.menu.close_tab()" />
+            <toolbarbutton id="main_tabs_closebutton" class="tabs-closebutton close-button" command="cmd_close_tab" />
         </hbox>
         <tabpanels id="main_panels" flex="1">
             <tabpanel />
         <menu id="main.menu.admin" />
         <menu id="main.menu.help" />
     </menubar>
-    <toolbar id="main_toolbar" hidden="true">
-        <toolbarbutton id="tb_checkout" 
+    <toolbar id="toolbar_circ" hidden="true">
+        <toolbarbutton 
             command="cmd_circ_checkout" 
-            image="chrome://open_ils_staff_client/skin/media/images/Arrow-rightup-small.png" 
             label="&staff.main.button_bar.check_out.label;" 
-            accesskey="&staff.main.button_bar.check_out.accesskey;" />
-        <toolbarbutton id="tb_checkin" 
+            tooltiptext="&staff.main.button_bar.check_out.label;"
+            type="menu-button">
+            <menupopup tooltiptext=""> <!-- Little note on this first one - The blank tooltiptext stops the button's tooltiptext from applying to the menu and items -->
+                <menuitem label="&staff.main.menu.circ.checkout.label;" accesskey="&staff.main.menu.circ.checkout.accesskey;" command="cmd_circ_checkout"/>
+                <menuitem label="&staff.main.menu.circ.in_house.label;" accesskey="&staff.main.menu.circ.in_house.accesskey;" command="cmd_in_house_use"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarbutton
             command="cmd_circ_checkin" 
-            image="chrome://open_ils_staff_client/skin/media/images/center.png" 
             label="&staff.main.button_bar.check_in.label;" 
-            accesskey="&staff.main.button_bar.check_in.accesskey;" />
+            tooltiptext="&staff.main.button_bar.check_in.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.circ.checkin.label;" accesskey="&staff.main.menu.circ.checkin.accesskey;" command="cmd_circ_checkin"/>
+                <menuitem label="&staff.main.menu.circ.hold_capture.label;" accesskey="&staff.main.menu.circ.hold_capture.accesskey;" command="cmd_circ_hold_capture"/>
+            </menupopup>
+        </toolbarbutton>
         <toolbarseparator />
-        <toolbarbutton id="tb_search_opac" 
+        <toolbarbutton
             command="cmd_search_opac" 
-            image="chrome://open_ils_staff_client/skin/media/images/Search_Items_32x32.png" 
             label="&staff.main.button_bar.search_opac.label;" 
-            accesskey="&staff.main.button_bar.search_opac.accesskey;" />
-        <toolbarbutton id="tb_item_status" 
+            tooltiptext="&staff.main.button_bar.search_opac.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.cat.bib_search.label;" accesskey="&staff.main.menu.cat.bib_search.accesskey;" command="cmd_search_opac"/>
+                <menuitem label="&staff.main.menu.cat.search_tcn.label;" accesskey="&staff.main.menu.cat.search_tcn.accesskey;" command="cmd_search_tcn" />
+                <menuitem label="&staff.main.menu.cat.search_bib_id.label;" accesskey="&staff.main.menu.cat.search_bib_id.accesskey;" command="cmd_search_bib_id" />
+            </menupopup>
+        </toolbarbutton>
+        <toolbarbutton
             command="cmd_copy_status" 
-            image="chrome://open_ils_staff_client/skin/media/images/HILLBLU_libro_32x32.png" 
             label="&staff.main.button_bar.item_status.label;" 
-            accesskey="&staff.main.button_bar.item_status.accesskey;" />
+            tooltiptext="&staff.main.button_bar.item_status.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.circ.barcode.show_item;" accesskey="&staff.main.menu.circ.barcode.show_item.accesskey;" command="cmd_copy_status"/>
+                <menuitem label="&staff.main.menu.replace_barcode.label;" command="cmd_replace_barcode"/>
+            </menupopup>
+        </toolbarbutton>
         <toolbarseparator />
-        <toolbarbutton id="tb_patron_search" 
+        <toolbarbutton
             command="cmd_patron_search" 
-            image="chrome://open_ils_staff_client/skin/media/images/HILLBLU_lente_32x32.png" 
             label="&staff.main.button_bar.patron_search.label;" 
-            accesskey="&staff.main.button_bar.patron_search.accesskey;" />
-        <toolbarbutton id="tb_patron_registration" 
+            tooltiptext="&staff.main.button_bar.patron_search.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.search.patrons.label;" accesskey="&staff.main.menu.search.patrons.accesskey;" command="cmd_patron_search" />
+                <menuitem label="&staff.main.menu.search.patrons_barcode.label;" accesskey="&staff.main.menu.search.patrons_barcode.accesskey;" command="cmd_circ_checkout"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarbutton
             command="cmd_patron_register" 
-            image="chrome://open_ils_staff_client/skin/media/images/HILLBLU_famiglia_32x32.png" 
             label="&staff.main.button_bar.patron_registration.label;" 
-            accesskey="&staff.main.button_bar.patron_registration.accesskey;" />
+            tooltiptext="&staff.main.button_bar.patron_registration.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.circ.patron_registration.label;" accesskey="&staff.main.menu.circ.patron_registration.accesskey;" command="cmd_patron_register"/>
+                <menuitem label="&staff.main.menu.circ.staged_patrons.label;" accesskey="&staff.main.menu.circ.staged_patrons.accesskey;" command="cmd_staged_patrons"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarspacer flex="1" />
+        <toolbarbutton
+            command="cmd_hotkeys_toggle"
+            type="checkbox"
+            autocheck="false"
+            label="&staff.main.button_bar.hotkeys_toggle;"
+            tooltiptext="&staff.main.button_bar.hotkeys_toggle;"/>
+    </toolbar>
+    <toolbar id="toolbar_cat" hidden="true">
+        <toolbarbutton
+            command="cmd_circ_checkin" 
+            label="&staff.main.button_bar.check_in.label;" 
+            tooltiptext="&staff.main.button_bar.check_in.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.circ.checkin.label;" accesskey="&staff.main.menu.circ.checkin.accesskey;" command="cmd_circ_checkin"/>
+                <menuitem label="&staff.main.menu.circ.hold_capture.label;" accesskey="&staff.main.menu.circ.hold_capture.accesskey;" command="cmd_circ_hold_capture"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarseparator />
+        <toolbarbutton
+            command="cmd_search_opac" 
+            label="&staff.main.button_bar.search_opac.label;" 
+            tooltiptext="&staff.main.button_bar.search_opac.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.cat.bib_search.label;" accesskey="&staff.main.menu.cat.bib_search.accesskey;" command="cmd_search_opac"/>
+                <menuitem label="&staff.main.menu.cat.search_tcn.label;" accesskey="&staff.main.menu.cat.search_tcn.accesskey;" command="cmd_search_tcn" />
+                <menuitem label="&staff.main.menu.cat.search_bib_id.label;" accesskey="&staff.main.menu.cat.search_bib_id.accesskey;" command="cmd_search_bib_id" />
+            </menupopup>
+        </toolbarbutton>
+        <toolbarbutton
+            command="cmd_copy_status" 
+            label="&staff.main.button_bar.item_status.label;" 
+            tooltiptext="&staff.main.button_bar.item_status.label;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.circ.barcode.show_item;" accesskey="&staff.main.menu.circ.barcode.show_item.accesskey;" command="cmd_copy_status"/>
+                <menuitem label="&staff.main.menu.replace_barcode.label;" command="cmd_replace_barcode"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarseparator />
+        <toolbarbutton
+            command="cmd_create_marc"
+            label="&staff.main.button_bar.create_marc;"
+            tooltiptext="&staff.main.button_bar.create_marc;"
+            type="menu-button">
+            <menupopup tooltiptext="">
+                <menuitem label="&staff.main.menu.cat.create_marc.label;" accesskey="&staff.main.menu.cat.create_marc.accesskey;" command="cmd_create_marc"/>
+                <menuitem label="&staff.main.menu.cat.z39_50_import.label;" accesskey="&staff.main.menu.cat.z39_50_import.accesskey;" command="cmd_z39_50_import"/>
+                <menuitem label="&staff.main.menu.cat.vandelay.label;" command="cmd_open_vandelay"/>
+            </menupopup>
+        </toolbarbutton>
+        <toolbarbutton
+            command="cmd_authority_manage"
+            label="&staff.main.button_bar.authority_manage;"
+            tooltiptext="&staff.main.button_bar.authority_manage;" />
+        <toolbarbutton
+            command="cmd_retrieve_last_record"
+            label="&staff.main.button_bar.retrieve_last_record;"
+            tooltiptext="&staff.main.button_bar.retrieve_last_record;" />
+        <toolbarspacer flex="1" />
+        <toolbarbutton
+            command="cmd_hotkeys_toggle"
+            type="checkbox"
+            autocheck="false"
+            label="&staff.main.button_bar.hotkeys_toggle;"
+            tooltiptext="&staff.main.button_bar.hotkeys_toggle;"/>
     </toolbar>
 </toolbox>
 
index 85eed97..48b5e59 100644 (file)
@@ -44,6 +44,10 @@ util.file.prototype = {
                     this._file = this.dirService.get( "UChrm",  Components.interfaces.nsIFile );
                     //this._file = this.dirService.get( "ProfD",  Components.interfaces.nsIFile );
                 break;
+                case 'skin' :
+                    this._file = this.dirService.get( "AChrom",  Components.interfaces.nsIFile );
+                    this._file.append("skin");
+                break;
                 default:
                 case 'chrome' : 
                     this._file = this.dirService.get( "AChrom",  Components.interfaces.nsIFile );
index 5cba385..836a0ce 100644 (file)
@@ -317,6 +317,7 @@ util.network.prototype = {
 
                 if(!offlinestrings) w.document.getElementById('offlineStrings');
                 if(permlist) w.g.menu.set_menu_access(permlist);
+                w.g.menu.set_menu_hotkeys();
                 if(data.list.au.length > 1) {
                     addCSSClass(w.document.getElementById('main_tabbox'),'operator_change');
                     x.setAttribute('label', offlineStrings.getFormattedString('menu.cmd_chg_session.operator.label', [data.list.au[1].usrname()]) );
index 14a169a..06452b0 100644 (file)
@@ -295,3 +295,5 @@ menu.replace_tab.unsaved_data_warning=This tab may have unsaved data. Replace it
 menu.close_window.unsaved_data_warning=This window may have unsaved data. Close it anyway?
 menu.logoff.unsaved_data_warning=This session may have unsaved data. Logoff anyway?
 menu.shutdown.unsaved_data_warning=This application may have unsaved data. Exit it anyway?
+hotkeys.Default=Default
+hotkeys.None=No Hotkeys
index 16fa9bc..24a949b 100644 (file)
@@ -77,3 +77,65 @@ help { -moz-binding: url('chrome://open_ils_staff_client/content/main/bindings.x
 .marc_data { min-width: 500px; }
 .resizable { }
 .test_class { }
+
+#main_toolbox toolbar[mode="icons"] .toolbarbutton-text {
+    display:none;
+}
+
+#main_toolbox toolbar[mode="text"] .toolbarbutton-icon {
+    display:none;
+}
+
+#main_toolbox toolbarbutton {
+    -moz-image-region: rect( 0px 32px 32px 0px ); /* Top Left 32x32 icon */
+    -moz-box-align: center;
+    -moz-box-pack: center;
+    -moz-box-orient: horizontal;
+    padding: 6px;
+}
+
+#main_toolbox [iconsize="small"] toolbarbutton {
+    -moz-image-region: rect( 0px 48px 16px 32px ); /* Top right 16x16 icon */
+}
+
+#main_toolbox toolbarbutton[disabled="true"] {
+    -moz-image-region: rect( 32px 32px 64px 0px ); /* Left Second 32x32 icon */
+}
+
+#main_toolbox [iconsize="small"] toolbarbutton[disabled="true"] {
+    -moz-image-region: rect( 16px 48px 32px 32px ); /* Right Second 16x16 icon */
+}
+
+#main_toolbox toolbarbutton[checked="true"] {
+    -moz-image-region: rect( 64px 32px 96px 0px ); /* Left Third 32x32 icon */
+}
+
+#main_toolbox [iconsize="small"] toolbarbutton[checked="true"] {
+    -moz-image-region: rect( 32px 48px 48px 32px ); /* Right Third 16x16 icon */
+}
+
+#main_toolbox toolbarbutton[checked="true"][disabled="true"] {
+    -moz-image-region: rect( 96px 32px 128px 0px ); /* Left Fourth 32x32 icon */
+}
+
+#main_toolbox [iconsize="small"] toolbarbutton[checked="true"][disabled="true"] {
+    -moz-image-region: rect( 48px 48px 64px 32px ); /* Right Fourth 16x16 icon */
+}
+
+#main_toolbox .labelbelow toolbarbutton {
+    -moz-box-orient: vertical;  
+}
+
+/* Define icon files by command, not by id. */
+#main_toolbox toolbarbutton[command="cmd_circ_checkout"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/Arrow-rightup-small_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_circ_checkin"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/center_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_search_opac"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/Search_Items_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_copy_status"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_libro_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_patron_search"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_lente_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_patron_register"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_famiglia_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_hotkeys_toggle"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/hotkeys_disable_toolbar.png"); }
+
+/* Temp icons because tsbere is lazy - Someone please find/make new ones ;) */
+#main_toolbox toolbarbutton[command="cmd_create_marc"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_indici_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_authority_manage"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_indici_toolbar.png"); }
+#main_toolbox toolbarbutton[command="cmd_retrieve_last_record"] { list-style-image: url("chrome://open_ils_staff_client/skin/media/images/HILLBLU_indici_toolbar.png"); }
diff --git a/Open-ILS/xul/staff_client/chrome/skin/hotkeys/Default.keyset b/Open-ILS/xul/staff_client/chrome/skin/hotkeys/Default.keyset
new file mode 100644 (file)
index 0000000..b954b5a
--- /dev/null
@@ -0,0 +1,20 @@
+# Default hotkey set
+cmd_new_window,accel,N
+cmd_new_tab,accel,T
+cmd_close_tab,accel,W
+cmd_close_all_tabs,accel shift,W
+cmd_close_window,accel,Q
+cmd_circ_checkout,,VK_F1
+cmd_circ_checkin,,VK_F2
+cmd_circ_renew,accel,VK_F2
+cmd_reprint,,VK_F9
+cmd_search_opac,,VK_F3
+cmd_search_tcn,shift,VK_F3
+cmd_patron_search,,VK_F4
+cmd_copy_status,,VK_F5
+cmd_in_house_use,,VK_F6
+cmd_circ_hold_capture,shift,VK_F2
+cmd_patron_register,shift,VK_F1
+cmd_retrieve_last_patron,,VK_F8
+cmd_retrieve_last_record,shift,VK_F8
+
diff --git a/Open-ILS/xul/staff_client/chrome/skin/hotkeys/Minimal.keyset b/Open-ILS/xul/staff_client/chrome/skin/hotkeys/Minimal.keyset
new file mode 100644 (file)
index 0000000..bbf4efe
--- /dev/null
@@ -0,0 +1,7 @@
+# Minimal (window/tab commands only) hotkey set
+# May be a useful starting point for new sets
+cmd_new_window,accel,N
+cmd_new_tab,accel,T
+cmd_close_tab,accel,W
+cmd_close_all_tabs,accel shift,W
+cmd_close_window,accel,Q
diff --git a/Open-ILS/xul/staff_client/chrome/skin/hotkeys/None.keyset b/Open-ILS/xul/staff_client/chrome/skin/hotkeys/None.keyset
new file mode 100644 (file)
index 0000000..079efe0
--- /dev/null
@@ -0,0 +1 @@
+# No Hotkeys. Please leave blank.
diff --git a/Open-ILS/xul/staff_client/chrome/skin/hotkeys/README b/Open-ILS/xul/staff_client/chrome/skin/hotkeys/README
new file mode 100644 (file)
index 0000000..f0e6f7a
--- /dev/null
@@ -0,0 +1,33 @@
+The files in this folder define hotkey sets.
+
+Each hotkey set should be name.keyset, where name is the name of the set.
+
+hotkey.properites in the locale directory can set an alternate or translated name for a hotkey set.
+You should use format like:
+hotkey.name=newname
+
+The backend code uses the filename derived name for everything else.
+
+
+In the files a # denotes a comment, at the start of a line or in the middle.
+
+Otherwise, the file format is as follows:
+
+command,modifiers,key/keycode[,keytext]
+
+command is the ID of the <command> node the hotkey will trigger.
+
+modifiers is a space-delimited set of modifiers (if any):
+    shift
+    alt
+    control
+    meta
+    accel
+    any
+
+Prefer accel over control/meta as it picks the appropriate one for the user's platform.
+any makes any listed before it optional.
+
+key/keycode is the key or virtual keycode for the hotkey. VK_ constants are treated as keycodes, everything else is a key.
+
+keytext is an optional setting for specifying the hint text to appear on the menu items.
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/Arrow-rightup-small_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/Arrow-rightup-small_toolbar.png
new file mode 100644 (file)
index 0000000..74a8d5d
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/Arrow-rightup-small_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_famiglia_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_famiglia_toolbar.png
new file mode 100644 (file)
index 0000000..8bf9624
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_famiglia_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_indici_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_indici_toolbar.png
new file mode 100644 (file)
index 0000000..16b297e
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_indici_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_lente_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_lente_toolbar.png
new file mode 100644 (file)
index 0000000..e859c9c
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_lente_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_libro_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_libro_toolbar.png
new file mode 100644 (file)
index 0000000..defa8b3
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/HILLBLU_libro_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/Search_Items_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/Search_Items_toolbar.png
new file mode 100644 (file)
index 0000000..f245d08
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/Search_Items_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/center_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/center_toolbar.png
new file mode 100644 (file)
index 0000000..da8e487
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/center_toolbar.png differ
diff --git a/Open-ILS/xul/staff_client/chrome/skin/media/images/hotkeys_disable_toolbar.png b/Open-ILS/xul/staff_client/chrome/skin/media/images/hotkeys_disable_toolbar.png
new file mode 100644 (file)
index 0000000..cedeaa0
Binary files /dev/null and b/Open-ILS/xul/staff_client/chrome/skin/media/images/hotkeys_disable_toolbar.png differ
index 244c452..4da3fe4 100644 (file)
@@ -1,30 +1,41 @@
-HILLBLU_lente_32x32 derived from:
+HILLBLU_lente_32x32 and HILLBLU_lente_toolbar derived from:
 http://commons.wikimedia.org/wiki/File:HILLBLU_lente.png
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
 
-HILLBLU_indici_32x32 derived from:
+HILLBLU_indici_32x32 and HILLBLU_indici_toolbar derived from:
 http://commons.wikimedia.org/wiki/File:HILLBLU_indici.png
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
 
-HILLBLU_libro_32x32 derived from:
+HILLBLU_libro_32x32 and HILLBLU_libro_toolbar derived from:
 http://commons.wikimedia.org/wiki/File:HILLBLU_libro.png
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
 
-HILLBLU_famiglia_32x32 derived from:
+HILLBLU_famiglia_32x32 and HILLBLU_famiglia_toolbar derived from:
 http://commons.wikimedia.org/wiki/File:HILLBLU_famiglia.png
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
 
-Arrow-right-up-small.png derived from:
+Arrow-right-up-small.png and Arrow-right-up-small_toolbar.png derived from:
 http://commons.wikimedia.org/wiki/File:Arrow-rightup-small.svg
 Copyright © Vadim Plessky, all rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 Redistributions of source code must retain the above copyright notice, and this list of conditions;
 Redistributions in binary form must reproduce the above copyright notice, and this list of conditions in the documentation and/or other materials provided with the distribution;
 Neither the name of Vadim Plessky nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 
-Center.png derived from:
+center.png and center_toolbar.png derived from:
 http://commons.wikimedia.org/wiki/File:Center.svg
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
 
-Search_Items_32x32 derived from:
+Search_Items_32x32 and Search_Items_toolbar derived from:
 http://commons.wikimedia.org/wiki/File:HILLBLU_lente.png AND http://commons.wikimedia.org/wiki/File:HILLBLU_libro.png
 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
+
+hotkeys_disable_toolbar.png derived from:
+
+Nuvola 1.0 (KDE 3.x icon set) (nuvola)
+    link: http://www.icon-king.com/projects/nuvola/
+    license: LGPL 2.1
+    license link: http://creativecommons.org/licenses/LGPL/2.1/
+    formats: png
+    subdirectory: open_icon_library-devel/icons/nuvola
+
+preferences-desktop-keyboard-3.png
index 91812d9..19dcd2a 100644 (file)
@@ -17,4 +17,12 @@ pref("open-ils.repository.revision","$Revision$");
 pref("open-ils.repository.date","$Date$");
 pref("open-ils.repository.id","$Id$");
 
+// Base (empty) prefs for local menu and toolbar customizations
+// NOTE: IF YOU SET DEFAULTS ON THESE THE ORG UNIT SETTING VARIANT WON'T WORK
+pref("open-ils.menu.hotkeyset", "");
+pref("open-ils.menu.toolbar", "");
+// For now these are only workstation level and are safe to set defaults on if desired
+pref("open-ils.menu.toolbar.iconsize", "");
+pref("open-ils.menu.toolbar.mode", "");
+pref("open-ils.menu.toolbar.labelbelow", false);
 pref("open-ils.toolbar.defaultnewtab", false);