void SmartObject_DynIconList_SigChange(BasicTriListWithSmartObject currentDevice, SmartObjectEventArgs args)
        {
            SmartObject so           = currentDevice.SmartObjects[args.SmartObjectArgs.ID];
            SmartObject soBtnList    = currentDevice.SmartObjects[SG_BTN_LIST];
            SmartObject soDynBtnList = currentDevice.SmartObjects[SG_DYNAMIC_BTN_LIST];
            Sig         sig          = args.Sig;

            switch (sig.Type)
            {
            case eSigType.Bool:
                if (sig.BoolValue)
                {
                    OnDebug(eDebugEventType.Info, "Press event");
                    switch (sig.Number)
                    {
                    default:
                        int number = StringHelper.Atoi(sig.Name);         // Number is offset by 10 so we need item with no offset
                        // toggle the button feedback and put some text onto it
//                                SG.ToggleSmartObjectDigitalJoin(so, (int)sig.Number);
                        string buttonText = "Item " + sig.Number.ToString() + " " + SG.GetSmartObjectDigitalJoin(so, (int)sig.Number).ToString();
                        //SG.SetSmartObjectText        (so, (int)sig.Number, buttonText);
//                                SG.SetSmartObjectText          (so, number, buttonText);
                        string icon = UI.IconsLgDict[(ushort)number];
                        SG.SetSmartObjectIconSerial(so, number, icon);             // set icon to the next serial

                        //SG.ToggleSmartObjectEnabled(soDynBtnList, number);       // enable

                        //SG.ToggleSmartObjectDigitalJoin(soBtnList, number);
                        //SG.SetSmartObjectText          (soBtnList, number, buttonText);
                        break;
                    }
                }
                else
                {
                    OnDebug(eDebugEventType.Info, "Release event");
                }
                break;

            case eSigType.UShort:
                OnDebug(eDebugEventType.Info, "UShortValue: {0}", sig.UShortValue.ToString());
                break;

            case eSigType.String:
                OnDebug(eDebugEventType.Info, "StringValue: {0}", sig.StringValue);
                break;

            default:
                OnDebug(eDebugEventType.Info, "Unhandled sig type: {0}", sig.Type.ToString());
                break;
            }
        }
        void SmartObject_DynBtnList_SigChange(BasicTriListWithSmartObject currentDevice, SmartObjectEventArgs args)
        {
            SmartObject so            = currentDevice.SmartObjects[args.SmartObjectArgs.ID];
            SmartObject soBtnList     = currentDevice.SmartObjects[SG_BTN_LIST];
            SmartObject soDynIconList = currentDevice.SmartObjects[SG_DYNAMIC_ICON_LIST];
            Sig         sig           = args.Sig;

            switch (sig.Type)
            {
            case eSigType.Bool:
                if (sig.BoolValue)
                {
                    OnDebug(eDebugEventType.Info, "Press event");
                    switch (sig.Number)
                    {
                    default:
                        int number = AVPlus.Utils.StringHelper.Atoi(sig.Name);         // Number is offset by 10 so we need item with no offset
                        // toggle the button feedback and put some text onto it
                        SG.ToggleSmartObjectDigitalJoin(so, (int)sig.Number);
                        string buttonText    = "Item " + sig.Number.ToString() + " " + SG.GetSmartObjectDigitalJoin(so, (int)sig.Number).ToString();
                        string formattedText = UI.FormatTextForUi(buttonText, 20, UI.eCrestronFont.Crestron_Sans_Pro, UI.eNamedColour.White);
                        SG.SetSmartObjectText(so, number, formattedText);

                        SG.ToggleSmartObjectEnabled(soDynIconList, number);               // enable
                        break;
                    }
                }
                else
                {
                    OnDebug(eDebugEventType.Info, "Release event");
                }
                break;

            case eSigType.UShort:
                OnDebug(eDebugEventType.Info, "UShortValue: {0}", sig.UShortValue.ToString());
                break;

            case eSigType.String:
                OnDebug(eDebugEventType.Info, "StringValue: {0}", sig.StringValue);
                break;

            default:
                OnDebug(eDebugEventType.Info, "Unhandled sig type: {0}", sig.Type.ToString());
                break;
            }
        }