123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- --This file is reponsible for providing a base to create standalone mode editors.
- --Like the paint and edit program.
- local eapi = require("Editors")
- local utils = {}
- local swidth, sheight = screenSize()
- function utils:newTool()
- local tool = {} --The tool editor api.
-
- tool.editorsheet = eapi.editorsheet
- tool.flavor = eapi.flavor
- tool.flavorBack = eapi.flavorBack
- tool.background = eapi.background
-
- local sid --Selected option id
-
- local controlID = 11 --The sprite id of the first control button icon.
- local controlNum = 3 --The number of the control buttons at the top right corner of the editor.
- local controlGrid = {swidth-8*controlNum,0, 8*controlNum,8, controlNum,1}
-
- function tool:drawTopBar()
- rect(0,0,swidth,8,false,self.flavor)
- SpriteGroup(55, 0,0, 4,1, 1,1, false, self.editorsheet) --The LIKO12 Logo
- SpriteGroup(controlID, controlGrid[1],controlGrid[2], controlGrid[5],controlGrid[6], 1,1, false, self.editorsheet)
- if sid then
- SpriteGroup(controlID+24+sid, controlGrid[1]+sid*8,controlGrid[2], 1,1, 1,1, false, self.editorsheet)
- end
- end
-
- function tool:drawBottomBar()
- rect(0,sheight-8,swidth,8,false,self.flavor)
- end
-
- function tool:drawUI()
- clear(self.background) --Clear the screen
- self:drawTopBar() --Draw the top bar
- self:drawBottomBar() --Draw the bottom bar
- end
-
- function tool:start(editor,reload,save,data,hotkey)
- self.editor = editor
- local screen = screenshot() --Backup the screen
- local px,py,pc = printCursor() --Backup the current printing cursor.
- cursor("normal") --Set the current cursor.
-
- if data then --Import some data.
- self.editor:import(data)
- end
-
- self.editor:entered() --Enter the editor.
-
- local eflag = false --Controls selection mode flag.
- local hflag = false --Mouse hover flag.
-
- --The control buttons actions
- local controls = {
- function() --Reload
- self.editor:leaved()
- if reload then reload(self) end
- self.editor:entered()
- end,
- function() --Save
- if save then save(self) end
- end,
- function() --Exit
- self.editor:leaved()
- return true
- end
- }
-
- for event, a,b,c,d,e,f in pullEvent do
- if event == "keypressed" then
- if a == "escape" then
- eflag = not eflag
- if eflag then
- cursor("none")
- sid = 1
- else
- cursor("normal")
- sid = false
- end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif eflag then
- if a == "left" then
- sid = sid - 1
- if sid < 0 then sid = 2 end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif a == "right" then
- sid = sid + 1
- if sid > 2 then sid = 0 end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif a == "return" then
- if controls[sid+1]() then break end
- sid, eflag = false, false
- pushMatrix() cam() self:drawTopBar() popMatrix()
- end
- else
- local key, sc = a, b
- if(isKDown("lalt", "ralt")) then
- key = "alt-" .. key
- sc = "alt-" .. sc
- end
- if(isKDown("lctrl", "rctrl", "capslock")) then
- key = "ctrl-" .. key
- sc = "ctrl-" .. sc
- end
- if(isKDown("lshift", "rshift")) then
- key = "shift-" .. key
- sc = "shift-" .. sc
- end
-
- local ishotkey --Was it an hotkey ?
-
- if key == "ctrl-s" then
- if controls[2]() then break end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif key == "ctrl-l" then
- if controls[1]() then break end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif key == "ctrl-q" then
- if controls[3]() then break end
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif hotkey then
- if hotkey(self,key,sc) then
- ishotkey = true
- end
- end
-
- sc = "sc_"..sc
-
- if self.editor.keymap and not ishotkey then
- local usedKey
- if self.editor.keymap[key] then usedKey = key
- elseif self.editor.keymap[sc] then usedKey = sc
- end
- if usedKey then
- self.editor.keymap[usedKey](self.editor,c)
- self.editor.lastKey = usedKey
- end
- end
- if self.editor[event] and not ishotkey then self.editor[event](self.editor,a,b,c,d,e,f) end
- end
- elseif event == "mousepressed" and not eflag then
- local cx, cy = whereInGrid(a,b,controlGrid)
- if cx then
- cursor("handpress")
- hflag = "d"
- sid = cx-1
- pushMatrix() cam() self:drawTopBar() popMatrix()
- else
- if self.editor[event] then self.editor[event](self.editor,a,b,c,d,e,f) end
- end
- elseif event == "mousemoved" and not eflag then
- local cx, cy = whereInGrid(a,b,controlGrid)
- if cx then
- if hflag and hflag == "d" then
- sid = cx-1
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif not hflag then
- cursor("handrelease")
- hflag = "h"
- end
- else
- if hflag and hflag == "h" then
- hflag = false
- cursor("normal")
- end
- if self.editor[event] then self.editor[event](self.editor,a,b,c,d,e,f) end
- end
- elseif event == "mousereleased" and not eflag then
- local cx, cy = whereInGrid(a,b,controlGrid)
- if cx then
- if hflag and hflag == "d" then
- cursor("handrelease")
- if controls[sid+1]() then break end
- sid, hflag = false, false
- pushMatrix() cam() self:drawTopBar() popMatrix()
- elseif not hflag then
- hflag = "h"
- cursor("handrelease")
- end
- else
- if hflag then
- if hflag == "d" then
- sid = false
- pushMatrix() cam() self:drawTopBar() popMatrix()
- end
- cursor("normal")
- hflag = nil
- end
- if self.editor[event] then self.editor[event](self.editor,a,b,c,d,e,f) end
- end
- elseif eflag then
- if event == "touchpressed" then textinput(true) end
- else
- if self.editor[event] then self.editor[event](self.editor,a,b,c,d,e,f) end
- end
- end
-
- clear() --Clear the screen
- screen:image():draw(0,0) --Restore the old frame
- printCursor(px,py,pc) --Restore the old print cursor
- end
-
- return tool
- end
- return utils
|