diff --git a/Programs/monitor-system/api/gui/page/init.lua b/Programs/monitor-system/api/gui/page/init.lua index f09e4f3..0d413b1 100644 --- a/Programs/monitor-system/api/gui/page/init.lua +++ b/Programs/monitor-system/api/gui/page/init.lua @@ -78,14 +78,39 @@ local function drawPanelSection(index, title) Widget.drawBaseWidget(x, y, width, height, title) end -local function drawNavigationButtons() +local function drawNavigationButton(self, index) local width = math.floor(0.3 * Constants.baseWidth) local height = math.floor(0.6 * Constants.baseHeight) - local x = math.floor(2.8 * Constants.baseWidth) + math.floor((Constants.baseWidth - width) / 2) + local x = math.floor((2.4 + 0.4 * index) * Constants.baseWidth) + math.floor((Constants.baseWidth - width) / 2) local y = 4 * Constants.baseHeight + math.floor((Constants.baseHeight - height) / 2) - Widget.drawBaseWidget(x, y, width, height, "<") - x = math.floor(3.2 * Constants.baseWidth) + math.floor((Constants.baseWidth - width) / 2) - Widget.drawBaseWidget(x, y, width, height, ">") + if self.active then + Widget.drawBaseWidget(x, y, width, height, self.title) + end +end + +local function clickNavigationButton(self) + if not self.active then + return + end + if self.title == "◀" then + elements.machineWidgets.active.index = elements.machineWidgets.active.index - 1 + else + elements.machineWidgets.active.index = elements.machineWidgets.active.index + 1 + end + for i = 1, 9 do + elements.machineWidgets.active[i] = elements.machineWidgets[9 * (elements.machineWidgets.active.index - 1) + i] + end + + elements[6] = elements.machineWidgets.active[1] + elements[7] = elements.machineWidgets.active[2] + elements[8] = elements.machineWidgets.active[3] + elements[10] = elements.machineWidgets.active[4] + elements[11] = elements.machineWidgets.active[5] + elements[12] = elements.machineWidgets.active[6] + elements[14] = elements.machineWidgets.active[7] + elements[15] = elements.machineWidgets.active[8] + elements[16] = elements.machineWidgets.active[9] + Widget.clear() end function page.create(element) @@ -105,7 +130,29 @@ function page.create(element) end end - drawNavigationButtons() + elements.machineWidgets.active = {} + elements.machineWidgets.active.index = 1 + for i = 1, 9 do + elements.machineWidgets.active[i] = elements.machineWidgets[9 * (elements.machineWidgets.active.index - 1) + i] + end + elements.navigationButtons[1] = { + title = "◀", + active = true, + update = function(self) + self.active = elements.machineWidgets[elements.machineWidgets.active.index * 9 - 10] ~= nil + end, + onClick = clickNavigationButton, + draw = drawNavigationButton + } + elements.navigationButtons[2] = { + title = "▶", + active = true, + update = function(self) + self.active = elements.machineWidgets[elements.machineWidgets.active.index * 9 + 1] ~= nil + end, + onClick = clickNavigationButton, + draw = drawNavigationButton + } elements[4.5] = { onClick = function() @@ -113,15 +160,15 @@ function page.create(element) end } - elements[6] = elements.machineWidgets[1] - elements[7] = elements.machineWidgets[2] - elements[8] = elements.machineWidgets[3] - elements[10] = elements.machineWidgets[4] - elements[11] = elements.machineWidgets[5] - elements[12] = elements.machineWidgets[6] - elements[14] = elements.machineWidgets[7] - elements[15] = elements.machineWidgets[8] - elements[16] = elements.machineWidgets[9] + elements[6] = elements.machineWidgets.active[1] + elements[7] = elements.machineWidgets.active[2] + elements[8] = elements.machineWidgets.active[3] + elements[10] = elements.machineWidgets.active[4] + elements[11] = elements.machineWidgets.active[5] + elements[12] = elements.machineWidgets.active[6] + elements[14] = elements.machineWidgets.active[7] + elements[15] = elements.machineWidgets.active[8] + elements[16] = elements.machineWidgets.active[9] elements[18] = elements.powerWidgets[1] elements[19] = elements.powerWidgets[1] @@ -143,14 +190,21 @@ function page.fake() end function page.update() - for index, machineWidget in ipairs(elements.machineWidgets) do + for _, machineWidget in ipairs(elements.machineWidgets) do machineWidget:update() - machineWidget:draw(index) + end + for index, activeMachineWidget in ipairs(elements.machineWidgets.active) do + activeMachineWidget.draw(activeMachineWidget, index) end for index, powerWidget in ipairs(elements.powerWidgets) do powerWidget:update() powerWidget:draw(index) end + for index, navigationButton in ipairs(elements.navigationButtons) do + navigationButton:update() + navigationButton:draw(index) + end + DoubleBuffer.drawChanges() end diff --git a/Programs/monitor-system/api/gui/widget.lua b/Programs/monitor-system/api/gui/widget.lua index a598cdd..19f38e8 100644 --- a/Programs/monitor-system/api/gui/widget.lua +++ b/Programs/monitor-system/api/gui/widget.lua @@ -94,6 +94,18 @@ local function draw(self, index) end end +function widget.clear() + DoubleBuffer.drawRectangle( + Constants.baseWidth, + Constants.baseHeight, + 3 * Constants.baseWidth, + 4 * Constants.baseHeight, + Colors.background, + Colors.background, + "█" + ) +end + local fake = {} fake.names = { @@ -208,7 +220,7 @@ end function widget.fakeWidgets() local fakeWidgets = {} - for _ = 1, 9 do + for _ = 1, math.random(30) do table.insert(fakeWidgets, fake.machineWidget.create()) end