/* * GUI interface to assist in building the package.variables file for * a new Rexx package. */ -- load the Rexx/DW package Call RxFuncAdd 'DW_LoadFuncs', 'rexxdw', 'DW_LoadFuncs' Call DW_LoadFuncs -- set our global variables to expose !globalv = '!REXXDW. !global.' -- initialise the DW session Call dw_init -- initialise some global values Call GlobalInit -- create main window Call CreateMainWindow -- now we have setup our main window, allow callbacks to fire !global.!allowcallbacks = 1 Call dw_main Exit 0 -- we never get here /* * Initialise global variables */ GlobalInit: Procedure Expose (!globalv) !global.!allowcallbacks = 0 !global.!screenwidth = dw_screen_width() !global.!screenheight = dw_screen_height() !global.!style = dw_or( !REXXDW.!DW_FCF_SYSMENU, !REXXDW.!DW_FCF_TITLEBAR, !REXXDW.!DW_FCF_SHELLPOSITION, !REXXDW.!DW_FCF_TASKLIST, !REXXDW.!DW_FCF_DLGBORDER, !REXXDW.!DW_FCF_SIZEBORDER ) !global.!icon = dw_icon_load_from_data( x2c( GetIcon() ) ) !global.!widgetheight = 25 !global.!existingdata = 0 Return /* * Create the initial, desktop window */ CreateMainWindow: Procedure Expose (!globalv) -- create the main window on the desktop... !global.!mainwindow = dw_window_new( !REXXDW.!DW_DESKTOP, 'Rexx Package Creator', !global.!style ) -- ...and give it an icon Call dw_window_set_icon !global.!mainwindow, !global.!icon -- create and pack a box inside the window topbox = dw_box_new( !REXXDW.!DW_VERT ) Call dw_box_pack_start !global.!mainwindow, topbox, 0, 0, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_EXPAND_VERT, 0 -- connect the QuitCallback label to the window delete event Call dw_signal_connect !global.!mainwindow, !REXXDW.!DW_DELETE_EVENT, 'QuitCallback' -- create entry items for 3 items title.1 = 'Package Header File'; filetype.1 = 'h'; browsetype.1 = !REXXDW.!DW_FILE_OPEN title.2 = 'RexxPackage Location'; filetype.2 = ''; browsetype.2 = !REXXDW.!DW_DIRECTORY_OPEN title.3 = 'New Package Location'; filetype.3 = ''; browsetype.3 = !REXXDW.!DW_DIRECTORY_OPEN Do i = 1 To 3 tmpbox = dw_box_new( !REXXDW.!DW_HORZ ) Call dw_box_pack_start topbox, tmpbox, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 tmp = dw_text_new( title.i': ', 0 ) Call dw_box_pack_start tmpbox, tmp, 150, !global.!widgetheight, !REXXDW.!DW_DONT_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 Call dw_window_set_style tmp, dw_or( !REXXDW.!DW_DT_RIGHT, !REXXDW.!DW_DT_VCENTER) , dw_or( !REXXDW.!DW_DT_RIGHT, !REXXDW.!DW_DT_VCENTER ) entry.i = dw_entryfield_new( '', 0 ) Call dw_box_pack_start tmpbox, entry.i, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 b1 = dw_button_new( 'Browse...', 0 ) Call dw_box_pack_start tmpbox, b1, 80, !global.!widgetheight, !REXXDW.!DW_DONT_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 Call dw_signal_connect b1, !REXXDW.!DW_CLICKED_EVENT, 'InitialBrowseButtonCallback', entry.i, title.i, filetype.i, browsetype.i End -- create our action buttons tmpbox = dw_box_new( !REXXDW.!DW_HORZ ) Call dw_box_pack_start topbox, tmpbox, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 -- pack empty space Call dw_box_pack_start tmpbox, 0, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 b1 = dw_button_new( 'Apply', 0 ) Call dw_box_pack_start tmpbox, b1, 80, !global.!widgetheight, !REXXDW.!DW_DONT_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 Call dw_signal_connect b1, !REXXDW.!DW_CLICKED_EVENT, 'InitialApplyCallback', entry.1, entry.2, entry.3 -- pack empty space Call dw_box_pack_start tmpbox, 0, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 b1 = dw_button_new( 'Cancel', 0 ) Call dw_box_pack_start tmpbox, b1, 80, !global.!widgetheight, !REXXDW.!DW_DONT_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 Call dw_signal_connect b1, !REXXDW.!DW_CLICKED_EVENT, 'QuitCallback' -- pack empty space Call dw_box_pack_start tmpbox, 0, 0, !global.!widgetheight, !REXXDW.!DW_EXPAND_HORZ, !REXXDW.!DW_DONT_EXPAND_VERT, 0 -- Display the main window (and its children) windowx = 500 windowy = 170 Call dw_window_set_pos_size !global.!mainwindow, (!global.!screenwidth % 2) - (windowx % 2), (!global.!screenheight % 2) - (windowy % 2), windowx, windowy Call dw_window_show !global.!mainwindow Return /* * Application quit callback */ QuitCallback: Procedure Expose (!globalv) If !global.!allowcallbacks = 0 Then Return 1 Call dw_window_destroy !global.!mainwindow Exit 0 /* * Our embedded icon */ GetIcon: Procedure start = .LINE + 2 /* 0000010002002020100000000000E8020000260000001010100000000000280100000E030000280000002000000040000000 0100040000000000800200000000000000000000000000000000000000000000000080000080000000808000800000008000 80008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000990000000000000000000000000000009900000000000000000000000000000990000000000000000000000000000009 9000000000000000000000000000009990000000000000000000000000000099900000000000000000000000000009990000 0000000000000000000000000990000000099000990999909900999009900000000990099999999909999099990000000009 9009909990990999909999000000000990999999990900990009900000000009909909909990009900099000000000099999 0990099909999099990000000009999009999999099990999900000000099999009999909900999009900000000990999000 0000000000000990000000099009900000000000000009900000000990999000000000000000009900000009909900000000 0000000000990000000999990000000000000000000990000009999000000000000000000009900000000000000000000000 0000000099000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000 00000000FFFFFFFFFFFFFFFFE00000FFE00000FFE7FFFCFFE7FFFCFFE7FFFCF3E7FFFCF3E7FFFCE7E00000E7E00000C7FFFF FFC7FFFFFF8FFFFFFF9FE721319FE600843FE644843FE402CE7FE491CE7FE098843FE180843FE0C1319FE47FFF9FE67FFF9F E47FFFCFE4FFFFCFE0FFFFE7E1FFFFE7FFFFFFF3FFFFFFF3FFFFFFFFFFFFFFFF280000001000000020000000010004000000 0000C00000000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000 C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000 0000000000000000000000000000000000000000000000000009000000000000000900000000000000909009099090990990 9099990090990900909090990900900099009009909909009090099090990990909000000000009099000000000000090000 0000000000090000000000000000FFFF000080030000BFFB0000BFFB0000BFFA000080020000FFFD000069490000434B0000 54B70000364B0000594900005FFD00003FFE0000FFFE0000FFFF0000 */ end = .LINE - 2 image = "" Do i = start To end image = image||Sourceline(i) End Return image /* * Callback for all Browse buttons for initial window */ InitialBrowseButtonCallback: Procedure Expose (!globalv) If !global.!allowcallbacks = 0 Then Return 1 Parse Arg ., entry, title, filetype, browsetype fn = dw_file_browse( title, '.', filetype, browsetype ) If fn = '' Then Return Call dw_window_set_text entry, fn Return 0 /* * Callback for Apply button for initial window */ InitialApplyCallback: Procedure Expose (!globalv) If !global.!allowcallbacks = 0 Then Return 1 Parse Arg ., packageheader_entry, rexxpackagelocation_entry, newpackagelocation_entry -- do some validation of the supplied fields fn1 = dw_window_get_text( packageheader_entry ) If Stream( fn1, 'C', 'QUERY EXISTS' ) = '' Then Do Call dw_messagebox 'Validation Error', dw_or( !REXXDW.!DW_MB_OK, !REXXDW.!DW_MB_WARNING ), 'Package Header File:' fn1 'does not exist. Please re-enter.' Return 1 End fn2 = dw_window_get_text( rexxpackagelocation_entry ) If Stream( fn2, 'C', 'QUERY EXISTS' ) = '' Then Do Call dw_messagebox 'Validation Error', dw_or( !REXXDW.!DW_MB_OK, !REXXDW.!DW_MB_WARNING ), 'RexxPackage Location:' fn2 'does not exist. Please re-enter.' Return 1 End fn3 = dw_window_get_text( newpackagelocation_entry ) If Stream( fn3, 'C', 'QUERY EXISTS' ) = '' Then Do Call dw_messagebox 'Validation Error', dw_or( !REXXDW.!DW_MB_OK, !REXXDW.!DW_MB_WARNING ), 'New Package Location:' fn3 'does not exist. Please re-enter.' Return 1 End -- save field values for later use !global.!packageheader_filename = fn1 !global.!rexxpackagelocation_directory = fn2 !global.!newpackagelocation_directory = fn3 -- check if we already have a package.variables file in the new location newfn = !global.!newpackagelocation_directory || !REXXDW.!DIRSEP || 'package.variables' If Stream( newfn, 'C', 'QUERY EXISTS' ) \= '' Then Do If dw_messagebox( 'Use Existing Data', dw_or( !REXXDW.!DW_MB_YESNO, !REXXDW.!DW_MB_QUESTION ), 'Use existing values from the information in' newfn'?' ) = !REXXDW.!DW_MB_RETURN_YES Then Do !global.!existingdata = 1 End End -- all validated, we can now build our screens and populate the fields if applicable Return 0