|
Copyright ® (1997-2005) EDMGROUP Pty Ltd - EZY Prolog Reference |
<- design interface event handlers programming->
Prolog code for file explorer:
/* EZY PROLOG. Copyright
(C) 2002 EDMGROUP (Australia)
Project:EZY Explorer
Written by:Serguei Penkov
ezy-soft@ezy-software.com
Purpose:
Demonstration of EZY Prolog GUI power
*/
predicates
% SYSTEM ENTRY POINT
initialize_gui: EZY_INITIALIZE_GUI
explorer_tree_callback: BROWSELIST_INFORMATIONCALLBACK
explorer_grid_callback: GRID_CALLBACK
% USER CODE
determ explorer_initialize_treeview(WINDOW)
determ explorer_initialize_grid(WINDOW)
determ explorer_initialize_editor(WINDOW)
determ get_selected_path(WINDOW,STRING PATH) - (i,o)
determ explorer_process_tree_click(WINDOW)
determ explorer_display_directories(WINDOW,STRING PATH) - (i,i)
determ explorer_grid_click(WINDOW,INTEGER ROW)
determ explorer_display_filelist(WINDOW,SLIST FILELIST,STRING PATH) - (i,i,i)
determ dirlist_to_treelist(SLIST, BROWSELIST_LIST) - (i,o)
determ create_directory_tree(STRING PATH, SLIST DIRLIST,BROWSELIST_ITEM) - (i,i,o)
determ explorer_fill_grid(WINDOW,INTEGER,SLIST FILELIST,STRING PATH)
clauses
/* START OF GUI INITIALISATION SECTION */
initialize_gui(WINDOW):-
explorer_initialize_treeview(WINDOW),
explorer_initialize_grid(WINDOW),
explorer_initialize_editor(WINDOW),
!.
initialize_gui(WINDOW):-
write("Error - fail in initialize_gui\n"),
!.
explorer_initialize_treeview(WINDOW):-
TREEVIEW_ADDR =["TOP_FRAME","treeview"],
ezy_object_get(WINDOW,TREEVIEW_ADDR,TREEVIEW_OBJ),
CHECKED = 1,UNCHECKED = 0,
DISABLED = 0,ENABLED = 1,
SUBMENU = [
txt(10, "SubmenuMenu1", 0,ENABLED,CHECKED,[]),
txt(11, "SubmenuMenu2", 0,DISABLED,UNCHECKED,[])
],
MENULIST = [
txt(4,"Add Node",0,ENABLED,UNCHECKED,[]),
txt(5,"Delete Node",0,ENABLED,UNCHECKED,[]),
txt(6,"Rename Node",0,ENABLED,UNCHECKED,[]),
txt(1, % Integer value
that specify this menu entry
"Menu1", %
text
0,% Char value for letter
in Accelerator key
ENABLED,CHECKED,
[]),
txt(2,"Menu with Submenu",0,ENABLED,UNCHECKED,SUBMENU),
separator,
txt(3,"Menu3 - disabled",0,DISABLED,UNCHECKED,[])
],
MENU = dyn_menu(MENULIST),
ezy_menu_set(TREEVIEW_OBJ,MENU),
% Generate initial Tree
view
syspath(PATH,_),
string_slist(PATH,"\\",DIRECTORIES),
write("DIRECTORIES=",DIRECTORIES),nl,
create_directory_tree(PATH,DIRECTORIES,TREEVIEW),
% Initialize Treeview element
ezy_treeview_item(TREEVIEW_OBJ,[],TREEVIEW),
% now - set current path
PATH_ADDRESS = ["TOP_FRAME","right_panel","current_path"],
ezy_object_get(WINDOW,PATH_ADDRESS,PATH_WINDOW),
CAPTION = ezy_text(1,PATH, []),
ezy_frame_caption(PATH_WINDOW,CAPTION),
!.
explorer_initialize_treeview(WINDOW):-
write("Error - fail in explorer_initialize_treeview\n"),
fail.
explorer_initialize_grid(WINDOW):-
% Define grid headers
GRID_ADDRESS = ["TOP_FRAME","right_panel","grid"],
ezy_object_get(WINDOW,GRID_ADDRESS,GRID_WINDOW),
COLUMN_LIST = ["Filename","File
type","File date","File size"],
ezy_grid_columns(GRID_WINDOW,COLUMN_LIST),
syspath(EXEPATH,_),
files(EXEPATH,["*.pro","*.ezy"],FILELIST),
% display list of selected files in the grid object
explorer_display_filelist(WINDOW,FILELIST,EXEPATH),
!.
explorer_initialize_grid(WINDOW):-
write("Error - fail in explorer_initialize_treeview\n"),
fail.
explorer_initialize_editor(WINDOW):-
TEXT_EDITOR_ADDRESS = ["TOP_FRAME","right_panel","editor_panel","text_editor"],
ezy_object_get(WINDOW,TEXT_EDITOR_ADDRESS,EDITOR_WINDOW),
ezy_editor_string(EDITOR_WINDOW,"EZY PROLOG Explorer\nCopyright
(C) 2002 EDMGROUP (Australia)\nTo view selected file click on\nGrid row
selector"),
!.
/* END OF GUI INITIALISATION SECTION */
/* START OF CALLBACK SECTION
GRID CALLBACK PREDICATE */
explorer_grid_callback(GRID_WINDOW,user_action(grid_marker(grid_row_marker([gl(ROW,ROW)]),1)),event_answer(continue)):-
explorer_grid_click(GRID_WINDOW,ROW),
!.
/* TREEVIEW CALLBACK PREDICATE */
explorer_tree_callback(WINDOW,node_open(KEY,POSITION)):-
ezy_treeview_flipnode(WINDOW,POSITION),
!.
explorer_tree_callback(WINDOW,node_close(KEY,POSITION)):-
ezy_treeview_flipnode(WINDOW,POSITION),
!.
explorer_tree_callback(WINDOW,e_mousedbl(_,_,_)):-
explorer_process_tree_click(WINDOW),
!.
explorer_tree_callback(_WINDOW,e_menu(NUMBER,_)):-
write("explorer_tree_callback(menu_item(",NUMBER,")\n"),
!.
/* SUPPORT PREDICATES */
get_selected_path(WINDOW,SELECTED_PATH_SLASH):-
ezy_treeview_address(WINDOW,PARENTS,_),
string_slist(SELECTED_PATH,"\\",PARENTS),
concat(SELECTED_PATH,"\\",SELECTED_PATH_SLASH),
ezy_object_parent(WINDOW,"TOP_FRAME",FIRST_WINDOW),
% display selected path
PATH_ADDRESS = ["TOP_FRAME","right_panel","current_path"],
ezy_object_get(FIRST_WINDOW,PATH_ADDRESS,PATH_WINDOW),
CAPTION = ezy_text(1,SELECTED_PATH_SLASH, []),
ezy_frame_caption(PATH_WINDOW,CAPTION),
!.
% TREE GENERATION PREDICATES
create_directory_tree(PATH,[DIR],TREEVIEW):-!,
% LAST NODE IS EMPTY STRING ALWAYS BECAUSE
% syspath RETURNS PATH TERMINATED BY SLASH
directories(PATH,DIRLIST),
dirlist_to_treelist(DIRLIST,TREELIST),
DIR_ICON = ref("images\folder_opened.jpg","images\folder_closed.jpg"),
TREEVIEW = bi(0,DIR,node(open
,TREELIST),DIR_ICON).
create_directory_tree(PATH,[DIR|DIRLIST],TREEVIEW):-!,
create_directory_tree(PATH,DIRLIST,TREEVIEW_CHILD),
DIR_ICON = ref("images\folder_opened.jpg","images\folder_closed.jpg"),
TREEVIEW = bi(0,DIR,node(open
,[TREEVIEW_CHILD]),DIR_ICON).
% CONVERT STRING LIST TO TREELIST
dirlist_to_treelist([],[]):-!.
dirlist_to_treelist([DIR|DIRLIST],TREELIST):-
DIR = ".",
!,
dirlist_to_treelist(DIRLIST,TREELIST).
dirlist_to_treelist([DIR|DIRLIST],TREELIST):-
DIR = "..",!,
dirlist_to_treelist(DIRLIST,TREELIST).
dirlist_to_treelist([DIR|DIRLIST],[ITEM|TREELIST]):-
DIR_ICON = ref("images\folder_opened.jpg","images\folder_closed.jpg"),
ITEM = bi(0,DIR,leaf,DIR_ICON),
dirlist_to_treelist(DIRLIST,TREELIST).
/* START OF USER ACTION PROCESSING PREDICATES */
explorer_process_tree_click(WINDOW):-
% get selected path from the tree
get_selected_path(WINDOW,SELECTED_PATH_SLASH),
% display list of directories
explorer_display_directories(WINDOW,SELECTED_PATH_SLASH),
% get address of main window and obtain file types
ezy_object_parent(WINDOW,"TOP_FRAME",FIRST_WINDOW),
FILETYPE_ADDRESS = ["TOP_FRAME","right_panel","file_type","file_type_value"],
ezy_object_get(FIRST_WINDOW,FILETYPE_ADDRESS,FILETYPE_WINDOW),
ezy_object_text(FILETYPE_WINDOW,SELECTION),
string_slist(SELECTION,";",SELECTION_LIST),
% get list of files for selected node
files(SELECTED_PATH_SLASH,SELECTION_LIST,FILELIST),
% display list of selected files in the grid object
explorer_display_filelist(FIRST_WINDOW,FILELIST,SELECTED_PATH_SLASH),
!.
explorer_grid_click(GRID_WINDOW,ROW):-
ezy_object_parent(GRID_WINDOW,"TOP_FRAME",FIRST_WINDOW),
PATH_ADDRESS = ["TOP_FRAME","right_panel","current_path"],
ezy_object_get(FIRST_WINDOW,PATH_ADDRESS,PATH_WINDOW),
ezy_frame_caption(PATH_WINDOW,CAPTION),
CAPTION = ezy_text(_,SELECTED_PATH, _),
ezy_grid_cell(GRID_WINDOW,ROW,1,FILENAME_DATA),
FILENAME_DATA = textatr(str(FILENAME), _,_),
ezy_grid_cell(GRID_WINDOW,ROW,2,FILETYPE_DATA),
FILETYPE_DATA = textatr(str(FILETYPE), _,_),
format(FULLNAME,"%s%s.%s",SELECTED_PATH,FILENAME,FILETYPE),
write("explorer_grid_callback selected ROW=",ROW,"
FILE: ",FULLNAME,"\n"),
file_str(FULLNAME,FILE_DATA),
TEXT_EDITOR_ADDRESS = ["TOP_FRAME","right_panel","editor_panel","text_editor"],
ezy_object_get(FIRST_WINDOW,TEXT_EDITOR_ADDRESS,EDITOR_WINDOW),
ezy_editor_string(EDITOR_WINDOW,FILE_DATA),
!.
/* END OF USER ACTION PROCESSING PREDICATES */
explorer_display_directories(WINDOW,SELECTED_PATH_SLASH):-
directories(SELECTED_PATH_SLASH,DIRLIST),
dirlist_to_treelist(DIRLIST,TREELIST),
% now - get selected node and update it's child
list
ezy_treeview_cursor(WINDOW,CURSOR),
ezy_treeview_item(WINDOW,CURSOR,TREE_ITEM),
TREE_ITEM = bi(ID,DIR,_,ICON),
NODE_CHILDS = node(open ,TREELIST),
TREE_ITEM_UPDATED = bi(ID,DIR,NODE_CHILDS,ICON),
ezy_treeview_item(WINDOW,CURSOR,TREE_ITEM_UPDATED),
!.
explorer_display_directories(_,_):-
write("explorer_display_directories failed\n").
explorer_display_filelist(FIRST_WINDOW,FILELIST,SELECTED_PATH_SLASH):-
% get grid object by address
GRID_ADDRESS = ["TOP_FRAME","right_panel","grid"],
ezy_object_get(FIRST_WINDOW,GRID_ADDRESS,GRID_WINDOW),
ezy_grid_clear(GRID_WINDOW),
list_length(FILELIST,MAXROW),
ezy_grid_rows(GRID_WINDOW,MAXROW),
explorer_fill_grid(GRID_WINDOW,1,FILELIST,SELECTED_PATH_SLASH),
!.
explorer_fill_grid(_,_,[],_):-!.
explorer_fill_grid(GRID_WINDOW,ROW,[FILENAME|FILELIST],PATH):-!,
filenameext(FILENAME,NAME,EXT),
frontchar(EXT,_,EXT_WITHOUT_DOT),
format(FULLFILENAME,"%s%s",PATH,FILENAME),
filedetails(FULLFILENAME,_,H,M,_,Y,MM,D,FSize),
dt_min_to_offset(Y,M,D,H,MM,DATE_OFFSET),
ForeColor = 255, BackColor = 16777215,
DATA_NAME = textatr(str(NAME), ForeColor,BackColor),
ezy_grid_cell(GRID_WINDOW,ROW,1,DATA_NAME),
DATA_EXT = textatr(str(EXT_WITHOUT_DOT), ForeColor,BackColor),
ezy_grid_cell(GRID_WINDOW,ROW,2,DATA_EXT),
DATA_DATE = textatr(d(DATE_OFFSET ,"%DD-%MD-%YL
%HH:%MM"), ForeColor,BackColor),
ezy_grid_cell(GRID_WINDOW,ROW,3,DATA_DATE),
DATA_SIZE = textatr(i(FSize), ForeColor,BackColor),
ezy_grid_cell(GRID_WINDOW,ROW,4,DATA_SIZE),
NEXTROW = ROW + 1,
explorer_fill_grid(GRID_WINDOW,NEXTROW,FILELIST,PATH).
goal
true.