main: abstract the nil selection into a virtual database type
This commit is contained in:
parent
d674078071
commit
924957d00d
35
db_none.go
Normal file
35
db_none.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ying32/govcl/vcl"
|
||||||
|
)
|
||||||
|
|
||||||
|
type noLoadedDatabase struct{}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) DisplayName() string {
|
||||||
|
return "yvbolt"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) DriverName() string {
|
||||||
|
return "No database selected"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) RootElement() *vcl.TTreeNode {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) RenderForNav(f *TMainForm, ndata *navData) {
|
||||||
|
f.propertiesBox.SetText("Open a database to get started...")
|
||||||
|
f.contentBox.SetEnabled(false)
|
||||||
|
f.contentBox.Clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) ExecQuery(query string, resultArea *vcl.TListView) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) NavChildren(ndata *navData) ([]string, error) {
|
||||||
|
return []string{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *noLoadedDatabase) Keepalive(ndata *navData) {
|
||||||
|
}
|
20
main.go
20
main.go
@ -22,6 +22,7 @@ type TMainForm struct {
|
|||||||
queryInput *vcl.TMemo
|
queryInput *vcl.TMemo
|
||||||
queryResult *vcl.TListView
|
queryResult *vcl.TListView
|
||||||
|
|
||||||
|
none *noLoadedDatabase
|
||||||
dbs []loadedDatabase
|
dbs []loadedDatabase
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +138,6 @@ func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
|
|||||||
f.propertiesBox.SetReadOnly(true)
|
f.propertiesBox.SetReadOnly(true)
|
||||||
f.propertiesBox.SetEnabled(false)
|
f.propertiesBox.SetEnabled(false)
|
||||||
f.propertiesBox.SetBorderStyle(types.BsNone)
|
f.propertiesBox.SetBorderStyle(types.BsNone)
|
||||||
f.propertiesBox.SetText("Open a database to get started...")
|
|
||||||
|
|
||||||
dataTab := vcl.NewTabSheet(f.Tabs)
|
dataTab := vcl.NewTabSheet(f.Tabs)
|
||||||
dataTab.SetParent(f.Tabs)
|
dataTab.SetParent(f.Tabs)
|
||||||
@ -199,6 +199,9 @@ func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
|
|||||||
f.queryResult.BorderSpacing().SetLeft(MY_SPACING)
|
f.queryResult.BorderSpacing().SetLeft(MY_SPACING)
|
||||||
f.queryResult.BorderSpacing().SetRight(MY_SPACING)
|
f.queryResult.BorderSpacing().SetRight(MY_SPACING)
|
||||||
f.queryResult.BorderSpacing().SetBottom(MY_SPACING)
|
f.queryResult.BorderSpacing().SetBottom(MY_SPACING)
|
||||||
|
|
||||||
|
f.none = &noLoadedDatabase{}
|
||||||
|
f.OnNavChange(f, nil) // calls f.none.RenderForNav and sets up status bar content
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *TMainForm) OnMnuFileOpenClick(sender vcl.IObject) {
|
func (f *TMainForm) OnMnuFileOpenClick(sender vcl.IObject) {
|
||||||
@ -281,17 +284,18 @@ func (f *TMainForm) OnQueryExecute(sender vcl.IObject) {
|
|||||||
|
|
||||||
func (f *TMainForm) OnNavChange(sender vcl.IObject, node *vcl.TTreeNode) {
|
func (f *TMainForm) OnNavChange(sender vcl.IObject, node *vcl.TTreeNode) {
|
||||||
|
|
||||||
if node.Data() == nil {
|
var ld loadedDatabase = f.none
|
||||||
vcl.ShowMessage("unexpected nil data")
|
var ndata *navData = nil
|
||||||
return
|
|
||||||
|
if node != nil && node.Data() != nil {
|
||||||
|
ndata = (*navData)(node.Data())
|
||||||
|
ld = ndata.ld
|
||||||
}
|
}
|
||||||
|
|
||||||
ndata := (*navData)(node.Data())
|
ld.RenderForNav(f, ndata) // Handover to the database type's own renderer function
|
||||||
|
|
||||||
ndata.ld.RenderForNav(f, ndata) // Handover to the database type's own renderer function
|
|
||||||
|
|
||||||
// We're in charge of common status bar text updates
|
// We're in charge of common status bar text updates
|
||||||
f.StatusBar.SetSimpleText(ndata.ld.DisplayName() + " | " + ndata.ld.DriverName())
|
f.StatusBar.SetSimpleText(ld.DisplayName() + " | " + ld.DriverName())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *TMainForm) OnNavExpanding(sender vcl.IObject, node *vcl.TTreeNode, allowExpansion *bool) {
|
func (f *TMainForm) OnNavExpanding(sender vcl.IObject, node *vcl.TTreeNode, allowExpansion *bool) {
|
||||||
|
Loading…
Reference in New Issue
Block a user