#include <gtk/gtk.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
static GtkWidget *wnd,
*clist,
*entry,
*button,
*checkButton;
static GtkWidget *dialog=NULL;
void ShowMessage(gchar *contents);
gboolean release_resource(GtkWidget *widget,GdkEvent *event,gpointer data)
{
if( dialog!=NULL )
gtk_widget_destroy(GTK_WIDGET(dialog));
gtk_main_quit();
return FALSE;
}
gboolean cb_delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
gtk_widget_hide(GTK_WIDGET(data));
return TRUE;
}
void window_hide(GtkWidget *widget,gpointer data)
{
gtk_widget_hide(GTK_WIDGET(data));
}
void button_clicked(GtkWidget *widget,gpointer data)
{
char *path;
DIR* dh;
struct dirent* record;
gboolean showAll;
gchar type[10];
gchar inode[10];
gchar *package[3];
path=gtk_entry_get_text(GTK_ENTRY(entry));
dh=opendir(path);
gtk_clist_clear(GTK_CLIST(clist));
if( dh==NULL )
{
ShowMessage("ERROR!");
}
else
{
gtk_clist_freeze(GTK_CLIST(clist));
showAll=gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(checkButton) );
for( record=readdir(dh);
record!=NULL;
record=readdir(dh) )
{
if( showAll==FALSE && record->d_name[0]=='.' )
continue;
g_sprintf(type,"%d",(int)(record->d_type));
g_sprintf(inode,"%d",record->d_ino);
package[0]=record->d_name;
package[1]=type;
package[2]=inode;
gtk_clist_append(GTK_CLIST(clist),package);
}
gtk_clist_thaw(GTK_CLIST(clist));
}
}
void ShowMessage(gchar *contents)
{
static GtkWidget *label;
static GtkWidget *button;
if( dialog==NULL )
{
dialog=gtk_dialog_new();
gtk_window_set_transient_for(GTK_WINDOW(dialog),
GTK_WINDOW(wnd));
g_signal_connect(G_OBJECT(dialog),"delete_event",
G_CALLBACK(cb_delete_event),dialog);
gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
label=gtk_label_new("");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
label,FALSE,TRUE,0);
button=gtk_button_new_with_label("EXIT");
gtk_box_pack_start(
GTK_BOX(GTK_DIALOG(dialog)->action_area),
button,FALSE,TRUE,0);
g_signal_connect(G_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(window_hide),dialog);
}
gtk_label_set_text(GTK_LABEL(label),contents);
gtk_widget_show_all(dialog);
}
int main(int argc,char **argv)
{
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *scrollCList;
GtkAdjustment *vertical,*horizontal;
gchar *titles[]={"name","type","inode"};
gtk_init(&argc,&argv);
wnd=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(wnd),"EXPLOER");
gtk_window_set_default_size(GTK_WINDOW(wnd),400,600);
g_signal_connect(G_OBJECT(wnd),"delete_event",
G_CALLBACK(release_resource),NULL);
vbox=gtk_vbox_new(FALSE,5);
gtk_container_add(GTK_CONTAINER(wnd),vbox);
label=gtk_label_new("enter a dir path : ");
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,TRUE,0);
entry=gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,TRUE,0);
button=gtk_button_new_with_label("Get");
gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,TRUE,0);
g_signal_connect(G_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(button_clicked),NULL);
checkButton=gtk_check_button_new_with_label(
"Show entries starting with .");
gtk_box_pack_start(GTK_BOX(vbox),checkButton,FALSE,TRUE,0);
clist=gtk_clist_new_with_titles(3,titles);
gtk_clist_set_column_width(GTK_CLIST(clist),0,250);
vertical=GTK_ADJUSTMENT(
gtk_adjustment_new(0,0,0,0,0,0));
horizontal=GTK_ADJUSTMENT(
gtk_adjustment_new(0,0,0,0,0,0));
scrollCList=gtk_scrolled_window_new(horizontal,vertical);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollCList),
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(scrollCList),clist);
gtk_box_pack_start(GTK_BOX(vbox),scrollCList,TRUE,TRUE,0);
gtk_widget_show_all(wnd);
gtk_main();
return 0;
}