From c1781d1741706610e7b3b8f4ba219826f77a0146 Mon Sep 17 00:00:00 2001 From: Xuan Sang LE Date: Tue, 27 Feb 2018 00:55:02 +0100 Subject: [PATCH] add shortcut support to application --- src/core/BaseApplication.coffee | 19 +++++++++++++ src/core/gui.coffee | 18 ++++++++++++ src/core/tags/afx-file-view.js | 11 ++++++-- src/core/tags/afx-menu.js | 1 + src/core/tags/afx-switch.js | 10 +++++-- src/core/tags/afx-tab-container.js | 3 +- src/packages/Blogger/main.coffee | 38 ++++++++++++++++---------- src/packages/Blogger/scheme.html | 8 +++++- src/packages/NotePad/main.coffee | 14 ++++++---- src/themes/antos/afx-list-view.css | 8 ++++-- src/themes/antos/afx-menu.css | 10 ++++++- src/themes/antos/afx-tab-container.css | 3 +- 12 files changed, 112 insertions(+), 31 deletions(-) diff --git a/src/core/BaseApplication.coffee b/src/core/BaseApplication.coffee index d1a39a6..3f47808 100644 --- a/src/core/BaseApplication.coffee +++ b/src/core/BaseApplication.coffee @@ -3,6 +3,11 @@ class BaseApplication extends this.OS.GUI.BaseModel super name, args _OS.setting.applications[@name] = {} if not _OS.setting.applications[@name] @setting = _OS.setting.applications[@name] + @keycomb = + ALT: {} + CTRL: {} + SHIFT: {} + META: {} init: -> me = @ # first register some base event to the app @@ -29,6 +34,20 @@ class BaseApplication extends this.OS.GUI.BaseModel path = "#{@meta().path}/scheme.html" @.render path + bindKey: (k, f) -> + arr = k.split "-" + return unless arr.length is 2 + fnk = arr[0].toUpperCase() + c = arr[1].toUpperCase() + return unless @keycomb[fnk] + @keycomb[fnk][c] = f + + shortcut: (fnk, c) -> + return true unless @keycomb[fnk] + return true unless @keycomb[fnk][c] + @keycomb[fnk][c]() + return false + applySetting: (k) -> registry: (k, v) -> @setting[k] = v diff --git a/src/core/gui.coffee b/src/core/gui.coffee index b2e9ed9..4ed865f 100644 --- a/src/core/gui.coffee +++ b/src/core/gui.coffee @@ -183,6 +183,24 @@ self.OS.GUI = initDM: -> # check login first + ($ window).bind 'keydown', (event) -> + app = ($ "#sysdock")[0].get "selectedApp" + return true unless app + c = String.fromCharCode(event.which).toUpperCase() + fnk = undefined + if event.ctrlKey + fnk = "CTRL" + else if event.metaKey + fnk = "META" + else if event.shiftKey + fnk = "SHIFT" + else if event.altKey + fnk = "ALT" + + return unless fnk + r = app.shortcut fnk, c + event.preventDefault() if not r + _API.resource "schemes/dm.html", (x) -> return null unless x scheme = $.parseHTML x diff --git a/src/core/tags/afx-file-view.js b/src/core/tags/afx-file-view.js index 27b1bcb..edc4c3b 100644 --- a/src/core/tags/afx-file-view.js +++ b/src/core/tags/afx-file-view.js @@ -16,6 +16,7 @@ this.status = opts.status == undefined?true:opts.status this.selectedFile = undefined this.showhidden = opts.showhidden + this.preventUpdate = false this.fetch = opts.fetch this.chdir = opts.chdir this.rid = $(self.root).attr("data-id") || Math.floor(Math.random() * 100000) + 1 @@ -32,7 +33,8 @@ switchView() if(k == "data") self.selectedFile = undefined - self.update() + if(k != "preventUpdate") + self.update() } self.root.get = function(k) { @@ -141,7 +143,12 @@ calibre_size() } self.on("updated", function(){ - refreshData() + if(self.preventUpdate) + { + self.preventUpdate = false + } + else + refreshData() //calibre_size() }) self.on("mount", function(){ diff --git a/src/core/tags/afx-menu.js b/src/core/tags/afx-menu.js index e6c4e89..d98ca03 100644 --- a/src/core/tags/afx-menu.js +++ b/src/core/tags/afx-menu.js @@ -5,6 +5,7 @@ + {data.shortcut} 0} child={data.child} onmenuselect = {data.onmenuselect} observable = {parent.root.observable} rootid = {parent.rid}> diff --git a/src/core/tags/afx-switch.js b/src/core/tags/afx-switch.js index 54a6133..1cc93d3 100644 --- a/src/core/tags/afx-switch.js +++ b/src/core/tags/afx-switch.js @@ -1,10 +1,16 @@