package app 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 var w fyne.Window func Appmain() { fyneApp = app.New() w = fyneApp.NewWindow("ProtocolPacketForger") w.Resize(fyne.NewSize(1024, 768)) w.SetContent(CreateApp()) 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() return container.NewBorder( ppf.Toolbar, ppf.ContextBar, ppf.Metadata.Representation, ppf.Extensions, container.NewVScroll(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 }