typebuf makes a comeback... bitches! yooot!

SVN revision: 25853
This commit is contained in:
Carsten Haitzler 2006-09-15 14:06:23 +00:00
parent a12600fef5
commit 11ccc9a4fa
2 changed files with 284 additions and 15 deletions

View File

@ -2930,6 +2930,36 @@ group {
group {
name: "e/fileman/overlay";
parts {
part {
name: "e.text.typebuf_label";
type: TEXT;
effect: SOFT_SHADOW;
clip_to: "typebuf_clip";
mouse_events: 0;
description {
state: "default" 0.0;
align: 0.5 0.5;
rel1 {
relative: 0.0 0.0;
offset: 4 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
}
color: 255 255 255 255;
color3: 0 0 0 24;
text {
text: "";
font: "Edje-Vera-Bold";
size: 10;
min: 0 0;
align: 0.5 0.5;
elipsis: 1.0;
text_class: "fileman_typebuf";
}
}
}
part {
name: "busy";
clip_to: "busy_clip";
@ -3007,6 +3037,21 @@ group {
color: 255 255 255 255;
}
}
part {
name: "typebuf_clip";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
visible: 0;
color: 255 255 255 0;
}
description {
state: "active" 0.0;
visible: 1;
color: 255 255 255 255;
}
}
}
programs {
program {
@ -3040,6 +3085,23 @@ group {
action: ACTION_STOP;
target: "go2";
}
program {
name: "gob1";
signal: "e,state,typebuf,start";
source: "e";
action: STATE_SET "active" 0.0;
transition: SINUSOIDAL 0.25;
target: "typebuf_clip";
}
program {
name: "stopb1";
signal: "e,state,typebuf,stop";
source: "e";
action: STATE_SET "default" 0.0;
transition: SINUSOIDAL 1.0;
target: "typebuf_clip";
after: "stop2";
}
}
}

View File

@ -57,6 +57,7 @@ struct _E_Fm2_Smart_Data
E_Entry_Dialog *entry_dialog;
unsigned char iconlist_changed : 1;
unsigned char order_file : 1;
unsigned char typebuf_visible : 1;
E_Fm2_Config *config;
@ -66,6 +67,10 @@ struct _E_Fm2_Smart_Data
Evas_List **list_index;
int iter;
} tmp;
struct {
char *buf;
} typebuf;
};
struct _E_Fm2_Region
@ -2227,54 +2232,233 @@ _e_fm2_icon_sel_next(Evas_Object *obj)
_e_fm2_icon_make_visible(ic);
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_show(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
E_FREE(sd->typebuf.buf);
sd->typebuf.buf = strdup("");
edje_object_part_text_set(sd->overlay, "e.text.typebuf_label", sd->typebuf.buf);
edje_object_signal_emit(sd->overlay, "e,state,typebuf,start", "e");
sd->typebuf_visible = 1;
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_hide(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
E_FREE(sd->typebuf.buf);
edje_object_signal_emit(sd->overlay, "e,state,typebuf,stop", "e");
sd->typebuf_visible = 0;
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_history_prev(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* FIXME: do */
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_history_next(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* FIXME: do */
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_run(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
E_Fm2_Icon *ic;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
_e_fm2_typebuf_hide(obj);
ic = _e_fm2_icon_first_selected_find(obj);
if (ic)
evas_object_smart_callback_call(ic->sd->obj, "selected", NULL);
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_match(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
Evas_List *l;
E_Fm2_Icon *ic;
char *tb;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if (!sd->typebuf.buf) return;
if (!sd->icons) return;
_e_fm2_icon_desel_any(obj);
tb = malloc(strlen(sd->typebuf.buf) + 2);
if (!tb) return;
strcpy(tb, sd->typebuf.buf);
strcat(tb, "*");
for (l = sd->icons; l; l = l->next)
{
ic = l->data;
if (
((ic->info.label) &&
(e_util_glob_case_match(ic->info.label, tb))) ||
((ic->info.file) &&
(e_util_glob_case_match(ic->info.file, tb)))
)
{
_e_fm2_icon_select(ic);
evas_object_smart_callback_call(sd->obj, "selection_change", NULL);
_e_fm2_icon_make_visible(ic);
break;
}
}
free(tb);
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_complete(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
/* FIXME: do */
_e_fm2_typebuf_match(obj);
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_char_append(Evas_Object *obj, char *ch)
{
E_Fm2_Smart_Data *sd;
char *ts;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if (!sd->typebuf.buf) return;
ts = malloc(strlen(sd->typebuf.buf) + strlen(ch) + 1);
if (!ts) return;
strcpy(ts, sd->typebuf.buf);
strcat(ts, ch);
free(sd->typebuf.buf);
sd->typebuf.buf = ts;
_e_fm2_typebuf_match(obj);
edje_object_part_text_set(sd->overlay, "e.text.typebuf_label", sd->typebuf.buf);
}
/* FIXME: prototype */
static void
_e_fm2_typebuf_char_backspace(Evas_Object *obj)
{
E_Fm2_Smart_Data *sd;
char *ts;
int len, p, dec;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
if (!sd->typebuf.buf) return;
len = strlen(sd->typebuf.buf);
if (len == 0)
{
_e_fm2_typebuf_hide(obj);
return;
}
p = evas_string_char_prev_get(sd->typebuf.buf, len, &dec);
if (p >= 0) sd->typebuf.buf[p] = 0;
ts = strdup(sd->typebuf.buf);
if (!ts) return;
free(sd->typebuf.buf);
sd->typebuf.buf = ts;
_e_fm2_typebuf_match(obj);
edje_object_part_text_set(sd->overlay, "e.text.typebuf_label", sd->typebuf.buf);
}
static void
_e_fm2_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Event_Key_Down *ev;
E_Fm2_Smart_Data *sd;
E_Fm2_Icon *ic;
// Evas_Coord x = 0, y = 0, w = 0, h = 0;
sd = data;
ev = event_info;
/* FIXME: handle key navigation, searching etc. etc. */
if (!strcmp(ev->keyname, "Left"))
{
/* FIXME: icon mode, typebuf extras */
/* list mode: scroll left n pix
* icon mode: prev icon
* typebuf mode: cursor left
*/
_e_fm2_icon_sel_prev(obj);
}
else if (!strcmp(ev->keyname, "Right"))
{
/* FIXME: icon mode, typebuf extras */
/* list mode: scroll right n pix
* icon mode: next icon
* typebuf mode: cursor right
*/
_e_fm2_icon_sel_next(obj);
}
else if (!strcmp(ev->keyname, "Up"))
{
/* FIXME: icon mode */
/* list mode: prev icon
* icon mode: up an icon
* typebuf mode: previous history
*/
_e_fm2_icon_sel_prev(obj);
if (sd->typebuf_visible)
_e_fm2_typebuf_history_prev(obj);
else
_e_fm2_icon_sel_prev(obj);
}
else if (!strcmp(ev->keyname, "Home"))
{
/* go to first icon */
/* FIXME: typebuf extras */
/* go to first icon
* typebuf mode: cursor to start
*/
_e_fm2_icon_sel_first(obj);
}
else if (!strcmp(ev->keyname, "End"))
{
/* go to last icon */
/* FIXME: typebuf extras */
/* go to last icon
* typebuf mode: cursor to end
*/
_e_fm2_icon_sel_last(obj);
}
else if (!strcmp(ev->keyname, "Down"))
{
/* FIXME: icon mode */
/* list mode: next icon
* icon mode: down an icon
* typebuf mode: next history
*/
_e_fm2_icon_sel_next(obj);
if (sd->typebuf_visible)
_e_fm2_typebuf_history_next(obj);
else
_e_fm2_icon_sel_next(obj);
}
else if (!strcmp(ev->keyname, "Prior"))
{
@ -2290,14 +2474,25 @@ _e_fm2_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
}
else if (!strcmp(ev->keyname, "Escape"))
{
_e_fm2_icon_desel_any(obj);
/* typebuf mode: end typebuf mode */
if (sd->typebuf_visible)
_e_fm2_typebuf_hide(obj);
else
_e_fm2_icon_desel_any(obj);
}
else if (!strcmp(ev->keyname, "Return"))
{
/* selected */
ic = _e_fm2_icon_first_selected_find(obj);
if (ic)
evas_object_smart_callback_call(ic->sd->obj, "selected", NULL);
/* if selected - select callback.
* typebuf mode: if nothing selected - run cmd
*/
if (sd->typebuf_visible)
_e_fm2_typebuf_run(obj);
else
{
ic = _e_fm2_icon_first_selected_find(obj);
if (ic)
evas_object_smart_callback_call(ic->sd->obj, "selected", NULL);
}
}
else if (!strcmp(ev->keyname, "Insert"))
{
@ -2305,19 +2500,29 @@ _e_fm2_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
}
else if (!strcmp(ev->keyname, "Tab"))
{
/* tab complete possible completes of typebuffer */
/* typebuf mode: tab complete */
if (sd->typebuf_visible)
_e_fm2_typebuf_complete(obj);
}
else if (!strcmp(ev->keyname, "Backspace"))
else if (!strcmp(ev->keyname, "BackSpace"))
{
/* erase from typebuffer */
/* typebuf mode: backspace */
if (sd->typebuf_visible)
_e_fm2_typebuf_char_backspace(obj);
}
else if (!strcmp(ev->keyname, "Delete"))
{
/* FIXME: all */
/* delete file dialog */
/* typebuf mode: delete */
}
else
{
/* just start typing a filename - a tmp match buffer jumps to first match (type a glob) ot typedfile* */
if (ev->string)
{
if (!sd->typebuf_visible) _e_fm2_typebuf_show(obj);
_e_fm2_typebuf_char_append(obj, ev->string);
}
}
}
@ -2674,6 +2879,8 @@ _e_fm2_smart_del(Evas_Object *obj)
sd->dev = sd->path = sd->realpath = NULL;
if (sd->config) _e_fm2_config_free(sd->config);
E_FREE(sd->typebuf.buf);
evas_object_del(sd->underlay);
evas_object_del(sd->overlay);
evas_object_del(sd->clip);