Skip to content

Commit

Permalink
feat(agent): add a (very rough) window to display all sensors and the…
Browse files Browse the repository at this point in the history
…ir states
  • Loading branch information
joshuar committed May 19, 2023
1 parent 45448af commit f7fb4b9
Showing 1 changed file with 62 additions and 15 deletions.
77 changes: 62 additions & 15 deletions internal/agent/ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package agent

import (
"fmt"
"net/url"

"fyne.io/fyne/v2"
Expand Down Expand Up @@ -34,46 +35,92 @@ func newUI(appID string) fyne.App {

func (agent *Agent) setupSystemTray() {
openSettings := func() {
w := agent.app.NewWindow("Fyne Settings")
w := agent.app.NewWindow(agent.setTitle("Fyne Settings"))
w.SetContent(settings.NewSettings().LoadAppearanceScreen(w))
w.Resize(fyne.NewSize(480, 480))
w.Show()
}
agent.tray = agent.app.NewWindow("System Tray")
agent.tray = agent.app.NewWindow("go-hass-agent")
agent.tray.SetMaster()
if desk, ok := agent.app.(desktop.App); ok {
menuItemAbout := fyne.NewMenuItem("About", func() {
deviceName, deviceID := agent.DeviceDetails()
hassVersion, _ := hassConfig.Get("version")
w := agent.app.NewWindow(translator.Translate("About %s", agent.Name))
w := agent.app.NewWindow(agent.setTitle("About"))
w.SetContent(container.New(layout.NewVBoxLayout(),
widget.NewLabel(translator.Translate(
"App Version: %s\tHA Version: %s", agent.Version, hassVersion)),
widget.NewLabel(translator.Translate(
"Device Name: "+deviceName)),
widget.NewLabel(translator.Translate(
"Device ID: "+deviceID)),
widget.NewButton("Ok", func() {
widget.NewButton(translator.Translate("Ok"), func() {
w.Close()
}),
))
w.Show()
})
menuItemIssue := fyne.NewMenuItem("Report Issue", func() {
url, _ := url.Parse(issueURL)
agent.app.OpenURL(url)
})
menuItemFeatureRequest := fyne.NewMenuItem("Request Feature", func() {
url, _ := url.Parse(featureRequestURL)
agent.app.OpenURL(url)
})
menuItemSettings := fyne.NewMenuItem("Settings", openSettings)
menuItemIssue := fyne.
NewMenuItem(translator.Translate("Report Issue"),
func() {
url, _ := url.Parse(issueURL)
agent.app.OpenURL(url)
})
menuItemFeatureRequest := fyne.
NewMenuItem(translator.Translate("Request Feature"),
func() {
url, _ := url.Parse(featureRequestURL)
agent.app.OpenURL(url)
})
menuItemSettings := fyne.
NewMenuItem(translator.Translate("Settings"), openSettings)
menuItemSensors := fyne.
NewMenuItem(translator.Translate("Sensors"), agent.makeSensorTable)
menu := fyne.NewMenu(agent.Name,
menuItemAbout,
menuItemIssue,
menuItemFeatureRequest,
menuItemSettings)
menuItemSettings,
menuItemSensors)
desk.SetSystemTrayMenu(menu)
}
agent.tray.Hide()
}

func (agent *Agent) makeSensorTable() {
s, _ := hassConfig.Get("entities")
sensors := s.(map[string]map[string]interface{})
var sensorsTable [][3]string
for rowKey, rowValue := range sensors {
var sensorRow [3]string
sensorRow[0] = rowKey
sensorRow[1] = fmt.Sprintf("Disabled: %v", rowValue["disabled"])
sensorState := tracker.Get(rowKey)
if sensorState != nil {
sensorRow[2] = fmt.Sprintf("%v %s",
sensorState.State(), sensorState.UnitOfMeasurement())
} else {
sensorRow[2] = ""
}
sensorsTable = append(sensorsTable, sensorRow)
}
t := widget.NewTable(
func() (int, int) { return len(sensors), 3 },
func() fyne.CanvasObject {
return widget.NewLabel("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
},
func(id widget.TableCellID, cell fyne.CanvasObject) {
label := cell.(*widget.Label)
label.SetText(sensorsTable[id.Row][id.Col])
})
// t.SetColumnWidth(0, 34)
// t.SetColumnWidth(1, 102)
// t.SetRowHeight(2, 50)
w := agent.app.NewWindow(agent.setTitle("Sensors"))
w.SetContent(t)
w.FullScreen()
w.Show()
}

func (agent *Agent) setTitle(s string) string {
return translator.Translate("%s: %s", agent.Name, s)
}

0 comments on commit f7fb4b9

Please sign in to comment.