mirror of
https://github.com/lxsang/antos-frontend.git
synced 2024-11-08 22:18:22 +01:00
107 lines
3.1 KiB
CoffeeScript
107 lines
3.1 KiB
CoffeeScript
class BaseApplication extends this.OS.GUI.BaseModel
|
|
constructor: (name, args) ->
|
|
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
|
|
@subscribe "appregistry"
|
|
, ( m ) ->
|
|
me.applySetting m.data.m if (m.name is me.name)
|
|
|
|
@on "focus", () ->
|
|
me.sysdock.set "selectedApp", me
|
|
me.appmenu.pid = me.pid
|
|
me.appmenu.set "items", (me.baseMenu() || [])
|
|
me.appmenu.set "onmenuselect", (d) ->
|
|
me.trigger("menuselect", d)
|
|
me.dialog.show() if me.dialog
|
|
@on "hide", () ->
|
|
me.sysdock.set "selectedApp", null
|
|
me.appmenu.set "items", []
|
|
me.dialog.hide() if me.dialog
|
|
@on "menuselect", (d) ->
|
|
switch d.e.item.data.dataid
|
|
when "#{me.name}-about" then me.openDialog "AboutDialog", ()->
|
|
when "#{me.name}-exit" then me.trigger "exit"
|
|
#now load the scheme
|
|
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
|
|
@publish "appregistry", k
|
|
|
|
show: () ->
|
|
@trigger "focus"
|
|
|
|
blur: () ->
|
|
@.appmenu.set "items", [] if @.appmenu and @.pid == @.appmenu.pid
|
|
@trigger "blur"
|
|
|
|
hide: () ->
|
|
@trigger "hide"
|
|
|
|
toggle: () ->
|
|
@trigger "toggle"
|
|
|
|
onexit: (evt) ->
|
|
@cleanup(evt)
|
|
if not evt.prevent
|
|
@.appmenu.set "items", [] if @.pid == @.appmenu.pid
|
|
($ @scheme).remove()
|
|
meta: () -> _OS.APP[@name].meta
|
|
baseMenu: ->
|
|
mn =
|
|
[{
|
|
text: _OS.APP[@name].meta.name,
|
|
child: [
|
|
{ text: "About", dataid: "#{@name}-about" },
|
|
{ text: "Exit", dataid: "#{@name}-exit" }
|
|
]
|
|
}]
|
|
mn = mn.concat @menu() || []
|
|
mn
|
|
|
|
main: ->
|
|
#main program
|
|
# implement by subclasses
|
|
menu: ->
|
|
# implement by subclasses
|
|
# to add menu to application
|
|
[]
|
|
open:->
|
|
#implement by subclasses
|
|
data:->
|
|
#implement by subclasses
|
|
# to return app data
|
|
update:->
|
|
#implement by subclasses
|
|
cleanup: (e) ->
|
|
#implement by subclasses
|
|
# to handle the exit event
|
|
# use e.preventDefault() to
|
|
# discard the quit command
|
|
BaseApplication.type = 1
|
|
this.OS.GUI.BaseApplication = BaseApplication |