Copyright ® (1997-2005) EDMGROUP Pty Ltd - EZY Prolog Reference

Writing Explorer - Ezy prolog program

<- 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(SLISTBROWSELIST_LIST) - (i,o)
determ
 create_directory_tree(STRING PATHSLIST 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.

Copyright © 1997-2003 EDMGROUP (Australia)