Subversion Repositories freemyipod

Rev

Rev 808 | Rev 828 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 808 Rev 823
Line 27... Line 27...
27
#include "main.h"
27
#include "main.h"
28
#include "util.h"
28
#include "util.h"
29
#include "settings.h"
29
#include "settings.h"
30
 
30
 
31
 
31
 
32
static struct chooser_renderer_list_itemdata settingchooser_rparams_toolchooser =
32
int settingchooser_time_to_str(char* buf, int buflen, void* setting, int value)
33
{
33
{
34
    .size = LIBUI_POINT(260, 10),
-
 
35
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
36
    .fill_color = 0xa0000000,
-
 
37
    .fill_color_selected = 0x60ffffff,
-
 
38
    .icon_pos = LIBUI_POINT(0, 0),
-
 
39
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
40
                          LIBUI_POINT(0, 0)),
-
 
41
    .icon_opacity = 0,
-
 
42
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
43
                                   LIBUI_POINT(0, 0)),
-
 
44
    .icon_selected_opacity = 0,
-
 
45
    .text = "Return to tools menu",
-
 
46
    .text_pos = LIBUI_POINT(1, 1),
-
 
47
    .text_color = 0xffffffff,
-
 
48
    .text_color_selected = 0xff7fffff
-
 
49
};
-
 
50
 
-
 
51
static struct chooser_renderer_list_itemdata settingchooser_rparams_timeout_initial =
-
 
52
{
-
 
53
    .size = LIBUI_POINT(260, 10),
-
 
54
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
55
    .fill_color = 0xa0000000,
-
 
56
    .fill_color_selected = 0x60ffffff,
-
 
57
    .icon_pos = LIBUI_POINT(0, 0),
-
 
58
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
59
                          LIBUI_POINT(0, 0)),
-
 
60
    .icon_opacity = 0,
-
 
61
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
62
                                   LIBUI_POINT(0, 0)),
-
 
63
    .icon_selected_opacity = 0,
-
 
64
    .text = "Initial timeout",
-
 
65
    .text_pos = LIBUI_POINT(1, 1),
-
 
66
    .text_color = 0xffffffff,
-
 
67
    .text_color_selected = 0xff7fffff
-
 
68
};
-
 
69
 
-
 
70
static struct chooser_renderer_list_itemdata settingchooser_rparams_timeout_idle =
-
 
71
{
-
 
72
    .size = LIBUI_POINT(260, 10),
-
 
73
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
74
    .fill_color = 0xa0000000,
-
 
75
    .fill_color_selected = 0x60ffffff,
-
 
76
    .icon_pos = LIBUI_POINT(0, 0),
-
 
77
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
78
                          LIBUI_POINT(0, 0)),
-
 
79
    .icon_opacity = 0,
-
 
80
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
81
                                   LIBUI_POINT(0, 0)),
-
 
82
    .icon_selected_opacity = 0,
-
 
83
    .text = "Idle timeout",
-
 
84
    .text_pos = LIBUI_POINT(1, 1),
-
 
85
    .text_color = 0xffffffff,
-
 
86
    .text_color_selected = 0xff7fffff
-
 
87
};
-
 
88
 
-
 
89
static struct chooser_renderer_list_itemdata settingchooser_rparams_timeout_item =
-
 
90
{
-
 
91
    .size = LIBUI_POINT(260, 10),
-
 
92
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
93
    .fill_color = 0xa0000000,
-
 
94
    .fill_color_selected = 0x60ffffff,
-
 
95
    .icon_pos = LIBUI_POINT(0, 0),
-
 
96
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
97
                          LIBUI_POINT(0, 0)),
-
 
98
    .icon_opacity = 0,
-
 
99
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
100
                                   LIBUI_POINT(0, 0)),
-
 
101
    .icon_selected_opacity = 0,
-
 
102
    .text = "Timeout boot option",
-
 
103
    .text_pos = LIBUI_POINT(1, 1),
-
 
104
    .text_color = 0xffffffff,
-
 
105
    .text_color_selected = 0xff7fffff
-
 
106
};
-
 
107
 
-
 
108
static struct chooser_renderer_list_itemdata settingchooser_rparams_default_item =
-
 
109
{
-
 
110
    .size = LIBUI_POINT(260, 10),
-
 
111
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
112
    .fill_color = 0xa0000000,
-
 
113
    .fill_color_selected = 0x60ffffff,
-
 
114
    .icon_pos = LIBUI_POINT(0, 0),
-
 
115
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
116
                          LIBUI_POINT(0, 0)),
-
 
117
    .icon_opacity = 0,
-
 
118
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
34
    if (value < SETTINGS_TIMEOUT_CUTOFF) return snprintf(buf, buflen, "%s", "Never");
119
                                   LIBUI_POINT(0, 0)),
35
    return snprintf(buf, buflen, "%dsec", value / 1000000);
120
    .icon_selected_opacity = 0,
-
 
121
    .text = "Default boot option",
-
 
122
    .text_pos = LIBUI_POINT(1, 1),
-
 
123
    .text_color = 0xffffffff,
-
 
124
    .text_color_selected = 0xff7fffff
-
 
125
};
36
}
126
 
37
 
127
static struct chooser_renderer_list_itemdata settingchooser_rparams_fastboot_item =
38
static struct settingchooser_select_options settings_timeout_item_options =
128
{
39
{
129
    .size = LIBUI_POINT(260, 10),
-
 
130
    .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
131
    .fill_color = 0xa0000000,
40
    .optioncount = 4,
132
    .fill_color_selected = 0x60ffffff,
41
    .options =
133
    .icon_pos = LIBUI_POINT(0, 0),
42
    {
134
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
43
        SETTINGCHOOSER_SELECT_OPTION("Power off", "Power off", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
135
                          LIBUI_POINT(0, 0)),
44
        SETTINGCHOOSER_SELECT_OPTION("Rockbox", "Rockbox", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
136
    .icon_opacity = 0,
-
 
137
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
45
        SETTINGCHOOSER_SELECT_OPTION("UMSboot", "UMSboot", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
138
                                   LIBUI_POINT(0, 0)),
46
        SETTINGCHOOSER_SELECT_OPTION("Console", "emCORE console", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL)
139
    .icon_selected_opacity = 0,
-
 
140
    .text = "Fastboot boot option",
-
 
141
    .text_pos = LIBUI_POINT(1, 1),
-
 
142
    .text_color = 0xffffffff,
47
    }
143
    .text_color_selected = 0xff7fffff
-
 
144
};
48
};
145
 
49
 
146
static struct chooser_renderer_list_params settingchooser_rparams =
50
static struct settingchooser_select_options settings_default_item_options =
147
{
51
{
148
    .version = CHOOSER_RENDERER_LIST_PARAMS_VERSION,
-
 
149
    .copy_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
-
 
150
    .copy_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
-
 
151
                              LIBUI_POINT(320, 240)),
-
 
152
    .bg_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
153
    .bg_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
154
                            LIBUI_POINT(0, 0)),
-
 
155
    .bg_opacity = 0,
52
    .optioncount = 4,
156
    .fill_dest = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
157
                               LIBUI_POINT(0, 0)),
-
 
158
    .fill_color = 0,
53
    .options =
-
 
54
    {
159
    .viewport = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(30, 50)),
55
        SETTINGCHOOSER_SELECT_OPTION("Power off", "Power off", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
160
                              LIBUI_POINT(260, 160)),
56
        SETTINGCHOOSER_SELECT_OPTION("Rockbox", "Rockbox", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
161
    .blit_dest = LIBUI_POINT(0, 0),
-
 
162
    .blit_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
57
        SETTINGCHOOSER_SELECT_OPTION("Console", "emCORE console", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
163
                              LIBUI_POINT(320, 240)),
58
        SETTINGCHOOSER_SELECT_OPTION("Tools", "Tools", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL)
164
    .preblit = update_display,
-
 
165
    .postblit = NULL
59
    }
166
};
60
};
167
 
61
 
168
static struct chooser_action_handler_wheel_params settingchooser_aparams =
62
static struct settingchooser_select_options settings_fastboot_item_options =
169
{
63
{
170
    .version = CHOOSER_ACTION_HANDLER_WHEEL_PARAMS_VERSION,
-
 
171
    .stepsperitem = 128,
-
 
172
    .eventfilter = NULL,
-
 
173
    .timeout_initial = TIMEOUT_BLOCK,
-
 
174
    .timeout_idle = TIMEOUT_BLOCK,
-
 
175
    .timeout_item = 0,
-
 
176
    .tick_force_redraw = false,
-
 
177
    .buttoncount = 5,
64
    .optioncount = 4,
178
    .buttonmap =
65
    .options =
179
    {
66
    {
180
        CHOOSER_ACTION_HANDLER_WHEEL_ACTION_SELECT,
67
        SETTINGCHOOSER_SELECT_OPTION("Disabled", "Disabled", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
181
        CHOOSER_ACTION_HANDLER_WHEEL_ACTION_NONE,
68
        SETTINGCHOOSER_SELECT_OPTION("Rockbox", "Rockbox", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
182
        CHOOSER_ACTION_HANDLER_WHEEL_ACTION_CANCEL,
69
        SETTINGCHOOSER_SELECT_OPTION("UMSboot", "UMSboot", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL),
183
        CHOOSER_ACTION_HANDLER_WHEEL_ACTION_NEXT,
-
 
184
        CHOOSER_ACTION_HANDLER_WHEEL_ACTION_PREV
70
        SETTINGCHOOSER_SELECT_OPTION("Console", "emCORE console", LIBUI_SURFACE_NULL, LIBUI_SURFACE_NULL)
185
    }
71
    }
186
};
72
};
187
 
73
 
188
static struct chooser_info settingchooser =
74
static struct settingchooser_info settingchooser =
189
{
75
{
190
    .version = CHOOSER_INFO_VERSION,
76
    .version = SETTINGCHOOSER_INFO_VERSION,
191
    .actionhandler = NULL,
77
    .rendererparams = 
-
 
78
    {
192
    .actionhandlerparams = &settingchooser_aparams,
79
        .version = CHOOSER_RENDERER_LIST_PARAMS_VERSION,
-
 
80
        .copy_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
-
 
81
        .copy_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
-
 
82
                                  LIBUI_POINT(320, 240)),
-
 
83
        .bg_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
84
        .bg_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
85
                                LIBUI_POINT(0, 0)),
-
 
86
        .bg_opacity = 0,
-
 
87
        .fill_dest = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
-
 
88
                                   LIBUI_POINT(0, 0)),
193
    .renderer = NULL,
89
        .fill_color = 0,
-
 
90
        .viewport = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(30, 50)),
-
 
91
                                  LIBUI_POINT(260, 160)),
-
 
92
        .blit_dest = LIBUI_POINT(0, 0),
-
 
93
        .blit_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
-
 
94
                                  LIBUI_POINT(320, 240)),
194
    .rendererparams = &settingchooser_rparams,
95
        .preblit = update_display,
-
 
96
        .postblit = NULL
-
 
97
    },
195
    .userparams = NULL,
98
    .itemparams =
-
 
99
    {
-
 
100
        .size = LIBUI_POINT(260, 10),
-
 
101
        .fill_box = LIBUI_BOX(LIBUI_POINT(0, 0), LIBUI_POINT(260, 10)),
-
 
102
        .fill_color = 0xa0000000,
-
 
103
        .fill_color_selected = 0x60ffffff,
-
 
104
        .fill_color_active = 0x60003f3f,
-
 
105
        .icon_pos = LIBUI_POINT_NULL,
-
 
106
        .icon_opacity = 0,
-
 
107
        .icon_selected_opacity = 0,
-
 
108
        .icon_active_opacity = 0,
-
 
109
        .text_pos = LIBUI_POINT(1, 1),
-
 
110
        .text_color = 0xffffffff,
-
 
111
        .text_color_selected = 0xff7fffff,
-
 
112
        .text_color_active = 0xffff7f7f
-
 
113
    },
-
 
114
    .returntext = "Return to tools menu",
196
    .tickinterval = 10000000,
115
    .tickinterval = 10000000,
197
    .itemcount = 6,
116
    .itemcount = 5,
198
    .defaultitem = 0,
-
 
199
    .items =
117
    .items =
200
    {
118
    {
201
        {
119
        {
202
            .user = (void*)0,
120
            .text = "Initial timeout",
203
            .actionparams = NULL,
121
            .icon = LIBUI_SURFACE_NULL,
-
 
122
            .icon_selected = LIBUI_SURFACE_NULL,
-
 
123
            .type = SETTINGCHOOSER_TYPE_INTEGER,
204
            .renderparams = &settingchooser_rparams_toolchooser
124
            .setting = &settings.timeout_initial,
-
 
125
            .validator = setting_validate,
205
        },
126
            .config.integer =
206
        {
127
            {
207
            .user = (void*)1,
128
                .min = SETTINGS_TIMEOUT_INITIAL_MIN,
208
            .actionparams = NULL,
129
                .max = SETTINGS_TIMEOUT_INITIAL_MAX,
-
 
130
                .step = SETTINGS_TIMEOUT_INITIAL_STEP,
209
            .renderparams = &settingchooser_rparams_timeout_initial
131
                .tostring = settingchooser_time_to_str
-
 
132
            }
210
        },
133
        },
211
        {
134
        {
212
            .user = (void*)2,
135
            .text = "Idle timeout",
-
 
136
            .icon = LIBUI_SURFACE_NULL,
-
 
137
            .icon_selected = LIBUI_SURFACE_NULL,
-
 
138
            .type = SETTINGCHOOSER_TYPE_INTEGER,
-
 
139
            .setting = &settings.timeout_idle,
-
 
140
            .validator = setting_validate,
213
            .actionparams = NULL,
141
            .config.integer =
-
 
142
            {
-
 
143
                .min = SETTINGS_TIMEOUT_IDLE_MIN,
-
 
144
                .max = SETTINGS_TIMEOUT_IDLE_MAX,
-
 
145
                .step = SETTINGS_TIMEOUT_IDLE_STEP,
214
            .renderparams = &settingchooser_rparams_timeout_idle
146
                .tostring = settingchooser_time_to_str
-
 
147
            }
215
        },
148
        },
216
        {
149
        {
217
            .user = (void*)3,
150
            .text = "Timeout action",
218
            .actionparams = NULL,
151
            .icon = LIBUI_SURFACE_NULL,
-
 
152
            .icon_selected = LIBUI_SURFACE_NULL,
-
 
153
            .type = SETTINGCHOOSER_TYPE_SELECT,
219
            .renderparams = &settingchooser_rparams_timeout_item
154
            .setting = &settings.timeout_item,
-
 
155
            .validator = setting_validate,
-
 
156
            .config.select =
-
 
157
            {
-
 
158
                .options = &settings_timeout_item_options
-
 
159
            }
220
        },
160
        },
221
        {
161
        {
222
            .user = (void*)4,
162
            .text = "Default action",
223
            .actionparams = NULL,
163
            .icon = LIBUI_SURFACE_NULL,
-
 
164
            .icon_selected = LIBUI_SURFACE_NULL,
-
 
165
            .type = SETTINGCHOOSER_TYPE_SELECT,
224
            .renderparams = &settingchooser_rparams_default_item
166
            .setting = &settings.default_item,
-
 
167
            .validator = setting_validate,
-
 
168
            .config.select =
-
 
169
            {
-
 
170
                .options = &settings_default_item_options
-
 
171
            }
225
        },
172
        },
226
        {
173
        {
227
            .user = (void*)5,
174
            .text = "Fastboot action",
228
            .actionparams = NULL,
175
            .icon = LIBUI_SURFACE_NULL,
-
 
176
            .icon_selected = LIBUI_SURFACE_NULL,
-
 
177
            .type = SETTINGCHOOSER_TYPE_SELECT,
229
            .renderparams = &settingchooser_rparams_fastboot_item
178
            .setting = &settings.fastboot_item,
-
 
179
            .validator = setting_validate,
-
 
180
            .config.select =
-
 
181
            {
-
 
182
                .options = &settings_fastboot_item_options
-
 
183
            }
230
        }
184
        }
231
    }
185
    }
232
};
186
};
233
 
187
 
234
void run_settingchooser(void** firmware, void** app, int* size)
188
void run_settingchooser(void** firmware, void** app, int* size)
235
{
189
{
-
 
190
    bool changes = ui->settingchooser_run(&settingchooser);
236
    while (true)
191
    if (changes)
237
    {
192
    {
238
        const struct chooser_item* result = ui->chooser_run(&settingchooser);
-
 
239
        if (!result || !result->user)
-
 
240
        {
-
 
241
            rendertext(framebuf, 106, 140, 320, 0xff33ffff, 0xa0000000, "Saving settings...");
193
        rendertext(framebuf, 106, 140, 320, 0xff33ffff, 0xa0000000, "Saving settings...");
242
            displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
194
        displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
243
            settings_validate_all();
195
        settings_validate_all();
244
            settings_save();
196
        settings_save();
245
            settings_apply();
197
        settings_apply();
246
            return;
-
 
247
        }
-
 
248
        int new;
-
 
249
        switch ((int)result->user)
-
 
250
        {
-
 
251
            case 3:
-
 
252
                new = run_bootoptionchooser(settings.timeout_item, "Power off", "Rockbox", "UMSboot", "emCORE console");
-
 
253
                if (new != -1) settings.timeout_item = new;
-
 
254
                break;
-
 
255
                
-
 
256
            case 4:
-
 
257
                new = run_bootoptionchooser(settings.default_item, "Power off", "Rockbox", "emCORE console", "Tools");
-
 
258
                if (new != -1) settings.default_item = new;
-
 
259
                break;
-
 
260
                
-
 
261
            case 5:
-
 
262
                new = run_bootoptionchooser(settings.fastboot_item, "Disabled", "Rockbox", "UMSboot", "emCORE console");
-
 
263
                if (new != -1) settings.fastboot_item = new;
-
 
264
                break;
-
 
265
        }
-
 
266
    }
198
    }
267
}
199
}
268
 
200
 
269
void settingchooser_init()
201
void settingchooser_init()
270
{
202
{
271
    settingchooser.actionhandler = ui->chooser_action_handler_wheel;
-
 
272
    settingchooser.renderer = ui->chooser_renderer_list;
-
 
273
    settingchooser_rparams.copy_dest.buf.addr = framebuf;
203
    settingchooser.rendererparams.copy_dest.buf.addr = framebuf;
274
    settingchooser_rparams.copy_src.loc.buf.addr = bg;
204
    settingchooser.rendererparams.copy_src.loc.buf.addr = bg;
275
    settingchooser_rparams.viewport.loc.buf.addr = framebuf;
205
    settingchooser.rendererparams.viewport.loc.buf.addr = framebuf;
276
    settingchooser_rparams.blit_src.loc.buf.addr = framebuf;
206
    settingchooser.rendererparams.blit_src.loc.buf.addr = framebuf;
277
}
207
}