mirror of
https://github.com/lxsang/antos-frontend.git
synced 2025-04-08 17:46:43 +02:00
221 lines
7.7 KiB
CoffeeScript
221 lines
7.7 KiB
CoffeeScript
class NotePad extends this.OS.GUI.BaseApplication
|
|
constructor: ( args ) ->
|
|
super "NotePad", args
|
|
main: () ->
|
|
me = @
|
|
@scheme.set "apptitle", "NotePad"
|
|
@sidebar = @find "sidebar"
|
|
@location = @find "location"
|
|
@fileview = @find "fileview"
|
|
div = @find "datarea"
|
|
ace.require "ace/ext/language_tools"
|
|
@currfile = if @args and @args.length > 0 then @args[0].asFileHandler() else "Untitled".asFileHandler()
|
|
@.editor = ace.edit div
|
|
@.editor.setOptions {
|
|
enableBasicAutocompletion: true,
|
|
enableSnippets: true,
|
|
enableLiveAutocompletion: true,
|
|
fontSize: "9pt"
|
|
}
|
|
@.editor.completers.push { getCompletions: ( editor, session, pos, prefix, callback ) -> }
|
|
@.editor.getSession().setUseWrapMode true
|
|
|
|
@mlist = @find "modelist"
|
|
@modes = ace.require "ace/ext/modelist"
|
|
ldata = []
|
|
f = (m, i) ->
|
|
ldata.push {
|
|
text: m.name,
|
|
mode: m.mode,
|
|
selected: if m.mode is 'ace/mode/text' then true else false
|
|
}
|
|
m.idx = i
|
|
f(m, i) for m, i in @modes.modes
|
|
@mlist.set "items", ldata
|
|
@mlist.set "onlistselect", (e) ->
|
|
me.editor.session.setMode e.data.mode
|
|
|
|
themelist = @find "themelist"
|
|
themes = ace.require "ace/ext/themelist"
|
|
ldata = []
|
|
ldata.push {
|
|
text: m.caption,
|
|
mode: m.theme,
|
|
selected: if m.theme is "ace/theme/monokai" then true else false
|
|
} for k, m of themes.themesByName
|
|
themelist.set "onlistselect", (e) ->
|
|
me.editor.setTheme e.data.mode
|
|
themelist.set "items", ldata
|
|
|
|
stat = @find "editorstat"
|
|
#status
|
|
stup = (e) ->
|
|
c = me.editor.session.selection.getCursor()
|
|
l = me.editor.session.getLength()
|
|
$(stat).html "Row #{c.row}, col #{c.column}, lines: #{l}"
|
|
stup(0)
|
|
@.editor.getSession().selection.on "changeCursor", (e) -> stup(e)
|
|
@editormux = false
|
|
@editor.on "input", () ->
|
|
if me.editormux
|
|
me.editormux = false
|
|
return false
|
|
if not me.currfile.dirty
|
|
me.currfile.dirty = true
|
|
me.currfile.text += "*"
|
|
me.tabarea.update()
|
|
|
|
@on "resize", () -> me.editor.resize()
|
|
@on "focus", () -> me.editor.focus()
|
|
|
|
@fileview.set "chdir", (d) -> me.chdir d
|
|
@fileview.set "fetch", (e, f) ->
|
|
return unless e.child
|
|
return if e.child.filename is "[..]"
|
|
e.child.path.asFileHandler().read (d) ->
|
|
return me.error "Resource not found #{e.child.path}" if d.error
|
|
f d.result
|
|
@fileview.set "onfileopen", (e) ->
|
|
return if e.type is "dir"
|
|
me.open e.path.asFileHandler()
|
|
@location.set "onlistselect", (e) ->
|
|
me.chdir e.data.path
|
|
@location.set "items", ( i for i in @systemsetting.VFS.mountpoints when i.type isnt "app" )
|
|
@location.set "selected", 0 unless @location.get "selected"
|
|
@tabarea = @find "tabarea"
|
|
@tabarea.set "ontabselect", (e) ->
|
|
me.selecteTab e.idx
|
|
@tabarea.set "onitemclose", (e) ->
|
|
it = e.item.item
|
|
return false unless it
|
|
return me.closeTab it unless it.dirty
|
|
me.openDialog "YesNoDialog", (d) ->
|
|
return me.closeTab it if d
|
|
me.editor.focus()
|
|
, "Close tab", { text: "Close without saving ?" }
|
|
return false
|
|
#@tabarea.set "closable", true
|
|
@open @currfile
|
|
|
|
open: (file) ->
|
|
#find table
|
|
i = @findTabByFile file
|
|
return @tabarea.set "selected", i if i isnt -1
|
|
return @newtab file if file.path.toString() is "Untitled"
|
|
me = @
|
|
file.read (d) ->
|
|
file.cache = d or ""
|
|
me.newtab file
|
|
|
|
save: (file) ->
|
|
me = @
|
|
file.write (file.getb64 "text/plain"), (d) ->
|
|
return me.error "Error saving file #{file.basename}" if d.error
|
|
file.dirty = false
|
|
file.text = file.basename
|
|
me.tabarea.update()
|
|
|
|
findTabByFile: (file) ->
|
|
lst = @tabarea.get "items"
|
|
its = ( i for d, i in lst when d.hash() is file.hash() )
|
|
return -1 if its.length is 0
|
|
return its[0]
|
|
|
|
closeTab: (it) ->
|
|
@tabarea.remove it, false
|
|
cnt = @tabarea.get "count"
|
|
if cnt is 0
|
|
@open "Untitled".asFileHandler()
|
|
return false
|
|
@tabarea.set "selected", cnt - 1
|
|
return false
|
|
|
|
newtab: (file) ->
|
|
file.text = if file.basename then file.basename else file.path
|
|
file.cache = "" unless file.cache
|
|
file.um = new ace.UndoManager()
|
|
@currfile.selected = false
|
|
file.selected = true
|
|
#console.log cnt
|
|
@tabarea.push file, true
|
|
#@currfile = @file
|
|
#TODO: fix problem : @tabarea.set "selected", cnt
|
|
|
|
selecteTab: (i) ->
|
|
#return if i is @tabarea.get "selidx"
|
|
file = (@tabarea.get "items")[i]
|
|
return unless file
|
|
@scheme.set "apptitle", file.text.toString()
|
|
#return if file is @currfile
|
|
if @currfile isnt file
|
|
@currfile.cache = @editor.getValue()
|
|
@currfile.cursor = @editor.selection.getCursor()
|
|
@currfile = file
|
|
|
|
m = "ace/mode/text"
|
|
m = (@modes.getModeForPath file.path) if file.path.toString() isnt "Untitled"
|
|
@mlist.set "selected", m.idx
|
|
|
|
@editormux = true
|
|
@editor.setValue file.cache, -1
|
|
@editor.session.setMode m.mode
|
|
@editor.session.setUndoManager file.um
|
|
if file.cursor
|
|
@editor.renderer.scrollCursorIntoView { row: file.cursor.row, column: file.cursor.column }, 0.5
|
|
@editor.selection.moveTo file.cursor.row, file.cursor.column
|
|
@editor.focus()
|
|
|
|
chdir: (pth) ->
|
|
#console.log "called", @_api.throwe("FCK")
|
|
return unless pth
|
|
me = @
|
|
dir = pth.asFileHandler()
|
|
dir.read (d) ->
|
|
if(d.error)
|
|
return me.error "Resource not found #{p}"
|
|
if not dir.isRoot()
|
|
p = dir.parent().asFileHandler()
|
|
p.filename = "[..]"
|
|
p.type = "dir"
|
|
#p.size = 0
|
|
d.result.unshift p
|
|
($ me.navinput).val dir.path
|
|
me.fileview.set "path", pth
|
|
me.fileview.set "data", d.result
|
|
|
|
menu: () ->
|
|
me = @
|
|
menu = [{
|
|
text: "File",
|
|
child: [
|
|
{ text: "Open", dataid: "#{@name}-Open" },
|
|
{ text: "Save", dataid: "#{@name}-Save" },
|
|
{ text: "Save as", dataid: "#{@name}-Saveas" }
|
|
],
|
|
onmenuselect: (e) -> me.actionFile e
|
|
}]
|
|
menu
|
|
|
|
actionFile: (e) ->
|
|
me = @
|
|
saveas = () ->
|
|
me.openDialog "FileDiaLog", (d, n) ->
|
|
me.currfile.setPath "#{d}/#{n}"
|
|
me.save me.currfile
|
|
, "Save as", { file: me.currfile }
|
|
switch e.item.data.dataid
|
|
when "#{@name}-Open"
|
|
@openDialog "FileDiaLog", ( d, f ) ->
|
|
me.open "#{d}/#{f}".asFileHandler()
|
|
, "Open file"
|
|
when "#{@name}-Save"
|
|
@currfile.cache = @editor.getValue()
|
|
return @save @currfile if @currfile.basename
|
|
saveas()
|
|
when "#{@name}-Saveas"
|
|
@currfile.cache = @editor.getValue()
|
|
saveas()
|
|
|
|
|
|
NotePad.singleton = false
|
|
this.OS.register "NotePad", NotePad |