diff --git a/internal/app/app.go b/internal/app/app.go index 177be85..7057216 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -4,12 +4,8 @@ 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" "gitea.mmo.to/ProtocolPacketForger/ppf/internal/ui" - "gitea.mmo.to/ProtocolPacketForger/ppf/protocol" ) var fyneApp fyne.App @@ -25,124 +21,19 @@ func Appmain() { w.ShowAndRun() } -type ppfApp struct { - // Container for the borderlayout - Toolbar fyne.CanvasObject - Metadata *Metadata - Extensions *fyne.Container - ContextBar *fyne.Container - ContentTabs *fyne.Container - Workarea *fyne.Container - // Once initialized metadata containers for swapping - ProtocolMeta *ProtocolMetadata - PacketMeta *PacketMetadata - // Global important stuff - Settings map[string]string - ProtocolForging bool - // Once initialized instances of the editor views - EditorPacket *ui.PacketEditor - EditorProtocol *ui.ProtocolEditor -} - -var ppf ppfApp - -type Metadata struct { - Representation *fyne.Container -} -type PacketMetadata struct { - Metadata -} - -type ProtocolMetadata struct { - Metadata - NameValue *widget.Entry - VersionValue *widget.Entry - ExtendsValue *widget.Entry - DescValue *widget.Entry -} - func CreateApp() *fyne.Container { - ppf.Toolbar = CreateToolbar() - ppf.Workarea = CreateWorkarea() - ppf.Extensions = container.NewCenter() - ppf.ProtocolMeta = CreateMetadataProtocol() - ppf.ContextBar = container.NewCenter() + ui.PPF.Toolbar = ui.CreateToolbar(fyneApp) + ui.PPF.Workarea = ui.CreateWorkarea() + ui.PPF.Extensions = container.NewCenter() + ui.PPF.ProtocolMeta = ui.CreateMetadataProtocol() + ui.PPF.Metadata = &ui.PPF.ProtocolMeta.Metadata + ui.PPF.ContextBar = container.NewCenter() return container.NewBorder( - ppf.Toolbar, - ppf.ContextBar, - ppf.Metadata.Representation, - ppf.Extensions, - container.NewVScroll(ppf.Workarea), + ui.PPF.Toolbar, + ui.PPF.ContextBar, + ui.PPF.Metadata.Representation, + ui.PPF.Extensions, + container.NewVScroll(ui.PPF.Workarea), ) } - -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() { - - })) - 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 ui.GetProtocolEditor().Representation -} - -func CreateMetadataProtocol() *ProtocolMetadata { - md := ProtocolMetadata{} - 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) - md.Representation = vbox - return &md -} - -func CreateMetadataPacket() *PacketMetadata { - md := PacketMetadata{} - 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 &md -} - -func UpdateProtocolMetadata(prot *protocol.ProtocolStructure) { - // md := ppfApp.ProtocolMeta -} diff --git a/internal/ui/main.go b/internal/ui/main.go new file mode 100644 index 0000000..c5f8180 --- /dev/null +++ b/internal/ui/main.go @@ -0,0 +1,59 @@ +package ui + +import ( + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/theme" + "fyne.io/fyne/v2/widget" +) + +type ppfApp struct { + // Container for the borderlayout + Toolbar fyne.CanvasObject + Metadata *Metadata + Extensions *fyne.Container + ContextBar *fyne.Container + ContentTabs *fyne.Container + Workarea *fyne.Container + // Once initialized metadata containers for swapping + ProtocolMeta *ProtocolMetadata + PacketMeta *PacketMetadata + // Global important stuff + Settings map[string]string + ProtocolForging bool + // Once initialized instances of the editor views + EditorPacket *PacketEditor + EditorProtocol *ProtocolEditor +} + +var PPF ppfApp + +func CreateToolbar(fyneApp fyne.App) 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() { + + })) + 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 +} diff --git a/internal/ui/metadata.go b/internal/ui/metadata.go new file mode 100644 index 0000000..c532919 --- /dev/null +++ b/internal/ui/metadata.go @@ -0,0 +1,120 @@ +package ui + +import ( + "fmt" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" + "gitea.mmo.to/ProtocolPacketForger/ppf/protocol" + "gitea.mmo.to/ProtocolPacketForger/ppf/protocolctl" +) + +type Metadata struct { + Representation *fyne.Container +} +type PacketMetadata struct { + Metadata +} + +type ProtocolMetadata struct { + Metadata + NameValue *widget.Entry + VersionValue *widget.Entry + ExtendsValue *widget.Entry + TcpIpLayer *widget.Select + OsiLayer *widget.Select + DescValue *widget.Entry +} + +func (pmd *ProtocolMetadata) SetChanged(setfunc func(s string)) { + pmd.NameValue.OnChanged = setfunc + pmd.ExtendsValue.OnChanged = setfunc + pmd.DescValue.OnChanged = setfunc + pmd.VersionValue.OnChanged = setfunc + pmd.TcpIpLayer.OnChanged = setfunc + pmd.OsiLayer.OnChanged = setfunc +} + +func CreateMetadataProtocol() *ProtocolMetadata { + md := ProtocolMetadata{} + vbox := container.NewVBox() + vbox.Add(widget.NewLabel("Protocol Metadata")) + form := container.New(layout.NewFormLayout()) + form.Add(widget.NewLabel("Name:")) + md.NameValue = widget.NewEntry() + form.Add(md.NameValue) + form.Add(widget.NewLabel("Version:")) + md.VersionValue = widget.NewEntry() + form.Add(md.VersionValue) + form.Add(widget.NewLabel("Extends:")) + md.ExtendsValue = widget.NewEntry() + form.Add(md.ExtendsValue) + md.TcpIpLayer = widget.NewSelect( + []string{ + "Network Access", + "Internet", + "Transport", + "Application", + }, + func(s string) { + }) + form.Add(widget.NewLabel("TcpIpLayer*:")) + form.Add(md.TcpIpLayer) + md.OsiLayer = widget.NewSelect( + []string{ + "(Physical)", + "Data Link", + "Network", + "Transport", + "Session", + "Presentation", + "Application", + }, + func(s string) { + + }) + form.Add(widget.NewLabel("OSI Layer:")) + form.Add(md.OsiLayer) + vbox.Add(form) + vbox.Add(widget.NewLabel("Description")) + multiline := widget.NewMultiLineEntry() + multiline.SetMinRowsVisible(3) + md.DescValue = multiline + vbox.Add(multiline) + md.Representation = vbox + return &md +} + +func SetProtocolMetadata(prot *protocol.ProtocolStructure) { + md := PPF.ProtocolMeta + setfunc := func(s string) { + protocolctl.UpdateMetaData( + prot, + md.NameValue.Text, + md.VersionValue.Text, + 0, + 0, + md.ExtendsValue.Text, + md.DescValue.Text, + ) + fmt.Printf("%s", protocolctl.ToJson(prot)) + } + md.SetChanged(setfunc) +} + +func CreateMetadataPacket() *PacketMetadata { + md := PacketMetadata{} + 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 &md +} diff --git a/protocolctl/protocolctl.go b/protocolctl/protocolctl.go index d59987c..814a540 100644 --- a/protocolctl/protocolctl.go +++ b/protocolctl/protocolctl.go @@ -21,8 +21,6 @@ func UpdateMetaData( osilayer uint, extensionTo string, desc string, - requiredJSfunctions []string, - lowerLayerIdent map[string]string, ) { prot.Metadata.Name = name prot.Metadata.Description = desc @@ -30,8 +28,6 @@ func UpdateMetaData( prot.Metadata.Version = version prot.Metadata.OSILayer = osilayer prot.Metadata.TCPIPLayer = tcpiplayer - prot.Metadata.RequiredJSFunctions = requiredJSfunctions - prot.Metadata.LowerLayerIdentification = lowerLayerIdent } func NewEmptyField() *protocol.Field { diff --git a/protocolctl/protocolctl_test.go b/protocolctl/protocolctl_test.go index 5a028e9..f5be6f5 100644 --- a/protocolctl/protocolctl_test.go +++ b/protocolctl/protocolctl_test.go @@ -25,8 +25,6 @@ func TestUpdateMetaData(t *testing.T) { osilayer, extensionTo, desc, - nil, - nil, ) if prot.Metadata.Name != name ||