diff options
author | zvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-17 10:42:17 +0000 |
---|---|---|
committer | zvorygin@chromium.org <zvorygin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-17 10:42:17 +0000 |
commit | 019e2c497abda1c3d0edc5cac54bbe9dfb513d67 (patch) | |
tree | c3520d03436cee32a4f4d24851343d5432b24bb7 | |
parent | 6c2fd1e49304df9704c153b5c93bf8075b50250a (diff) | |
download | chromium_src-019e2c497abda1c3d0edc5cac54bbe9dfb513d67.zip chromium_src-019e2c497abda1c3d0edc5cac54bbe9dfb513d67.tar.gz chromium_src-019e2c497abda1c3d0edc5cac54bbe9dfb513d67.tar.bz2 |
[FileBrowser] Added shortcuts to menus.
BUG=127193
Review URL: https://codereview.chromium.org/10909210
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157098 0039d316-1c4b-4281-b951-d872f2087c98
7 files changed, 111 insertions, 2 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 2e9658f..8186de8 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -11503,6 +11503,26 @@ Some features may be unavailable. Please check that the profile exists and you <message name="IDS_FILE_BROWSER_SIZE_PB" desc="Peta bytes."> PB </message> + + <message name="IDS_FILE_BROWSER_SHORTCUT_CTRL" desc="[Ctrl] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Ctrl + </message> + <message name="IDS_FILE_BROWSER_SHORTCUT_ALT" desc="[Alt] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Alt + </message> + <message name="IDS_FILE_BROWSER_SHORTCUT_SHIFT" desc="[Shift] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Shift + </message> + <message name="IDS_FILE_BROWSER_SHORTCUT_META" desc="[Meta] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Meta + </message> + <message name="IDS_FILE_BROWSER_SHORTCUT_SPACE" desc="[Space] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Space + </message> + <message name="IDS_FILE_BROWSER_SHORTCUT_ENTER" desc="[Enter] key name to use in shortcuts descriptions. Shouldn't be translated in many languages actually."> + Enter + </message> + <message name="IDS_FILE_BROWSER_TYPE_COLUMN_LABEL" desc="Type column label."> Type </message> diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc index ae70b85..40428ea 100644 --- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc +++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc @@ -1572,6 +1572,14 @@ bool FileDialogStringsFunction::RunImpl() { SET_STRING(IDS_FILE_BROWSER, SIZE_GB); SET_STRING(IDS_FILE_BROWSER, SIZE_TB); SET_STRING(IDS_FILE_BROWSER, SIZE_PB); + + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_CTRL); + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_ALT); + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_SHIFT); + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_META); + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_SPACE); + SET_STRING(IDS_FILE_BROWSER, SHORTCUT_ENTER); + SET_STRING(IDS_FILE_BROWSER, TYPE_COLUMN_LABEL); SET_STRING(IDS_FILE_BROWSER, DATE_COLUMN_LABEL); SET_STRING(IDS_FILE_BROWSER, PREVIEW_COLUMN_LABEL); diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js index 7d9d531..f750805 100644 --- a/chrome/browser/resources/file_manager/js/file_manager.js +++ b/chrome/browser/resources/file_manager/js/file_manager.js @@ -570,6 +570,9 @@ FileManager.prototype = { CommandUtil.registerCommand(doc, 'paste', Commands.pasteFileCommand, doc, this.fileTransferController_); + CommandUtil.registerCommand(doc, 'open-with', + Commands.openWithCommand, this); + CommandUtil.registerCommand(doc, 'cut', Commands.defaultCommand, doc); CommandUtil.registerCommand(doc, 'copy', Commands.defaultCommand, doc); @@ -3671,6 +3674,8 @@ FileManager.prototype = { var defaultActionSeparator = this.dialogDom_.querySelector('#default-action-separator'); + this.openWithCommand_.canExecuteChange(); + // TODO(dzvorygin): Here we use this hack, since 'hidden' is standard // attribute and we can't use it's setter as usual. this.openWithCommand_.__lookupSetter__('hidden'). diff --git a/chrome/browser/resources/file_manager/js/mock_chrome.js b/chrome/browser/resources/file_manager/js/mock_chrome.js index bc74be0..17f1c42 100644 --- a/chrome/browser/resources/file_manager/js/mock_chrome.js +++ b/chrome/browser/resources/file_manager/js/mock_chrome.js @@ -473,6 +473,13 @@ chrome.fileBrowserPrivate = { DATE_COLUMN_LABEL: 'Date modified', PREVIEW_COLUMN_LABEL: 'Preview', + SHORTCUT_CTRL: 'Ctrl', + SHORTCUT_ALT: 'Alt', + SHORTCUT_SHIFT: 'Shift', + SHORTCUT_META: 'Meta', + SHORTCUT_SPACE: 'Space', + SHORTCUT_ENTER: 'Enter', + ERROR_CREATING_FOLDER: 'Unable to create folder "$1". $2', ERROR_INVALID_CHARACTER: 'Invalid character: $1', ERROR_RESERVED_NAME: 'This name may not be used as a file of folder name', diff --git a/chrome/browser/resources/file_manager/main.html b/chrome/browser/resources/file_manager/main.html index 0ae6615..39ef693 100644 --- a/chrome/browser/resources/file_manager/main.html +++ b/chrome/browser/resources/file_manager/main.html @@ -131,7 +131,7 @@ i18n-values="label:OPEN_WITH_BUTTON_LABEL"></command> </commands> - <menu id="file-context-menu" class="chrome-menu"> + <menu id="file-context-menu" class="chrome-menu" showShortcuts> <menuitem id="default-action" visibleif="full-page" hidden></menuitem> <menuitem command="#open-with" @@ -177,7 +177,7 @@ <menu id="tasks-menu" class="chrome-menu"> </menu> - <menu id="text-context-menu" class="chrome-menu"> + <menu id="text-context-menu" class="chrome-menu" showShortcuts> <menuitem command="#cut"></menuitem> <menuitem command="#copy"></menuitem> <menuitem command="#paste"></menuitem> diff --git a/chrome/browser/resources/shared/css/menu.css b/chrome/browser/resources/shared/css/menu.css index 56de9fb..74a27bf 100644 --- a/chrome/browser/resources/shared/css/menu.css +++ b/chrome/browser/resources/shared/css/menu.css @@ -82,3 +82,13 @@ menu > [checked] { menu > [selected][checked]:active:before { content: url('../images/checkbox_white.png'); } + +/* TODO(zvorygin) menu > [shortcutText]:after - this selector is much better, + * but it's buggy in current webkit revision, so I have to use [showShortcuts] + */ +menu[showShortcuts] > :after { + -webkit-padding-start: 30px; + color: #999; + content: attr(shortcutText); + float: right; +} diff --git a/chrome/browser/resources/shared/js/cr/ui/menu_item.js b/chrome/browser/resources/shared/js/cr/ui/menu_item.js index 381eb2d3..cdd6302 100644 --- a/chrome/browser/resources/shared/js/cr/ui/menu_item.js +++ b/chrome/browser/resources/shared/js/cr/ui/menu_item.js @@ -82,6 +82,8 @@ cr.define('cr.ui', function() { this.command_.addEventListener('hiddenChange', this); this.command_.addEventListener('checkedChange', this); } + + this.updateShortcut_(); }, /** @@ -114,6 +116,63 @@ cr.define('cr.ui', function() { }, /** + * Updates shortcut text according to associated command. If command has + * multiple shortcuts, only first one is displayed. + */ + updateShortcut_: function() { + this.removeAttribute('shortcutText'); + + if (!(this.command_ && this.command_.shortcut)) + return; + + var shortcuts = this.command_.shortcut.split(/\s+/); + + if (shortcuts.length == 0) + return; + + var shortcut = shortcuts[0]; + var mods = {}; + var ident = ''; + shortcut.split('-').forEach(function(part) { + var partUc = part.toUpperCase(); + switch (partUc) { + case 'CTRL': + case 'ALT': + case 'SHIFT': + case 'META': + mods[partUc] = true; + break; + default: + console.assert(!ident, 'Shortcut has two non-modifier keys'); + ident = part; + } + }); + + var shortcutText = ''; + + // TODO(zvorygin): if more cornercases appear - optimize following + // code. Currently 'Enter' keystroke is passed as 'Enter', and 'Space' + // is passed as 'U+0020' + if (ident == 'U+0020') + ident = 'Space'; + + ['CTRL', 'ALT', 'SHIFT', 'META'].forEach(function(mod) { + if (mods[mod]) + shortcutText += loadTimeData.getString('SHORTCUT_' + mod) + '+'; + }); + + if (ident.indexOf('U+') != 0) { + shortcutText += + loadTimeData.getString('SHORTCUT_' + ident.toUpperCase()); + } else { + shortcutText += + String.fromCharCode(parseInt(ident.substring(2), 16)); + } + + this.setAttribute('shortcutText', shortcutText); + }, + + /** * Handles mouseup events. This dispatches an activate event; if there is an * associated command, that command is executed. * @param {Event} e The mouseup event object. |