155 lines
4.6 KiB
Go
155 lines
4.6 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/cmd/v2/lib/common"
|
|
"go_dreamfactory/cmd/v2/model"
|
|
"go_dreamfactory/cmd/v2/service"
|
|
"go_dreamfactory/cmd/v2/service/observer"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/data/binding"
|
|
"fyne.io/fyne/v2/driver/desktop"
|
|
"fyne.io/fyne/v2/layout"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/sirupsen/logrus"
|
|
"google.golang.org/protobuf/types/known/anypb"
|
|
)
|
|
|
|
type appMonitor struct {
|
|
appAdapter
|
|
|
|
obs observer.Observer
|
|
logPanel *widget.Entry
|
|
monitorHeader *widget.List
|
|
monitorList *widget.List
|
|
monitorBinding binding.UntypedList
|
|
monitorData *model.PushModelList
|
|
}
|
|
|
|
func (app *appMonitor) LazyInit(service service.PttService, obs observer.Observer) error {
|
|
app.obs = obs
|
|
app.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_MONITOR, theme.MediaVideoIcon(), nil)
|
|
|
|
content := container.NewMax()
|
|
content.Objects = []fyne.CanvasObject{}
|
|
|
|
// panel for output log
|
|
app.logPanel = widget.NewMultiLineEntry()
|
|
app.logPanel.Wrapping = fyne.TextWrapWord
|
|
//clear button
|
|
clearBtn := widget.NewButtonWithIcon(common.APP_TESTCASE_BTN_CLEARLOG, theme.DeleteIcon(), func() {
|
|
app.logPanel.SetText("")
|
|
app.monitorBinding.Set([]interface{}{})
|
|
})
|
|
|
|
resPanel := container.NewBorder(container.NewHBox(clearBtn, layout.NewSpacer()), nil, nil, nil, app.logPanel)
|
|
|
|
app.monitorBinding = binding.NewUntypedList()
|
|
app.monitorData = model.NewPushModelList()
|
|
app.createMonitorList()
|
|
|
|
// layout
|
|
panel := container.NewVSplit(container.NewBorder(app.monitorHeader, nil, nil, nil, app.monitorList), resPanel)
|
|
panel.Offset = 0.8
|
|
content.Objects = append(content.Objects, panel)
|
|
app.tabItem.Content = content
|
|
app.Run()
|
|
return nil
|
|
}
|
|
|
|
func (a *appMonitor) OpenDefault() string {
|
|
return common.TOOLBAR_MONITOR
|
|
}
|
|
|
|
func (a *appMonitor) GetAppName() string {
|
|
return common.TOOLBAR_MONITOR
|
|
}
|
|
|
|
func (a appMonitor) OnClose() bool {
|
|
return false
|
|
}
|
|
|
|
// monitor list data
|
|
func (app *appMonitor) Run() {
|
|
app.obs.AddListener(observer.EVENT_APP_MONI, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*model.PushModel)
|
|
app.monitorData.DataList = append(app.monitorData.DataList, data)
|
|
app.reloadMonitorData()
|
|
common.ShowCanvasTip("收到新的数据推送,请打开[推送]页面")
|
|
},
|
|
})
|
|
}
|
|
|
|
func (this *appMonitor) reloadMonitorData() {
|
|
if this.monitorData != nil {
|
|
d := this.monitorData.AsInterfaceArray()
|
|
this.monitorBinding.Set(d)
|
|
}
|
|
}
|
|
|
|
func (this *appMonitor) createMonitorList() {
|
|
// header
|
|
this.monitorHeader = widget.NewList(
|
|
func() int {
|
|
return 1
|
|
},
|
|
func() fyne.CanvasObject {
|
|
return container.NewGridWithColumns(3,
|
|
widget.NewLabelWithStyle("", fyne.TextAlignLeading, fyne.TextStyle{}),
|
|
widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}),
|
|
widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}))
|
|
},
|
|
func(id widget.ListItemID, item fyne.CanvasObject) {
|
|
item.(*fyne.Container).Objects[0].(*widget.Label).SetText(common.APP_MONITOR_TITLE_ID)
|
|
item.(*fyne.Container).Objects[1].(*widget.Label).SetText(common.APP_MONITOR_TITLE_DATA)
|
|
item.(*fyne.Container).Objects[2].(*widget.Label).SetText(common.APP_MONITOR_TITLE_DATE)
|
|
},
|
|
)
|
|
|
|
// data
|
|
this.monitorList = widget.NewListWithData(this.monitorBinding,
|
|
func() fyne.CanvasObject {
|
|
return container.NewGridWithColumns(3,
|
|
widget.NewLabelWithStyle("", fyne.TextAlignLeading, fyne.TextStyle{}),
|
|
widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}),
|
|
widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}),
|
|
)
|
|
},
|
|
func(data binding.DataItem, item fyne.CanvasObject) {
|
|
o, _ := data.(binding.Untyped).Get()
|
|
pd := o.(*model.PushModel)
|
|
item.(*fyne.Container).Objects[0].(*widget.Label).SetText(fmt.Sprintf("%s.%s", pd.Msg.MainType, pd.Msg.SubType))
|
|
item.(*fyne.Container).Objects[1].(*widget.Label).SetText(pd.MethodName)
|
|
item.(*fyne.Container).Objects[2].(*widget.Label).SetText(pd.DataTime)
|
|
},
|
|
)
|
|
|
|
this.monitorList.OnSelected = func(id widget.ListItemID) {
|
|
if di, err := this.monitorBinding.GetItem(id); err != nil {
|
|
logrus.Error(err)
|
|
} else {
|
|
o, _ := di.(binding.Untyped).Get()
|
|
pd := o.(*model.PushModel)
|
|
if res, err := anypb.New(pd.Msg.Data); err == nil {
|
|
this.logPanel.Text = res.String()
|
|
this.logPanel.Refresh()
|
|
} else {
|
|
logrus.WithField("err", err).Error("view detail")
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
func (this *appMonitor) ShortCut() fyne.Shortcut {
|
|
return &desktop.CustomShortcut{KeyName: fyne.Key3, Modifier: desktop.AltModifier}
|
|
}
|
|
|
|
func (this *appMonitor) Icon() fyne.Resource {
|
|
return theme.MediaVideoIcon()
|
|
}
|