add bar graph object and code to handle this in custom details
This commit is contained in:
parent
b3c2931d58
commit
ad6f12665a
|
@ -153,10 +153,10 @@ function handle_cmd_dir_set() {
|
|||
e_cmd "file-add path="${F}" "${M}" "${D}\
|
||||
" detail1=std:software-update-available detail2=hello%20world detail3=cc:/fg/normal/desklock/fprint/success detail4=Booya detail5=0/20/5/15 detail6=4096/65536"
|
||||
|
||||
D="detail-format=text,text,text,text,text,text"
|
||||
D="detail-format=text,text,text,text,bargraph,bargraph"
|
||||
e_val_escape F ${DIR}"zzzz1"
|
||||
e_cmd "file-add path="${F}" "${M}" "${D}\
|
||||
" detail1=a detail2=b detail3=c detail4=d detail5=e detail6=f"
|
||||
" detail1=a detail2=b detail3=c detail4=d detail5=0-100,50,70,80,100,15,30,70,65,62,61,55,43,10,14,17,50 detail6=#e343ff88,0-10,3,4,0,4,10,8"
|
||||
|
||||
D="detail-format=text,text,text,text,text,text"
|
||||
e_val_escape F ${DIR}"zzzz2"
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
// maximum number of files in a dir on a real system to be fast with: 3,000
|
||||
#include "efm.h"
|
||||
#include "efm_icon.h"
|
||||
#include "efm_graph.h"
|
||||
#include "cmd.h"
|
||||
#include "sort.h"
|
||||
|
||||
|
|
|
@ -0,0 +1,229 @@
|
|||
#include "efm_graph.h"
|
||||
#include "eina_stringshare.h"
|
||||
|
||||
typedef struct _Smart_Data Smart_Data;
|
||||
|
||||
struct _Smart_Data
|
||||
{
|
||||
Evas_Object_Smart_Clipped_Data __clipped_data;
|
||||
|
||||
Eina_Rectangle geom;
|
||||
|
||||
int num, min, max;
|
||||
int *vals;
|
||||
Eina_Stringshare *colorspec;
|
||||
|
||||
Evas_Object *o_smart; // the smart object container itself
|
||||
Evas_Object *o_base;
|
||||
Evas_Object *o_grid;
|
||||
Evas_Object **o_vals;
|
||||
|
||||
Eina_Bool reset_vals : 1;
|
||||
};
|
||||
|
||||
static Evas_Smart *_smart = NULL;
|
||||
static Evas_Smart_Class _sc = EVAS_SMART_CLASS_INIT_NULL;
|
||||
static Evas_Smart_Class _sc_parent = EVAS_SMART_CLASS_INIT_NULL;
|
||||
|
||||
#define ENTRY \
|
||||
Smart_Data *sd = evas_object_smart_data_get(obj); \
|
||||
if (!sd) return
|
||||
|
||||
static void
|
||||
_clear(Smart_Data *sd)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (sd->o_vals)
|
||||
{
|
||||
for (i = 0; i < sd->num; i++) evas_object_del(sd->o_vals[i]);
|
||||
free(sd->o_vals);
|
||||
sd->o_vals = NULL;
|
||||
}
|
||||
if (sd->vals) free(sd->vals);
|
||||
sd->vals = NULL;
|
||||
sd->num = 0;
|
||||
}
|
||||
|
||||
// gui code
|
||||
static void
|
||||
_smart_add(Evas_Object *obj)
|
||||
{ // create a new efm icon
|
||||
Smart_Data *sd;
|
||||
Evas *e;
|
||||
Evas_Object *o;
|
||||
const char *theme_edj_file, *grp;
|
||||
|
||||
sd = calloc(1, sizeof(Smart_Data));
|
||||
if (!sd) return;
|
||||
evas_object_smart_data_set(obj, sd);
|
||||
|
||||
_sc_parent.add(obj);
|
||||
|
||||
e = evas_object_evas_get(obj);
|
||||
|
||||
sd->o_smart = obj;
|
||||
sd->o_base = o = edje_object_add(e);
|
||||
grp = "e/fileman/default/graph/base";
|
||||
theme_edj_file = elm_theme_group_path_find(NULL, grp);
|
||||
edje_object_file_set(o, theme_edj_file, grp);
|
||||
evas_object_smart_member_add(o, sd->o_smart); // this is a member
|
||||
evas_object_show(o);
|
||||
|
||||
sd->o_grid = o = evas_object_grid_add(e);
|
||||
edje_object_part_swallow(sd->o_base, "e.swallow.content", o);
|
||||
evas_object_grid_size_set(o, 1, 1);
|
||||
evas_object_show(o);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_del(Evas_Object *obj)
|
||||
{ // delete/free efm view
|
||||
ENTRY;
|
||||
int i;
|
||||
|
||||
if (sd->o_vals)
|
||||
{
|
||||
for (i = 0; i < sd->num; i++) evas_object_del(sd->o_vals[i]);
|
||||
free(sd->o_vals);
|
||||
sd->o_vals = NULL;
|
||||
}
|
||||
if (sd->o_grid)
|
||||
{
|
||||
evas_object_del(sd->o_grid);
|
||||
sd->o_grid = NULL;
|
||||
}
|
||||
if (sd->o_base)
|
||||
{
|
||||
evas_object_del(sd->o_base);
|
||||
sd->o_base = NULL;
|
||||
}
|
||||
eina_stringshare_replace(&sd->colorspec, NULL);
|
||||
sd->o_smart = NULL;
|
||||
|
||||
_sc_parent.del(obj);
|
||||
evas_object_smart_data_set(obj, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
|
||||
{ // efm icon object moved
|
||||
ENTRY;
|
||||
|
||||
if ((sd->geom.x == x) && (sd->geom.y == y)) return;
|
||||
sd->geom.x = x;
|
||||
sd->geom.y = y;
|
||||
evas_object_smart_changed(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
||||
{ // efm icon object resized
|
||||
ENTRY;
|
||||
|
||||
if ((sd->geom.w == w) && (sd->geom.h == h)) return;
|
||||
sd->geom.w = w;
|
||||
sd->geom.h = h;
|
||||
evas_object_smart_changed(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_calculate(Evas_Object *obj)
|
||||
{ // recalc position/size
|
||||
ENTRY;
|
||||
int i;
|
||||
Evas *e;
|
||||
Evas_Object *o;
|
||||
const char *theme_edj_file, *grp;
|
||||
double v, range;
|
||||
Edje_Message_String msg;
|
||||
|
||||
e = evas_object_evas_get(obj);
|
||||
evas_object_geometry_set(sd->o_base,
|
||||
sd->geom.x, sd->geom.y, sd->geom.w, sd->geom.h);
|
||||
grp = "e/fileman/default/graph/bar";
|
||||
theme_edj_file = elm_theme_group_path_find(NULL, grp);
|
||||
|
||||
if ((!sd->o_vals) && (sd->num > 0))
|
||||
{
|
||||
evas_object_grid_size_set(sd->o_grid, sd->num, 1);
|
||||
sd->o_vals = malloc(sd->num * sizeof(Evas_Object *));
|
||||
if (sd->o_vals)
|
||||
{
|
||||
sd->reset_vals = EINA_TRUE;
|
||||
for (i = 0; i < sd->num; i++)
|
||||
{
|
||||
sd->o_vals[i] = o = edje_object_add(e);
|
||||
edje_object_file_set(o, theme_edj_file, grp);
|
||||
evas_object_grid_pack(sd->o_grid, o, i, 0, 1, 1);
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((sd->o_vals) && (sd->reset_vals))
|
||||
{
|
||||
range = sd->max - sd->min;
|
||||
if (range <= 1.0) range = 1.0;
|
||||
for (i = 0; i < sd->num; i++)
|
||||
{
|
||||
v = (double)(sd->vals[i] - sd->min) / range;
|
||||
if (sd->colorspec)
|
||||
{
|
||||
msg.str = (char *)sd->colorspec;
|
||||
edje_object_message_send(sd->o_vals[i],
|
||||
EDJE_MESSAGE_STRING, 1,
|
||||
&msg);
|
||||
edje_object_message_signal_process(sd->o_vals[i]);
|
||||
}
|
||||
edje_object_part_drag_value_set(sd->o_vals[i],
|
||||
"e.dragable.value",
|
||||
0.0, v);
|
||||
printf("%i - %1.2f\n", i, v);
|
||||
}
|
||||
}
|
||||
sd->reset_vals = EINA_FALSE;
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
efm_graph_add(Evas_Object *parent)
|
||||
{ // add new icon object
|
||||
if (!_smart)
|
||||
{
|
||||
evas_object_smart_clipped_smart_set(&_sc_parent);
|
||||
_sc = _sc_parent;
|
||||
_sc.name = "efm_graph";
|
||||
_sc.version = EVAS_SMART_CLASS_VERSION;
|
||||
_sc.add = _smart_add;
|
||||
_sc.del = _smart_del;
|
||||
_sc.resize = _smart_resize;
|
||||
_sc.move = _smart_move;
|
||||
_sc.calculate = _smart_calculate;
|
||||
};
|
||||
if (!_smart) _smart = evas_smart_class_new(&_sc);
|
||||
return evas_object_smart_add(evas_object_evas_get(parent), _smart);
|
||||
}
|
||||
|
||||
void
|
||||
efm_graph_values_set(Evas_Object *obj, int num, int *vals, int min, int max)
|
||||
{ // set set of values
|
||||
ENTRY;
|
||||
|
||||
_clear(sd);
|
||||
sd->vals = malloc(num * sizeof(int));
|
||||
if (!sd->vals) return;
|
||||
sd->num = num;
|
||||
sd->min = min;
|
||||
sd->max = max;
|
||||
sd->reset_vals = EINA_TRUE;
|
||||
memcpy(sd->vals, vals, num * sizeof(int));
|
||||
evas_object_smart_changed(sd->o_smart);
|
||||
}
|
||||
|
||||
void
|
||||
efm_graph_colorspec_set(Evas_Object *obj, const char *cc)
|
||||
{
|
||||
ENTRY;
|
||||
|
||||
eina_stringshare_replace(&sd->colorspec, cc);
|
||||
_clear(sd);
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef EFM_GRAPH_H
|
||||
#define EFM_GRAPH_H 1
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
Evas_Object *efm_graph_add(Evas_Object *parent);
|
||||
void efm_graph_values_set(Evas_Object *obj, int num, int *vals, int min,
|
||||
int max);
|
||||
void efm_graph_colorspec_set(Evas_Object *obj, const char *cc);
|
||||
|
||||
#endif
|
|
@ -522,7 +522,7 @@ _size_get(Smart_Data *sd, int *w, int *h)
|
|||
|
||||
static void
|
||||
_smart_calculate(Evas_Object *obj)
|
||||
{ // recalce position/size
|
||||
{ // recalc position/size
|
||||
Eina_Rectangle geom;
|
||||
ENTRY;
|
||||
|
||||
|
|
|
@ -1428,14 +1428,14 @@ _icon_detail_add(Icon *icon, Smart_Data *sd, Evas *e,
|
|||
if (!strcmp(format, "text")) // format: just the string as-is
|
||||
_icon_detail_rectangle_add(icon, sd, e, col, detail);
|
||||
else if (!strcmp(format, "size"))
|
||||
{
|
||||
{ // format: "13/28" = value/max_value
|
||||
char **plist;
|
||||
unsigned long long size, size_max;
|
||||
double sz;
|
||||
|
||||
plist = eina_str_split(detail, "/", 2);
|
||||
if (plist[0] && plist[1])
|
||||
{ // format: "13/28" = value/max_value
|
||||
{
|
||||
size = atoll(plist[0]);
|
||||
size_max = atoll(plist[1]);
|
||||
|
||||
|
@ -1702,13 +1702,51 @@ _icon_detail_add(Icon *icon, Smart_Data *sd, Evas *e,
|
|||
|
||||
elm_grid_pack(icon->o_list_detail_swallow[col], o, 0, 0, 1, 1);
|
||||
evas_object_smart_callback_add(o, "changed",
|
||||
_cb_icon_detail_slider_changed,
|
||||
icon);
|
||||
_cb_icon_detail_slider_changed, icon);
|
||||
evas_object_show(o);
|
||||
}
|
||||
free(*plist);
|
||||
free(plist);
|
||||
}
|
||||
else if (!strcmp(format, "bargraph"))
|
||||
{ // format: "0-100,13,23,80,100,78,17,0,35,57" = min-max,val1,val2,...
|
||||
char **plist, **p, *cc = NULL;
|
||||
int min, max, num, *vals, start;
|
||||
|
||||
plist = eina_str_split(detail, ",", -1);
|
||||
if (plist[0] && plist[1])
|
||||
{
|
||||
start = 0;
|
||||
if ((plist[0][0] == '#') || (plist[0][0] == 'c'))
|
||||
{
|
||||
start++;
|
||||
cc = plist[0];
|
||||
}
|
||||
if (sscanf(plist[start], "%i-%i", &min, &max) == 2)
|
||||
{
|
||||
for (num = -1, p = plist + start; *p; p++) num++;
|
||||
|
||||
if (num > 0)
|
||||
{
|
||||
vals = malloc(num * sizeof(int));
|
||||
for (num = -1, p = plist + start; *p; p++)
|
||||
{
|
||||
if (num >= 0) vals[num] = atoi(*p);
|
||||
num++;
|
||||
}
|
||||
o = _icon_detail_grid_add(icon, sd, col);
|
||||
o = efm_graph_add(o);
|
||||
if (cc) efm_graph_colorspec_set(o, cc);
|
||||
efm_graph_values_set(o, num, vals, min, max);
|
||||
elm_grid_pack(icon->o_list_detail_swallow[col], o, 0, 0, 1, 1);
|
||||
evas_object_show(o);
|
||||
free(vals);
|
||||
}
|
||||
}
|
||||
}
|
||||
free(*plist);
|
||||
free(plist);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "Uknown format for file '%s' column %i format '%s'\n",
|
||||
icon->info.file, col, format);
|
||||
|
|
|
@ -9,6 +9,7 @@ executable('efm', [
|
|||
'efm.c',
|
||||
'sort.c',
|
||||
'efm_icon.c',
|
||||
'efm_graph.c',
|
||||
'main.c'
|
||||
],
|
||||
include_directories: inc,
|
||||
|
|
Loading…
Reference in New Issue