Last active
February 10, 2018 18:02
-
-
Save Helco/429efdad090628ae8998ad5490808273 to your computer and use it in GitHub Desktop.
RebbleOS - Menu layer test app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* test.c | |
* routines for [...] | |
* RebbleOS | |
* | |
* Author: Hermann Noll | |
*/ | |
#include "rebbleos.h" | |
#include "test.h" | |
#include "librebble.h" | |
#include "menu_layer.h" | |
#include "simple_menu_layer.h" | |
#define NUM_MENU_ITEMS 8 | |
static Window *s_main_window; | |
static SimpleMenuLayer *s_simple_menu_layer; | |
static MenuLayer* s_menu_layer; | |
static SimpleMenuSection s_menu_section; | |
static SimpleMenuItem s_menu_items[NUM_MENU_ITEMS]; | |
static MenuRowAlign s_row_align = MenuRowAlignCenter; | |
static MenuLayerReloadBehaviour s_reload_beh = MenuLayerReloadBehaviourManual; | |
static bool s_padding_enabled = true; | |
static void _menu_select_callback(ClickRecognizerRef recognizer, void *context) | |
{ | |
MenuIndex index = menu_layer_get_selected_index(s_menu_layer); | |
if (index.row == 0) { | |
bool value = !menu_layer_get_center_focused(s_menu_layer); | |
s_menu_items[0].subtitle = value ? "true" : "false"; | |
menu_layer_set_center_focused(s_menu_layer, value); | |
} else if (index.row == 1) { | |
const char* name; | |
switch(s_row_align) { | |
default: | |
case MenuRowAlignTop: { | |
s_row_align = MenuRowAlignCenter; | |
name = "center"; | |
}break; | |
case MenuRowAlignCenter: { | |
s_row_align = MenuRowAlignBottom; | |
name = "bottom"; | |
}break; | |
case MenuRowAlignBottom: { | |
s_row_align = MenuRowAlignTop; | |
name = "top"; | |
}break; | |
} | |
s_menu_items[1].subtitle = name; | |
MenuIndex menu_index = menu_layer_get_selected_index(s_menu_layer); | |
menu_layer_set_selected_index(s_menu_layer, menu_index, s_row_align, true); | |
layer_mark_dirty(menu_layer_get_layer(s_menu_layer)); | |
} else if (index.row == 2) { | |
s_padding_enabled = !s_padding_enabled; | |
s_menu_items[2].subtitle = s_padding_enabled ? "true" : "false"; | |
menu_layer_pad_bottom_enable(s_menu_layer, s_padding_enabled); | |
layer_mark_dirty(menu_layer_get_layer(s_menu_layer)); | |
} else if (index.row == 3) { | |
const char* name; | |
switch(s_reload_beh) { | |
default: | |
case MenuLayerReloadBehaviourManual: { | |
s_reload_beh = MenuLayerReloadBehaviourOnSelection; | |
name = "Selection"; | |
}break; | |
case MenuLayerReloadBehaviourOnSelection: { | |
s_reload_beh = MenuLayerReloadBehaviourOnRender; | |
name = "Render"; | |
}break; | |
case MenuLayerReloadBehaviourOnRender: { | |
s_reload_beh = MenuLayerReloadBehaviourManual; | |
name = "Manual"; | |
}break; | |
} | |
s_menu_items[3].subtitle = name; | |
menu_layer_set_reload_behaviour(s_menu_layer, s_reload_beh); | |
layer_mark_dirty(menu_layer_get_layer(s_menu_layer)); | |
} else if (index.row == 4) { | |
layer_mark_dirty(menu_layer_get_layer(s_menu_layer)); | |
} else if (index.row == 5) { | |
menu_layer_reload_data(s_menu_layer); | |
} | |
} | |
static void _menu_next_callback(ClickRecognizerRef recognizer, void *context) | |
{ | |
menu_layer_set_selected_next(s_menu_layer, false, s_row_align, true); | |
} | |
static void _menu_prev_callback(ClickRecognizerRef recognizer, void *context) | |
{ | |
menu_layer_set_selected_next(s_menu_layer, true, s_row_align, true); | |
} | |
static void _deinit(); | |
static void _menu_exit_callback(ClickRecognizerRef recognizer, void* context) | |
{ | |
_deinit(); | |
window_stack_pop(true); | |
appmanager_app_start("System"); | |
} | |
static void _click_provider_config(void *context) | |
{ | |
window_single_click_subscribe(BUTTON_ID_SELECT, (ClickHandler)_menu_select_callback); | |
window_single_click_subscribe(BUTTON_ID_DOWN, (ClickHandler)_menu_next_callback); | |
window_single_click_subscribe(BUTTON_ID_UP, (ClickHandler)_menu_prev_callback); | |
window_single_click_subscribe(BUTTON_ID_BACK, (ClickHandler)_menu_exit_callback); | |
} | |
static void _main_window_load(Window *window) | |
{ | |
int num_a_items = 0; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Centered", | |
.subtitle = "falrue" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Row Align", | |
.subtitle = "center" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Bottom Padding", | |
.subtitle = "true" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Reload Behaviour", | |
.subtitle = "Manual" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Mark as dirty" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "Reload data" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "to" | |
}; | |
s_menu_items[num_a_items++] = (SimpleMenuItem){ | |
.title = "fill" | |
}; | |
s_menu_section = (SimpleMenuSection){ | |
.title = NULL, | |
.items = s_menu_items, | |
.num_items = num_a_items | |
}; | |
Layer *window_layer = window_get_root_layer(window); | |
GRect bounds = layer_get_frame(window_layer); | |
s_simple_menu_layer = simple_menu_layer_create(bounds, window, &s_menu_section, 1, NULL); | |
s_menu_layer = simple_menu_layer_get_menu_layer(s_simple_menu_layer); | |
layer_add_child(window_layer, simple_menu_layer_get_layer(s_simple_menu_layer)); | |
menu_layer_set_highlight_colors(s_menu_layer, GColorRed, GColorBlack); | |
s_menu_items[0].subtitle = menu_layer_get_center_focused(s_menu_layer) ? "true" : "false"; | |
window_set_click_config_provider(window, _click_provider_config | |
); | |
} | |
static void _main_window_unload(Window *window) | |
{ | |
simple_menu_layer_destroy(s_simple_menu_layer); | |
} | |
static void _init() | |
{ | |
s_main_window = window_create(); | |
window_set_window_handlers(s_main_window, (WindowHandlers){ | |
.load = _main_window_load, | |
.unload = _main_window_unload, | |
}); | |
window_stack_push(s_main_window, true); | |
} | |
static void _deinit() | |
{ | |
window_destroy(s_main_window); | |
} | |
void test_main(void) | |
{ | |
_init(); | |
app_event_loop(); | |
_deinit(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment