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

Tab control sample

back to custom controls

main page

 

The Tab control sample consists of 2 components:

  • DCL file with GUI declarations

  • PRO file - with EZY Prolog programs.

DCL file has been created by EZY Designer using standard tools, which allow to create complex Tab controls natively.

Nested controls are supported inside Tabs.

 

 

The EZY Prolog program file loads DCL declarations, defines user event handlers for buttons.

When button pressed - event handler get control and defines the name of the pressed control and performs necessary actions, such as:

  • Text editor initialization

  • Text editor result retrieval

  • Grid initialization

  • Grid modified cells retrieval

 

 

/* EZY PROLOG. Copyright (C) 2002 EDMGROUP (Australia)

Purpose:

load DCL file with tab control

define buttons handler

Process Set/Get buttons, initializes GRID and EDIT controls

*/

predicates

determ prolog_main

tab_control_handler: EHANDLER

tab_grid_callback: GRID_CALLBACK

determ tab_grid_init(WINDOW GRID_OBJECT)

determ list_length(SLIST, INTEGER MAXCOLUMN)

determ collect_modified_rows(WINDOW,INTEGER, INTEGER, STRING) - (i,i,i,o)

determ collect_modified_cells(WINDOW,INTEGER, INTEGER, STRING) - (i,i,i,o)

clauses

 

prolog_main():-

ezy_form_open ( "ezy_tab_control.dcl" , WINDOW ),

GET_BUTTON_ADDR =[ "Tab control" , "Tab 1" , "Get Text" ],

ezy_get_object ( WINDOW , GET_BUTTON_ADDR , GET_BUTTON_OBJECT ),

ezy_object_handler ( GET_BUTTON_OBJECT , tab_control_handler ),

SET_BUTTON_ADDR =[ "Tab control" , "Tab 1" , "Set Text" ],

ezy_get_object ( WINDOW , SET_BUTTON_ADDR , SET_BUTTON_OBJECT ),

ezy_object_handler ( SET_BUTTON_OBJECT , tab_control_handler ),

MODIFIED_BUTTON_ADDR =[ "Tab control" , "Tab 2" , "Get Modified" ],

ezy_get_object ( WINDOW , MODIFIED_BUTTON_ADDR , MODIFIED_BUTTON_OBJECT ),

ezy_object_handler ( MODIFIED_BUTTON_OBJECT , tab_control_handler ),

INIT_BUTTON_ADDR =[ "Tab control" , "Tab 2" , "Initialize Grid" ],

ezy_get_object ( WINDOW , INIT_BUTTON_ADDR , INIT_BUTTON_OBJECT ),

ezy_object_handler ( INIT_BUTTON_OBJECT , tab_control_handler ),

! .

tab_control_handler( _ ,e_control( _ , _ , ACTIVE_OBJECT , _ )):-

ezy_object_name ( ACTIVE_OBJECT , NAME ),

NAME = "Get Text" ,

ezy_get_parent ( ACTIVE_OBJECT , "Tab 1" , TAB_WINDOW ),

EDIT_ADDR =[ "Tab 1" , "EDIT" ],

ezy_get_object ( TAB_WINDOW , EDIT_ADDR , EDIT_OBJECT ),

ezy_editor_string ( EDIT_OBJECT , EDIT_TEXT ),

dlg_note ( "Entered text" , EDIT_TEXT ),

! .

tab_control_handler( _ ,e_control( _ , _ , ACTIVE_OBJECT , _ )):-

ezy_object_name ( ACTIVE_OBJECT , NAME ),

NAME = "Set Text" ,

dlg_str ( "Please enter text string" , "initialized editor text" , INITIAL_TEXT ),

ezy_get_parent ( ACTIVE_OBJECT , "Tab 1" , TAB_WINDOW ),

EDIT_ADDR =[ "Tab 1" , "EDIT" ],

ezy_get_object ( TAB_WINDOW , EDIT_ADDR , EDIT_OBJECT ),

ezy_editor_string ( EDIT_OBJECT , INITIAL_TEXT ),

! .

tab_control_handler( _ ,e_control( _ , _ , ACTIVE_OBJECT , _ )):-

ezy_object_name ( ACTIVE_OBJECT , NAME ),

NAME = "Initialize Grid" ,

ezy_get_parent ( ACTIVE_OBJECT , "Tab 2" , TAB_WINDOW ),

GRID_ADDR =[ "Tab 2" , "GRID" ],

ezy_get_object ( TAB_WINDOW , GRID_ADDR , GRID_OBJECT ),

tab_grid_init( GRID_OBJECT ),

! .

tab_control_handler( _ ,e_control( _ , _ , ACTIVE_OBJECT , _ )):-

ezy_object_name ( ACTIVE_OBJECT , NAME ),

NAME = "Get Modified" ,

ezy_get_parent ( ACTIVE_OBJECT , "Tab 2" , TAB_WINDOW ),

GRID_ADDR =[ "Tab 2" , "GRID" ],

ezy_get_object ( TAB_WINDOW , GRID_ADDR , GRID_OBJECT ),

ezy_grid_rows ( GRID_OBJECT , MAXROW ),

ezy_grid_columns ( GRID_OBJECT , COLUMN_LIST ),

list_length( COLUMN_LIST , MAXCOLUMN ),

collect_modified_rows( GRID_OBJECT , MAXROW , MAXCOLUMN , MODIFIED_CELLS ),

format ( MESSAGE_STRING , "Button Pressed %\n tab_control_handler:\nModified Cells:\n%" , NAME , MODIFIED_CELLS ),

dlg_note ( "EZY Prolog" , MESSAGE_STRING ),

! .

tab_control_handler( _ ,e_control( _ , _ , ACTIVE_OBJECT , _ )):-

ezy_object_name ( ACTIVE_OBJECT , NAME ),

write ( "Fail in Control processing [" , NAME , "]\n" ),

! .

tab_grid_init( GRID_OBJECT ):-

ezy_grid_callback ( GRID_OBJECT , tab_grid_callback ),

fail .

tab_grid_init( GRID_OBJECT ):-

MAXROW = 5 ,

MAXCOLUMN = 3 ,

ezy_grid_rows ( GRID_OBJECT , MAXROW ),

COLUMN_LIST =[ "COLUMN1" , "COLUMN2" , "COLUMN3" ],

ezy_grid_columns ( GRID_OBJECT , COLUMN_LIST ),

for ( ROW , 1 , MAXROW ),

for ( COL , 1 , MAXCOLUMN ),

format ( GRID_CELL_DATA , "data(%,%)" , ROW , COL ),

ezy_grid_cell ( GRID_OBJECT , ROW , COL , GRID_CELL_DATA ),

COL = MAXCOLUMN ,

ROW = MAXROW ,

! .

tab_grid_callback( GRID_OBJECT ,user_action(modified( ROW , COL , DATA ))):-

ezy_get_parent ( GRID_OBJECT , "ezy_frame" , FRAME_OBJECT ),

EDITOR_ADDRESS =[ "ezy_editor" ],

ezy_get_object ( FRAME_OBJECT , EDITOR_ADDRESS , EDITOR_OBJECT ),

format ( MESSAGE_STRING , "message from grid callback:\ngrid cell modified(%,%,%)\n" , ROW , COL , DATA ),

ezy_editor_string ( EDITOR_OBJECT , MESSAGE_STRING ),

! .

list_length([], 0 ):-

! .

list_length([ _ |T], LEN ):-

! ,

list_length( T , TEMP ),

LEN = TEMP + 1 .

collect_modified_rows( _ , 0 , _ , "\n" ):-

! .

collect_modified_rows( GRID_OBJECT , ROW , MAXCOLUMN , RESULT ):-

! ,

PREV_ROW = ROW - 1 ,

collect_modified_rows( GRID_OBJECT , PREV_ROW , MAXCOLUMN , TEMP ),

collect_modified_cells( GRID_OBJECT , ROW , MAXCOLUMN , ROW_DATA ),

format ( RESULT , "% {Row - %} %" , TEMP , ROW , ROW_DATA ).

collect_modified_cells( _ , _ , 0 , "\n" ):-

! .

collect_modified_cells( GRID_OBJECT , ROW , COL , OUT ):-

ezy_grid_cellmodified( GRID_OBJECT , ROW , COL ),

! ,

NEXTCOL = COL - 1 ,

collect_modified_cells( GRID_OBJECT , ROW , NEXTCOL , TEMP ),

ezy_grid_cell ( GRID_OBJECT , ROW , COL , CELL_DATA ),

format ( OUT , "cell(%,%,%)%" , ROW , COL , CELL_DATA , TEMP ).

collect_modified_cells( GRID_OBJECT , ROW , COL , OUT ):-

! ,

NEXTCOL = COL - 1,

collect_modified_cells( GRID_OBJECT , ROW , NEXTCOL , OUT ).

 

Copyright © 1997-2003 EDMGROUP (Australia)