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
|