exclaim/src/main.c

166 lines
4.8 KiB
C

#include <stdio.h>
#include <Elementary.h>
#include "../exclaim_config.h"
#include "etc.h"
#include "status.h"
Evas_Object* sideview, *sideview_root, *sideview_content;
Ecore_Animator* sb_anime = NULL;
long sideview_show = 0;
void
explode_win_enable(Evas_Object* win);
static Eina_Bool
sideview_toggle_anime_cb(void *data EINA_UNUSED, double pos)
{
long should_show = (long)data;
double v = ecore_animator_pos_map(pos, ECORE_POS_MAP_SINUSOIDAL, 0.0, 0.0);
if (!should_show)
v = 1.0 - v;
if ((v * 80.0) >= 68) sb_anime = NULL;
const float size = should_show ? 400.0 : 400.0;
evas_object_move(sideview_root, (v * size) - (int)size + 68, 0);
//if (pos >= 1.0) sb_anime = NULL;
return EINA_TRUE;
}
void
toggle_sideview()
{
sideview_show = !sideview_show;
sb_anime = ecore_animator_timeline_add(0.4, sideview_toggle_anime_cb, (void*)(long)sideview_show);
}
static void
win_move(void* data EINA_UNUSED, Evas* e EINA_UNUSED, Evas_Object* obj, void* ev_info EINA_UNUSED)
{
Evas_Coord w, h;
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
evas_object_resize(sideview_root, 300, h);
}
Evas_Object*
create_sideview(Evas_Object* parent)
{
sideview_root = E_SHOW(elm_frame_add(parent));
E_BEGIN(sideview_root);
elm_widget_style_set(sideview_root, "outline");
sideview = E_SHOW(elm_scroller_add(parent));
E_BEGIN(sideview);
//sideview_content = E_SHOW(elm_box_add(sideview_root));
E_BEGIN(sideview_content);
//elm_object_content_set(sideview, sideview_content);
E_END(sideview_content);
E_END(sideview);
elm_object_content_set(sideview_root, sideview);
E_END(sideview_root);
evas_object_resize(sideview_root, 300, 0);
evas_object_move(sideview_root, 68, 0);
return sideview_root;
}
static void
_cb_toggle_sideview(void* data,
Evas_Object* obj EINA_UNUSED,
void* ev_info EINA_UNUSED)
{
toggle_sideview();
}
Evas_Object*
create_sidebar(Evas_Object* parent)
{
Evas_Object* o;
Evas_Object* sb = elm_toolbar_add(parent);
evas_object_size_hint_weight_set(sb, 0.0, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(sb, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_toolbar_horizontal_set(sb, EINA_FALSE);
elm_toolbar_homogeneous_set(sb, EINA_TRUE);
elm_toolbar_shrink_mode_set(sb, ELM_TOOLBAR_SHRINK_MENU);
o = elm_toolbar_item_append(sb, "home", "Home", NULL, NULL);
elm_toolbar_item_priority_set(o, 1);
o = elm_toolbar_item_append(sb, "user-away", "Local", NULL, NULL);
elm_toolbar_item_priority_set(o, 0);
o = elm_toolbar_item_append(sb, "applications-internet", "Federated", NULL, NULL);
elm_toolbar_item_priority_set(o, 0);
o = elm_toolbar_item_append(sb, "mail-unread", "Notifications", _cb_toggle_sideview, NULL);
elm_toolbar_item_priority_set(o, 1);
o = elm_toolbar_item_append(sb, "view-list-compact", "Lists", _cb_toggle_sideview, NULL);
elm_toolbar_item_priority_set(o, -1);
o = elm_toolbar_item_append(sb, "mail-send", "Direct", NULL, NULL);
elm_toolbar_item_priority_set(o, -2);
return sb;
}
EAPI_MAIN int
elm_main(int argc, char** argv)
{
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR);
elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR);
elm_app_compile_data_dir_set(PACKAGE_DATA_DIR);
elm_app_info_set(elm_main, "exclaim", "checkme");
Evas_Object* win = E_SHOW(elm_win_util_standard_add("exclaim_root", "Exclaim"));
E_BEGIN(win);
elm_win_icon_name_set(win, "email-unread");
elm_win_autodel_set(win, EINA_TRUE);
evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, win_move, NULL);
explode_win_enable(win);
Evas_Object* root = E_SHOW(elm_box_add(win));
E_BEGIN(root);
elm_box_horizontal_set(root, EINA_TRUE);
evas_object_fullsize(root);
Evas_Object* sidebar = E_SHOW(create_sidebar(win));
elm_box_pack_end(root, sidebar);
Evas_Object* status_scr = E_SHOW(elm_scroller_add(win));
E_BEGIN(status_scr);
evas_object_fullsize(status_scr);
Evas_Object* status_content = E_SHOW(elm_box_add(status_scr));
E_BEGIN(status_content);
evas_object_fullsize(status_content);
elm_object_content_set(status_scr, status_content);
for (int i = 0; i < 30; ++i)
{
struct exc_status st_test = {
.title = "wow",
};
Evas_Object* status = E_SHOW(exc_status_add(status_content, st_test));
elm_box_pack_end(status_content, status);
}
Evas_Object* lol = E_SHOW(elm_label_add(status_content));
elm_object_text_set(lol, "¯\\_(ツ)_/¯");
elm_box_pack_end(status_content, lol);
E_END(status_content);
elm_box_pack_end(root, status_scr);
E_END(status_scr);
evas_object_resize(win, ELM_SCALE_SIZE(700), ELM_SCALE_SIZE(300));
elm_win_resize_object_add(win, root);
E_END(root);
E_END(win);
//???
evas_object_stack_above(sidebar, create_sideview(win));
elm_run();
return EXIT_SUCCESS;
}
ELM_MAIN()