2424#include " BaseDialog.h"
2525#include " BaseRenderers.h"
2626#include " EditableLargeNumberMenuItem.h"
27+ #include " ScrollChoiceMenuItem.h"
2728
2829const char PGM_TCM pmemBootStartText[] = " START" ;
2930const char PGM_TCM pmemBootEndText[] = " END" ;
@@ -324,6 +325,12 @@ void TagValueRemoteConnector::nextBootstrap() {
324325 case MENUTYPE_ACTION_VALUE:
325326 encodeActionMenu (parentId, (ActionMenuItem*)bootItem);
326327 break ;
328+ case MENUTYPE_COLOR_VALUE:
329+ encodeColorMenuItem (parentId, reinterpret_cast <Rgb32MenuItem*>(bootItem));
330+ break ;
331+ case MENUTYPE_SCROLLER_VALUE:
332+ encodeScrollMenuItem (parentId, reinterpret_cast <ScrollChoiceMenuItem*>(bootItem));
333+ break ;
327334 default :
328335 break ;
329336 }
@@ -413,6 +420,31 @@ void TagValueRemoteConnector::encodeAnalogItem(int parentId, AnalogMenuItem* ite
413420 transport->endMsg ();
414421}
415422
423+ void TagValueRemoteConnector::encodeScrollMenuItem (int id, ScrollChoiceMenuItem *pItem) {
424+ if (!prepareWriteMsg (MSG_BOOT_SCROLL_CHOICE)) return ;
425+ encodeBaseMenuFields (id, pItem);
426+ transport->writeFieldInt (FIELD_NO_CHOICES, pItem->getNumberOfRows ());
427+ transport->writeFieldInt (FIELD_WIDTH, pItem->getItemWidth ());
428+ transport->writeFieldInt (FIELD_EDIT_MODE, pItem->getMemMode ());
429+
430+ char sz[32 ];
431+ pItem->copyTransportText (sz, sizeof (sz));
432+
433+ transport->writeField (FIELD_CURRENT_VAL, sz);
434+
435+ transport->endMsg ();
436+ }
437+
438+ void TagValueRemoteConnector::encodeColorMenuItem (int id, Rgb32MenuItem *pItem) {
439+ if (!prepareWriteMsg (MSG_BOOT_RGB_COLOR)) return ;
440+ encodeBaseMenuFields (id, pItem);
441+ transport->writeFieldInt (FIELD_ALPHA, pItem->isAlphaInUse ());
442+ char sz[12 ];
443+ pItem->getUnderlying ()->asHtmlString (sz, sizeof sz, true );
444+ transport->writeField (FIELD_CURRENT_VAL, sz);
445+ transport->endMsg ();
446+ }
447+
416448void TagValueRemoteConnector::encodeLargeNumberMenuItem (int parentId, EditableLargeNumberMenuItem* item) {
417449 if (!prepareWriteMsg (MSG_BOOT_LARGENUM)) return ;
418450 encodeBaseMenuFields (parentId, item);
@@ -545,7 +577,8 @@ void TagValueRemoteConnector::encodeActionMenu(int parentId, ActionMenuItem* ite
545577}
546578
547579void TagValueRemoteConnector::encodeChangeValue (MenuItem* theItem) {
548- if (!prepareWriteMsg (MSG_CHANGE_INT)) return ;
580+ char sz[32 ];
581+ if (!prepareWriteMsg (MSG_CHANGE_INT)) return ;
549582 transport->writeFieldInt (FIELD_ID, theItem->getId ());
550583 switch (theItem->getMenuType ()) {
551584 case MENUTYPE_ENUM_VALUE:
@@ -558,8 +591,21 @@ void TagValueRemoteConnector::encodeChangeValue(MenuItem* theItem) {
558591 case MENUTYPE_TIME:
559592 case MENUTYPE_DATE:
560593 case MENUTYPE_LARGENUM_VALUE:
594+ case MENUTYPE_COLOR_VALUE: {
595+ auto rgb = reinterpret_cast <Rgb32MenuItem*>(theItem);
596+ rgb->getUnderlying ()->asHtmlString (sz, sizeof sz, true );
597+ transport->writeField (FIELD_CURRENT_VAL, sz);
598+ transport->writeFieldInt (FIELD_CHANGE_TYPE, CHANGE_ABSOLUTE);
599+ break ;
600+ }
601+ case MENUTYPE_SCROLLER_VALUE: {
602+ auto sc = reinterpret_cast <ScrollChoiceMenuItem*>(theItem);
603+ sc->copyTransportText (sz, sizeof sz);
604+ transport->writeField (FIELD_CURRENT_VAL, sz);
605+ transport->writeFieldInt (FIELD_CHANGE_TYPE, CHANGE_ABSOLUTE);
606+ break ;
607+ }
561608 case MENUTYPE_TEXT_VALUE: {
562- char sz[20 ];
563609 ((RuntimeMenuItem*)theItem)->copyValue (sz, sizeof (sz));
564610 transport->writeField (FIELD_CURRENT_VAL, sz);
565611 transport->writeFieldInt (FIELD_CHANGE_TYPE, CHANGE_ABSOLUTE); // menu host always sends absolute!
0 commit comments