mirror of
				https://github.com/s00500/ESPUI.git
				synced 2025-11-04 04:13:23 +00:00 
			
		
		
		
	Added mechanism to estimate the marshaled size of a control.
This commit is contained in:
		@@ -19,6 +19,7 @@ Control::Control(ControlType type, const char* label, std::function<void(Control
 | 
			
		||||
{
 | 
			
		||||
    id = ++idCounter;
 | 
			
		||||
    ControlChangeID = 1;
 | 
			
		||||
    EstimateMarshaledSize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Control::Control(const Control& Control)
 | 
			
		||||
@@ -31,7 +32,8 @@ Control::Control(const Control& Control)
 | 
			
		||||
        visible(Control.visible),
 | 
			
		||||
        parentControl(Control.parentControl),
 | 
			
		||||
        next(Control.next),
 | 
			
		||||
        ControlChangeID(Control.ControlChangeID)
 | 
			
		||||
        ControlChangeID(Control.ControlChangeID),
 | 
			
		||||
        EstimatedMarshaledSize(Control.EstimatedMarshaledSize)
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
void Control::SendCallback(int type)
 | 
			
		||||
@@ -97,7 +99,7 @@ void Control::MarshalControl(JsonObject & _item, bool refresh, uint32_t Starting
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    item[F("label")]   = label;
 | 
			
		||||
    item[F ("value")]   = (ControlType::Password == type) ? F ("--------") : value.substring(StartingOffset, length + StartingOffset);
 | 
			
		||||
    item[F ("value")]  = (ControlType::Password == type) ? F ("--------") : value.substring(StartingOffset, length + StartingOffset);
 | 
			
		||||
    item[F("visible")] = visible;
 | 
			
		||||
    item[F("color")]   = (int)color;
 | 
			
		||||
    item[F("enabled")] = enabled;
 | 
			
		||||
@@ -281,3 +283,9 @@ void Control::onWsEvent(String & cmd, String& data)
 | 
			
		||||
    } while (false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Control::EstimateMarshaledSize()
 | 
			
		||||
{
 | 
			
		||||
    EstimatedMarshaledSize = MarshalingOverhead + (JsonMarshalingRatio * (strlen(label) + value.length()));
 | 
			
		||||
 | 
			
		||||
} // EstimateSerializedSize
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -89,12 +89,20 @@ public:
 | 
			
		||||
    void onWsEvent(String& cmd, String& data);
 | 
			
		||||
    inline bool ToBeDeleted() { return _ToBeDeleted; }
 | 
			
		||||
    inline bool NeedsSync(uint32_t lastControlChangeID) {return (false == _ToBeDeleted) && (lastControlChangeID < ControlChangeID);}
 | 
			
		||||
    void    SetControlChangedId(uint32_t value) {ControlChangeID = value;}
 | 
			
		||||
    
 | 
			
		||||
    void    SetControlChangedId(uint32_t value) {ControlChangeID = value; EstimateMarshaledSize();}
 | 
			
		||||
    uint32_t GetEstimatedMarshaledSize() {return EstimatedMarshaledSize;}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    bool _ToBeDeleted = false;
 | 
			
		||||
    uint32_t ControlChangeID = 0;
 | 
			
		||||
    uint32_t EstimatedMarshaledSize = 0;
 | 
			
		||||
    String OldValue = emptyString;
 | 
			
		||||
 | 
			
		||||
    // multiplier for converting a typical controller label and value to a Json object
 | 
			
		||||
    #define JsonMarshalingRatio 6
 | 
			
		||||
    // estimated number of bytes for the fixed portion of a control rendered as Json
 | 
			
		||||
    #define MarshalingOverhead 90
 | 
			
		||||
    void EstimateMarshaledSize();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define UI_TITLE            ControlType::Title
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user