1package ui
2
3import (
4 "fmt"
5
6 "tokei.pi/renderer"
7 "tokei.pi/screendriver"
8 "tokei.pi/tokei"
9 "tokei.pi/weather"
10)
11
12var BuildVersion string
13
14var UIDisplayedMenu = 0 // 0 - Boot ; 1-inf widgets
15var UIWidgetCount int // Count of widgets
16var UITopBarTitle string
17var UIConnectedToInternet = false
18
19var UIMargin int
20var UITopBarHeight int
21var UILineHeight int
22var UIFontHorizontalSpacing int
23
24var UIMaxBookLines int
25
26var UIFrameCount = 0
27
28var UIScreenOff = false
29
30func RenderUI() {
31 if !UIScreenOff {
32 renderer.PerformanceTrackerStart()
33 renderer.BlankScreen(0)
34 switch UIDisplayedMenu {
35 case 0:
36 renderer.DrawPihonLogo()
37 renderer.AddTextAllDisplays(UIMargin, renderer.ScreenHeight-UILineHeight-UIMargin+1, 1, BuildVersion)
38 case 1:
39 DrawTopBar(UIMargin, UITopBarHeight)
40 // Left window
41 renderer.DrawWidgetWindow(UIMargin, UITopBarHeight+UIMargin+1, renderer.ScreenWidth-UIMargin*2, renderer.ScreenHeight-UITopBarHeight-UIMargin*2-1)
42 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+2, 1, tokei.GetCurrentWeekdayString())
43 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight+2, 1, tokei.GetCurrentDateString())
44 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*2+2, 1, tokei.GetCurrentTimeString())
45 renderer.DrawSunriseIcon(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*3+2)
46 renderer.AddTextAllDisplays(UIMargin*2+9, UITopBarHeight+UIMargin*2+UILineHeight*3+2, 1, tokei.GetTimeStringFromTimeStampLowPrecision(int64(weather.Sunrise)))
47 renderer.DrawSunsetIcon(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*4+2)
48 renderer.AddTextAllDisplays(UIMargin*2+9, UITopBarHeight+UIMargin*2+UILineHeight*4+2, 1, tokei.GetTimeStringFromTimeStampLowPrecision(int64(weather.Sunset)))
49 // right window
50 renderer.DrawWidgetWindow(renderer.ScreenWidth+UIMargin, UITopBarHeight+UIMargin+1, renderer.ScreenWidth-UIMargin*2, renderer.ScreenHeight-UITopBarHeight-UIMargin*2-1)
51 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+2, 1, weather.CityOfObservation)
52 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight+2, 1, fmt.Sprintf("%0.1f°C", weather.Temperature))
53 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*2+2, 1, weather.Conditions)
54 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*3+2, 1, fmt.Sprintf("AQI %d", weather.AQI))
55 case 2:
56 DrawTopBar(UIMargin, UITopBarHeight)
57 // Left window
58 renderer.DrawWidgetWindow(UIMargin, UITopBarHeight+UIMargin+1, renderer.ScreenWidth-UIMargin*2, renderer.ScreenHeight-UITopBarHeight-UIMargin*2-1)
59 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+2, 1, fmt.Sprintf("AQI %d", weather.AQI))
60 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight+2, 1, fmt.Sprintf("CO %0.1fμg/m3", weather.Components.CO))
61 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*2+2, 1, fmt.Sprintf("NO %0.1fμg/m3", weather.Components.NO))
62 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*3+2, 1, fmt.Sprintf("NO2 %0.1fμg/m3", weather.Components.NO2))
63 renderer.AddTextAllDisplays(UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*4+2, 1, fmt.Sprintf("O3 %0.1fμg/m3", weather.Components.CO))
64 // right window
65 renderer.DrawWidgetWindow(renderer.ScreenWidth+UIMargin, UITopBarHeight+UIMargin+1, renderer.ScreenWidth-UIMargin*2, renderer.ScreenHeight-UITopBarHeight-UIMargin*2-1)
66 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+2, 1, fmt.Sprintf("SO2 %0.1fμg/m3", weather.Components.SO2))
67 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight+2, 1, fmt.Sprintf("NH3 %0.1fμg/m3", weather.Components.NH3))
68 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*3+2, 1, fmt.Sprintf("PM2.5 %0.1fμg/m3", weather.Components.PM2_5))
69 renderer.AddTextAllDisplays(renderer.ScreenWidth+UIMargin*2+1, UITopBarHeight+UIMargin*2+UILineHeight*4+2, 1, fmt.Sprintf("PM10 %0.1fμg/m3", weather.Components.PM10))
70 case 3:
71 DrawTopBar(UIMargin, UITopBarHeight)
72 case 4:
73 DrawTopBar(UIMargin, UITopBarHeight)
74 default:
75 fmt.Printf("Error! Menu does not exist!")
76 }
77 fmt.Printf("Frame render took %fms.\n", float64(renderer.PerformanceTrackerEnd())/float64(1000000))
78 screendriver.UpdateDisplays()
79 //renderer.UpdateFrameBuffersToFiles(renderer.FrameBuffers[0], 0, UIFrameCount)
80 //renderer.UpdateFrameBuffersToFiles(renderer.FrameBuffers[1], 1, UIFrameCount)
81 UIFrameCount++
82 }
83}
84
85func DrawTopBar(UIMargin int, UITopBarHeight int) {
86 // Top bar
87 renderer.DrawHorizontalLine(0, UITopBarHeight, 256, 1)
88 renderer.AddTextAllDisplays(UIMargin, UIMargin, 1, UITopBarTitle)
89 renderer.DrawLightningIcon()
90 if UIConnectedToInternet {
91 renderer.DrawWifiEnabledIcon()
92 } else {
93 renderer.DrawWifiDisabledIcon()
94 }
95}