Add actual log output to the log panel.

Using Eina_Log we hook in a custom print function that adds lines to our log UI.
This commit is contained in:
Andy Williams 2014-02-26 04:32:12 +00:00
parent d1823902c9
commit 16017019b3
5 changed files with 163 additions and 26 deletions

View File

@ -11,6 +11,7 @@ AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
edi_SOURCES = \
edi_filepanel.c \
edi_logpanel.c \
edi_mainview.c \
edi_main.c

65
src/bin/edi_logpanel.c Normal file
View File

@ -0,0 +1,65 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <Eina.h>
#include "edi_logpanel.h"
#include "edi_private.h"
static Evas_Object *_info_box;
void print_cb(const Eina_Log_Domain *domain,
Eina_Log_Level level,
const char *file,
const char *fnc,
int line,
const char *fmt,
void *data,
va_list args)
{
Evas_Object *txt;
unsigned int printed, buffer_len = 512;
char buffer [buffer_len];
printed = snprintf(buffer, buffer_len, "%s:%s:%s (%d): ",
domain->domain_str, file, fnc, line);
vsnprintf(buffer + printed, buffer_len - printed, fmt, args);
txt = elm_label_add(_info_box);
if (level <= EINA_LOG_LEVEL_ERR)
evas_object_color_set(txt, 255, 63, 63, 255);
else
evas_object_color_set(txt, 255, 255, 255, 255);
elm_object_text_set(txt, buffer);
evas_object_size_hint_weight_set(txt, EVAS_HINT_EXPAND, 0.1);
evas_object_size_hint_align_set(txt, 0.0, EVAS_HINT_FILL);
evas_object_show(txt);
elm_box_pack_end(_info_box, txt);
}
void edi_logpanel_add(Evas_Object *parent)
{
Evas_Object *scroll, *vbx;
scroll = elm_scroller_add(parent);
elm_scroller_gravity_set(scroll, 0.0, 0.0);
evas_object_size_hint_weight_set(scroll, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(scroll, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(scroll);
vbx = elm_box_add(parent);
evas_object_size_hint_weight_set(vbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(vbx);
elm_object_content_set(scroll, vbx);
_info_box = vbx;
eina_log_print_cb_set(print_cb, NULL);
eina_log_color_disable_set(EINA_TRUE);
elm_box_pack_end(parent, scroll);
}

44
src/bin/edi_logpanel.h Normal file
View File

@ -0,0 +1,44 @@
#ifndef EDI_LOGPANEL_H_
# define EDI_LOGPANEL_H_
#include <Elementary.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file
* @brief These routines are used for managing the Edi file panel.
*/
/**
* @brief UI management functions.
* @defgroup UI
*
* @{
*
* Initialisation and management of the log panel UI
*
*/
/**
* Initialize a new Edi logpanel and add it to the parent panel.
*
* @param parent The panel into which the panel will be loaded.
*
* @ingroup UI
*/
void edi_logpanel_add(Evas_Object *parent);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* EDI_LOGPANEL_H_ */

View File

@ -31,17 +31,45 @@ _edi_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info
static void
_edi_file_open_cb(const char *path)
{
INF("Opening %s", path);
edi_mainview_open_path(path);
}
static Evas_Object *
edi_content_setup(Evas_Object *win, const char *path)
{
Evas_Object *panes, *panes_h, *panel, *txt;
Evas_Object *panes, *panes_h, *panel;
panes = elm_panes_add(win);
evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
// add panes
panes_h = elm_panes_add(win);
elm_panes_horizontal_set(panes_h, EINA_TRUE);
evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(panes_h, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(panes_h);
elm_panes_content_right_size_set(panes_h, 0.15);
elm_object_part_content_set(panes, "right", panes_h);
// add lower panel
panel = elm_box_add(win);
evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(panel);
edi_logpanel_add(panel);
elm_object_part_content_set(panes_h, "bottom", panel);
// add main content
panel = elm_box_add(win);
evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(panel);
edi_mainview_add(panel);
elm_object_part_content_set(panes_h, "top", panel);
// add file list
panel = elm_box_add(win);
evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@ -52,31 +80,6 @@ edi_content_setup(Evas_Object *win, const char *path)
elm_object_part_content_set(panes, "left", panel);
elm_panes_content_left_size_set(panes, 0.2);
// add panes
panes_h = elm_panes_add(win);
elm_panes_horizontal_set(panes_h, EINA_TRUE);
evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(panes_h, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(panes_h);
elm_panes_content_right_size_set(panes_h, 0.15);
elm_object_part_content_set(panes, "right", panes_h);
// add main content
panel = elm_box_add(win);
evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(panel);
edi_mainview_add(panel);
elm_object_part_content_set(panes_h, "top", panel);
// add lower panel
txt = elm_label_add(win);
elm_object_text_set(txt, "Info");
evas_object_size_hint_weight_set(txt, EVAS_HINT_EXPAND, 0.1);
evas_object_size_hint_align_set(txt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(txt);
elm_object_part_content_set(panes_h, "bottom", txt);
evas_object_show(panes);
return panes;
@ -230,6 +233,7 @@ edi_win_setup(const char *path)
evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(vbx, content);
ERR("Loaded project at %s", path);
evas_object_resize(win, 560, 420);
evas_object_show(win);

View File

@ -1,6 +1,29 @@
#ifndef EDI_PRIVATE_H_
# define EDI_PRIVATE_H_
extern int _edi_lib_log_dom;
#ifdef CRIT
# undef CRIT
#endif
#define CRIT(...) EINA_LOG_DOM_CRIT(_edi_lib_log_dom, __VA_ARGS__)
#ifdef ERR
# undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(_edi_lib_log_dom, __VA_ARGS__)
#ifdef WRN
# undef WRN
#endif
#define WRN(...) EINA_LOG_DOM_WARN(_edi_lib_log_dom, __VA_ARGS__)
#ifdef INF
# undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(_edi_lib_log_dom, __VA_ARGS__)
#ifdef DBG
# undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_edi_lib_log_dom, __VA_ARGS__)
#define EDI_CONTENT_AUTOSAVE EINA_TRUE
#endif