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}