summaryrefslogtreecommitdiff
path: root/ElmSharp.Wearable/ElmSharp.Wearable/RotarySelectorItem.cs
blob: d6abba87e17dcb03cb4d0ab2c45aefb3619a63e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using System.Collections.Generic;
using System.Text;

namespace ElmSharp.Wearable
{
    public class RotarySelectorItem
    {
        const string MainTextPartName = "selector,main_text";
        const string SubTextPartName = "selector,sub_text";
        const string IconPartName = "item,icon";
        const string BgPartName = "item,bg_image";
        const string SelectorIconPartName = "selector,icon";

        string _mainText;
        string _subText;

        Color _mainTextColor;
        Color _subTextColor;

        Image _normalIconImage;
        Image _pressedIconImage;
        Image _disabledIconImage;
        Image _selectedIconImage;

        Image _normalBgImage;
        Image _pressedBgImage;
        Image _disabledBgImage;
        Image _selectedBgImage;

        Color _normalBgColor;
        Color _pressedBgColor;
        Color _disabledBgColor;
        Color _selectedBgColor;

        Image _selectorIconImage;

        IntPtr _handle;

        public IntPtr Handle
        {
            set
            {
                if (_handle == value) return;
                _handle = value;

                if (_handle == null) return;

                setPart(ref _mainText, MainTextPartName);
                setPart(ref _subText, SubTextPartName);
                setPart(ref _mainTextColor, MainTextPartName, ItemState.Normal);
                setPart(ref _subTextColor, SubTextPartName, ItemState.Normal);

                setPart(ref _normalIconImage, IconPartName, ItemState.Normal);
                setPart(ref _pressedIconImage, IconPartName, ItemState.Pressed);
                setPart(ref _disabledIconImage, IconPartName, ItemState.Disabled);
                setPart(ref _selectedIconImage, IconPartName, ItemState.Selected);

                setPart(ref _normalBgImage, BgPartName, ItemState.Normal);
                setPart(ref _pressedBgImage, BgPartName, ItemState.Pressed);
                setPart(ref _disabledBgImage, BgPartName, ItemState.Disabled);
                setPart(ref _selectedBgImage, BgPartName, ItemState.Selected);

                setPart(ref _normalBgColor, BgPartName, ItemState.Normal);
                setPart(ref _pressedBgColor, BgPartName, ItemState.Pressed);
                setPart(ref _disabledBgColor, BgPartName, ItemState.Disabled);
                setPart(ref _selectedBgColor, BgPartName, ItemState.Selected);

                setPart(ref _selectorIconImage, SelectorIconPartName, ItemState.Normal);
            }

            get
            {
                return _handle;
            }
        }

        void setPart(ref Image prop, string partName, ItemState state)
        {
            if (prop != null)
            {
                Interop.Eext.eext_rotary_selector_item_part_content_set(Handle, partName, (int)state, prop);
            }
        }
        void setPart(ref Color prop, string partName, ItemState state)
        {
            if (prop != default(Color))
            {
                Interop.Eext.eext_rotary_selector_item_part_color_set(Handle, partName, (int)state, prop.R, prop.G, prop.B, prop.A);
            }
        }

        void setPart(ref string prop, string partName)
        {
            if (prop != null)
            {
                Interop.Eext.eext_rotary_selector_item_part_text_set(Handle, partName, prop);
            }
        }

        void setPart(ref Image prop, string partName, ItemState state, Image img)
        {
            if (prop == img) return;
            prop = img;
            if (Handle != null)
            {
                Interop.Eext.eext_rotary_selector_item_part_content_set(Handle, partName, (int)state, img);
            }
        }

        void setPart(ref Color prop, string partName, ItemState state, Color color)
        {
            if (prop == color) return;
            prop = color;
            if (Handle != null)
            {
                Interop.Eext.eext_rotary_selector_item_part_color_set(Handle, partName, (int)state, color.R, color.G, color.B, color.A);
            }
        }

        void setPart(ref string prop, string partName, string txt)
        {
            if (prop == txt) return;
            prop = txt;
            if (Handle != null)
            {
                Interop.Eext.eext_rotary_selector_item_part_text_set(Handle, partName, txt);
            }
        }

        public string MainText { set => setPart(ref _mainText, MainTextPartName, value); get => _mainText; }
        public string SubText { set => setPart(ref _subText, SubTextPartName, value); get => _subText; }

        public Color MainTextColor { set => setPart(ref _mainTextColor, MainTextPartName, ItemState.Normal, value); get => _mainTextColor; }
        public Color SubextColor { set => setPart(ref _subTextColor, SubTextPartName, ItemState.Normal, value); get => _subTextColor; }

        public Image NormalIconImage { set => setPart(ref _normalIconImage, IconPartName, ItemState.Normal, value); get => _normalIconImage; }
        public Image PressedIconImage { set => setPart(ref _pressedIconImage, IconPartName, ItemState.Pressed, value); get => _pressedIconImage; }
        public Image DisabledIconImage { set => setPart(ref _disabledIconImage, IconPartName, ItemState.Disabled, value); get => _disabledIconImage; }
        public Image SelectedIconImage { set => setPart(ref _selectedIconImage, IconPartName, ItemState.Selected, value); get => _selectedIconImage; }


        public Image NormalBackgroundImage { set => setPart(ref _normalBgImage, BgPartName, ItemState.Normal, value); get => _normalBgImage; }
        public Image PressedBackgroundImage { set => setPart(ref _pressedBgImage, BgPartName, ItemState.Pressed, value); get => _pressedBgImage; }
        public Image DisabledBackgroundImage { set => setPart(ref _disabledBgImage, BgPartName, ItemState.Disabled, value); get => _disabledBgImage; }
        public Image SelectedBackgroundImage { set => setPart(ref _selectedBgImage, BgPartName, ItemState.Selected, value); get => _selectedBgImage; }

        public Color NormalBackgroundColor { set => setPart(ref _normalBgColor, BgPartName, ItemState.Normal, value); get => _normalBgColor; }
        public Color PressedBackgroundColor { set => setPart(ref _pressedBgColor, BgPartName, ItemState.Pressed, value); get => _pressedBgColor; }
        public Color DisabledBackgroundColor { set => setPart(ref _disabledBgColor, BgPartName, ItemState.Disabled, value); get => _disabledBgColor; }
        public Color SelectedBackgroundColor { set => setPart(ref _selectedBgColor, BgPartName, ItemState.Selected, value); get => _selectedBgColor; }

        public Image SelectorIconImage { set => setPart(ref _selectorIconImage, SelectorIconPartName, ItemState.Normal, value); get => _selectorIconImage; }

        internal enum ItemState
        {
            Normal,
            Pressed,
            Disabled,
            Selected
        }
    }
}