printer-monitor/printermonitor/Menu/PreheatMenu.cpp

118 lines
2.8 KiB
C++

#include "PreheatMenu.h"
#include "TemperatureMenuItem.h"
PreheatMenu::PreheatMenu()
{
MenuTitle = "Preheat Menu";
presetMenuItems = LinkedList<MenuItem *>();
temperatureItems = LinkedList<MenuItem *>();
}
void PreheatMenu::RetrieveTemperatures()
{
presetMenuItems.clear();
Serial.println(client->temperaturePresets.size());
for (int i = 0; i < client->temperaturePresets.size(); i++)
{
TemperatureMenuItem *item = new TemperatureMenuItem(client->temperaturePresets[i]->PresetName);
item->preset = client->temperaturePresets[i];
presetMenuItems.add(item);
}
}
void PreheatMenu::processKey(char c)
{
if (c >= '1' && c <= '6')
{
if (selectPreset)
{
TemperatureMenuItem *item = (TemperatureMenuItem *)getItemForKey(c);
if (item != NULL)
{
CreateTemperatureMenu(item);
menuItems = temperatureItems;
MenuTitle = "Preheat: " + item->ItemName;
selectPreset = false;
}
}
else
{
TemperatureMenuItem *item = (TemperatureMenuItem *)getItemForKey(c);
if (item != NULL)
{
TriggerPreheat(item);
doExit();
}
}
}
Menu::processKey(c);
}
void PreheatMenu::TriggerPreheat(TemperatureMenuItem *item)
{
if (item->preheatBed)
{
client->preheatBed(item->preset->bed);
}
if (item->preheatChamber)
{
client->preheatChamber(item->preset->chamber);
}
if (item->preheatExtruder)
{
client->preheatTool(0, item->preset->extruder);
}
}
void PreheatMenu::CreateTemperatureMenu(TemperatureMenuItem *item)
{
temperatureItems.clear();
TemperatureMenuItem *all = new TemperatureMenuItem("All");
all->preset = item->preset;
all->preheatBed = true;
all->preheatChamber = true;
all->preheatExtruder = true;
temperatureItems.add(all);
if (item->preset->extruder > 0)
{
TemperatureMenuItem *extruder = new TemperatureMenuItem("Extruder");
extruder->preset = item->preset;
extruder->preheatExtruder = true;
temperatureItems.add(extruder);
}
if (item->preset->bed > 0)
{
TemperatureMenuItem *bed = new TemperatureMenuItem("Bed");
bed->preset = item->preset;
bed->preheatBed = true;
temperatureItems.add(bed);
}
if (item->preset->chamber > 0)
{
TemperatureMenuItem *chamber = new TemperatureMenuItem("Chamber");
chamber->preset = item->preset;
chamber->preheatChamber = true;
temperatureItems.add(chamber);
}
}
void PreheatMenu::beforeShow()
{
RetrieveTemperatures();
selectPreset = true;
MenuTitle = "Preheat Menu";
menuItems = presetMenuItems;
}