And don't forget these
This commit is contained in:
parent
853d42f6de
commit
02669b80b5
140
experimental/ecdb/trunk/src/ecdb_filelist_custom.c
Normal file
140
experimental/ecdb/trunk/src/ecdb_filelist_custom.c
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
#include "ecdb.h"
|
||||||
|
|
||||||
|
static void free_file(Ewl_Filelist_File *file);
|
||||||
|
|
||||||
|
void
|
||||||
|
ecdb_filelist_dnd_dropped_cb(Ewl_Widget *w, void *ev, void *data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Ewl_Event_Dnd_Data_Received *dnd = ev;
|
||||||
|
char *path, **files = dnd->data;
|
||||||
|
Ecdb_Source *parent, *child;
|
||||||
|
|
||||||
|
/* Get the parent, find the path of the file(s) dropped
|
||||||
|
* and add them as children to parent */
|
||||||
|
parent = ewl_widget_data_get(w, "source");
|
||||||
|
|
||||||
|
/* Only handle uris for now */
|
||||||
|
if (strcmp(dnd->type, "text/uri-list"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < dnd->len; i++)
|
||||||
|
{
|
||||||
|
printf("file: %s\n", files[i]);
|
||||||
|
|
||||||
|
/* Cheap and dirty hax */
|
||||||
|
/* XXX FIXME XXX */
|
||||||
|
path = strdup(&files[i][7]);
|
||||||
|
child = ecdb_source_new();
|
||||||
|
ecdb_source_data_set(child, path);
|
||||||
|
ecdb_source_child_append(parent, child);
|
||||||
|
}
|
||||||
|
|
||||||
|
ecdb_filelist_directory_set(EWL_FILELIST(w), parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecdb_filelist_directory_set(Ewl_Filelist *fl, Ecdb_Source *src)
|
||||||
|
{
|
||||||
|
if (src)
|
||||||
|
{
|
||||||
|
Ewl_Filelist_Directory *data;
|
||||||
|
Ewl_Event_Action_Response ev_data;
|
||||||
|
|
||||||
|
data = ewl_mvc_data_get(EWL_MVC(fl->controller));
|
||||||
|
if (data) ewl_filelist_model_data_unref(data);
|
||||||
|
|
||||||
|
data = ecdb_filelist_directory_new(src);
|
||||||
|
ewl_mvc_data_set(EWL_MVC(fl->controller), data);
|
||||||
|
ewl_mvc_dirty_set(EWL_MVC(fl->controller), TRUE);
|
||||||
|
ev_data.response = EWL_FILELIST_EVENT_DIR_CHANGE;
|
||||||
|
ewl_callback_call_with_event_data(EWL_WIDGET(fl),
|
||||||
|
EWL_CALLBACK_VALUE_CHANGED, &ev_data);
|
||||||
|
|
||||||
|
/* Set the source as needed for file operations */
|
||||||
|
ewl_widget_data_set(EWL_WIDGET(fl), "source", src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ewl_Filelist_Directory *
|
||||||
|
ecdb_filelist_directory_new(Ecdb_Source *parent)
|
||||||
|
{
|
||||||
|
Ecdb_Source *src;
|
||||||
|
Ewl_Filelist_Directory *dir;
|
||||||
|
Ewl_Filelist_File *file;
|
||||||
|
|
||||||
|
struct stat st;
|
||||||
|
int nf = 0, nd = 0, i = 0;
|
||||||
|
Ecore_List *files, *dirs;
|
||||||
|
|
||||||
|
files = ecore_list_new();
|
||||||
|
dirs = ecore_list_new();
|
||||||
|
ecore_list_free_cb_set(files, ECORE_FREE_CB(free_file));
|
||||||
|
ecore_list_free_cb_set(dirs, ECORE_FREE_CB(free_file));
|
||||||
|
|
||||||
|
if (!parent)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* No up for now */
|
||||||
|
|
||||||
|
while ((src = parent->children[i]))
|
||||||
|
{
|
||||||
|
if (!ecore_file_exists(src->dst))
|
||||||
|
{
|
||||||
|
printf("File doesn't exist!\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
file = calloc(1, sizeof(Ewl_Filelist_File));
|
||||||
|
file->name = ecore_string_instance(ecore_file_file_get
|
||||||
|
(src->dst));
|
||||||
|
|
||||||
|
stat(src->dst, &st);
|
||||||
|
file->size = st.st_size;
|
||||||
|
file->modtime = st.st_mtime;
|
||||||
|
file->mode = st.st_mode;
|
||||||
|
file->groupname = st.st_gid;
|
||||||
|
file->username = st.st_uid;
|
||||||
|
file->is_dir = src->dir;
|
||||||
|
file->readable = ecore_file_can_read(src->dst);
|
||||||
|
file->writeable = ecore_file_can_write(src->dst);
|
||||||
|
|
||||||
|
if (src->dir)
|
||||||
|
{
|
||||||
|
ecore_list_append(dirs, file);
|
||||||
|
nd++;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_list_append(files, file);
|
||||||
|
nf++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Oops */
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir = calloc(1, sizeof(Ewl_Filelist_Directory));
|
||||||
|
|
||||||
|
dir->rfiles = ecore_list_new();
|
||||||
|
dir->rdirs = ecore_list_new();
|
||||||
|
|
||||||
|
/* Also dirty hax, need filtering instead of this */
|
||||||
|
//dir->files = ecore_list_new();
|
||||||
|
//dir->dirs = ecore_list_new();
|
||||||
|
dir->name = ecore_string_instance("bunny");
|
||||||
|
|
||||||
|
dir->files = files;
|
||||||
|
dir->dirs = dirs;
|
||||||
|
dir->filter = NULL;
|
||||||
|
dir->num_dirs = nd;
|
||||||
|
dir->num_files = nf;
|
||||||
|
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void free_file(Ewl_Filelist_File *file)
|
||||||
|
{
|
||||||
|
ecore_string_release(file->name);
|
||||||
|
FREE(file);
|
||||||
|
}
|
11
experimental/ecdb/trunk/src/ecdb_filelist_custom.h
Normal file
11
experimental/ecdb/trunk/src/ecdb_filelist_custom.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ECDB_FILELIST_CUSTOM_H
|
||||||
|
#define ECDB_FILELIST_CUSTOM_H
|
||||||
|
|
||||||
|
void ecdb_filelist_directory_set(Ewl_Filelist *fl,
|
||||||
|
Ecdb_Source *src);
|
||||||
|
Ewl_Filelist_Directory *ecdb_filelist_directory_new(Ecdb_Source *src);
|
||||||
|
void ecdb_filelist_dnd_dropped_cb(Ewl_Widget *w,
|
||||||
|
void *ev, void *data);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user