diff --git a/app.go b/app.go index bfbfd54..35e05c0 100644 --- a/app.go +++ b/app.go @@ -4,53 +4,119 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) +var fyneApp fyne.App + func Appmain() { - a := app.New() - w := a.NewWindow("ProtocolPacketForger") + fyneApp := app.New() + w := fyneApp.NewWindow("ProtocolPacketForger") w.Resize(fyne.NewSize(800, 600)) - hello := widget.NewLabel("Hello Fyne!") - w.SetContent(container.NewBorder( - hello, - nil, - nil, - nil, - container.NewVScroll(GetProtocolEditor().Representation), - // widget.NewButton("Hi!", func() { - // hello.SetText("Welcome :)") - // }), - )) + w.SetContent(CreateApp()) w.ShowAndRun() } type ppfApp struct { - Toolbar *fyne.Container - Metadata *fyne.Container - Extensions *fyne.Container - ContextBar *fyne.Container - Workarea *fyne.Container + // Container for the borderlayout + Toolbar fyne.CanvasObject + Metadata *fyne.Container + Extensions *fyne.Container + ContextBar *fyne.Container + Workarea *fyne.Container + // Once initialized metadata containers for swapping + ProtocolMeta *fyne.Container + PacketMeta *fyne.Container + // Global important stuff Settings map[string]string ProtocolForging bool + // Once initialized instances of the editor views + EditorPacket *PacketEditor + EditorProtocol *ProtocolEditor } -var application ppfApp +var ppf ppfApp func CreateApp() *fyne.Container { + ppf.Toolbar = CreateToolbar() + ppf.Workarea = CreateWorkarea() + ppf.Extensions = container.NewCenter() + ppf.Metadata = container.NewCenter() + ppf.ContextBar = container.NewCenter() return container.NewBorder( - application.Toolbar, - application.Metadata, - application.ContextBar, - application.Extensions, - container.NewVScroll(application.Workarea), + ppf.Toolbar, + ppf.Metadata, + ppf.ContextBar, + ppf.Extensions, + container.NewVScroll(ppf.Workarea), ) } -func CreateToolbar() *fyne.Container { +func CreateToolbar() fyne.CanvasObject { + toolbar := widget.NewToolbar() + toolbar.Append(widget.NewToolbarAction(theme.StorageIcon(), func() { + ppf.ProtocolForging = !ppf.ProtocolForging + //TODO: implement the switch + })) + toolbar.Append(widget.NewToolbarSeparator()) + toolbar.Append(widget.NewToolbarAction(theme.FolderNewIcon(), func() { - return nil + })) + toolbar.Append(widget.NewToolbarAction(theme.FolderOpenIcon(), func() { + + })) + toolbar.Append(widget.NewToolbarAction(theme.DocumentSaveIcon(), func() { + + })) + toolbar.Append(widget.NewToolbarAction(theme.SettingsIcon(), func() { + + })) + toolbar.Append(widget.NewToolbarSpacer()) + toolbar.Append(widget.NewToolbarAction(theme.LogoutIcon(), func() { + fyneApp.Quit() + })) + + return toolbar +} + +func CreateWorkarea() *fyne.Container { + return GetProtocolEditor().Representation +} + +func CreateMetadataProtocol() *fyne.Container { + vbox := container.NewVBox() + vbox.Add(widget.NewLabel("Protocol Metadata")) + form := container.New(layout.NewFormLayout()) + form.Add(widget.NewLabel("Name:")) + form.Add(widget.NewEntry()) + form.Add(widget.NewLabel("Version:")) + form.Add(widget.NewEntry()) + form.Add(widget.NewLabel("Extends:")) + form.Add(widget.NewEntry()) + vbox.Add(form) + vbox.Add(widget.NewLabel("Description")) + multiline := widget.NewMultiLineEntry() + multiline.SetMinRowsVisible(3) + vbox.Add(multiline) + + return vbox +} + +func CreateMetadataPacket() *fyne.Container { + vbox := container.NewVBox() + vbox.Add(widget.NewLabel("Packet Metadata")) + form := container.New(layout.NewFormLayout()) + form.Add(widget.NewLabel("Name:")) + form.Add(widget.NewEntry()) + vbox.Add(form) + vbox.Add(widget.NewLabel("Description:")) + multiline := widget.NewMultiLineEntry() + multiline.SetMinRowsVisible(3) + vbox.Add(multiline) + return vbox } diff --git a/go.mod b/go.mod index b2e33be..bb99864 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require fyne.io/fyne/v2 v2.2.4 require ( fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 // indirect + fyne.io/x/fyne v0.0.0-20221121180555-92e65f302337 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect diff --git a/go.sum b/go.sum index d87edee..a16dfb0 100644 --- a/go.sum +++ b/go.sum @@ -41,6 +41,9 @@ fyne.io/fyne/v2 v2.2.4 h1:izyiDUjJYAB7B/MST7M9GDs+mQ0CwDgRZTiVJZQoEe4= fyne.io/fyne/v2 v2.2.4/go.mod h1:MBoGuHzLLSXdQOWFAwWhIhYTEMp33zqtGCReSWhaQTA= fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 h1:V2IC9t0Zj9Ur6qDbfhUuzVmIvXKFyxZXRJyigUvovs4= fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= +fyne.io/x/fyne v0.0.0-20221121180555-92e65f302337 h1:pmI4fpk16hb9sZWlO9FUmtixQ8t8bKShYxn7HJLMlpA= +fyne.io/x/fyne v0.0.0-20221121180555-92e65f302337/go.mod h1:tInTkLEiYNhEYq8s4UbnpINBg/W6mqU0ArbuuJszd3s= +github.com/Andrew-M-C/go.jsonvalue v1.1.2-0.20211223013816-e873b56b4a84/go.mod h1:oTJGG91FhtsxvUFVwHSvr6zuaTcAuroj/ToxfT7Ox8U= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -66,6 +69,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -166,6 +170,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gopherjs/gopherjs v0.0.0-20211219123610-ec9572f70e60/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/goxjs/gl v0.0.0-20210104184919-e3fafc6f8f2a/go.mod h1:dy/f2gjY09hwVfIyATps4G2ai7/hLwLkc5TrPqONuXY= github.com/goxjs/glfw v0.0.0-20191126052801-d2efb5f20838/go.mod h1:oS8P8gVOT4ywTcjV6wZlOU4GuVFQ8F5328KY3MJ79CY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -274,6 +279,7 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= +github.com/wagslane/go-password-validator v0.3.0/go.mod h1:TI1XJ6T5fRdRnHqHt14pvy1tNVnrwe7m3/f1f2fDphQ= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -363,6 +369,7 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=