antos-frontend/src/core/gui/BaseApplication.coffee

90 lines
2.5 KiB
CoffeeScript
Raw Normal View History

2017-08-14 00:20:19 +02:00
self = this
_PM = self.OS.PM
_APP = self.OS.APP
2017-08-15 02:56:04 +02:00
class BaseApplication
2017-08-11 01:58:46 +02:00
constructor: (@name) ->
@observable = riot.observable()
2017-08-14 00:20:19 +02:00
@pid = 0
@_api = self.OS.API
2017-08-15 02:56:04 +02:00
2017-08-11 01:58:46 +02:00
init: ->
2017-08-14 00:20:19 +02:00
me = @
# first register some base event to the app
2017-08-15 02:56:04 +02:00
@on "exit", () -> me.quit()
@on "focus", () ->
me.sysdock.set "selectedApp", me
2017-08-14 00:20:19 +02:00
me.appmenu.pid = me.pid
me.appmenu.set "items", (me.baseMenu() || [])
2017-08-15 02:56:04 +02:00
me.appmenu.set "onmenuselect", (d) ->
me.trigger("menuselect", d)
@on "hide", () ->
2017-08-14 00:20:19 +02:00
me.sysdock.set "selectedApp", null
2017-08-15 02:56:04 +02:00
me.appmenu.set "items", []
2017-08-14 00:20:19 +02:00
@on "menuselect", (item) ->
switch item.data.dataid
when "#{me.name}-about" then alert "About " + me.pid + me.name
when "#{me.name}-exit" then me.trigger "exit"
#now load the scheme
2017-08-11 01:58:46 +02:00
path = "packages/#{@name}/scheme.html"
2017-08-15 02:56:04 +02:00
_GUI.loadScheme path , @
2017-08-14 00:20:19 +02:00
2017-08-15 02:56:04 +02:00
on: (e, f) -> @observable.on e, f
2017-08-14 00:20:19 +02:00
2017-08-15 02:56:04 +02:00
trigger: (e, d) -> @observable.trigger e, d
2017-08-14 00:20:19 +02:00
show: () ->
@observable.trigger "focus"
blur: () ->
2017-08-15 02:56:04 +02:00
@.appmenu.set "items", [] if @.appmenu and @.pid == @.appmenu.pid
2017-08-14 00:20:19 +02:00
@observable.trigger "blur"
hide: () ->
@observable.trigger "hide"
2017-08-15 02:56:04 +02:00
toggle: () ->
2017-08-14 00:20:19 +02:00
@observable.trigger "toggle"
quit: () ->
evt = new _GUI.BaseEvent("exit")
@exit(evt)
if not evt.prevent
2017-08-15 02:56:04 +02:00
@.appmenu.set "items", [] if @.pid == @.appmenu.pid
_PM.kill @
2017-08-14 00:20:19 +02:00
($ @scheme).remove()
2017-08-15 02:56:04 +02:00
find: (id) -> ($ "[data-id='#{id}']", @scheme)[0]
2017-08-14 00:20:19 +02:00
2017-08-15 02:56:04 +02:00
baseMenu: ->
2017-08-14 00:20:19 +02:00
menu =
[{
2017-08-15 02:56:04 +02:00
text: _APP[@name].meta.name,
child: [
{ text: "About", dataid: "#{@name}-about" },
{ text: "Exit", dataid: "#{@name}-exit" }
2017-08-14 00:20:19 +02:00
]
}]
menu = menu.concat @menu() || []
menu
main: ->
#main program
# implement by subclasses
menu: ->
# implement by subclasses
# to add menu to application
[]
2017-08-11 01:58:46 +02:00
open:->
#implement by subclasses
data:->
#implement by subclasses
2017-08-14 00:20:19 +02:00
# to return app data
2017-08-11 01:58:46 +02:00
update:->
#implement by subclasses
2017-08-14 00:20:19 +02:00
exit: (e) ->
#implement by subclasses
# to handle the exit event
# use e.preventDefault() to
# discard the quit command
2017-08-15 02:56:04 +02:00
BaseApplication.type = 1
this.OS.GUI.BaseApplication = BaseApplication