diff --git a/src/core/Announcerment.coffee b/src/core/Announcerment.coffee index 0408bbe..cca4d3a 100644 --- a/src/core/Announcerment.coffee +++ b/src/core/Announcerment.coffee @@ -20,11 +20,11 @@ class Announcer @observable = {} on: (evtName, callback) -> - @observable[evtName] = { one: [], many: [] } unless @observable[evtName] + @observable[evtName] = { one: new Set(), many: new Set() } unless @observable[evtName] @observable[evtName].many.push callback one: (evtName, callback) -> - @observable[evtName] = { one: [], many: [] } unless @observable[evtName] + @observable[evtName] = { one: new Set(), many: new Set() } unless @observable[evtName] @observable[evtName].one.push callback off: (evtName, callback) -> @@ -53,7 +53,7 @@ class Announcer continue unless me.observable[evt] for f, i in me.observable[evt].one f data - me.observable[evt].one = [] + me.observable[evt].one = new Set() for f, i in me.observable[evt].many f data @@ -68,7 +68,7 @@ Ant.OS.announcer = quota: 0 listeners: {} on: (e, f, a) -> - Ant.OS.announcer.listeners[a.pid] = [] unless Ant.OS.announcer.listeners[a.pid] + Ant.OS.announcer.listeners[a.pid] = new Set() unless Ant.OS.announcer.listeners[a.pid] Ant.OS.announcer.listeners[a.pid].push { e: e, f: f } Ant.OS.announcer.observable.on e, f trigger: (e, d) -> Ant.OS.announcer.observable.trigger e, d diff --git a/src/core/tags/MenuTag.coffee b/src/core/tags/MenuTag.coffee index d4fc439..251b90c 100644 --- a/src/core/tags/MenuTag.coffee +++ b/src/core/tags/MenuTag.coffee @@ -7,6 +7,7 @@ class MenuEntryTag extends Ant.OS.GUI.BaseTag @setopt "children", undefined @setopt "child", undefined @setopt "parent", undefined + @setopt "rootid", undefined on_data_changed: (data) -> @set k, v for k, v of data @@ -110,7 +111,7 @@ class SimpleMenuEntryTag extends MenuEntryTag evt = { id: @aid(), data: e } e.preventDefault() children = @get("children") - if @is_root() and @has_children() + if @is_root() and @has_children() and not @get "context" $(@refs.submenu).show() else @submenuoff() @@ -145,12 +146,32 @@ class MenuTag extends Ant.OS.GUI.BaseTag @setopt "parent", undefined @setopt "contentag", "afx-menu-entry" @setopt "items", [] + me = @ + @root.show = (e) -> + me.showctxmenu e + + showctxmenu: (e) -> + return unless @get "context" + #console.log + $(@root) + .css("top", e.clientY - 15 + "px") + .css("left", e.clientX - 5 + "px") + .show() + + isctxmenu: () -> + return @get "context" mount: () -> + me = @ on_context_changed: (v) -> $(@refs.container).removeClass("context") - $(@refs.container).addClass("context") if v + return unless v + $(@refs.container).addClass("context") + $(@root).hide() + @observable.on "menuselect", (e) -> + console.log e.data.item + console.log e.data.item.get("rootid") on_items_changed: (data) -> me = @ @@ -161,6 +182,7 @@ class MenuTag extends Ant.OS.GUI.BaseTag el[0].uify @observable el[0].set "data", item el[0].set "parent", me.get("parent") + el[0].set "rootid", if me.get("parent") then me.get("parent").get("rootid") else me.aid() item.domel = el[0] $("
  • ").appendTo(@refs.container).addClass("afx-corner-fix") diff --git a/src/packages/ShowCase/assets/scheme.html b/src/packages/ShowCase/assets/scheme.html index 1e844c5..66beb86 100644 --- a/src/packages/ShowCase/assets/scheme.html +++ b/src/packages/ShowCase/assets/scheme.html @@ -1,4 +1,4 @@ - + diff --git a/src/packages/ShowCase/coffees/main.coffee b/src/packages/ShowCase/coffees/main.coffee index 54e7852..95a4ca2 100644 --- a/src/packages/ShowCase/coffees/main.coffee +++ b/src/packages/ShowCase/coffees/main.coffee @@ -33,6 +33,7 @@ class ShowCase extends this.OS.GUI.BaseApplication console.log tag ### openwin: () -> + me = @ scheme = $.parseHTML """ @@ -54,7 +55,7 @@ class ShowCase extends this.OS.GUI.BaseApplication - +
    box center 3
    @@ -63,13 +64,15 @@ class ShowCase extends this.OS.GUI.BaseApplication
    box 3
    -
    box 4
    +
    box 4 """ + ctmenu = $.parseHTML """
    """ ($ "#desktop").append scheme[0] + ($ "#wrapper").append ctmenu[0] obj = scheme[0].uify() bt = $ "[data-id='bttest']", scheme[0] bt[0].set "onbtclick", (e) -> @@ -77,9 +80,9 @@ class ShowCase extends this.OS.GUI.BaseApplication obj.set "resizable", true obj.set "minimizable", false obj.observable.on "exit", () -> - console.log "exit" obj.observable.off "*" $(obj).remove() + me.quit() obj.observable.on "btclick", (e) -> console.log "button clicked" @@ -98,6 +101,7 @@ class ShowCase extends this.OS.GUI.BaseApplication list[0].set "onlistselect", (e) -> console.log(e.data.items) + sw = $ "[data-id='switch']", scheme[0] sw[0].set "onchange", (e) -> console.log e.data @@ -108,6 +112,11 @@ class ShowCase extends this.OS.GUI.BaseApplication menu = $ "[data-id='menu']", scheme[0] menu[0].set "items", @menu() + ctmenu = ctmenu[0].uify(obj.observable) + ctmenu.set "items", @menu() + list[0].contextmenuHandle = (e) -> + console.log e + ctmenu.show e mnFile:() -> #console.log file me = @