diff --git a/examples/gui-newAPI/gui-newAPI.ino b/examples/gui-newAPI/gui-newAPI.ino index ee7efd8..cb5edd6 100644 --- a/examples/gui-newAPI/gui-newAPI.ino +++ b/examples/gui-newAPI/gui-newAPI.ino @@ -18,19 +18,23 @@ const char* ssid = "ESPUI"; const char* password = "espui"; const char* hostname = "EspuiTest"; -void numberCall( Control sender, int type ) { - Serial.println( sender.value ); +void numberCall( Control* sender, int type ) { + Serial.println( sender->value ); } -void textCall( Control sender, int type ) { - Serial.println( sender.value ); -} +void textCall( Control* sender, int type ) { + Serial.print("Text: ID: "); + Serial.print(sender->id); + Serial.print(", Value: "); + Serial.println( sender->value );} -void slider( Control sender, int type ) { - Serial.println( sender.value ); -} +void slider( Control* sender, int type ) { + Serial.print("Slider: ID: "); + Serial.print(sender->id); + Serial.print(", Value: "); + Serial.println( sender->value );} -void buttonCallback( Control sender, int type ) { +void buttonCallback( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Button DOWN" ); @@ -42,20 +46,20 @@ void buttonCallback( Control sender, int type ) { } } -void buttonExample( Control sender, int type ) { +void buttonExample( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Status: Start" ); - ESPUI.updateControl( "Status", "Start" ); + ESPUI.updateControl( "Status:", "Start" ); break; case B_UP: Serial.println( "Status: Stop" ); - ESPUI.updateControl( "Status", "Stop" ); + ESPUI.updateControl( "Status:", "Stop" ); break; } } -void padExample( Control sender, int value ) { +void padExample( Control* sender, int value ) { switch ( value ) { case P_LEFT_DOWN: Serial.print( "left down" ); @@ -99,10 +103,10 @@ void padExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } -void switchExample( Control sender, int value ) { +void switchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -117,7 +121,7 @@ void switchExample( Control sender, int value ) { Serial.println( sender.id ); } -void otherSwitchExample( Control sender, int value ) { +void otherSwitchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -129,7 +133,7 @@ void otherSwitchExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } void setup( void ) { @@ -181,18 +185,18 @@ void setup( void ) { Serial.print( "IP address: " ); Serial.println( WiFi.getMode() == WIFI_AP ? WiFi.softAPIP() : WiFi.localIP() ); - ESPUI.addControl( ControlType::Label, "Status:", "Stop" ); - ESPUI.addControl( ControlType::Label, "Millis:", "0", ControlColor::Emerald ); - ESPUI.addControl( ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, &buttonCallback ); - ESPUI.addControl( ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, &buttonExample ); - ESPUI.addControl( ControlType::Cpad, "Pad with center", "", ControlColor::Sunflower, &padExample ); - ESPUI.addControl( ControlType::Pad, "Pad without center", "", ControlColor::Carrot, &padExample ); - ESPUI.addControl( ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, &switchExample ); - ESPUI.addControl( ControlType::Switcher, "Switch two", "", ControlColor::None, &otherSwitchExample ); - ESPUI.addControl( ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, &slider ); - ESPUI.addControl( ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, &slider ); - ESPUI.addControl( ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, &textCall ); - ESPUI.addControl( ControlType::Number, "Number:", "50", ControlColor::Alizarin, &numberCall ); + ESPUI.addControl( ControlType::Label, "Status:", "Stop", ControlColor::Turquoise ); + ESPUI.addControl( ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, Control::noParent, &textCall ); + ESPUI.addControl( ControlType::Label, "Millis:", "0", ControlColor::Emerald, Control::noParent ); + ESPUI.addControl( ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, Control::noParent, &buttonCallback ); + ESPUI.addControl( ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, Control::noParent, &buttonExample ); + ESPUI.addControl( ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, Control::noParent, &padExample ); + ESPUI.addControl( ControlType::Pad, "Pad without center", "", ControlColor::Carrot, Control::noParent, &padExample ); + ESPUI.addControl( ControlType::Switcher, "Switch one", "", ControlColor::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 ); /* * .begin loads and serves all files from PROGMEM directly. @@ -223,3 +227,5 @@ void loop( void ) { oldTime = millis(); } } + + diff --git a/examples/gui/gui.ino b/examples/gui/gui.ino index e3df5c3..8f25348 100644 --- a/examples/gui/gui.ino +++ b/examples/gui/gui.ino @@ -21,19 +21,26 @@ const char* hostname = "EspuiTest"; long oldTime = 0; bool switchi = false; -void numberCall( Control sender, int type ) { - Serial.println( sender.value ); + +void numberCall( Control* sender, int type ) { + Serial.println( sender->value ); } -void textCall( Control sender, int type ) { - Serial.println( sender.value ); +void textCall( Control* sender, int type ) { + Serial.print( "Text: ID: " ); + Serial.print( sender->id ); + Serial.print( ", Value: " ); + Serial.println( sender->value ); } -void slider( Control sender, int type ) { - Serial.println( sender.value ); +void slider( Control* sender, int type ) { + Serial.print( "Slider: ID: " ); + Serial.print( sender->id ); + Serial.print( ", Value: " ); + Serial.println( sender->value ); } -void buttonCallback( Control sender, int type ) { +void buttonCallback( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Button DOWN" ); @@ -45,20 +52,20 @@ void buttonCallback( Control sender, int type ) { } } -void buttonExample( Control sender, int type ) { +void buttonExample( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Status: Start" ); - ESPUI.print( 0, "Status: Start" ); + ESPUI.updateControl( "Status:", "Start" ); break; case B_UP: Serial.println( "Status: Stop" ); - ESPUI.print( 0, "Status: Stop" ); + ESPUI.updateControl( "Status:", "Stop" ); break; } } -void padExample( Control sender, int value ) { +void padExample( Control* sender, int value ) { switch ( value ) { case P_LEFT_DOWN: Serial.print( "left down" ); @@ -102,10 +109,10 @@ void padExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } -void switchExample( Control sender, int value ) { +void switchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -117,10 +124,10 @@ void switchExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } -void otherSwitchExample( Control sender, int value ) { +void otherSwitchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -132,7 +139,7 @@ void otherSwitchExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } void setup( void ) { @@ -186,7 +193,7 @@ void setup( void ) { ESPUI.label( "Status:", COLOR_TURQUOISE, "Stop" ); ESPUI.label( "Millis:", COLOR_EMERALD, "0" ); - ESPUI.button( "Push Button", &buttonCallback, COLOR_PETERRIVER ); + ESPUI.button( "Push Button", &buttonCallback, COLOR_PETERRIVER, "Press" ); ESPUI.button( "Other Button", &buttonExample, COLOR_WETASPHALT, "Press" ); ESPUI.pad( "Pad with center", true, &padExample, COLOR_SUNFLOWER ); ESPUI.pad( "Pad without center", false, &padExample, COLOR_CARROT ); diff --git a/examples/tabbedGui/tabbedGui.ino b/examples/tabbedGui/tabbedGui.ino index ebc484d..b80446a 100644 --- a/examples/tabbedGui/tabbedGui.ino +++ b/examples/tabbedGui/tabbedGui.ino @@ -18,19 +18,23 @@ const char* ssid = "ESPUI"; const char* password = "espui"; const char* hostname = "EspuiTest"; -void numberCall( Control sender, int type ) { - Serial.println( sender.value ); +void numberCall( Control* sender, int type ) { + Serial.println( sender->value ); } -void textCall( Control sender, int type ) { - Serial.println( sender.value ); -} +void textCall( Control* sender, int type ) { + Serial.print("Text: ID: "); + Serial.print(sender->id); + Serial.print(", Value: "); + Serial.println( sender->value );} -void slider( Control sender, int type ) { - Serial.println( sender.value ); -} +void slider( Control* sender, int type ) { + Serial.print("Slider: ID: "); + Serial.print(sender->id); + Serial.print(", Value: "); + Serial.println( sender->value );} -void buttonCallback( Control sender, int type ) { +void buttonCallback( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Button DOWN" ); @@ -42,7 +46,7 @@ void buttonCallback( Control sender, int type ) { } } -void buttonExample( Control sender, int type ) { +void buttonExample( Control* sender, int type ) { switch ( type ) { case B_DOWN: Serial.println( "Status: Start" ); @@ -55,7 +59,7 @@ void buttonExample( Control sender, int type ) { break; } } -void padExample( Control sender, int value ) { +void padExample( Control* sender, int value ) { switch ( value ) { case P_LEFT_DOWN: Serial.print( "left down" ); @@ -99,10 +103,10 @@ void padExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } -void switchExample( Control sender, int value ) { +void switchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -117,7 +121,7 @@ void switchExample( Control sender, int value ) { Serial.println( sender.id ); } -void otherSwitchExample( Control sender, int value ) { +void otherSwitchExample( Control* sender, int value ) { switch ( value ) { case S_ACTIVE: Serial.print( "Active:" ); @@ -129,7 +133,7 @@ void otherSwitchExample( Control sender, int value ) { } Serial.print( " " ); - Serial.println( sender.id ); + Serial.println( sender->id ); } void setup( void ) { @@ -180,23 +184,27 @@ void setup( void ) { Serial.println( WiFi.getMode() == WIFI_AP ? "Station" : "Client" ); Serial.print( "IP address: " ); Serial.println( WiFi.getMode() == WIFI_AP ? WiFi.softAPIP() : WiFi.localIP() ); - - 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"); - ESPUI.addControl( ControlType::Label, "Status:", "Stop",ControlColor::Turquoise, nullptr, tab1 ); - ESPUI.addControl( ControlType::Label, "Millis:", "0", ControlColor::Emerald, nullptr, tab1 ); - ESPUI.addControl( ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, &buttonCallback, tab1 ); - ESPUI.addControl( ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, &buttonExample, tab1 ); - ESPUI.addControl( ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, &padExample, tab2 ); - ESPUI.addControl( ControlType::Pad, "Pad without center", "", ControlColor::Carrot, &padExample, tab3 ); - ESPUI.addControl( ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, &switchExample, tab3 ); - ESPUI.addControl( ControlType::Switcher, "Switch two", "", ControlColor::None, &otherSwitchExample, tab3 ); - ESPUI.addControl( ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, &slider, tab1 ); - ESPUI.addControl( ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, &slider, tab3 ); - ESPUI.addControl( ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, &textCall, tab3 ); - ESPUI.addControl( ControlType::Number, "Number:", "50", ControlColor::Alizarin, &numberCall, tab3 ); + 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" ); + + // shown above all tabs + ESPUI.addControl( ControlType::Label, "Status:", "Stop", ControlColor::Turquoise ); + + ESPUI.addControl( ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, tab1, &textCall ); + + // tabbed controls + ESPUI.addControl( ControlType::Label, "Millis:", "0", ControlColor::Emerald, tab1 ); + ESPUI.addControl( ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, tab1, &buttonCallback ); + ESPUI.addControl( ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, tab1, &buttonExample ); + ESPUI.addControl( ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, tab2, &padExample ); + ESPUI.addControl( ControlType::Pad, "Pad without center", "", ControlColor::Carrot, tab3, &padExample ); + 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 ); /* * .begin loads and serves all files from PROGMEM directly. diff --git a/src/ESPUI.cpp b/src/ESPUI.cpp index c0ef0c4..c001c2a 100644 --- a/src/ESPUI.cpp +++ b/src/ESPUI.cpp @@ -299,60 +299,82 @@ void onWsEvent( AsyncWebSocket* server, AsyncWebSocketClient* client, for ( size_t i = 0; i < len; i++ ) { msg += ( char )data[i]; } + uint16_t id = msg.substring( msg.lastIndexOf( ':' ) + 1 ).toInt(); - Control* c = ESPUI.getControl( msg.substring( msg.lastIndexOf( ':' ) + 1 ).toInt() ); + if ( ESPUI.verbosity >= Verbosity::VerboseJSON ) { + Serial.print("WS rec: "); + Serial.println( msg ); + Serial.print( "WS recognised ID: " ); + Serial.println( id ); + } - if ( c != nullptr && c->callback != nullptr ) { - if ( msg.startsWith( "bdown:" ) ) { - c->callback( *c, B_DOWN ); - } else if ( msg.startsWith( "bup:" ) ) { - c->callback( *c, B_UP ); - } else if ( msg.startsWith( "pfdown:" ) ) { - c->callback( *c, P_FOR_DOWN ); - } else if ( msg.startsWith( "pfup:" ) ) { - c->callback( *c, P_FOR_UP ); - } else if ( msg.startsWith( "pldown:" ) ) { - c->callback( *c, P_LEFT_DOWN ); - } else if ( msg.startsWith( "plup:" ) ) { - c->callback( *c, P_LEFT_UP ); - } else if ( msg.startsWith( "prdown:" ) ) { - c->callback( *c, P_RIGHT_DOWN ); - } else if ( msg.startsWith( "prup:" ) ) { - c->callback( *c, P_RIGHT_UP ); - } else if ( msg.startsWith( "pbdown:" ) ) { - c->callback( *c, P_BACK_DOWN ); - } else if ( msg.startsWith( "pbup:" ) ) { - c->callback( *c, P_BACK_UP ); - } else if ( msg.startsWith( "pcdown:" ) ) { - c->callback( *c, P_CENTER_DOWN ); - } else if ( msg.startsWith( "pcup:" ) ) { - c->callback( *c, P_CENTER_UP ); - } else if ( msg.startsWith( "sactive:" ) ) { - ESPUI.updateSwitcher( c->id, true ); - c->callback( *c, S_ACTIVE ); - } else if ( msg.startsWith( "sinactive:" ) ) { - ESPUI.updateSwitcher( c->id, false ); - c->callback( *c, S_INACTIVE ); - } else if ( msg.startsWith( "slvalue:" ) ) { - int value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ).toInt(); - ESPUI.updateSlider( c->id, value, client->id() ); - c->callback( *c, SL_VALUE ); - } else if ( msg.startsWith( "nvalue:" ) ) { - int value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ).toInt(); - ESPUI.updateNumber( c->id, value, client->id() ); - c->callback( *c, N_VALUE ); - } else if ( msg.startsWith( "tvalue:" ) ) { - String value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ); - ESPUI.updateText( c->id, value, client->id() ); - c->callback( *c, T_VALUE ); - } - } else { + Control* c = ESPUI.getControl( id ); + + if ( c == nullptr ) { if ( ESPUI.verbosity ) { - Serial.println( "Maleformated id in websocket message" ); + Serial.print( "No control found for ID " ); + Serial.println( id ); } return; } + + if ( c->callback == nullptr ) { + if ( ESPUI.verbosity ) { + Serial.print( "No callback found for ID " ); + Serial.println( id ); + } + + return; + } + + if ( msg.startsWith( "bdown:" ) ) { + c->callback( c, B_DOWN ); + } else if ( msg.startsWith( "bup:" ) ) { + c->callback( c, B_UP ); + } else if ( msg.startsWith( "pfdown:" ) ) { + c->callback( c, P_FOR_DOWN ); + } else if ( msg.startsWith( "pfup:" ) ) { + c->callback( c, P_FOR_UP ); + } else if ( msg.startsWith( "pldown:" ) ) { + c->callback( c, P_LEFT_DOWN ); + } else if ( msg.startsWith( "plup:" ) ) { + c->callback( c, P_LEFT_UP ); + } else if ( msg.startsWith( "prdown:" ) ) { + c->callback( c, P_RIGHT_DOWN ); + } else if ( msg.startsWith( "prup:" ) ) { + c->callback( c, P_RIGHT_UP ); + } else if ( msg.startsWith( "pbdown:" ) ) { + c->callback( c, P_BACK_DOWN ); + } else if ( msg.startsWith( "pbup:" ) ) { + c->callback( c, P_BACK_UP ); + } else if ( msg.startsWith( "pcdown:" ) ) { + c->callback( c, P_CENTER_DOWN ); + } else if ( msg.startsWith( "pcup:" ) ) { + c->callback( c, P_CENTER_UP ); + } else if ( msg.startsWith( "sactive:" ) ) { + ESPUI.updateSwitcher( c->id, true ); + c->callback( c, S_ACTIVE ); + } else if ( msg.startsWith( "sinactive:" ) ) { + ESPUI.updateSwitcher( c->id, false ); + c->callback( c, S_INACTIVE ); + } else if ( msg.startsWith( "slvalue:" ) ) { + int value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ).toInt(); + ESPUI.updateSlider( c->id, value, client->id() ); + c->callback( c, SL_VALUE ); + } else if ( msg.startsWith( "nvalue:" ) ) { + int value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ).toInt(); + ESPUI.updateNumber( c->id, value, client->id() ); + c->callback( c, N_VALUE ); + } else if ( msg.startsWith( "tvalue:" ) ) { + String value = msg.substring( msg.indexOf( ':' ) + 1, msg.lastIndexOf( ':' ) ); + ESPUI.updateText( c->id, value, client->id() ); + c->callback( c, T_VALUE ); + } else { + if ( ESPUI.verbosity ) { + Serial.println( "Malformated message from the websocket" ); + } + } } break; @@ -363,8 +385,8 @@ void onWsEvent( AsyncWebSocket* server, AsyncWebSocketClient* client, uint16_t ESPUIClass::addControl( ControlType type, const char* label, String value, ControlColor color, - void ( *callback )( Control, int ), - uint16_t parentControl + uint16_t parentControl, + void ( *callback )( Control*, int ) ) { if ( this->getControl( label ) != nullptr ) { if ( this->verbosity ) { @@ -401,39 +423,39 @@ int ESPUIClass::graph( const char* label, ControlColor color ) { } // TODO: this still needs a range setting -int ESPUIClass::slider( const char* label, void ( *callback )( Control, int ), +int ESPUIClass::slider( const char* label, void ( *callback )( Control*, int ), ControlColor color, String value ) { - return addControl( ControlType::Button, label, "", color, callback ); + return addControl( ControlType::Button, label, "", color, Control::noParent, callback ); } -int ESPUIClass::button( const char* label, void ( *callback )( Control, int ), +int ESPUIClass::button( const char* label, void ( *callback )( Control*, int ), ControlColor color, String value ) { - return addControl( ControlType::Button, label, value, color, callback ); + return addControl( ControlType::Button, label, value, color, Control::noParent, callback ); } int ESPUIClass::switcher( const char* label, bool startState, - void ( *callback )( Control, int ), ControlColor color ) { - return addControl( ControlType::Switcher, label, "", color, callback ); + void ( *callback )( Control*, int ), ControlColor color ) { + return addControl( ControlType::Switcher, label, "", color, Control::noParent, callback ); } int ESPUIClass::pad( const char* label, bool center, - void ( *callback )( Control, int ), ControlColor color ) { + void ( *callback )( Control*, int ), ControlColor color ) { if ( center ) { - return addControl( ControlType::PadWithCenter, label, "", color, callback ); + return addControl( ControlType::PadWithCenter, label, "", color, Control::noParent, callback ); } else { - return addControl( ControlType::Pad, label, "", color, callback ); + return addControl( ControlType::Pad, label, "", color, Control::noParent, callback ); } } // TODO: min and max need to be saved, they also need to be sent to the frontend -int ESPUIClass::number( const char* label, void ( *callback )( Control, int ), +int ESPUIClass::number( const char* label, void ( *callback )( Control*, int ), ControlColor color, int number, int min, int max ) { - return addControl( ControlType::Number, label, String( number ), color, callback ); + return addControl( ControlType::Number, label, String( number ), color, Control::noParent, callback ); } -int ESPUIClass::text( const char* label, void ( *callback )( Control, int ), +int ESPUIClass::text( const char* label, void ( *callback )( Control*, int ), ControlColor color, String value ) { - return addControl( ControlType::Text, label, value, color, callback ); + return addControl( ControlType::Text, label, value, color, Control::noParent, callback ); } @@ -556,11 +578,11 @@ void ESPUIClass::updateSlider( String label, int nValue, int clientId ) { } void ESPUIClass::updateSwitcher( uint16_t id, bool nValue, int clientId ) { - updateControl( id, String( int( nValue ? 1 : 0 ) ), clientId ); + updateControl( id, String( nValue ? "1" : "0" ), clientId ); } void ESPUIClass::updateSwitcher( String label, bool nValue, int clientId ) { - updateControl( label, String( int( nValue ? 1 : 0 ) ), clientId ); + updateControl( label, String( nValue ? "1" : "0" ), clientId ); } void ESPUIClass::updateNumber( uint16_t id, int number, int clientId ) { @@ -610,7 +632,7 @@ void ESPUIClass::jsonDom( AsyncWebSocketClient* client ) { item["value"] = String( control->value ); item["color"] = ( int )control->color; - if ( control->parentControl != 0xffff ) { + if ( control->parentControl != Control::noParent ) { item["parentControl"] = String( control->parentControl ); } diff --git a/src/ESPUI.h b/src/ESPUI.h index c08a14a..5fec3f6 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -110,17 +110,18 @@ class Control { ControlType type; uint16_t id; // just mirroring the id here for practical reasons const char* label; - void ( *callback )( Control, int ); + void ( *callback )( Control*, int ); String value; ControlColor color; uint16_t parentControl; - Control* next; + + static constexpr uint16_t noParent = 0xffff; Control( ControlType type, const char* label, - void ( *callback )( Control, int ), - String value, ControlColor color, uint16_t parentControl = 0xffff ) + void ( *callback )( Control*, int ), + String value, ControlColor color, uint16_t parentControl = Control::noParent ) : type( type ), label( label ), callback( callback ), value( value ), color( color ), parentControl(parentControl), next( nullptr ) { id = idCounter++; } @@ -181,25 +182,25 @@ class ESPUIClass { uint16_t addControl( ControlType type, const char* label, String value = String( "" ), ControlColor color = ControlColor::Turquoise, - void ( *callback )( Control, int ) = nullptr, uint16_t parentControl = 0xffff ); + uint16_t parentControl = Control::noParent, void ( *callback )( Control*, int ) = nullptr ); int button( const char* label, - void ( *callback )( Control, int ), ControlColor color, + void ( *callback )( Control*, int ), ControlColor color, String value = "" ); // Create Event Button int switcher( const char* label, bool startState, - void ( *callback )( Control, int ), + void ( *callback )( Control*, int ), ControlColor color ); // Create Toggle Button int pad( const char* label, bool centerButton, - void ( *callback )( Control, int ), + void ( *callback )( Control*, int ), ControlColor color ); // Create Pad Control int slider( const char* label, - void ( *callback )( Control, int ), + void ( *callback )( Control*, int ), ControlColor color, String value ); // Create Slider Control int number( const char* label, - void ( *callback )( Control, int ), + void ( *callback )( Control*, int ), ControlColor color, int number, int min, int max ); // Create a Number Input Control int text( const char* label, - void ( *callback )( Control, int ), + void ( *callback )( Control*, int ), ControlColor color, String value = "" ); // Create a Text Input Control // Output only