#include #define EFL_BETA_API_SUPPORT #include #include #include #include "replay.h" #include "home.h" #ifndef NO_SDL_INPUT # include "input.h" #endif #include "config.h" Ecore_Exe* dolphin_netplay_exe; Evas_Object* mainer; Evas_Object* win; Evas_Object* _tab_curr; extern Evas_Object* tab_home; extern Evas_Object* tab_replays; extern Evas_Object* tab_gg; Evas_Object* _tabs[] = { NULL, NULL }; Evas_Object* _scrollers[] = { NULL, NULL }; int _tabs_len = 2; int _tabs_i = 0; // home Evas_Object* tab_config; void update_tab(Evas_Object*); void prev_tab() { --_tabs_i; if (_tabs_i == -1) { _tabs_i = _tabs_len-1; } update_tab(_tabs[_tabs_i]); } void next_tab() { ++_tabs_i; if (_tabs_i == _tabs_len) { _tabs_i = 0; } update_tab(_tabs[_tabs_i]); } void update_tab(Evas_Object* newtab) { elm_obj_box_unpack_all(mainer); evas_object_hide(_tab_curr); if (newtab) { _tab_curr = newtab; evas_object_size_hint_weight_set(_tab_curr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(mainer); evas_object_show(_tab_curr); elm_obj_box_pack_end(mainer, _tab_curr); } } void _tab_switch_cb(void *_data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object** data = _data; update_tab(*data); } void _prev_tab_cb(void *_data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { prev_tab(); } void _next_tab_cb(void *_data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { next_tab(); } Eina_Bool _launch_restore_btn(void* data) { if (data) elm_object_disabled_set(data, EINA_FALSE); return ECORE_CALLBACK_CANCEL; } void _launch_slippi_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { if (data) elm_object_disabled_set(data, EINA_TRUE); ecore_timer_add(3, _launch_restore_btn, data); Eina_Strbuf* exe = eina_strbuf_new(); eina_strbuf_append_printf(exe, "%s -e %s -b", dolphin_emu_file, game_path); dolphin_netplay_exe = ecore_exe_run(eina_strbuf_release(exe), data); //ecore_exe_callback_pre_free_set(exe, _launch_restore_btn); //ecore_thread_run(_launch_slippi_job_cb, // _launch_slippi_job_end_cb, // _launch_slippi_job_end_cb, data); } static void _replays_tab_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { elm_object_item_disabled_set(*(Elm_Object_Item**)data, EINA_TRUE); //ecore_thread_run(_launch_slippi_job_cb, // _launch_slippi_job_end_cb, // _launch_slippi_job_end_cb, data); } void tabs_init() { _tabs[0] = tab_home_setup(mainer); // BEGIN tab_replays _tabs[1] = tab_replays_setup(mainer); _tabs[2] = gg_create_view(mainer); // Show home tab at start _tab_curr = tab_home; evas_object_show(_tab_curr); elm_obj_box_pack_end(mainer, _tab_curr); } EAPI_MAIN int elm_main(int argc, char **argv) { parse_config("minilauncher4slippi.cfg"); /* = win * | * \== bx * | * \== tb (toolbar) * | | * | \== items * | | ... * | * \== tb (table) * | * \== stuff * */ Evas_Object *main, *bx, *tb, *tb_box, *that, *menu; Evas_Object *ph1, *ph2, *ph3, *ph4; Elm_Object_Item *tb_it; Elm_Object_Item *menu_it; win = elm_win_util_standard_add("minilauncher4slippi", "Minilauncher for Slippi"); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); elm_win_autodel_set(win, EINA_TRUE); // BEGIN main main = elm_box_add(win); evas_object_size_hint_weight_set(main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, main); evas_object_show(main); // Check for a 'b' character, aka big picture mode, big mode, whatever.. int bigmode = 0; if (argc > 1 && argv[1] && tolower(argv[1][0]) == 'b') { bigmode = 1; elm_win_fullscreen_set(win, EINA_TRUE); elm_object_scale_set(win, 1.8); } // END main // BEGIN toolbar tb_box = elm_box_add(win); elm_box_horizontal_set(tb_box, EINA_TRUE); if (!bigmode) { tb = elm_toolbar_add(tb_box); elm_object_style_set(tb, "item_horizontal"); elm_toolbar_homogeneous_set(tb, EINA_TRUE); elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_MENU); evas_object_size_hint_weight_set(tb, 1.0, 0.0); evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); evas_object_size_hint_weight_set(tb_box, 2.0, 0.0); evas_object_size_hint_align_set(tb_box, EVAS_HINT_FILL, 0.0); tb_it = elm_toolbar_item_append(tb, "home", "Home", _tab_switch_cb, &tab_home); elm_toolbar_item_priority_set(tb_it, 100); tb_it = elm_toolbar_item_append(tb, "media-seek-backward", "Replays", _tab_switch_cb, &tab_replays); elm_toolbar_item_priority_set(tb_it, -100); tb_it = elm_toolbar_item_append(tb, "network-cellular-gprs", "Start.gg", _tab_switch_cb, &tab_gg); elm_toolbar_item_priority_set(tb_it, 149); tb_it = elm_toolbar_item_append(tb, "preferences-system", "Settings", _tab_switch_cb, &tab_config); elm_toolbar_item_priority_set(tb_it, 150); tb_it = elm_toolbar_item_append(tb, "network-wireless", NULL, NULL, NULL); elm_toolbar_item_menu_set(tb_it, EINA_TRUE); elm_toolbar_item_priority_set(tb_it, -9999); elm_toolbar_menu_parent_set(tb, win); } // Play button that = elm_button_add(tb_box); elm_object_text_set(that, "Play"); evas_object_smart_callback_add(that, "clicked", _launch_slippi_cb, that); Evas_Object* icon = elm_icon_add(win); elm_icon_standard_set(icon, "input-gaming"); elm_icon_resizable_set(icon, EINA_TRUE, EINA_FALSE); elm_object_part_content_set(that, "icon", icon); evas_object_show(that); elm_box_pack_end(tb_box, that); // End play button if (bigmode) { // Prev button that = elm_button_add(tb_box); elm_object_text_set(that, ""); evas_object_smart_callback_add(that, "clicked", _prev_tab_cb, NULL); /*ICON*/icon = elm_icon_add(win); elm_icon_standard_set(icon, "go-previous"); elm_icon_resizable_set(icon, EINA_TRUE, EINA_FALSE); elm_object_part_content_set(that, "icon", icon); /*END ICON*/ evas_object_show(that); elm_box_pack_start(tb_box, that); // Next button that = elm_button_add(tb_box); elm_object_text_set(that, ""); evas_object_smart_callback_add(that, "clicked", _next_tab_cb, that); /*ICON*/icon = elm_icon_add(win); elm_icon_standard_set(icon, "go-next"); elm_icon_resizable_set(icon, EINA_TRUE, EINA_FALSE); elm_object_part_content_set(that, "icon", icon); /*END ICON*/ evas_object_show(that); elm_box_pack_end(tb_box, that); } if (!bigmode) { elm_box_pack_end(tb_box, tb); that = elm_clock_add(tb_box); evas_object_size_hint_fill_set(that, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(that); elm_box_pack_end(tb_box, that); evas_object_show(tb); } elm_box_pack_end(main, tb_box); evas_object_show(tb_box); // END toolbar mainer = elm_box_add(win); //evas_object_size_hint_weight_set(mainer, 0.0, EVAS_HINT_EXPAND); evas_object_size_hint_fill_set(mainer, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(mainer, 1.0, 1.0); evas_object_size_hint_align_set(mainer, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_box_pack_start(main, mainer); evas_object_show(mainer); tabs_init(); evas_object_resize(win, 520 * elm_config_scale_get(), 300 * elm_config_scale_get()); evas_object_show(win); printf("[Current config] %s, %s, %s\n", game_path, dolphin_emu_file, dolphin_replay_file); // Setup input input_init_threads(); elm_run(); cleanup_config(); return 0; } ELM_MAIN()