Start of small refactor for better workflow

This commit is contained in:
Marcel M. Otte 2023-03-18 10:22:38 +01:00
parent d4bf27e110
commit 724f2c87c6
3 changed files with 106 additions and 17 deletions

5
internal/ui/editor.go Normal file
View File

@ -0,0 +1,5 @@
package ui
type Editor interface {
Representationer
}

View File

@ -12,11 +12,39 @@ import (
"gitea.mmo.to/ProtocolPacketForger/ppf/protocolctl"
)
type Representationer interface {
Representation() *fyne.Container
}
type FileHandler interface {
Name() string
Path() string
Open(path string) error
Save() error
SaveAs(path string) error
Close() error
Changed()
HasChanged() bool
}
type ppfApp struct {
App fyne.App
Window fyne.Window
// Container for the borderlayout
Toolbar fyne.CanvasObject
// Container for the main layout, toolbar at top, in Center the doctabs.
MainContainer *fyne.Container
// toolbar
Toolbar fyne.CanvasObject
// left optional the local/remote library
// tbd
// center opened objects
OpenTabs *container.DocTabs // DocTabs
OpenObjects []*FileHandler // actual files
// Global important stuff
Settings map[string]interface{}
/*/ will be part of the Editor
Metadata *Metadata
Extensions *fyne.Container
ContextBar *fyne.Container
@ -25,14 +53,11 @@ type ppfApp struct {
// 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
// workspace handling
OpenProtocolFiles []*ProtocolFileHandler
OpenProtocolFiles []*ProtocolFileHandler//*/
}
var PPF ppfApp
@ -41,21 +66,21 @@ func NewPPF(fyneApp fyne.App, w fyne.Window) ppfApp {
PPF.App = fyneApp
PPF.Window = w
PPF.Toolbar = CreateToolbar(fyneApp)
PPF.Workarea = CreateWorkarea()
/*PPF.Workarea = CreateWorkarea()
PPF.Extensions = container.NewCenter()
PPF.ProtocolMeta = NewMetadataProtocol()
PPF.Metadata = &PPF.ProtocolMeta.Metadata
PPF.ContextBar = container.NewCenter()
PPF.ContextBar = container.NewCenter() //*/
return PPF
}
func (ppf *ppfApp) GetContainer() *fyne.Container {
return container.NewBorder(
PPF.Toolbar,
PPF.ContextBar,
PPF.Metadata.Representation,
PPF.Extensions,
PPF.Workarea,
nil, //PPF.ContextBar,
nil, //PPF.Metadata.Representation,
nil, //PPF.Extensions,
PPF.OpenTabs,
)
}
@ -66,6 +91,13 @@ func (ppf *ppfApp) OpenFile(path string) {
}
func (ppf *ppfApp) NewFile() {
//TODO: show entry screen with choosable ways of:
// PROTOCOL editor
// create a new protocol
// edit an existing protocol
// PACKET editor
// create a binary packet
// edit an existing binary packet
pfh := NewProtocolFileHandler()
PPF.OpenProtocolFiles = append(PPF.OpenProtocolFiles, pfh)
ppf.Workarea.Append(container.NewTabItem(pfh.Filename, pfh.GetWorkarea()))
@ -93,11 +125,6 @@ func (ppf *ppfApp) GetReferenceForFile(s string) *protocol.ProtocolStructure {
func CreateToolbar(fyneApp fyne.App) fyne.CanvasObject {
toolbar := widget.NewToolbar()
toolbar.Append(widget.NewToolbarAction(theme.MenuIcon(), func() {
PPF.ProtocolForging = !PPF.ProtocolForging
//TODO: implement the switch
}))
toolbar.Append(widget.NewToolbarSeparator())
toolbar.Append(widget.NewToolbarAction(theme.ContentAddIcon(), func() {
PPF.NewFile()
}))

View File

@ -0,0 +1,57 @@
package ui
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
type NewObjectDialog struct {
representation *fyne.Container
// views
selection *fyne.Container // 4buttons grid
protocolChooser *fyne.Container
packetChooser *fyne.Container
}
var pnod *NewObjectDialog
func CreateNewObjectDialog() *NewObjectDialog {
if pnod == nil {
pnod = &NewObjectDialog{}
pnod.representation = container.NewMax(nil)
// representation
// grid layout 100x100px elements in a center layout, 4 buttons, new Protocol, edit protocol, new Packet, edit Packet
buttons := []widget.Button{}
buttons = append(buttons, *widget.NewButton("New protocol", func() {
}))
buttons = append(buttons, *widget.NewButton("Edit protocol", func() {
}))
buttons = append(buttons, *widget.NewButton("New packet", func() {
}))
buttons = append(buttons, *widget.NewButton("Edit packet", func() {
}))
selectgrid := container.NewGridWithColumns(2, nil)
for _, v := range buttons {
selectgrid.Add(&v)
}
pnod.selection = container.NewMax(selectgrid)
pnod.representation.Add(pnod.selection)
// data
}
return pnod
}
func (nod *NewObjectDialog) Representation() *fyne.Container {
return nod.representation
}
func (nod *NewObjectDialog) Refresh() {
}