ppforge/internal/app/app.go

149 lines
3.5 KiB
Go
Raw Normal View History

package app
2022-11-23 20:33:07 +01:00
import (
2022-11-24 21:49:10 +01:00
"fyne.io/fyne/v2"
2022-11-23 20:33:07 +01:00
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
2022-11-23 20:33:07 +01:00
"fyne.io/fyne/v2/widget"
"gitea.mmo.to/ProtocolPacketForger/ppf/internal/ui"
"gitea.mmo.to/ProtocolPacketForger/ppf/protocol"
2022-11-23 20:33:07 +01:00
)
var fyneApp fyne.App
var w fyne.Window
2022-11-23 20:33:07 +01:00
func Appmain() {
fyneApp = app.New()
w = fyneApp.NewWindow("ProtocolPacketForger")
w.Resize(fyne.NewSize(1024, 768))
2022-11-23 20:33:07 +01:00
w.SetContent(CreateApp())
2022-11-23 20:33:07 +01:00
w.ShowAndRun()
}
2022-11-25 11:36:29 +01:00
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
2022-11-25 11:36:29 +01:00
Settings map[string]string
ProtocolForging bool
// Once initialized instances of the editor views
EditorPacket *ui.PacketEditor
EditorProtocol *ui.ProtocolEditor
2022-11-25 11:36:29 +01:00
}
var ppf ppfApp
2022-11-25 11:36:29 +01:00
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
}
2022-11-25 11:36:29 +01:00
func CreateApp() *fyne.Container {
ppf.Toolbar = CreateToolbar()
ppf.Workarea = CreateWorkarea()
ppf.Extensions = container.NewCenter()
ppf.ProtocolMeta = CreateMetadataProtocol()
ppf.ContextBar = container.NewCenter()
2022-11-25 11:36:29 +01:00
return container.NewBorder(
ppf.Toolbar,
ppf.ContextBar,
ppf.Metadata.Representation,
ppf.Extensions,
container.NewVScroll(ppf.Workarea),
2022-11-25 11:36:29 +01:00
)
}
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
}
2022-11-25 11:36:29 +01:00
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
2022-11-25 11:36:29 +01:00
}