class ConnectionDialog extends this.OS.GUI.BasicDialog constructor: () -> super "ConnectionDialog", ConnectionDialog.scheme main: () -> super.main() @find("bbp").data = [ { text: "16 bits", value: 16, selected: true }, { text: "32 bits", value: 32 } ] @find("jq").value = 40 @find("bt-ok").onbtclick = (e) => return unless @handle data = wvnc: (@find "txtWVNC").value server: (@find "txtServer").value bbp: (@find "bbp").selectedItem.data.value, quality:(@find "jq").value @handle data @quit() @find("bt-cancel").onbtclick = (e) => @quit() ConnectionDialog.scheme = """
""" class CredentialDialog extends this.OS.GUI.BasicDialog constructor: () -> super "CredentialDialog", CredentialDialog.scheme main: () -> @find("bt-ok").onbtclick = () => return @quit() unless @handle data = username: (@find "txtUser").value password: (@find "txtPass").value @handle data @quit() @find("bt-cancel").onbtclick = () => @quit() CredentialDialog.scheme = """
""" class RemoteDesktop extends this.OS.application.BaseApplication constructor: ( args ) -> super "RemoteDesktop", args main: () -> @canvas = @find "screen" @container = @find "container" @client = new WVNC { element: @canvas } @bindKey "CTRL-SHIFT-V", (e) => @pasteText() #@client.onerror = (m) => # @error m.toString() # @showConnectionDialog() @client.ondisconnect = () => @showConnectionDialog() @client.onresize = ()=> @setScale() @client.onpassword = ()=> return new Promise (r,e)=> @openDialog "PromptDialog", { title: __("VNC password"), label: __("VNC password"), value: "password", type: "password" } .then (d) -> r(d) @client.oncopy = (text) => @_api.setClipboard text @client.oncredential = () => return new Promise (r,e) => @openDialog new CredentialDialog, { title: __("User credential") } .then (d) -> r(d.username, d.password) @on "resize", (e)=> @setScale() @on "focus", (e) => $(@canvas).focus() @client.init().then () => @showConnectionDialog() pasteText: () -> return unless @client cb = (text) => return unless text and text isnt "" @client.sendTextAsClipboard text @_api.getClipboard() .then (text) => cb(text) .catch (e) => @error __("Unable to paste"), e #ask for user to enter the text manually @openDialog("TextDialog", { title: "Paste text"}) .then (text) => cb(text) .catch (err) => @error err.toString(), err setScale: () -> return unless @client and @client.resolution w = $(@container).width() h = $(@container).height() sx = w / @client.resolution.w sy = h / @client.resolution.h if sx > sy then @client.setScale sy else @client.setScale sx menu: () -> [ { text: "__(Connection)", nodes: [ { text: "__(New Connection)", dataid: "#{@name}-new", }, { text: "__(Disconnect)", dataid: "#{@name}-close" } ], onchildselect: (e) => @client.disconnect(false) if @client } ] showConnectionDialog: () -> return unless @client @openDialog new ConnectionDialog, { title: __("Connection")} .then (d) => @client.ws = d.wvnc @client.connect d.server, d cleanup: () -> @client.disconnect(true) if @client @client = undefined this.OS.register "RemoteDesktop", RemoteDesktop