diff --git a/examples/completeExample/completeExample.cpp b/examples/completeExample/completeExample.cpp index 6833310..ef98e29 100644 --- a/examples/completeExample/completeExample.cpp +++ b/examples/completeExample/completeExample.cpp @@ -96,59 +96,59 @@ void setUpUI() { * Tab: Basic Controls * This tab contains all the basic ESPUI controls, and shows how to read and update them at runtime. *-----------------------------------------------------------------------------------------------------------*/ - auto maintab = ESPUI.addControl(Tab, "", "Basic controls"); + auto maintab = ESPUI.addControl(Control::Type::Tab, "", "Basic controls"); - ESPUI.addControl(Separator, "General controls", "", None, maintab); - ESPUI.addControl(Button, "Button", "Button 1", Alizarin, maintab, extendedCallback, (void*)19); - mainLabel = ESPUI.addControl(Label, "Label", "Label text", Emerald, maintab, generalCallback); - mainSwitcher = ESPUI.addControl(Switcher, "Switcher", "", Sunflower, maintab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "General controls", "", Control::Color::None, maintab); + ESPUI.addControl(Control::Type::Button, "Button", "Button 1", Control::Color::Alizarin, maintab, extendedCallback, (void*)19); + mainLabel = ESPUI.addControl(Control::Type::Label, "Label", "Label text", Control::Color::Emerald, maintab, generalCallback); + mainSwitcher = ESPUI.addControl(Control::Type::Switcher, "Switcher", "", Control::Color::Sunflower, maintab, generalCallback); //Sliders default to being 0 to 100, but if you want different limits you can add a Min and Max control - mainSlider = ESPUI.addControl(Slider, "Slider", "200", Turquoise, maintab, generalCallback); - ESPUI.addControl(Min, "", "10", None, mainSlider); - ESPUI.addControl(Max, "", "400", None, mainSlider); + mainSlider = ESPUI.addControl(Control::Type::Slider, "Slider", "200", Control::Color::Turquoise, maintab, generalCallback); + ESPUI.addControl(Control::Type::Min, "", "10", Control::Color::None, mainSlider); + ESPUI.addControl(Control::Type::Max, "", "400", Control::Color::None, mainSlider); //These are the values for the selector's options. (Note that they *must* be declared static //so that the storage is allocated in global memory and not just on the stack of this function.) static String optionValues[] {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"}; - auto mainselector = ESPUI.addControl(Select, "Selector", "Selector", Wetasphalt, maintab, generalCallback); + auto mainselector = ESPUI.addControl(Control::Type::Select, "Selector", "Selector", Control::Color::Wetasphalt, maintab, generalCallback); for(auto const& v : optionValues) { - ESPUI.addControl(Option, v.c_str(), v, None, mainselector); + ESPUI.addControl(Control::Type::Option, v.c_str(), v, Control::Color::None, mainselector); } - mainText = ESPUI.addControl(Text, "Text Input", "Initial value", Alizarin, maintab, generalCallback); + mainText = ESPUI.addControl(Control::Type::Text, "Text Input", "Initial value", Control::Color::Alizarin, maintab, generalCallback); //Number inputs also accept Min and Max components, but you should still validate the values. - mainNumber = ESPUI.addControl(Number, "Number Input", "42", Emerald, maintab, generalCallback); - ESPUI.addControl(Min, "", "10", None, mainNumber); - ESPUI.addControl(Max, "", "50", None, mainNumber); + mainNumber = ESPUI.addControl(Control::Type::Number, "Number Input", "42", Control::Color::Emerald, maintab, generalCallback); + ESPUI.addControl(Control::Type::Min, "", "10", Control::Color::None, mainNumber); + ESPUI.addControl(Control::Type::Max, "", "50", Control::Color::None, mainNumber); - ESPUI.addControl(Separator, "Updates", "", None, maintab); + ESPUI.addControl(Control::Type::Separator, "Updates", "", Control::Color::None, maintab); //This button will update all the updatable controls on this tab to random values - mainScrambleButton = ESPUI.addControl(Button, "Scramble Values", "Scramble Values", Carrot, maintab, scrambleCallback); - ESPUI.addControl(Switcher, "Constant updates", "0", Carrot, maintab, updateCallback); - mainTime = ESPUI.addControl(Time, "", "", None, 0, generalCallback); - ESPUI.addControl(Button, "Get Time", "Get Time", Carrot, maintab, getTimeCallback); + mainScrambleButton = ESPUI.addControl(Control::Type::Button, "Scramble Values", "Scramble Values", Control::Color::Carrot, maintab, scrambleCallback); + ESPUI.addControl(Control::Type::Switcher, "Constant updates", "0", Control::Color::Carrot, maintab, updateCallback); + mainTime = ESPUI.addControl(Control::Type::Time, "", "", Control::Color::None, 0, generalCallback); + ESPUI.addControl(Control::Type::Button, "Get Time", "Get Time", Control::Color::Carrot, maintab, getTimeCallback); - ESPUI.addControl(Separator, "Control Pads", "", None, maintab); - ESPUI.addControl(Pad, "Normal", "", Peterriver, maintab, generalCallback); - ESPUI.addControl(PadWithCenter, "With center", "", Peterriver, maintab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Control Pads", "", Control::Color::None, maintab); + ESPUI.addControl(Control::Type::Pad, "Normal", "", Control::Color::Peterriver, maintab, generalCallback); + ESPUI.addControl(Control::Type::PadWithCenter, "With center", "", Control::Color::Peterriver, maintab, generalCallback); /* * Tab: Colours * This tab shows all the basic colours *-----------------------------------------------------------------------------------------------------------*/ - auto colourtab = ESPUI.addControl(Tab, "", "Colours"); - ESPUI.addControl(Button, "Alizarin", "Alizarin", Alizarin, colourtab, generalCallback); - ESPUI.addControl(Button, "Turquoise", "Turquoise", Turquoise, colourtab, generalCallback); - ESPUI.addControl(Button, "Emerald", "Emerald", Emerald, colourtab, generalCallback); - ESPUI.addControl(Button, "Peterriver", "Peterriver", Peterriver, colourtab, generalCallback); - ESPUI.addControl(Button, "Wetasphalt", "Wetasphalt", Wetasphalt, colourtab, generalCallback); - ESPUI.addControl(Button, "Sunflower", "Sunflower", Sunflower, colourtab, generalCallback); - ESPUI.addControl(Button, "Carrot", "Carrot", Carrot, colourtab, generalCallback); - ESPUI.addControl(Button, "Dark", "Dark", Dark, colourtab, generalCallback); + auto colourtab = ESPUI.addControl(Control::Type::Tab, "", "Colours"); + ESPUI.addControl(Control::Type::Button, "Alizarin", "Alizarin", Control::Color::Alizarin, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Turquoise", "Turquoise", Control::Color::Turquoise, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Emerald", "Emerald", Control::Color::Emerald, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Peterriver", "Peterriver", Control::Color::Peterriver, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Wetasphalt", "Wetasphalt", Control::Color::Wetasphalt, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Sunflower", "Sunflower", Control::Color::Sunflower, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Carrot", "Carrot", Control::Color::Carrot, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Dark", "Dark", Control::Color::Dark, colourtab, generalCallback); /* @@ -156,24 +156,24 @@ void setUpUI() { * This tab shows off how inline CSS styles can be applied to elements and panels in order * to customise the look of the UI. *-----------------------------------------------------------------------------------------------------------*/ - auto styletab = ESPUI.addControl(Tab, "", "Styled controls"); - styleButton = ESPUI.addControl(Button, "Styled Button", "Button", Alizarin, styletab, generalCallback); - styleLabel = ESPUI.addControl(Label, "Styled Label", "This is a label", Alizarin, styletab, generalCallback); - styleSwitcher = ESPUI.addControl(Switcher, "Styled Switcher", "1", Alizarin, styletab, generalCallback); - styleSlider = ESPUI.addControl(Slider, "Styled Slider", "0", Alizarin, styletab, generalCallback); + auto styletab = ESPUI.addControl(Control::Type::Tab, "", "Styled controls"); + styleButton = ESPUI.addControl(Control::Type::Button, "Styled Button", "Button", Control::Color::Alizarin, styletab, generalCallback); + styleLabel = ESPUI.addControl(Control::Type::Label, "Styled Label", "This is a label", Control::Color::Alizarin, styletab, generalCallback); + styleSwitcher = ESPUI.addControl(Control::Type::Switcher, "Styled Switcher", "1", Control::Color::Alizarin, styletab, generalCallback); + styleSlider = ESPUI.addControl(Control::Type::Slider, "Styled Slider", "0", Control::Color::Alizarin, styletab, generalCallback); //This button will randomise the colours of the above controls to show updating of inline styles - ESPUI.addControl(Button, "Randomise Colours", "Randomise Colours", Sunflower, styletab, styleCallback); + ESPUI.addControl(Control::Type::Button, "Randomise Colours", "Randomise Colours", Control::Color::Sunflower, styletab, styleCallback); - ESPUI.addControl(Separator, "Other styling examples", "", None, styletab); - styleButton2 = ESPUI.addControl(Button, "Styled Button", "Button", Alizarin, styletab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Other styling examples", "", Control::Color::None, styletab); + styleButton2 = ESPUI.addControl(Control::Type::Button, "Styled Button", "Button", Control::Color::Alizarin, styletab, generalCallback); ESPUI.setPanelStyle(styleButton2, "background: linear-gradient(90deg, rgba(131,58,180,1) 0%, rgba(253,29,29,1) 50%, rgba(252,176,69,1) 100%); border-bottom: #555;"); ESPUI.setElementStyle(styleButton2, "border-radius: 2em; border: 3px solid black; width: 30%; background-color: #8df;"); - styleSlider2 = ESPUI.addControl(Slider, "Styled Slider", "0", Dark, styletab, generalCallback); + styleSlider2 = ESPUI.addControl(Control::Type::Slider, "Styled Slider", "0", Control::Color::Dark, styletab, generalCallback); ESPUI.setElementStyle(styleSlider2, "background: linear-gradient(to right, red, orange, yellow, green, blue);"); - styleLabel2 = ESPUI.addControl(Label, "Styled Label", "This is a label", Dark, styletab, generalCallback); + styleLabel2 = ESPUI.addControl(Control::Type::Label, "Styled Label", "This is a label", Control::Color::Dark, styletab, generalCallback); ESPUI.setElementStyle(styleLabel2, "text-shadow: 3px 3px #74b1ff, 6px 6px #c64ad7; font-size: 60px; font-variant-caps: small-caps; background-color: unset; color: #c4f0bb; -webkit-text-stroke: 1px black;"); @@ -182,14 +182,14 @@ void setUpUI() { * This tab shows how multiple control can be grouped into the same panel through the use of the * parentControl value. This also shows how to add labels to grouped controls, and how to use vertical controls. *-----------------------------------------------------------------------------------------------------------*/ - auto grouptab = ESPUI.addControl(Tab, "", "Grouped controls"); + auto grouptab = ESPUI.addControl(Control::Type::Tab, "", "Grouped controls"); //The parent of this button is a tab, so it will create a new panel with one control. - auto groupbutton = ESPUI.addControl(Button, "Button Group", "Button A", Dark, grouptab, generalCallback); + auto groupbutton = ESPUI.addControl(Control::Type::Button, "Button Group", "Button A", Control::Color::Dark, grouptab, generalCallback); //However the parent of this button is another control, so therefore no new panel is //created and the button is added to the existing panel. - ESPUI.addControl(Button, "", "Button B", Alizarin, groupbutton, generalCallback); - ESPUI.addControl(Button, "", "Button C", Alizarin, groupbutton, generalCallback); + ESPUI.addControl(Control::Type::Button, "", "Button B", Control::Color::Alizarin, groupbutton, generalCallback); + ESPUI.addControl(Control::Type::Button, "", "Button C", Control::Color::Alizarin, groupbutton, generalCallback); //Sliders can be grouped as well @@ -197,65 +197,65 @@ void setUpUI() { //We need this CSS style rule, which will remove the label's background and ensure that it takes up the entire width of the panel String clearLabelStyle = "background-color: unset; width: 100%;"; //First we add the main slider to create a panel - auto groupsliders = ESPUI.addControl(Slider, "Slider Group", "10", Dark, grouptab, generalCallback); + auto groupsliders = ESPUI.addControl(Control::Type::Slider, "Slider Group", "10", Control::Color::Dark, grouptab, generalCallback); //Then we add a label and set its style to the clearLabelStyle. Here we've just given it the name "A" - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, groupsliders), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, groupsliders), clearLabelStyle); //We can now continue to add additional sliders and labels - ESPUI.addControl(Slider, "", "20", None, groupsliders, generalCallback); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, groupsliders), clearLabelStyle); - ESPUI.addControl(Slider, "", "30", None, groupsliders, generalCallback); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, groupsliders), clearLabelStyle); + ESPUI.addControl(Control::Type::Slider, "", "20", Control::Color::None, groupsliders, generalCallback); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, groupsliders), clearLabelStyle); + ESPUI.addControl(Control::Type::Slider, "", "30", Control::Color::None, groupsliders, generalCallback); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, groupsliders), clearLabelStyle); //We can also usefully group switchers. - auto groupswitcher = ESPUI.addControl(Switcher, "Switcher Group", "0", Dark, grouptab, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, groupswitcher, generalCallback); - ESPUI.addControl(Switcher, "", "0", Sunflower, groupswitcher, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, groupswitcher, generalCallback); + auto groupswitcher = ESPUI.addControl(Control::Type::Switcher, "Switcher Group", "0", Control::Color::Dark, grouptab, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, groupswitcher, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::Sunflower, groupswitcher, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, groupswitcher, generalCallback); //To label these switchers we need to first go onto a "new line" below the line of switchers //To do this we add an empty label set to be clear and full width (with our clearLabelStyle) - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, groupswitcher), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, groupswitcher), clearLabelStyle); //We will now need another label style. This one sets its width to the same as a switcher (and turns off the background) String switcherLabelStyle = "width: 60px; margin-left: .3rem; margin-right: .3rem; background-color: unset;"; //We can now just add the styled labels. - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, groupswitcher), switcherLabelStyle); //You can mix and match different control types, but the results might sometimes //need additional styling to lay out nicely. - auto grouplabel = ESPUI.addControl(Label, "Mixed Group", "Main label", Dark, grouptab); - auto grouplabel2 = ESPUI.addControl(Label, "", "Secondary label", Emerald, grouplabel); - ESPUI.addControl(Button, "", "Button D", Alizarin, grouplabel, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, grouplabel, generalCallback); + auto grouplabel = ESPUI.addControl(Control::Type::Label, "Mixed Group", "Main label", Control::Color::Dark, grouptab); + auto grouplabel2 = ESPUI.addControl(Control::Type::Label, "", "Secondary label", Control::Color::Emerald, grouplabel); + ESPUI.addControl(Control::Type::Button, "", "Button D", Control::Color::Alizarin, grouplabel, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, grouplabel, generalCallback); ESPUI.setElementStyle(grouplabel2, "font-size: x-large; font-family: serif;"); //Some controls can even support vertical orientation, currently Switchers and Sliders - ESPUI.addControl(Separator, "Vertical controls", "", None, grouptab); - auto vertgroupswitcher = ESPUI.addControl(Switcher, "Vertical Switcher Group", "0", Dark, grouptab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Vertical controls", "", Control::Color::None, grouptab); + auto vertgroupswitcher = ESPUI.addControl(Control::Type::Switcher, "Vertical Switcher Group", "0", Control::Color::Dark, grouptab, generalCallback); ESPUI.setVertical(vertgroupswitcher); //On the following lines we wrap the value returned from addControl and send it straight to setVertical - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); //The mechanism for labelling vertical switchers is the same as we used above for horizontal ones - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, vertgroupswitcher), clearLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, vertgroupswitcher), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, vertgroupswitcher), switcherLabelStyle); - auto vertgroupslider = ESPUI.addControl(Slider, "Vertical Slider Group", "15", Dark, grouptab, generalCallback); + auto vertgroupslider = ESPUI.addControl(Control::Type::Slider, "Vertical Slider Group", "15", Control::Color::Dark, grouptab, generalCallback); ESPUI.setVertical(vertgroupslider); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "25", None, vertgroupslider, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "35", None, vertgroupslider, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "45", None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "25", Control::Color::None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "35", Control::Color::None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "45", Control::Color::None, vertgroupslider, generalCallback)); //The mechanism for labelling vertical sliders is the same as we used above for switchers - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, vertgroupslider), clearLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, vertgroupslider), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, vertgroupslider), switcherLabelStyle); //Note that combining vertical and horizontal sliders is going to result in very messy layout! @@ -263,29 +263,29 @@ void setUpUI() { * Tab: Example UI * An example UI for the documentation *-----------------------------------------------------------------------------------------------------------*/ - auto exampletab = ESPUI.addControl(Tab, "Example", "Example"); - ESPUI.addControl(Separator, "Control and Status", "", None, exampletab); - ESPUI.addControl(Switcher, "Power", "1", Alizarin, exampletab, generalCallback); - ESPUI.addControl(Label, "Status", "System status: OK", Wetasphalt, exampletab, generalCallback); + auto exampletab = ESPUI.addControl(Control::Type::Tab, "Example", "Example"); + ESPUI.addControl(Control::Type::Separator, "Control and Status", "", Control::Color::None, exampletab); + ESPUI.addControl(Control::Type::Switcher, "Power", "1", Control::Color::Alizarin, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Label, "Status", "System status: OK", Control::Color::Wetasphalt, exampletab, generalCallback); - ESPUI.addControl(Separator, "Settings", "", None, exampletab); - ESPUI.addControl(PadWithCenter, "Attitude Control", "", Dark, exampletab, generalCallback); - auto examplegroup1 = ESPUI.addControl(Button, "Activate Features", "Feature A", Carrot, exampletab, generalCallback); - ESPUI.addControl(Button, "Activate Features", "Feature B", Carrot, examplegroup1, generalCallback); - ESPUI.addControl(Button, "Activate Features", "Feature C", Carrot, examplegroup1, generalCallback); - ESPUI.addControl(Slider, "Value control", "45", Peterriver, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Settings", "", Control::Color::None, exampletab); + ESPUI.addControl(Control::Type::PadWithCenter, "Attitude Control", "", Control::Color::Dark, exampletab, generalCallback); + auto examplegroup1 = ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature A", Control::Color::Carrot, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature B", Control::Color::Carrot, examplegroup1, generalCallback); + ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature C", Control::Color::Carrot, examplegroup1, generalCallback); + ESPUI.addControl(Control::Type::Slider, "Value control", "45", Control::Color::Peterriver, exampletab, generalCallback); /* * Tab: WiFi Credentials * You use this tab to enter the SSID and password of a wifi network to autoconnect to. *-----------------------------------------------------------------------------------------------------------*/ - auto wifitab = ESPUI.addControl(Tab, "", "WiFi Credentials"); - wifi_ssid_text = ESPUI.addControl(Text, "SSID", "", Alizarin, wifitab, textCallback); + auto wifitab = ESPUI.addControl(Control::Type::Tab, "", "WiFi Credentials"); + wifi_ssid_text = ESPUI.addControl(Control::Type::Text, "SSID", "", Control::Color::Alizarin, wifitab, textCallback); //Note that adding a "Max" control to a text control sets the max length - ESPUI.addControl(Max, "", "32", None, wifi_ssid_text); - wifi_pass_text = ESPUI.addControl(Text, "Password", "", Alizarin, wifitab, textCallback); - ESPUI.addControl(Max, "", "64", None, wifi_pass_text); - ESPUI.addControl(Button, "Save", "Save", Peterriver, wifitab, enterWifiDetailsCallback); + ESPUI.addControl(Control::Type::Max, "", "32", Control::Color::None, wifi_ssid_text); + wifi_pass_text = ESPUI.addControl(Control::Type::Text, "Password", "", Control::Color::Alizarin, wifitab, textCallback); + ESPUI.addControl(Control::Type::Max, "", "64", Control::Color::None, wifi_pass_text); + ESPUI.addControl(Control::Type::Button, "Save", "Save", Control::Color::Peterriver, wifitab, enterWifiDetailsCallback); //Finally, start up the UI. diff --git a/examples/completeLambda/completeLambda.ino b/examples/completeLambda/completeLambda.ino index a435d93..c2b1810 100644 --- a/examples/completeLambda/completeLambda.ino +++ b/examples/completeLambda/completeLambda.ino @@ -36,7 +36,7 @@ #ifndef CORE_MOCK #ifndef MMU_IRAM_HEAP #warning Try MMU option '2nd heap shared' in 'tools' IDE menu (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#option-summary) -#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap) +#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(Control::Type::...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap) #warning then check http:///heap #endif // MMU_IRAM_HEAP #ifndef DEBUG_ESP_OOM @@ -92,37 +92,37 @@ void setUpUI() { * Tab: Basic Controls * This tab contains all the basic ESPUI controls, and shows how to read and update them at runtime. *-----------------------------------------------------------------------------------------------------------*/ - auto maintab = ESPUI.addControl(Tab, "", "Basic controls"); + auto maintab = ESPUI.addControl(Control::Type::Tab, "", "Basic controls"); - ESPUI.addControl(Separator, "General controls", "", None, maintab); - ESPUI.addControl(Button, "Button", "Button 1", Alizarin, maintab, [](Control *sender, int type){ paramCallback(sender, type, 19); }); - mainLabel = ESPUI.addControl(Label, "Label", "Label text", Emerald, maintab, generalCallback); - mainSwitcher = ESPUI.addControl(Switcher, "Switcher", "", Sunflower, maintab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "General controls", "", Control::Color::None, maintab); + ESPUI.addControl(Control::Type::Button, "Button", "Button 1", Control::Color::Alizarin, maintab, [](Control *sender, int type){ paramCallback(sender, type, 19); }); + mainLabel = ESPUI.addControl(Control::Type::Label, "Label", "Label text", Control::Color::Emerald, maintab, generalCallback); + mainSwitcher = ESPUI.addControl(Control::Type::Switcher, "Switcher", "", Control::Color::Sunflower, maintab, generalCallback); //Sliders default to being 0 to 100, but if you want different limits you can add a Min and Max control - mainSlider = ESPUI.addControl(Slider, "Slider", "200", Turquoise, maintab, generalCallback); - ESPUI.addControl(Min, "", "10", None, mainSlider); - ESPUI.addControl(Max, "", "400", None, mainSlider); + mainSlider = ESPUI.addControl(Control::Type::Slider, "Slider", "200", Control::Color::Turquoise, maintab, generalCallback); + ESPUI.addControl(Control::Type::Min, "", "10", Control::Color::None, mainSlider); + ESPUI.addControl(Control::Type::Max, "", "400", Control::Color::None, mainSlider); //These are the values for the selector's options. (Note that they *must* be declared static //so that the storage is allocated in global memory and not just on the stack of this function.) static String optionValues[] {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"}; - auto mainselector = ESPUI.addControl(Select, "Selector", "Selector", Wetasphalt, maintab, generalCallback); + auto mainselector = ESPUI.addControl(Control::Type::Select, "Selector", "Selector", Control::Color::Wetasphalt, maintab, generalCallback); for(auto const& v : optionValues) { - ESPUI.addControl(Option, v.c_str(), v, None, mainselector); + ESPUI.addControl(Control::Type::Option, v.c_str(), v, Control::Color::None, mainselector); } - mainText = ESPUI.addControl(Text, "Text Input", "Initial value", Alizarin, maintab, generalCallback); + mainText = ESPUI.addControl(Control::Type::Text, "Text Input", "Initial value", Control::Color::Alizarin, maintab, generalCallback); //Number inputs also accept Min and Max components, but you should still validate the values. - mainNumber = ESPUI.addControl(Number, "Number Input", "42", Emerald, maintab, generalCallback); - ESPUI.addControl(Min, "", "10", None, mainNumber); - ESPUI.addControl(Max, "", "50", None, mainNumber); + mainNumber = ESPUI.addControl(Control::Type::Number, "Number Input", "42", Control::Color::Emerald, maintab, generalCallback); + ESPUI.addControl(Control::Type::Min, "", "10", Control::Color::None, mainNumber); + ESPUI.addControl(Control::Type::Max, "", "50", Control::Color::None, mainNumber); - ESPUI.addControl(Separator, "Updates", "", None, maintab); + ESPUI.addControl(Control::Type::Separator, "Updates", "", Control::Color::None, maintab); //This button will update all the updatable controls on this tab to random values - mainScrambleButton = ESPUI.addControl(Button, "Scramble Values", "Scramble Values", Carrot, maintab, + mainScrambleButton = ESPUI.addControl(Control::Type::Button, "Scramble Values", "Scramble Values", Control::Color::Carrot, maintab, //This callback updates the "values" of a bunch of controls [](Control *sender, int type) { static char rndString1[10]; @@ -145,38 +145,38 @@ void setUpUI() { } }); - ESPUI.addControl(Switcher, "Constant updates", "0", Carrot, maintab, + ESPUI.addControl(Control::Type::Switcher, "Constant updates", "0", Control::Color::Carrot, maintab, [](Control *sender, int type) { updates = (sender->value.toInt() > 0); }); - mainTime = ESPUI.addControl(Time, "", "", None, 0, generalCallback); + mainTime = ESPUI.addControl(Control::Type::Time, "", "", Control::Color::None, 0, generalCallback); - ESPUI.addControl(Button, "Get Time", "Get Time", Carrot, maintab, + ESPUI.addControl(Control::Type::Button, "Get Time", "Get Time", Control::Color::Carrot, maintab, [](Control *sender, int type) { if(type == B_UP) { ESPUI.updateTime(mainTime); } }); - ESPUI.addControl(Separator, "Control Pads", "", None, maintab); - ESPUI.addControl(Pad, "Normal", "", Peterriver, maintab, generalCallback); - ESPUI.addControl(PadWithCenter, "With center", "", Peterriver, maintab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Control Pads", "", Control::Color::None, maintab); + ESPUI.addControl(Control::Type::Pad, "Normal", "", Control::Color::Peterriver, maintab, generalCallback); + ESPUI.addControl(Control::Type::PadWithCenter, "With center", "", Control::Color::Peterriver, maintab, generalCallback); /* * Tab: Colours * This tab shows all the basic colours *-----------------------------------------------------------------------------------------------------------*/ - auto colourtab = ESPUI.addControl(Tab, "", "Colours"); - ESPUI.addControl(Button, "Alizarin", "Alizarin", Alizarin, colourtab, generalCallback); - ESPUI.addControl(Button, "Turquoise", "Turquoise", Turquoise, colourtab, generalCallback); - ESPUI.addControl(Button, "Emerald", "Emerald", Emerald, colourtab, generalCallback); - ESPUI.addControl(Button, "Peterriver", "Peterriver", Peterriver, colourtab, generalCallback); - ESPUI.addControl(Button, "Wetasphalt", "Wetasphalt", Wetasphalt, colourtab, generalCallback); - ESPUI.addControl(Button, "Sunflower", "Sunflower", Sunflower, colourtab, generalCallback); - ESPUI.addControl(Button, "Carrot", "Carrot", Carrot, colourtab, generalCallback); - ESPUI.addControl(Button, "Dark", "Dark", Dark, colourtab, generalCallback); + auto colourtab = ESPUI.addControl(Control::Type::Tab, "", "Colours"); + ESPUI.addControl(Control::Type::Button, "Alizarin", "Alizarin", Control::Color::Alizarin, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Turquoise", "Turquoise", Control::Color::Turquoise, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Emerald", "Emerald", Control::Color::Emerald, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Peterriver", "Peterriver", Control::Color::Peterriver, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Wetasphalt", "Wetasphalt", Control::Color::Wetasphalt, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Sunflower", "Sunflower", Control::Color::Sunflower, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Carrot", "Carrot", Control::Color::Carrot, colourtab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Dark", "Dark", Control::Color::Dark, colourtab, generalCallback); /* @@ -184,14 +184,14 @@ void setUpUI() { * This tab shows off how inline CSS styles can be applied to elements and panels in order * to customise the look of the UI. *-----------------------------------------------------------------------------------------------------------*/ - auto styletab = ESPUI.addControl(Tab, "", "Styled controls"); - styleButton = ESPUI.addControl(Button, "Styled Button", "Button", Alizarin, styletab, generalCallback); - styleLabel = ESPUI.addControl(Label, "Styled Label", "This is a label", Alizarin, styletab, generalCallback); - styleSwitcher = ESPUI.addControl(Switcher, "Styled Switcher", "1", Alizarin, styletab, generalCallback); - styleSlider = ESPUI.addControl(Slider, "Styled Slider", "0", Alizarin, styletab, generalCallback); + auto styletab = ESPUI.addControl(Control::Type::Tab, "", "Styled controls"); + styleButton = ESPUI.addControl(Control::Type::Button, "Styled Button", "Button", Control::Color::Alizarin, styletab, generalCallback); + styleLabel = ESPUI.addControl(Control::Type::Label, "Styled Label", "This is a label", Control::Color::Alizarin, styletab, generalCallback); + styleSwitcher = ESPUI.addControl(Control::Type::Switcher, "Styled Switcher", "1", Control::Color::Alizarin, styletab, generalCallback); + styleSlider = ESPUI.addControl(Control::Type::Slider, "Styled Slider", "0", Control::Color::Alizarin, styletab, generalCallback); //This button will randomise the colours of the above controls to show updating of inline styles - ESPUI.addControl(Button, "Randomise Colours", "Randomise Colours", Sunflower, styletab, + ESPUI.addControl(Control::Type::Button, "Randomise Colours", "Randomise Colours", Control::Color::Sunflower, styletab, //This callback generates and applies inline styles to a bunch of controls to change their colour. //The styles created are of the form: // "border-bottom: #999 3px solid; background-color: #aabbcc;" @@ -218,15 +218,15 @@ void setUpUI() { } }); - ESPUI.addControl(Separator, "Other styling examples", "", None, styletab); - styleButton2 = ESPUI.addControl(Button, "Styled Button", "Button", Alizarin, styletab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Other styling examples", "", Control::Color::None, styletab); + styleButton2 = ESPUI.addControl(Control::Type::Button, "Styled Button", "Button", Control::Color::Alizarin, styletab, generalCallback); ESPUI.setPanelStyle(styleButton2, "background: linear-gradient(90deg, rgba(131,58,180,1) 0%, rgba(253,29,29,1) 50%, rgba(252,176,69,1) 100%); border-bottom: #555;"); ESPUI.setElementStyle(styleButton2, "border-radius: 2em; border: 3px solid black; width: 30%; background-color: #8df;"); - styleSlider2 = ESPUI.addControl(Slider, "Styled Slider", "0", Dark, styletab, generalCallback); + styleSlider2 = ESPUI.addControl(Control::Type::Slider, "Styled Slider", "0", Control::Color::Dark, styletab, generalCallback); ESPUI.setElementStyle(styleSlider2, "background: linear-gradient(to right, red, orange, yellow, green, blue);"); - styleLabel2 = ESPUI.addControl(Label, "Styled Label", "This is a label", Dark, styletab, generalCallback); + styleLabel2 = ESPUI.addControl(Control::Type::Label, "Styled Label", "This is a label", Control::Color::Dark, styletab, generalCallback); ESPUI.setElementStyle(styleLabel2, "text-shadow: 3px 3px #74b1ff, 6px 6px #c64ad7; font-size: 60px; font-variant-caps: small-caps; background-color: unset; color: #c4f0bb; -webkit-text-stroke: 1px black;"); @@ -235,14 +235,14 @@ void setUpUI() { * This tab shows how multiple control can be grouped into the same panel through the use of the * parentControl value. This also shows how to add labels to grouped controls, and how to use vertical controls. *-----------------------------------------------------------------------------------------------------------*/ - auto grouptab = ESPUI.addControl(Tab, "", "Grouped controls"); + auto grouptab = ESPUI.addControl(Control::Type::Tab, "", "Grouped controls"); //The parent of this button is a tab, so it will create a new panel with one control. - auto groupbutton = ESPUI.addControl(Button, "Button Group", "Button A", Dark, grouptab, generalCallback); + auto groupbutton = ESPUI.addControl(Control::Type::Button, "Button Group", "Button A", Control::Color::Dark, grouptab, generalCallback); //However the parent of this button is another control, so therefore no new panel is //created and the button is added to the existing panel. - ESPUI.addControl(Button, "", "Button B", Alizarin, groupbutton, generalCallback); - ESPUI.addControl(Button, "", "Button C", Alizarin, groupbutton, generalCallback); + ESPUI.addControl(Control::Type::Button, "", "Button B", Control::Color::Alizarin, groupbutton, generalCallback); + ESPUI.addControl(Control::Type::Button, "", "Button C", Control::Color::Alizarin, groupbutton, generalCallback); //Sliders can be grouped as well @@ -250,65 +250,65 @@ void setUpUI() { //We need this CSS style rule, which will remove the label's background and ensure that it takes up the entire width of the panel String clearLabelStyle = "background-color: unset; width: 100%;"; //First we add the main slider to create a panel - auto groupsliders = ESPUI.addControl(Slider, "Slider Group", "10", Dark, grouptab, generalCallback); + auto groupsliders = ESPUI.addControl(Control::Type::Slider, "Slider Group", "10", Control::Color::Dark, grouptab, generalCallback); //Then we add a label and set its style to the clearLabelStyle. Here we've just given it the name "A" - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, groupsliders), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, groupsliders), clearLabelStyle); //We can now continue to add additional sliders and labels - ESPUI.addControl(Slider, "", "20", None, groupsliders, generalCallback); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, groupsliders), clearLabelStyle); - ESPUI.addControl(Slider, "", "30", None, groupsliders, generalCallback); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, groupsliders), clearLabelStyle); + ESPUI.addControl(Control::Type::Slider, "", "20", Control::Color::None, groupsliders, generalCallback); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, groupsliders), clearLabelStyle); + ESPUI.addControl(Control::Type::Slider, "", "30", Control::Color::None, groupsliders, generalCallback); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, groupsliders), clearLabelStyle); //We can also usefully group switchers. - auto groupswitcher = ESPUI.addControl(Switcher, "Switcher Group", "0", Dark, grouptab, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, groupswitcher, generalCallback); - ESPUI.addControl(Switcher, "", "0", Sunflower, groupswitcher, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, groupswitcher, generalCallback); + auto groupswitcher = ESPUI.addControl(Control::Type::Switcher, "Switcher Group", "0", Control::Color::Dark, grouptab, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, groupswitcher, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::Sunflower, groupswitcher, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, groupswitcher, generalCallback); //To label these switchers we need to first go onto a "new line" below the line of switchers //To do this we add an empty label set to be clear and full width (with our clearLabelStyle) - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, groupswitcher), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, groupswitcher), clearLabelStyle); //We will now need another label style. This one sets its width to the same as a switcher (and turns off the background) String switcherLabelStyle = "width: 60px; margin-left: .3rem; margin-right: .3rem; background-color: unset;"; //We can now just add the styled labels. - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, groupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, groupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, groupswitcher), switcherLabelStyle); //You can mix and match different control types, but the results might sometimes //need additional styling to lay out nicely. - auto grouplabel = ESPUI.addControl(Label, "Mixed Group", "Main label", Dark, grouptab); - auto grouplabel2 = ESPUI.addControl(Label, "", "Secondary label", Emerald, grouplabel); - ESPUI.addControl(Button, "", "Button D", Alizarin, grouplabel, generalCallback); - ESPUI.addControl(Switcher, "", "1", Sunflower, grouplabel, generalCallback); + auto grouplabel = ESPUI.addControl(Control::Type::Label, "Mixed Group", "Main label", Control::Color::Dark, grouptab); + auto grouplabel2 = ESPUI.addControl(Control::Type::Label, "", "Secondary label", Control::Color::Emerald, grouplabel); + ESPUI.addControl(Control::Type::Button, "", "Button D", Control::Color::Alizarin, grouplabel, generalCallback); + ESPUI.addControl(Control::Type::Switcher, "", "1", Control::Color::Sunflower, grouplabel, generalCallback); ESPUI.setElementStyle(grouplabel2, "font-size: x-large; font-family: serif;"); //Some controls can even support vertical orientation, currently Switchers and Sliders - ESPUI.addControl(Separator, "Vertical controls", "", None, grouptab); - auto vertgroupswitcher = ESPUI.addControl(Switcher, "Vertical Switcher Group", "0", Dark, grouptab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Vertical controls", "", Control::Color::None, grouptab); + auto vertgroupswitcher = ESPUI.addControl(Control::Type::Switcher, "Vertical Switcher Group", "0", Control::Color::Dark, grouptab, generalCallback); ESPUI.setVertical(vertgroupswitcher); //On the following lines we wrap the value returned from addControl and send it straight to setVertical - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Switcher, "", "0", None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Switcher, "", "0", Control::Color::None, vertgroupswitcher, generalCallback)); //The mechanism for labelling vertical switchers is the same as we used above for horizontal ones - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, vertgroupswitcher), clearLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, vertgroupswitcher), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, vertgroupswitcher), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, vertgroupswitcher), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, vertgroupswitcher), switcherLabelStyle); - auto vertgroupslider = ESPUI.addControl(Slider, "Vertical Slider Group", "15", Dark, grouptab, generalCallback); + auto vertgroupslider = ESPUI.addControl(Control::Type::Slider, "Vertical Slider Group", "15", Control::Color::Dark, grouptab, generalCallback); ESPUI.setVertical(vertgroupslider); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "25", None, vertgroupslider, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "35", None, vertgroupslider, generalCallback)); - ESPUI.setVertical(ESPUI.addControl(Slider, "", "45", None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "25", Control::Color::None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "35", Control::Color::None, vertgroupslider, generalCallback)); + ESPUI.setVertical(ESPUI.addControl(Control::Type::Slider, "", "45", Control::Color::None, vertgroupslider, generalCallback)); //The mechanism for labelling vertical sliders is the same as we used above for switchers - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "", None, vertgroupslider), clearLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "A", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "B", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "C", None, vertgroupslider), switcherLabelStyle); - ESPUI.setElementStyle(ESPUI.addControl(Label, "", "D", None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "", Control::Color::None, vertgroupslider), clearLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "A", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "B", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "C", Control::Color::None, vertgroupslider), switcherLabelStyle); + ESPUI.setElementStyle(ESPUI.addControl(Control::Type::Label, "", "D", Control::Color::None, vertgroupslider), switcherLabelStyle); //Note that combining vertical and horizontal sliders is going to result in very messy layout! @@ -316,29 +316,29 @@ void setUpUI() { * Tab: Example UI * An example UI for the documentation *-----------------------------------------------------------------------------------------------------------*/ - auto exampletab = ESPUI.addControl(Tab, "Example", "Example"); - ESPUI.addControl(Separator, "Control and Status", "", None, exampletab); - ESPUI.addControl(Switcher, "Power", "1", Alizarin, exampletab, generalCallback); - ESPUI.addControl(Label, "Status", "System status: OK", Wetasphalt, exampletab, generalCallback); + auto exampletab = ESPUI.addControl(Control::Type::Tab, "Example", "Example"); + ESPUI.addControl(Control::Type::Separator, "Control and Status", "", Control::Color::None, exampletab); + ESPUI.addControl(Control::Type::Switcher, "Power", "1", Control::Color::Alizarin, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Label, "Status", "System status: OK", Control::Color::Wetasphalt, exampletab, generalCallback); - ESPUI.addControl(Separator, "Settings", "", None, exampletab); - ESPUI.addControl(PadWithCenter, "Attitude Control", "", Dark, exampletab, generalCallback); - auto examplegroup1 = ESPUI.addControl(Button, "Activate Features", "Feature A", Carrot, exampletab, generalCallback); - ESPUI.addControl(Button, "Activate Features", "Feature B", Carrot, examplegroup1, generalCallback); - ESPUI.addControl(Button, "Activate Features", "Feature C", Carrot, examplegroup1, generalCallback); - ESPUI.addControl(Slider, "Value control", "45", Peterriver, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Separator, "Settings", "", Control::Color::None, exampletab); + ESPUI.addControl(Control::Type::PadWithCenter, "Attitude Control", "", Control::Color::Dark, exampletab, generalCallback); + auto examplegroup1 = ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature A", Control::Color::Carrot, exampletab, generalCallback); + ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature B", Control::Color::Carrot, examplegroup1, generalCallback); + ESPUI.addControl(Control::Type::Button, "Activate Features", "Feature C", Control::Color::Carrot, examplegroup1, generalCallback); + ESPUI.addControl(Control::Type::Slider, "Value control", "45", Control::Color::Peterriver, exampletab, generalCallback); /* * Tab: WiFi Credentials * You use this tab to enter the SSID and password of a wifi network to autoconnect to. *-----------------------------------------------------------------------------------------------------------*/ - auto wifitab = ESPUI.addControl(Tab, "", "WiFi Credentials"); - wifi_ssid_text = ESPUI.addControl(Text, "SSID", "", Alizarin, wifitab, textCallback); + auto wifitab = ESPUI.addControl(Control::Type::Tab, "", "WiFi Credentials"); + wifi_ssid_text = ESPUI.addControl(Control::Type::Text, "SSID", "", Control::Color::Alizarin, wifitab, textCallback); //Note that adding a "Max" control to a text control sets the max length - ESPUI.addControl(Max, "", "32", None, wifi_ssid_text); - wifi_pass_text = ESPUI.addControl(Text, "Password", "", Alizarin, wifitab, textCallback); - ESPUI.addControl(Max, "", "64", None, wifi_pass_text); - ESPUI.addControl(Button, "Save", "Save", Peterriver, wifitab, + ESPUI.addControl(Control::Type::Max, "", "32", Control::Color::None, wifi_ssid_text); + wifi_pass_text = ESPUI.addControl(Control::Type::Text, "Password", "", Control::Color::Alizarin, wifitab, textCallback); + ESPUI.addControl(Control::Type::Max, "", "64", Control::Color::None, wifi_pass_text); + ESPUI.addControl(Control::Type::Button, "Save", "Save", Control::Color::Peterriver, wifitab, [](Control *sender, int type) { if(type == B_UP) { Serial.println("Saving credentials to EPROM..."); diff --git a/examples/gui-generic-api/gui-generic-api.ino b/examples/gui-generic-api/gui-generic-api.ino index 556596b..4fc39b5 100644 --- a/examples/gui-generic-api/gui-generic-api.ino +++ b/examples/gui-generic-api/gui-generic-api.ino @@ -77,7 +77,7 @@ void buttonExample(Control* sender, int type, void* param) Serial.println("Status: Start"); ESPUI.updateControlValue(status, "Start"); - ESPUI.getControl(button1)->color = ControlColor::Carrot; + ESPUI.getControl(button1)->color = Control::Color::Carrot; ESPUI.updateControl(button1); break; @@ -85,7 +85,7 @@ void buttonExample(Control* sender, int type, void* param) Serial.println("Status: Stop"); ESPUI.updateControlValue(status, "Stop"); - ESPUI.getControl(button1)->color = ControlColor::Peterriver; + ESPUI.getControl(button1)->color = Control::Color::Peterriver; ESPUI.updateControl(button1); break; } @@ -252,33 +252,33 @@ void setup(void) { HeapSelectIram doAllocationsInIRAM; #endif - status = ESPUI.addControl(ControlType::Label, "Status:", "Stop", ControlColor::Turquoise); + status = ESPUI.addControl(Control::Type::Label, "Status:", "Stop", Control::Color::Turquoise); uint16_t select1 = ESPUI.addControl( - ControlType::Select, "Select:", "", ControlColor::Alizarin, Control::noParent, &selectExample); + Control::Type::Select, "Select:", "", Control::Color::Alizarin, Control::noParent, &selectExample); - ESPUI.addControl(ControlType::Option, "Option1", "Opt1", ControlColor::Alizarin, select1); - ESPUI.addControl(ControlType::Option, "Option2", "Opt2", ControlColor::Alizarin, select1); - ESPUI.addControl(ControlType::Option, "Option3", "Opt3", ControlColor::Alizarin, select1); + ESPUI.addControl(Control::Type::Option, "Option1", "Opt1", Control::Color::Alizarin, select1); + ESPUI.addControl(Control::Type::Option, "Option2", "Opt2", Control::Color::Alizarin, select1); + ESPUI.addControl(Control::Type::Option, "Option3", "Opt3", Control::Color::Alizarin, select1); ESPUI.addControl( - ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, Control::noParent, &textCall); + Control::Type::Text, "Text Test:", "a Text Field", Control::Color::Alizarin, Control::noParent, &textCall); - millisLabelId = ESPUI.addControl(ControlType::Label, "Millis:", "0", ControlColor::Emerald, Control::noParent); + millisLabelId = ESPUI.addControl(Control::Type::Label, "Millis:", "0", Control::Color::Emerald, Control::noParent); button1 = ESPUI.addControl( - ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, Control::noParent, &buttonCallback); + Control::Type::Button, "Push Button", "Press", Control::Color::Peterriver, Control::noParent, &buttonCallback); ESPUI.addControl( - ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, Control::noParent, &buttonExample, (void*)19); + Control::Type::Button, "Other Button", "Press", Control::Color::Wetasphalt, Control::noParent, &buttonExample, (void*)19); ESPUI.addControl( - ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, Control::noParent, &padExample); - ESPUI.addControl(ControlType::Pad, "Pad without center", "", ControlColor::Carrot, Control::noParent, &padExample); + Control::Type::PadWithCenter, "Pad with center", "", Control::Color::Sunflower, Control::noParent, &padExample); + ESPUI.addControl(Control::Type::Pad, "Pad without center", "", Control::Color::Carrot, Control::noParent, &padExample); switchOne = ESPUI.addControl( - ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, Control::noParent, &switchExample); + Control::Type::Switcher, "Switch one", "", Control::Color::Alizarin, Control::noParent, &switchExample); ESPUI.addControl( - ControlType::Switcher, "Switch two", "", ControlColor::None, Control::noParent, &otherSwitchExample); - ESPUI.addControl(ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, Control::noParent, &slider); - ESPUI.addControl(ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, Control::noParent, &slider); - ESPUI.addControl(ControlType::Number, "Number:", "50", ControlColor::Alizarin, Control::noParent, &numberCall); + Control::Type::Switcher, "Switch two", "", Control::Color::None, Control::noParent, &otherSwitchExample); + ESPUI.addControl(Control::Type::Slider, "Slider one", "30", Control::Color::Alizarin, Control::noParent, &slider); + ESPUI.addControl(Control::Type::Slider, "Slider two", "100", Control::Color::Alizarin, Control::noParent, &slider); + ESPUI.addControl(Control::Type::Number, "Number:", "50", Control::Color::Alizarin, Control::noParent, &numberCall); /* * .begin loads and serves all files from PROGMEM directly. diff --git a/examples/gui/gui.ino b/examples/gui/gui.ino index 71ab831..4e1a619 100644 --- a/examples/gui/gui.ino +++ b/examples/gui/gui.ino @@ -14,7 +14,7 @@ DNSServer dnsServer; #ifndef CORE_MOCK #ifndef MMU_IRAM_HEAP #warning Try MMU option '2nd heap shared' in 'tools' IDE menu (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#option-summary) -#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap) +#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(Control::Type::...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap) #warning then check http:///heap #endif // MMU_IRAM_HEAP #ifndef DEBUG_ESP_OOM @@ -242,20 +242,20 @@ void setup(void) { HeapSelectIram doAllocationsInIRAM; #endif - statusLabelId = ESPUI.label("Status:", ControlColor::Turquoise, "Stop"); - millisLabelId = ESPUI.label("Millis:", ControlColor::Emerald, "0"); - ESPUI.button("Push Button", &buttonCallback, ControlColor::Peterriver, "Press"); - ESPUI.button("Other Button", &buttonExample, ControlColor::Wetasphalt, "Press", (void*)19); - ESPUI.padWithCenter("Pad with center", &padExample, ControlColor::Sunflower); - ESPUI.pad("Pad without center", &padExample, ControlColor::Carrot); - testSwitchId = ESPUI.switcher("Switch one", &switchExample, ControlColor::Alizarin, false); - ESPUI.switcher("Switch two", &otherSwitchExample, ControlColor::None, true); - ESPUI.slider("Slider one", &slider, ControlColor::Alizarin, 30); - ESPUI.slider("Slider two", &slider, ControlColor::None, 100); - ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field"); - ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10); + statusLabelId = ESPUI.label("Status:", Control::Color::Turquoise, "Stop"); + millisLabelId = ESPUI.label("Millis:", Control::Color::Emerald, "0"); + ESPUI.button("Push Button", &buttonCallback, Control::Color::Peterriver, "Press"); + ESPUI.button("Other Button", &buttonExample, Control::Color::Wetasphalt, "Press", (void*)19); + ESPUI.padWithCenter("Pad with center", &padExample, Control::Color::Sunflower); + ESPUI.pad("Pad without center", &padExample, Control::Color::Carrot); + testSwitchId = ESPUI.switcher("Switch one", &switchExample, Control::Color::Alizarin, false); + ESPUI.switcher("Switch two", &otherSwitchExample, Control::Color::None, true); + ESPUI.slider("Slider one", &slider, Control::Color::Alizarin, 30); + ESPUI.slider("Slider two", &slider, Control::Color::None, 100); + ESPUI.text("Text Test:", &textCall, Control::Color::Alizarin, "a Text Field"); + ESPUI.number("Numbertest", &numberCall, Control::Color::Alizarin, 5, 0, 10); - graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt); + graphId = ESPUI.graph("Graph Test", Control::Color::Wetasphalt); /* * .begin loads and serves all files from PROGMEM directly. diff --git a/examples/tabbedGui/tabbedGui.ino b/examples/tabbedGui/tabbedGui.ino index 4831a6b..560af61 100644 --- a/examples/tabbedGui/tabbedGui.ino +++ b/examples/tabbedGui/tabbedGui.ino @@ -76,7 +76,7 @@ void buttonExample(Control* sender, int type, void* param) Serial.println("Status: Start"); ESPUI.updateControlValue(status, "Start"); - ESPUI.getControl(button1)->color = ControlColor::Carrot; + ESPUI.getControl(button1)->color = Control::Color::Carrot; ESPUI.updateControl(button1); break; @@ -84,7 +84,7 @@ void buttonExample(Control* sender, int type, void* param) Serial.println("Status: Stop"); ESPUI.updateControlValue(status, "Stop"); - ESPUI.getControl(button1)->color = ControlColor::Peterriver; + ESPUI.getControl(button1)->color = Control::Color::Peterriver; ESPUI.updateControl(button1); break; } @@ -250,33 +250,33 @@ void setup(void) { HeapSelectIram doAllocationsInIRAM; #endif - uint16_t tab1 = ESPUI.addControl(ControlType::Tab, "Settings 1", "Settings 1"); - uint16_t tab2 = ESPUI.addControl(ControlType::Tab, "Settings 2", "Settings 2"); - uint16_t tab3 = ESPUI.addControl(ControlType::Tab, "Settings 3", "Settings 3"); + uint16_t tab1 = ESPUI.addControl(Control::Type::Tab, "Settings 1", "Settings 1"); + uint16_t tab2 = ESPUI.addControl(Control::Type::Tab, "Settings 2", "Settings 2"); + uint16_t tab3 = ESPUI.addControl(Control::Type::Tab, "Settings 3", "Settings 3"); // shown above all tabs - status = ESPUI.addControl(ControlType::Label, "Status:", "Stop", ControlColor::Turquoise); + status = ESPUI.addControl(Control::Type::Label, "Status:", "Stop", Control::Color::Turquoise); uint16_t select1 - = ESPUI.addControl(ControlType::Select, "Select:", "", ControlColor::Alizarin, tab1, &selectExample); - ESPUI.addControl(ControlType::Option, "Option1", "Opt1", ControlColor::Alizarin, select1); - ESPUI.addControl(ControlType::Option, "Option2", "Opt2", ControlColor::Alizarin, select1); - ESPUI.addControl(ControlType::Option, "Option3", "Opt3", ControlColor::Alizarin, select1); + = ESPUI.addControl(Control::Type::Select, "Select:", "", Control::Color::Alizarin, tab1, &selectExample); + ESPUI.addControl(Control::Type::Option, "Option1", "Opt1", Control::Color::Alizarin, select1); + ESPUI.addControl(Control::Type::Option, "Option2", "Opt2", Control::Color::Alizarin, select1); + ESPUI.addControl(Control::Type::Option, "Option3", "Opt3", Control::Color::Alizarin, select1); - ESPUI.addControl(ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, tab1, &textCall); + ESPUI.addControl(Control::Type::Text, "Text Test:", "a Text Field", Control::Color::Alizarin, tab1, &textCall); // tabbed controls - ESPUI.addControl(ControlType::Label, "Millis:", "0", ControlColor::Emerald, tab1); + ESPUI.addControl(Control::Type::Label, "Millis:", "0", Control::Color::Emerald, tab1); button1 = ESPUI.addControl( - ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, tab1, &buttonCallback); - ESPUI.addControl(ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, tab1, &buttonExample, (void*)19); - ESPUI.addControl(ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, tab2, &padExample); - ESPUI.addControl(ControlType::Pad, "Pad without center", "", ControlColor::Carrot, tab3, &padExample); - switchOne = ESPUI.addControl(ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, tab3, &switchExample); - ESPUI.addControl(ControlType::Switcher, "Switch two", "", ControlColor::None, tab3, &otherSwitchExample); - ESPUI.addControl(ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, tab1, &slider); - ESPUI.addControl(ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, tab3, &slider); - ESPUI.addControl(ControlType::Number, "Number:", "50", ControlColor::Alizarin, tab3, &numberCall); + Control::Type::Button, "Push Button", "Press", Control::Color::Peterriver, tab1, &buttonCallback); + ESPUI.addControl(Control::Type::Button, "Other Button", "Press", Control::Color::Wetasphalt, tab1, &buttonExample, (void*)19); + ESPUI.addControl(Control::Type::PadWithCenter, "Pad with center", "", Control::Color::Sunflower, tab2, &padExample); + ESPUI.addControl(Control::Type::Pad, "Pad without center", "", Control::Color::Carrot, tab3, &padExample); + switchOne = ESPUI.addControl(Control::Type::Switcher, "Switch one", "", Control::Color::Alizarin, tab3, &switchExample); + ESPUI.addControl(Control::Type::Switcher, "Switch two", "", Control::Color::None, tab3, &otherSwitchExample); + ESPUI.addControl(Control::Type::Slider, "Slider one", "30", Control::Color::Alizarin, tab1, &slider); + ESPUI.addControl(Control::Type::Slider, "Slider two", "100", Control::Color::Alizarin, tab3, &slider); + ESPUI.addControl(Control::Type::Number, "Number:", "50", Control::Color::Alizarin, tab3, &numberCall); /* * .begin loads and serves all files from PROGMEM directly. diff --git a/pio_examples/gui/platformio.ini b/pio_examples/gui/platformio.ini index 5c8dc03..9e39669 100644 --- a/pio_examples/gui/platformio.ini +++ b/pio_examples/gui/platformio.ini @@ -17,10 +17,8 @@ framework = arduino board_build.filesystem = littlefs lib_extra_dirs = ../../ lib_deps = -; bblanchon/ArduinoJson @ ^6.18.5 bblanchon/ArduinoJson @ ^7.0.4 https://github.com/bmedici/ESPAsyncWebServer ; Use a fork of the library that has a bugfix for the compile.... https://github.com/esphome/ESPAsyncWebServer/pull/17 - lib_ignore = ESP Async WebServer ; force the use of the esphome version AsyncTCP ; force the use of the esphome version @@ -36,6 +34,8 @@ board = nodemcuv2 upload_port = COM8 monitor_port = COM8 monitor_speed = 115200 +build_flags = +; -D DEBUG_ESPUI [env:esp32] platform = espressif32 @@ -44,10 +44,9 @@ monitor_filters = esp32_exception_decoder board_build.flash_mode = dout build_flags = ; -D DEBUG_ESPUI - lib_deps = ${env.lib_deps} me-no-dev/AsyncTCP -upload_port = COM6 -monitor_port = COM6 +upload_port = COM10 +monitor_port = COM10 monitor_speed = 115200 diff --git a/pio_examples/gui/src/gui.ino b/pio_examples/gui/src/gui.ino index c479db6..1094ae2 100644 --- a/pio_examples/gui/src/gui.ino +++ b/pio_examples/gui/src/gui.ino @@ -172,6 +172,7 @@ void setup(void) ESPUI.setVerbosity(Verbosity::VerboseJSON); Serial.begin(115200); + memset(HugeText, 0x0, sizeof(HugeText)); memset(HugeText, 'a', sizeof(HugeText)-1); @@ -237,26 +238,26 @@ void setup(void) Serial.print("IP address: "); Serial.println(WiFi.getMode() == WIFI_AP ? WiFi.softAPIP() : WiFi.localIP()); - statusLabelId = ESPUI.label("Status:", ControlColor::Turquoise, "Stop"); - millisLabelId = ESPUI.label("Millis:", ControlColor::Emerald, "0"); - ESPUI.button("Push Button", &buttonCallback, ControlColor::Peterriver, "Press"); - ESPUI.button("Other Button", &buttonExample, ControlColor::Wetasphalt, "Press", (void*)19); - ESPUI.padWithCenter("Pad with center", &padExample, ControlColor::Sunflower); - ESPUI.pad("Pad without center", &padExample, ControlColor::Carrot); - testSwitchId = ESPUI.switcher("Switch one", &switchExample, ControlColor::Alizarin, false); - ESPUI.switcher("Switch two", &otherSwitchExample, ControlColor::None, true); - ESPUI.slider("Slider one", &slider, ControlColor::Alizarin, 30, 0, 30); - ESPUI.slider("Slider two", &slider, ControlColor::None, 100); - ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field"); + statusLabelId = ESPUI.label("Status:", Control::Color::Turquoise, "Stop"); + millisLabelId = ESPUI.label("Millis:",Control::Color::Emerald, "0"); + ESPUI.button("Push Button", &buttonCallback,Control::Color::Peterriver, "Press"); + ESPUI.button("Other Button", &buttonExample,Control::Color::Wetasphalt, "Press", (void*)19); + ESPUI.padWithCenter("Pad with center", &padExample,Control::Color::Sunflower); + ESPUI.pad("Pad without center", &padExample,Control::Color::Carrot); + testSwitchId = ESPUI.switcher("Switch one", &switchExample,Control::Color::Alizarin, false); + ESPUI.switcher("Switch two", &otherSwitchExample,Control::Color::None, true); + ESPUI.slider("Slider one", &slider,Control::Color::Alizarin, 30, 0, 30); + ESPUI.slider("Slider two", &slider,Control::Color::None, 100); + ESPUI.text("Text Test:", &textCall,Control::Color::Alizarin, "a Text Field"); - ESPUI.text("Huge Text Test:", &textCall, ControlColor::Alizarin, HugeText); + ESPUI.text("Huge Text Test:", &textCall,Control::Color::Alizarin, HugeText); - ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10); + ESPUI.number("Numbertest", &numberCall,Control::Color::Alizarin, 5, 0, 10); - fileDisplayId = ESPUI.fileDisplay("Filetest", ControlColor::Turquoise, DisplayTestFileName); + fileDisplayId = ESPUI.fileDisplay("Filetest",Control::Color::Turquoise, DisplayTestFileName); #ifdef TEST_GRAPH - graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt); + graphId = ESPUI.graph("Graph Test",Control::Color::Wetasphalt); #endif // def TEST_GRAPH /* diff --git a/src/ESPUI.cpp b/src/ESPUI.cpp index 8852750..2df2796 100644 --- a/src/ESPUI.cpp +++ b/src/ESPUI.cpp @@ -470,28 +470,27 @@ void ESPUIClass::onWsEvent( return; } -uint16_t ESPUIClass::addControl(ControlType type, const char* label) +uint16_t ESPUIClass::addControl(Control::Type type, const char* label) { return addControl(type, label, String("")); } -uint16_t ESPUIClass::addControl(ControlType type, const char* label, const String& value) +uint16_t ESPUIClass::addControl(Control::Type type, const char* label, const String& value) { - return addControl(type, label, value, ControlColor::Turquoise); + return addControl(type, label, value, Control::Color::Turquoise); } -uint16_t ESPUIClass::addControl(ControlType type, const char* label, const String& value, ControlColor color) +uint16_t ESPUIClass::addControl(Control::Type type, const char* label, const String& value, Control::Color color) { return addControl(type, label, value, color, Control::noParent); } -uint16_t ESPUIClass::addControl( - ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl) +uint16_t ESPUIClass::addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl) { return addControl(type, label, value, color, parentControl, new Control(type, label, nullptr, value, color, true, parentControl)); } -uint16_t ESPUIClass::addControl(ControlType type, const char* label, const String& value, ControlColor color, +uint16_t ESPUIClass::addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl, std::function callback) { uint16_t id = addControl(type, label, value, color, parentControl); @@ -500,8 +499,7 @@ uint16_t ESPUIClass::addControl(ControlType type, const char* label, const Strin return id; } -uint16_t ESPUIClass::addControl( - ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl, Control* control) +uint16_t ESPUIClass::addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl, Control* control) { #ifdef ESP32 xSemaphoreTake(ControlsSemaphore, portMAX_DELAY); @@ -601,81 +599,81 @@ void ESPUIClass::RemoveToBeDeletedControls() #endif // def ESP32 } -uint16_t ESPUIClass::label(const char* label, ControlColor color, const String& value) +uint16_t ESPUIClass::label(const char* label, Control::Color color, const String& value) { - return addControl(ControlType::Label, label, value, color); + return addControl(Control::Type::Label, label, value, color); } -uint16_t ESPUIClass::graph(const char* label, ControlColor color) +uint16_t ESPUIClass::graph(const char* label, Control::Color color) { - return addControl(ControlType::Graph, label, "", color); + return addControl(Control::Type::Graph, label, "", color); } uint16_t ESPUIClass::slider( - const char* label, std::function callback, ControlColor color, int value, int min, int max) + const char* label, std::function callback, Control::Color color, int value, int min, int max) { uint16_t sliderId - = addControl(ControlType::Slider, label, String(value), color, Control::noParent, callback); - addControl(ControlType::Min, label, String(min), ControlColor::None, sliderId); - addControl(ControlType::Max, label, String(max), ControlColor::None, sliderId); + = addControl(Control::Type::Slider, label, String(value), color, Control::noParent, callback); + addControl(Control::Type::Min, label, String(min), Control::Color::None, sliderId); + addControl(Control::Type::Max, label, String(max), Control::Color::None, sliderId); return sliderId; } -uint16_t ESPUIClass::button(const char* label, std::function callback, ControlColor color, const String& value) +uint16_t ESPUIClass::button(const char* label, std::function callback, Control::Color color, const String& value) { - return addControl(ControlType::Button, label, value, color, Control::noParent, callback); + return addControl(Control::Type::Button, label, value, color, Control::noParent, callback); } -uint16_t ESPUIClass::switcher(const char* label, std::function callback, ControlColor color, bool startState) +uint16_t ESPUIClass::switcher(const char* label, std::function callback, Control::Color color, bool startState) { - return addControl(ControlType::Switcher, label, startState ? "1" : "0", color, Control::noParent, callback); + return addControl(Control::Type::Switcher, label, startState ? "1" : "0", color, Control::noParent, callback); } -uint16_t ESPUIClass::pad(const char* label, std::function callback, ControlColor color) +uint16_t ESPUIClass::pad(const char* label, std::function callback, Control::Color color) { - return addControl(ControlType::Pad, label, "", color, Control::noParent, callback); + return addControl(Control::Type::Pad, label, "", color, Control::noParent, callback); } -uint16_t ESPUIClass::padWithCenter(const char* label, std::function callback, ControlColor color) +uint16_t ESPUIClass::padWithCenter(const char* label, std::function callback, Control::Color color) { - return addControl(ControlType::PadWithCenter, label, "", color, Control::noParent, callback); + return addControl(Control::Type::PadWithCenter, label, "", color, Control::noParent, callback); } uint16_t ESPUIClass::number( - const char* label, std::function callback, ControlColor color, int number, int min, int max) + const char* label, std::function callback, Control::Color color, int number, int min, int max) { - uint16_t numberId = addControl(ControlType::Number, label, String(number), color, Control::noParent, callback); - addControl(ControlType::Min, label, String(min), ControlColor::None, numberId); - addControl(ControlType::Max, label, String(max), ControlColor::None, numberId); + uint16_t numberId = addControl(Control::Type::Number, label, String(number), color, Control::noParent, callback); + addControl(Control::Type::Min, label, String(min), Control::Color::None, numberId); + addControl(Control::Type::Max, label, String(max), Control::Color::None, numberId); return numberId; } -uint16_t ESPUIClass::gauge(const char* label, ControlColor color, int number, int min, int max) +uint16_t ESPUIClass::gauge(const char* label, Control::Color color, int number, int min, int max) { - uint16_t numberId = addControl(ControlType::Gauge, label, String(number), color, Control::noParent); - addControl(ControlType::Min, label, String(min), ControlColor::None, numberId); - addControl(ControlType::Max, label, String(max), ControlColor::None, numberId); + uint16_t numberId = addControl(Control::Type::Gauge, label, String(number), color, Control::noParent); + addControl(Control::Type::Min, label, String(min), Control::Color::None, numberId); + addControl(Control::Type::Max, label, String(max), Control::Color::None, numberId); return numberId; } uint16_t ESPUIClass::separator(const char* label) { - return addControl(ControlType::Separator, label, "", ControlColor::Alizarin, Control::noParent, nullptr); + return addControl(Control::Type::Separator, label, "", Control::Color::Alizarin, Control::noParent, nullptr); } -uint16_t ESPUIClass::fileDisplay(const char* label, ControlColor color, String filename) +uint16_t ESPUIClass::fileDisplay(const char* label, Control::Color color, String filename) { - return addControl(ControlType::FileDisplay, label, filename, color, Control::noParent); + return addControl(Control::Type::FileDisplay, label, filename, color, Control::noParent); } -uint16_t ESPUIClass::accelerometer(const char* label, std::function callback, ControlColor color) +uint16_t ESPUIClass::accelerometer(const char* label, std::function callback, Control::Color color) { - return addControl(ControlType::Accel, label, "", color, Control::noParent, callback); + return addControl(Control::Type::Accel, label, "", color, Control::noParent, callback); } -uint16_t ESPUIClass::text(const char* label, std::function callback, ControlColor color, const String& value) +uint16_t ESPUIClass::text(const char* label, std::function callback, Control::Color color, const String& value) { - return addControl(ControlType::Text, label, value, color, Control::noParent, callback); + return addControl(Control::Type::Text, label, value, color, Control::noParent, callback); } Control* ESPUIClass::getControl(uint16_t id) @@ -935,7 +933,7 @@ void ESPUIClass::clearGraph(uint16_t id, int clientId) AllocateJsonDocument(document, jsonUpdateDocumentSize); JsonObject root = document.to(); - root[F("type")] = (int)ControlType::Graph + UpdateOffset; + root[F("type")] = (int)Control::Type::Graph + Control::Type::UpdateOffset; root[F("value")] = 0; root[F("id")] = control->id; @@ -957,7 +955,7 @@ void ESPUIClass::addGraphPoint(uint16_t id, int nValue, int clientId) AllocateJsonDocument(document, jsonUpdateDocumentSize); JsonObject root = document.to(); - root[F("type")] = (int)ControlType::GraphPoint; + root[F("type")] = (int)Control::Type::GraphPoint; root[F("value")] = nValue; root[F("id")] = control->id; diff --git a/src/ESPUI.h b/src/ESPUI.h index 0e7bcc4..03c3ad6 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -132,35 +132,35 @@ public: void list(); // Lists LITTLEFS directory void writeFile(const char* path, const char* data); - uint16_t addControl(ControlType type, const char* label); - uint16_t addControl(ControlType type, const char* label, const String& value); - uint16_t addControl(ControlType type, const char* label, const String& value, ControlColor color); - uint16_t addControl(ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl); - uint16_t addControl(ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl, std::function callback); + uint16_t addControl(Control::Type type, const char* label); + uint16_t addControl(Control::Type type, const char* label, const String& value); + uint16_t addControl(Control::Type type, const char* label, const String& value, Control::Color color); + uint16_t addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl); + uint16_t addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl, std::function callback); bool removeControl(uint16_t id, bool force_rebuild_ui = false); // create Elements // Create Event Button - uint16_t button(const char* label, std::function callback, ControlColor color, const String& value = ""); - uint16_t switcher(const char* label, std::function callback, ControlColor color, bool startState = false); // Create Toggle Button - uint16_t pad(const char* label, std::function callback, ControlColor color); // Create Pad Control - uint16_t padWithCenter(const char* label, std::function callback, ControlColor color); // Create Pad Control with Centerbutton - uint16_t slider(const char* label, std::function callback, ControlColor color, int value, int min = 0, int max = 100); // Create Slider Control - uint16_t number(const char* label, std::function callback, ControlColor color, int value, int min = 0, int max = 100); // Create a Number Input Control - uint16_t text(const char* label, std::function callback, ControlColor color, const String& value = ""); // Create a Text Input Control + uint16_t button(const char* label, std::function callback, Control::Color color, const String& value = ""); + uint16_t switcher(const char* label, std::function callback, Control::Color color, bool startState = false); // Create Toggle Button + uint16_t pad(const char* label, std::function callback, Control::Color color); // Create Pad Control + uint16_t padWithCenter(const char* label, std::function callback, Control::Color color); // Create Pad Control with Centerbutton + uint16_t slider(const char* label, std::function callback, Control::Color color, int value, int min = 0, int max = 100); // Create Slider Control + uint16_t number(const char* label, std::function callback, Control::Color color, int value, int min = 0, int max = 100); // Create a Number Input Control + uint16_t text(const char* label, std::function callback, Control::Color color, const String& value = ""); // Create a Text Input Control // Output only - uint16_t label(const char* label, ControlColor color, + uint16_t label(const char* label, Control::Color color, const String& value = ""); // Create Label - uint16_t graph(const char* label, ControlColor color); // Create Graph display - uint16_t gauge(const char* label, ControlColor color, int value, int min = 0, + uint16_t graph(const char* label, Control::Color color); // Create Graph display + uint16_t gauge(const char* label, Control::Color color, int value, int min = 0, int max = 100); // Create Gauge display uint16_t separator(const char* label); //Create separator - uint16_t fileDisplay(const char* label, ControlColor color, String filename); + uint16_t fileDisplay(const char* label, Control::Color color, String filename); // Input only - uint16_t accelerometer(const char* label, std::function callback, ControlColor color); + uint16_t accelerometer(const char* label, std::function callback, Control::Color color); // Update Elements @@ -210,39 +210,39 @@ public: Verbosity verbosity = Verbosity::Quiet; uint32_t GetNextControlChangeId(); // emulate former extended callback API by using an intermediate lambda (no deprecation) - uint16_t addControl(ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl, std::function callback, void* userData) + uint16_t addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl, std::function callback, void* userData) { return addControl(type, label, value, color, parentControl, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }); } - uint16_t button(const char* label, std::function callback, ControlColor color, const String& value, void* userData) + uint16_t button(const char* label, std::function callback, Control::Color color, const String& value, void* userData) { return button(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color, value); } - uint16_t switcher(const char* label, std::function callback, ControlColor color, bool startState, void* userData) + uint16_t switcher(const char* label, std::function callback, Control::Color color, bool startState, void* userData) { return switcher(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color, startState); } - uint16_t pad(const char* label, std::function callback, ControlColor color, void* userData) + uint16_t pad(const char* label, std::function callback, Control::Color color, void* userData) { return pad(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color); } - uint16_t padWithCenter(const char* label, std::function callback, ControlColor color, void* userData) + uint16_t padWithCenter(const char* label, std::function callback, Control::Color color, void* userData) { return padWithCenter(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color); } - uint16_t slider(const char* label, std::function callback, ControlColor color, int value, int min, int max, void* userData) + uint16_t slider(const char* label, std::function callback, Control::Color color, int value, int min, int max, void* userData) { return slider(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color, value, min, max); } - uint16_t number(const char* label, std::function callback, ControlColor color, int value, int min, int max, void* userData) + uint16_t number(const char* label, std::function callback, Control::Color color, int value, int min, int max, void* userData) { return number(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color, value, min, max); } - uint16_t text(const char* label, std::function callback, ControlColor color, const String& value, void* userData) + uint16_t text(const char* label, std::function callback, Control::Color color, const String& value, void* userData) { return text(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); } , color, value); } - uint16_t accelerometer(const char* label, std::function callback, ControlColor color, void* userData) + uint16_t accelerometer(const char* label, std::function callback, Control::Color color, void* userData) { return accelerometer(label, [callback, userData](Control* sender, int type){ callback(sender, type, userData); }, color); } @@ -278,7 +278,7 @@ protected: bool basicAuth = true; uint16_t controlCount = 0; - uint16_t addControl(ControlType type, const char* label, const String& value, ControlColor color, uint16_t parentControl, Control* control); + uint16_t addControl(Control::Type type, const char* label, const String& value, Control::Color color, uint16_t parentControl, Control* control); #define ClientUpdateType_t ESPUIclient::ClientUpdateType_t void NotifyClients(ClientUpdateType_t newState); diff --git a/src/ESPUIcontrol.cpp b/src/ESPUIcontrol.cpp index 36647bf..309fa61 100644 --- a/src/ESPUIcontrol.cpp +++ b/src/ESPUIcontrol.cpp @@ -3,8 +3,8 @@ static uint16_t idCounter = 0; static const String ControlError = "*** ESPUI ERROR: Could not transfer control ***"; -Control::Control(ControlType type, const char* label, std::function callback, - const String& value, ControlColor color, bool visible, uint16_t parentControl) +Control::Control(Control::Type type, const char* label, std::function callback, + const String& value, Control::Color color, bool visible, uint16_t parentControl) : type(type), label(label), callback(callback), @@ -125,7 +125,7 @@ bool Control::MarshalControl(JsonObject & _item, ControlIsFragmented = true; // fill in the fragment header - _item[F("type")] = uint32_t(ControlType::Fragment); + _item[F("type")] = uint32_t(Control::Type::Fragment); _item[F("id")] = id; // Serial.println(String("MarshalControl:Final length: ") + String(length)); @@ -137,10 +137,10 @@ bool Control::MarshalControl(JsonObject & _item, } item[F("id")] = id; - ControlType TempType = (ControlType::Password == type) ? ControlType::Text : type; + Control::Type TempType = (Control::Type::Password == type) ? Control::Type::Text : type; if(refresh) { - item[F("type")] = uint32_t(TempType) + uint32_t(ControlType::UpdateOffset); + item[F("type")] = uint32_t(TempType) + uint32_t(Control::Type::UpdateOffset); } else { @@ -148,7 +148,7 @@ bool Control::MarshalControl(JsonObject & _item, } item[F("label")] = label; - item[F ("value")] = (ControlType::Password == type) ? F ("--------") : value.substring(StartingOffset, StartingOffset + ValueLenToSend); + item[F ("value")] = (Control::Type::Password == type) ? F ("--------") : value.substring(StartingOffset, StartingOffset + ValueLenToSend); item[F("visible")] = visible; item[F("color")] = (int)color; item[F("enabled")] = enabled; @@ -165,7 +165,7 @@ bool Control::MarshalControl(JsonObject & _item, // special case for selects: to preselect an option, you have to add // "selected" to