edi/src/bin/edi_scm_main.c

113 lines
2.7 KiB
C

#include <Edi.h>
#include "edi_scm_ui.h"
#include "edi_private.h"
#define DEFAULT_WIDTH 560
#define DEFAULT_HEIGHT 480
static void
_win_del_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
evas_object_del(obj);
ecore_main_loop_quit();
}
static void
_win_title_set(Evas_Object *win, Edi_Scm_Engine *engine)
{
Eina_Strbuf *title;
title = eina_strbuf_new();
eina_strbuf_append_printf(title, _("Edi Source Control :: %s (%s)"),
ecore_file_file_get((char *)engine->root_directory),
engine->name ?: _("unknown"));
elm_win_title_set(win, eina_strbuf_string_get(title));
eina_strbuf_free(title);
}
static Evas_Object *
_win_add(Edi_Scm_Engine *engine)
{
Evas_Object *win, *icon;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("edi_scm", "edi_scm");
icon = elm_icon_add(win);
elm_icon_standard_set(icon, "edi");
elm_win_icon_object_set(win, icon);
evas_object_resize(win, DEFAULT_WIDTH * elm_config_scale_get(), DEFAULT_HEIGHT * elm_config_scale_get());
evas_object_smart_callback_add(win, "delete,request", _win_del_cb, NULL);
_win_title_set(win, engine);
return win;
}
static void
usage(void)
{
printf("Usage: edi_scm [directory]\n\n");
printf("The Enlightened IDE Source Control\n\n");
printf("Options:\n");
printf(" -c, --commit\t\topen with the commit screen.\n");
printf(" -l, --log\t\tshow scm log.\n");
printf(" -h, --help\t\tshow this message.\n");
exit(0);
}
int main(int argc, char **argv)
{
Evas_Object *win;
Edi_Scm_Engine *engine;
const char *arg, *root;
Edi_Scm_Ui_Opts options;
memset(&options, 0, sizeof(Edi_Scm_Ui_Opts));
root = NULL;
for (int i = 1; i < argc; i++)
{
arg = argv[i];
if (!strcmp("-h", arg) || !strcmp("--help", arg))
usage();
else if (!strcmp("-c", arg) || !strcmp("--commit", arg))
options.commit = EINA_TRUE;
else if (!strcmp("-l", arg) || !strcmp("--log", arg))
options.log = EINA_TRUE;
else
root = arg;
}
if (!root) usage();
ecore_init();
elm_init(argc, argv);
if (!ecore_file_is_dir(root))
{
fprintf(stderr, _("Root path must be a directory\n"));
exit(1);
}
engine = edi_scm_init_path(realpath(root, NULL));
if (!engine)
exit(1 << 7);
win = _win_add(engine);
edi_scm_ui_add(win, options);
elm_win_center(win, EINA_TRUE, EINA_TRUE);
evas_object_show(win);
ecore_main_loop_begin();
edi_scm_shutdown();
ecore_shutdown();
elm_shutdown();
return EXIT_SUCCESS;
}