home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
p2demo21.exe
/
PEL
/
GUI_SRCH.PEL
< prev
next >
Wrap
Text File
|
1995-03-16
|
34KB
|
1,018 lines
# $Header: P:\source\wmacros\gui_srch.pev 1.46 16 Mar 1995 15:20:06 NOBLE $
# $Tabs:4 7$
##############################################################################
#
# Compuware Corporation
# 31440 Northwestern Highway
# Farmington Hills, Michigan 48334-2564
#
# This source code listing contains information that is
# proprietary to Compuware Corporation and may not be copied
# duplicated, translated, transmitted, stored, retrieved
# or in any manner or by any method conveyed or disclosed
# to a third party or parties without express written
# permission from Compuware Corporation.
#
#
##############################################################################
#### $Workfile: gui_srch.pel $: gui find and change
#/* Options group -- for all options, use the ids from the search page
# of the settings notebook
#*/
local ChangeDlg
local FindDlg
local search_fid
local file_pattern
local HIGH_WORD = 0xFFFF0000
local LOW_WORD = 0x0000FFFF
local base
local initializing
local IDD
local IDE
local IDR
local IDT
local IDB
local IDC
# this line causes init_constants to be called when globals are initialized
local dummy = init_constants()
local function init_constants()
{
dummy++ # line to stop warning about variable declared and not used.
IDD.FIND_DLG = 1520
IDE.FIND_STRING = 1521
IDR.FORWARD = 1522
IDR.BACKWARD = 1523
IDR.BLOCK = 1524
IDR.SINGLE = 1525
IDR.MULTI = 1526
IDR.FILES = 1527
IDT.FILES = 1528
IDE.FILES = 1529
IDB.MORE = 1530
IDB.FIND_NEXT = 1531
IDB.FIND_FIRST = 1532
IDB.FIND_LAST = 1533
IDB.FIND_ALL = 1534
#IDG.SEPARATOR = 1535
IDC.RECURSIVE = 1536
IDD.CHANGE_DLG = 1540
IDE.CHANGE_STRING = 1541
IDB.CHANGE_FIND = 1542
IDB.CHANGE = 1543
IDB.CHANGE_ALL = 1544
}
function gui_find()
{
local size, pos
if ( !FindDlg.handle )
{
FindDlg.handle = create_mdialog( function_id("find_dlg_callback"),
mdi_mode == 2 ? -1 : 0,
IDD.FIND_DLG, resource_dll )
FindDlg.name = "Find"
make_dlg_object( FindDlg )
add_dialog_item( FindDlg.handle, IDB.FIND_ALL, DCTRL_PUSH_BUTTON )
add_dialog_item( FindDlg.handle, IDE.FILES, DCTRL_EDIT_KEY )
set_dialog_item( FindDlg.handle, IDE.FILES, DAC_SET_TEXT_LEN, 512 )
add_dialog_item( FindDlg.handle, IDR.FILES, DCTRL_RADIO_BUTTON )
add_dialog_item( FindDlg.handle, IDR.MULTI, DCTRL_RADIO_BUTTON )
add_dialog_item( FindDlg.handle, IDB.FIND_FIRST, DCTRL_PUSH_BUTTON )
add_dialog_item( FindDlg.handle, IDB.FIND_LAST, DCTRL_PUSH_BUTTON )
add_dialog_item( FindDlg.handle, IDC.RECURSIVE, DCTRL_CHECK_BOX )
add_common_items( FindDlg.handle )
attach_help(editor_helpfile, FindDlg.handle)
base = FindDlg
more_dialog( 0 )
}
if ( ChangeDlg.handle )
{
if ( query_dialog_window( ChangeDlg.handle, DWC_SHOW ) )
set_dialog_window( ChangeDlg.handle, DWC_HIDE)
}
FindDlg.search_pattern = search_pattern
FindDlg.replace_pattern = replace_pattern
base = FindDlg
# more_dialog( 0 )
initialize_find_dlg( FindDlg.handle )
# set focus to the search string
set_dialog_item( FindDlg.handle, IDE.FIND_STRING, DAC_SETFOCUS )
begin_dialog( FindDlg.handle )
reinitialize_dialog_list() # add the Find Dialog to the dialog list
}
local function initialize_find_dlg( handle )
{
initializing = TRUE
if ( search_pattern )
{
set_dialog_item( handle, IDB.FIND_FIRST, DAC_ENABLE)
set_dialog_item( handle, IDB.FIND_LAST, DAC_ENABLE)
}
else
{
set_dialog_item( handle, IDB.FIND_FIRST, DAC_DISABLE)
set_dialog_item( handle, IDB.FIND_LAST, DAC_DISABLE)
}
initialize_common_dlg( handle )
initializing = FALSE
}
global function find_dlg_callback()
{
local retval, sflags, status, dlg_handle
local call_hand = callback_dialog_handle
local call_msg = callback_msg
local call_idx = callback_index
if ( ( call_msg == DM_CLICK && call_idx == DI_HELP ) ||
( call_msg == DM_HELPREQUESTED ) )
{
display_help("find", call_hand)
return DRC_MSG_PROCESSED
} # end DI_HELP
else if ( call_msg == DM_ACTIVATE )
{
initialize_find_dlg( call_hand )
return DRC_MSG_PROCESSED
} # end DM_ACTIVATE
else if ( (call_msg == DM_CLICK) || (call_msg == DM_DOUBLE_CLICK) )
{
if ( call_idx == IDB.FIND_FIRST )
{
setup_find(call_hand)
message("")
save_position()
if (search_fid == IDR.BLOCK && selection_type())
goto_mark(selection_mark_top())
else
{
remove_selection()
update_current_view()
goto_buffer_top()
}
# search_forward(search_pattern)
sflags = search_flags
search_flags = or( and(sflags, not(SEARCH_ADVANCE)), SEARCH_FORWARD)
status = string_search( search_pattern, search_flags )
search_flags = sflags
if ( status )
restore_position( 0 )
else
restore_position( 1 )
cleanup_find( status )
return DRC_MSG_PROCESSED
}
else if ( call_idx == IDB.FIND_LAST )
{
setup_find(call_hand)
message("")
save_position()
if (search_fid == IDR.BLOCK && selection_type())
goto_mark(selection_mark_bottom())
else
goto_buffer_bottom();
# search_backward(search_pattern)
sflags = search_flags
search_flags = and(sflags, not(SEARCH_ADVANCE+SEARCH_FORWARD))
status = string_search( search_pattern, search_flags )
search_flags = sflags
if ( status )
restore_position( 0 )
else
restore_position( 1 )
cleanup_find( status )
return DRC_MSG_PROCESSED
}
else if ( call_idx == IDB.FIND_ALL )
{
dlg_handle = call_hand
setup_find(call_hand)
if ( search_fid == IDR.BLOCK || search_fid == IDR.SINGLE )
status = grep(search_pattern)
else if ( search_fid == IDR.MULTI )
status = wgrep( search_pattern )
else if ( search_fid == IDR.FILES )
{
if ( query_dialog_item(call_hand, IDC.RECURSIVE, DAC_CHECK) )
status = fgrep( search_pattern, file_pattern, TRUE )
else
status = fgrep( search_pattern, file_pattern )
}
cleanup_find( status, dlg_handle )
return DRC_MSG_PROCESSED
}
}
else if ( call_msg == DM_CHANGE )
{
# turn off advance bit everytime pattern changes. This is just to
# be safe
search_flags = and( search_flags, not( SEARCH_ADVANCE ) )
base.old = !!base.search_pattern
base.search_pattern = query_dialog_item( call_hand, IDE.FIND_STRING, DAC_TEXT)
if ( !!base.search_pattern != base.old)
do_scope(call_hand, search_fid )
return DRC_MSG_PROCESSED
}
return common_dlg_callback()
}
########### SEARCH AGAIN #############################
global function gui_search_again()
{
if (and(search_flags, SEARCH_ALL_BUFFERS))
return wsearch_again()
else
return search_again()
}
global function gui_context_find()
{
search_pattern = symbol_under_cursor()
gui_find()
}
########### CHANGE DLG #############################
function gui_change()
{
if ( !ChangeDlg.handle )
{
ChangeDlg.handle = create_mdialog(function_id("change_dlg_callback"),
mdi_mode == 2 ? -1 : 0,
IDD.CHANGE_DLG, resource_dll )
ChangeDlg.name = "Change"
make_dlg_object( ChangeDlg )
add_dialog_item( ChangeDlg.handle, IDE.FILES, DCTRL_EDIT_KEY )
set_dialog_item( ChangeDlg.handle, IDE.FILES, DAC_SET_TEXT_LEN, 512 )
add_dialog_item( ChangeDlg.handle, IDB.CHANGE_ALL, DCTRL_PUSH_BUTTON )
add_dialog_item( ChangeDlg.handle, IDE.CHANGE_STRING, DCTRL_EDIT_KEY )
add_dialog_item( ChangeDlg.handle, IDR.FILES, DCTRL_RADIO_BUTTON )
add_dialog_item( ChangeDlg.handle, IDR.MULTI, DCTRL_RADIO_BUTTON )
# set maximum text lenght of find edit box to 100 characters
set_dialog_item( ChangeDlg.handle, IDE.CHANGE_STRING, DAC_SET_TEXT_LEN, 100 )
add_dialog_item( ChangeDlg.handle, IDB.CHANGE_FIND, DCTRL_PUSH_BUTTON )
add_dialog_item( ChangeDlg.handle, IDB.CHANGE, DCTRL_PUSH_BUTTON )
add_dialog_item( ChangeDlg.handle, IDC.RECURSIVE, DCTRL_CHECK_BOX )
add_common_items( ChangeDlg.handle )
attach_help(editor_helpfile, ChangeDlg.handle)
base = ChangeDlg
more_dialog( 0 )
}
if ( FindDlg.handle )
{
if ( query_dialog_window( FindDlg.handle, DWC_SHOW ) )
set_dialog_window(FindDlg.handle, DWC_HIDE)
}
base = ChangeDlg
ChangeDlg.search_pattern = search_pattern
ChangeDlg.replace_pattern = replace_pattern
initialize_change_dlg( ChangeDlg.handle )
set_dialog_item( ChangeDlg.handle, IDE.FIND_STRING, DAC_SETFOCUS )
begin_dialog( ChangeDlg.handle )
reinitialize_dialog_list() # add the Find Dialog to the dialog list
}
local function initialize_change_dlg( handle )
{
local historyList
local i
initializing = TRUE
set_dialog_item( handle, IDE.CHANGE_STRING, DAC_EDIT_TEXT,
base.replace_pattern , 1)
initialize_common_dlg( handle )
# set_dialog_item( handle, IDR.MULTI, DAC_DISABLE )
# set_dialog_item( handle, IDR.FILES, DAC_DISABLE )
initializing = FALSE
}
global function change_dlg_callback()
{
local retval
local status
local call_hand
local recursive
local files
call_hand = callback_dialog_handle
# debug_find_dlg()
if ( initializing )
return DRC_CONTINUE
else if ( ( callback_msg == DM_CLICK && callback_index == DI_HELP ) ||
( callback_msg == DM_HELPREQUESTED ) )
{
display_help("change", callback_dialog_handle)
return DRC_MSG_PROCESSED
}
else if ( callback_msg == DM_ACTIVATE )
{
initialize_change_dlg( callback_dialog_handle )
return DRC_MSG_PROCESSED
}
else if ( (callback_msg == DM_CLICK) || (callback_msg == DM_DOUBLE_CLICK) )
{
if ( callback_index == IDB.CHANGE_FIND )
{
setup_find(call_hand)
search_flags = and( search_flags, not(SEARCH_ADVANCE) )
search_count = 1
if ( search_fid == IDR.MULTI )
status = wreplace( search_pattern, replace_pattern )
else
status = sf_replace( search_pattern, replace_pattern )
skipReplaceString( and( search_flags, SEARCH_FORWARD ) )
cleanup_find( status )
if (status)
{
setup_find( call_hand )
if ( search_fid == IDR.MULTI )
status = wsearch( search_pattern, FindDlg.handle )
else
status = string_search( search_pattern )
cleanup_find( status )
}
return DRC_MSG_PROCESSED
}
else if ( callback_index == IDB.CHANGE )
{
setup_find(call_hand)
search_count = 1
search_flags = and(search_flags, not(SEARCH_ADVANCE) )
if ( search_fid == IDR.MULTI )
status = wreplace( search_pattern, replace_pattern )
else
status = sf_replace( search_pattern, replace_pattern )
cleanup_find( status )
return DRC_MSG_PROCESSED
}
else if ( callback_index == IDB.CHANGE_ALL )
{
setup_find(call_hand)
toggle_search_flags(SEARCH_GLOBAL, 1)
search_count = MAX_SEARCH
if ( search_fid == IDR.MULTI )
status = wreplace( search_pattern, replace_pattern )
else if ( search_fid == IDR.FILES )
{
files = query_dialog_item(callback_dialog_handle, IDE.FILES, DAC_TEXT)
recursive = query_dialog_item(callback_dialog_handle, IDC.RECURSIVE, DAC_CHECK)
status = freplace( search_pattern, replace_pattern, files, recursive )
}
else
status = sf_replace( search_pattern, replace_pattern )
cleanup_find( status )
if ( status )
message( "" )
return DRC_MSG_PROCESSED
}
}
else if ( callback_msg == DM_CHANGE )
{
base.old = !!base.search_pattern
base.replace_pattern = query_dialog_item( callback_dialog_handle, IDE.CHANGE_STRING, DAC_TEXT)
base.search_pattern = query_dialog_item( callback_dialog_handle, IDE.FIND_STRING, DAC_TEXT)
# turn off advance bit everytime pattern changes. This is just to
# be safe
search_flags = and( search_flags, not( SEARCH_ADVANCE ) )
if ( !!base.search_pattern != base.old)
do_scope(callback_dialog_handle, search_fid )
return DRC_MSG_PROCESSED
}
return common_dlg_callback()
}
##################### COMMON DLG #######################33
local function initialize_common_dlg( handle )
{
set_dialog_item( handle, IDE.FIND_STRING, DAC_EDIT_TEXT,
base.search_pattern, 1)
if ( and( search_flags, SEARCH_FORWARD) )
{
set_dialog_item( handle, IDR.FORWARD, DAC_CHECK)
set_dialog_item( handle, IDR.BACKWARD, DAC_UNCHECK)
}
else
{
set_dialog_item( handle, IDR.FORWARD, DAC_UNCHECK)
set_dialog_item( handle, IDR.BACKWARD, DAC_CHECK)
}
if ( and( search_flags, SEARCH_CASE) )
set_dialog_item( handle, IDC_SEARCH_CASE, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_CASE, DAC_UNCHECK)
if ( and( search_flags, SEARCH_MAXIMAL_MATCH) )
set_dialog_item( handle, IDC_SEARCH_MAX_MATCH, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_MAX_MATCH, DAC_UNCHECK)
if ( and( search_flags, SEARCH_REGEX) )
{
set_dialog_item( handle, IDC_SEARCH_REGEX, DAC_CHECK)
set_dialog_item( handle, IDC_SEARCH_MAX_MATCH, DAC_ENABLE)
set_dialog_item( handle, IDC_SEARCH_WORD, DAC_ENABLE)
}
else
{
set_dialog_item( handle, IDC_SEARCH_MAX_MATCH, DAC_DISABLE)
set_dialog_item( handle, IDC_SEARCH_WORD, DAC_DISABLE)
set_dialog_item( handle, IDC_SEARCH_REGEX, DAC_UNCHECK)
}
if ( and( search_flags, SEARCH_WHOLE_WORD) )
set_dialog_item( handle, IDC_SEARCH_WORD, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_WORD, DAC_UNCHECK)
# if ( and( search_flags, SEARCH_ONCE_PER_LINE) )
# set_dialog_item( handle, IDC_SEARCH_ONCE, DAC_CHECK)
# else
# set_dialog_item( handle, IDC_SEARCH_ONCE, DAC_UNCHECK)
if ( and( search_flags, SEARCH_WRAPS) )
set_dialog_item( handle, IDC_SEARCH_WRAP, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_WRAP, DAC_UNCHECK)
if ( and( search_flags, SEARCH_HIGHLIGHT) )
set_dialog_item( handle, IDC_SEARCH_HIGHLIGHT, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_HIGHLIGHT, DAC_UNCHECK)
if ( and( search_flags, SEARCH_CENTER_CURSOR) )
set_dialog_item( handle, IDC_SEARCH_CENTER, DAC_CHECK)
else
set_dialog_item( handle, IDC_SEARCH_CENTER, DAC_UNCHECK)
unhilight_temp_selection()
if ( selection_type() )
{
set_dialog_item( handle, IDR.BLOCK, DAC_ENABLE)
do_scope(handle, search_fid ? search_fid : IDR.BLOCK)
}
else
do_scope(handle, search_fid ? search_fid \
: and(search_flags, SEARCH_ALL_BUFFERS) \
? IDR.MULTI : IDR.SINGLE )
# set_dialog_item( handle, IDE.FIND_STRING, DAC_SETFOCUS )
}
global function common_dlg_callback()
{
local old_prompt_response, status, check
local retval
local index, dlgid
local call_hand = callback_dialog_handle
local call_msg = callback_msg
local call_idx = callback_index
if ( call_msg == DM_CLOSE || call_idx == DI_CANCEL)
{
set_dialog_item(call_hand, IDB.FIND_NEXT, DAC_SETFOCUS)
set_dialog_item(call_hand, IDE.FIND_STRING, DAC_SETFOCUS)
set_dialog_window(call_hand, DWC_HIDE)
update_current_view()
cleanup_prompt_history()
search_fid = 0
return DRC_EXIT
}
else if ( (call_msg == DM_CLICK) || (call_msg == DM_DOUBLE_CLICK) )
{
if ( call_idx == IDB.MORE )
{
more_dialog()
return DRC_MSG_PROCESSED
}
else if ( call_idx == IDB.FIND_NEXT )
{
setup_find(call_hand)
if ( search_fid == IDR.MULTI )
status = wsearch_again( 0, FindDlg.handle )
else
status = search_again()
cleanup_find( status )
return DRC_MSG_PROCESSED
}
else if ( call_idx == IDR.SINGLE || call_idx == IDR.BLOCK ||
call_idx == IDR.MULTI || call_idx == IDR.FILES )
{
do_scope( call_hand, call_idx )
return DRC_MSG_PROCESSED
}
else if ( call_idx == IDR.FORWARD )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_FORWARD, retval)
}
else if ( call_idx == IDR.BACKWARD )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_FORWARD, !retval)
}
else if ( call_idx == IDC_SEARCH_CASE )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_CASE, retval)
}
else if ( call_idx == IDC_SEARCH_REGEX )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_REGEX, retval)
set_dialog_item( call_hand, IDC_SEARCH_WORD, check )
set_dialog_item( call_hand, IDC_SEARCH_MAX_MATCH, check)
}
else if ( call_idx == IDC_SEARCH_WORD )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_WHOLE_WORD, retval)
}
else if ( call_idx == IDC_SEARCH_MAX_MATCH )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_MAXIMAL_MATCH, retval)
}
else if ( call_idx == IDC_SEARCH_HIGHLIGHT )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_HIGHLIGHT, retval)
}
else if ( call_idx == IDC_SEARCH_CENTER )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_CENTER_CURSOR, retval)
}
else if ( call_idx == IDC_SEARCH_WRAP )
{
retval = query_dialog_item( call_hand, call_idx, DAC_CHECK)
check = retval ? DAC_ENABLE : DAC_DISABLE
toggle_search_flags(SEARCH_WRAPS, retval)
}
return DRC_MSG_PROCESSED
}
else if ( call_msg == DM_KILL_FOCUS )
{
if ( call_idx == IDE.FILES )
{
retval = query_dialog_item(call_hand, call_idx, DAC_EDIT_TEXT)
if ( retval )
{
file_pattern = retval
set_dialog_item(call_hand, call_idx, DAC_EDIT_TEXT, file_pattern )
}
}
return DRC_MSG_PROCESSED
}
else if ( call_msg == DM_INVALID_PCHAR &&
( call_idx == IDE.FIND_STRING ||
call_idx == IDE.CHANGE_STRING ||
call_idx == IDE.FILES ) )
{
dlgid = call_hand
index = call_idx
prompt_response = query_dialog_item(dlgid, index, DAC_EDIT_TEXT)
# save prompt_response before the we execute the event
#
old_prompt_response = prompt_response
if ( call_idx == IDE.FIND_STRING )
setup_prompt_history("SEARCH", base.SEARCH )
else if ( call_idx == IDE.CHANGE_STRING )
setup_prompt_history("REPLACE", base.REPLACE)
else if ( call_idx == IDE.FILES )
setup_prompt_history("SRCHFILES", base.SRCHFILES)
execute_event_handler( EVENT.INVALID_PCHAR )
if ( call_idx == IDE.FIND_STRING )
base.SEARCH = get_history_element()
else if ( call_idx == IDE.CHANGE_STRING )
base.REPLACE = get_history_element()
else if ( call_idx == IDE.FILES )
base.SRCHFILES = get_history_element()
# only update edit box if any event handlers for EVENT.INVALID_PCHAR
# have changed the prompt_response variable. Every time an edit box
# is updated the cursor is positioned at the end of the line.
if ( prompt_response != old_prompt_response )
{
set_dialog_item( dlgid, index, DAC_EDIT_TEXT,
prompt_response "", 1)
}
return DRC_MSG_PROCESSED
}
return DRC_CONTINUE
}
local function do_scope( handle, index )
{
# first enable or disable all of the buttons by looking at the pattern
local enable = base.search_pattern ? DAC_ENABLE : DAC_DISABLE
# Clear all of the search range radio buttons before setting
# the one we want
set_dialog_item( handle, IDR.BLOCK, DAC_UNCHECK )
set_dialog_item( handle, IDR.SINGLE, DAC_UNCHECK )
set_dialog_item( handle, IDR.MULTI, DAC_UNCHECK )
set_dialog_item( handle, IDR.FILES, DAC_UNCHECK )
set_dialog_item( handle, IDB.FIND_NEXT, enable)
if ( FindDlg.handle == handle )
{
set_dialog_item( handle, IDB.FIND_FIRST, enable)
set_dialog_item( handle, IDB.FIND_LAST, enable)
set_dialog_item( handle, IDB.FIND_ALL, enable)
}
else if ( ChangeDlg.handle == handle )
{
set_dialog_item( handle, IDB.CHANGE, enable)
set_dialog_item( handle, IDB.CHANGE_FIND, enable)
set_dialog_item( handle, IDB.CHANGE_ALL, enable)
}
# next, based on the scope, selectively disable buttons that can't
# or shouldn't be used
#
if (search_selection_ok() || (selection_type() && index))
set_dialog_item( handle, IDR.BLOCK, DAC_ENABLE)
else
set_dialog_item( handle, IDR.BLOCK, DAC_DISABLE)
if (index == IDR.BLOCK || !index)
{
if (search_selection_ok() || (selection_type() && index))
{
index = IDR.BLOCK
}
else
index = IDR.SINGLE # if no selection, setup find for single buffer
}
if ( index == IDR.SINGLE || !index)
{
index = IDR.SINGLE
}
else if ( index == IDR.MULTI )
{
if ( FindDlg.handle == handle )
{
set_dialog_item( handle, IDB.FIND_FIRST, DAC_DISABLE)
set_dialog_item( handle, IDB.FIND_LAST, DAC_DISABLE)
}
}
else if ( index == IDR.FILES )
{
set_dialog_item( handle, IDT.FILES, DAC_ENABLE)
set_dialog_item( handle, IDT.FILES, DAC_ENABLE)
set_dialog_item( handle, IDE.FILES, DAC_ENABLE)
set_dialog_item( handle, IDB.FIND_NEXT, DAC_DISABLE)
if ( FindDlg.handle == handle )
{
set_dialog_item( handle, IDB.FIND_FIRST, DAC_DISABLE)
set_dialog_item( handle, IDB.FIND_LAST, DAC_DISABLE)
}
else
{
set_dialog_item( handle, IDB.CHANGE_FIND, DAC_DISABLE)
set_dialog_item( handle, IDB.CHANGE, DAC_DISABLE)
}
set_dialog_item( handle, IDC.RECURSIVE, DAC_ENABLE )
}
if ( index != IDR.FILES )
{
set_dialog_item( handle, IDC.RECURSIVE, DAC_DISABLE )
set_dialog_item( handle, IDT.FILES, DAC_DISABLE)
set_dialog_item( handle, IDE.FILES, DAC_DISABLE)
}
set_dialog_item( handle, index, DAC_CHECK)
search_fid = index
return DRC_MSG_PROCESSED
}
local find_search_flags
local old_search_in_block
local function setup_find(handle)
{
local sel_type
old_search_in_block = and(search_flags, SEARCH_BLOCK)
unhilight_temp_selection();
if ( search_fid == IDR.BLOCK )
{
search_flags = or(search_flags, SEARCH_BLOCK)
search_flags = and(search_flags, not(SEARCH_ALL_BUFFERS))
sel_type = selection_type()
if ( search_selection_ok() && !sel_type )
{
if ( !and(search_flags, SEARCH_ADVANCE) )
restore_search_selection()
}
else if ( sel_type )
save_search_selection()
}
else if ( search_fid == IDR.MULTI )
{
if ( search_selection_ok() )
delete_search_selection()
search_flags = and(search_flags, not(SEARCH_BLOCK))
search_flags = or(search_flags, SEARCH_ALL_BUFFERS)
remove_selection()
update_current_view()
}
else
{
if ( search_selection_ok() )
delete_search_selection()
search_flags = and(search_flags, not(SEARCH_BLOCK+SEARCH_ALL_BUFFERS))
remove_selection()
update_current_view()
}
find_search_flags = search_flags
if ( FindDlg.handle == handle )
{
file_pattern = query_dialog_item(handle, IDE.FILES, DAC_TEXT)
}
search_pattern = query_dialog_item(handle, IDE.FIND_STRING, DAC_TEXT)
if ( ChangeDlg.handle && query_dialog_window( ChangeDlg.handle, DAC_SHOW ) )
replace_pattern = query_dialog_item(handle, IDE.CHANGE_STRING, DAC_TEXT)
}
# if doRestore is a 1, then there was a successful search and the position
# doesn't need to be restored.
#
local function cleanup_find( doRestore, dlg_handle )
{
if (and(find_search_flags, SEARCH_BLOCK))
{
search_flags = or(search_flags, SEARCH_BLOCK)
search_flags = and(search_flags, not(SEARCH_ALL_BUFFERS))
}
else if (and(find_search_flags, SEARCH_ALL_BUFFERS))
{
search_flags = and(search_flags, not(SEARCH_BLOCK))
search_flags = or(search_flags, SEARCH_ALL_BUFFERS)
}
else
search_flags = and(search_flags, not(SEARCH_BLOCK+SEARCH_ALL_BUFFERS))
if ( search_fid == IDR.BLOCK )
{
if (argcount() < 2 || !dlg_handle)
dlg_handle = callback_dialog_handle
do_scope(dlg_handle, 0)
}
# restore_position( !doRestore )
display_update()
if ( old_search_in_block )
or( search_flags, SEARCH_BLOCK )
else
and( search_flags, not(SEARCH_BLOCK) )
}
#*********************** MORE page *****************************************
local function more_dialog( big )
{
local pos
if ( argcount() < 1 )
base.big = !base.big
else
base.big = 0+big
if ( base.big )
{
# find the end position of dialog
#
pos = query_dialog_window( base.handle, DWC_POSITION )
base.x = shiftr( and(pos, HIGH_WORD), 16 )
base.diff = base.x + base.big_width - screen_width
base.y = and(pos, LOW_WORD)
if ( base.diff > 0 )
set_dialog_window( base.handle, DWC_POSITION, base.x - base.diff, base.y)
set_dialog_item( base.handle, IDB.MORE, DAC_TEXT, "~Options <<")
set_dialog_window( base.handle, DWC_SIZE, base.big_width, base.height )
set_dialog_item( base.handle, IDC_SEARCH_WORD, DAC_SHOW )
set_dialog_item( base.handle, IDC_SEARCH_CENTER, DAC_SHOW )
set_dialog_item( base.handle, IDC_SEARCH_MAX_MATCH, DAC_SHOW )
# set_dialog_item( base.handle, IDC_SEARCH_ONCE, DAC_SHOW )
set_dialog_item( base.handle, IDC_SEARCH_WRAP, DAC_SHOW )
set_dialog_item( base.handle, IDC_SEARCH_HIGHLIGHT, DAC_SHOW )
# set_dialog_item( base.handle, IDG.SEPARATOR, DAC_SHOW )
}
else
{
set_dialog_item( base.handle, IDB.MORE, DAC_TEXT, "~Options >>")
set_dialog_window( base.handle, DWC_SIZE, base.small_width, base.height )
set_dialog_item( base.handle, IDC_SEARCH_WORD, DAC_HIDE )
set_dialog_item( base.handle, IDC_SEARCH_CENTER, DAC_HIDE )
set_dialog_item( base.handle, IDC_SEARCH_MAX_MATCH, DAC_HIDE )
# set_dialog_item( base.handle, IDC_SEARCH_ONCE, DAC_HIDE )
set_dialog_item( base.handle, IDC_SEARCH_WRAP, DAC_HIDE )
set_dialog_item( base.handle, IDC_SEARCH_HIGHLIGHT, DAC_HIDE )
# set_dialog_item( base.handle, IDG.SEPARATOR, DAC_HIDE )
}
}
local FIND_CUSHION = 30
local function make_dlg_object( dlg )
{
local x, pos, size, width
local end_item = DI_HELP
# find height and width of expanded dlg
#
size = query_dialog_window( dlg.handle, DWC_SIZE )
dlg.big_width = shiftr( and(size, HIGH_WORD), 16 )
dlg.height = and(size, LOW_WORD )
# determine the width of the shrinked dlg by finding the x coordinate
# and width of the "Options" button and add some space
#
size = query_dialog_item(dlg.handle, end_item, DAC_SIZE)
width = shiftr( and(size, HIGH_WORD), 16 )
pos = query_dialog_item(dlg.handle, end_item, DAC_POSITION)
x = shiftr( and(pos, HIGH_WORD), 16 )
dlg.small_width = x + width + FIND_CUSHION
# position dialog at the lower-right corner
#
set_dialog_window(dlg.handle, DWC_POSITION, screen_width - dlg.small_width, 0)
# set big state of dlg
#
dlg.big = 1
}
# this function is just a safeguard since if items are hidden or shown
# they are assumed to be DCTRL_STATIC_TEXT
#
local function add_common_items( handle )
{
add_dialog_item( handle, DI_HELP, DCTRL_PUSH_BUTTON )
add_dialog_item( handle, IDB.FIND_NEXT, DCTRL_DEFAULT_PUSH_BUTTON )
add_dialog_item( handle, IDE.FIND_STRING, DCTRL_EDIT_KEY )
# set maximum text lenght of find edit box to 100 characters
set_dialog_item( handle, IDE.FIND_STRING, DAC_SET_TEXT_LEN, 100 )
add_dialog_item( handle, IDR.SINGLE, DCTRL_RADIO_BUTTON )
add_dialog_item( handle, IDR.BLOCK, DCTRL_RADIO_BUTTON )
add_dialog_item( handle, IDR.FORWARD, DCTRL_RADIO_BUTTON )
add_dialog_item( handle, IDR.BACKWARD, DCTRL_RADIO_BUTTON )
add_dialog_item( handle, IDC_SEARCH_MAX_MATCH, DCTRL_CHECK_BOX )
add_dialog_item( handle, IDC_SEARCH_WORD, DCTRL_CHECK_BOX )
add_dialog_item( handle, IDC_SEARCH_CENTER, DCTRL_CHECK_BOX )
# add_dialog_item( handle, IDC_SEARCH_ONCE, DCTRL_CHECK_BOX )
add_dialog_item( handle, IDC_SEARCH_WRAP, DCTRL_CHECK_BOX )
add_dialog_item( handle, IDC_SEARCH_HIGHLIGHT, DCTRL_CHECK_BOX )
}
#local function debug_find_dlg()
#{
# local indx
#
# if ( callback_index == IDE.FIND_STRING ){
# indx = "IDE.FIND_STRING"
# } else if ( callback_index == IDE.CHANGE_STRING ){
# indx = "IDE.CHANGE_STRING"
# } else if ( callback_index == IDR.FORWARD ){
# indx = "IDR.FORWARD"
# } else if ( callback_index == IDR.BACKWARD ){
# indx = "IDR.BACKWARD"
# } else if ( callback_index == IDR.BLOCK ){
# indx = "IDR.BLOCK"
# } else if ( callback_index == IDR.SINGLE ){
# indx = "IDR.SINGLE"
# } else if ( callback_index == IDR.MULTI ){
# indx = "IDR.MULTI"
# } else if ( callback_index == IDR.FILES ){
# indx = "IDR.FILES"
# } else if ( callback_index == IDE.FILES ){
# indx = "IDE.FILES"
# } else if ( callback_index == IDT.FILES ){
# indx = "IDT.FILES"
# } else if ( callback_index == IDB.MORE ){
# indx = "IDB.MORE"
# } else if ( callback_index == IDB.FIND_NEXT ){
# indx = "IDB.FIND_NEXT"
# } else if ( callback_index == IDB.FIND_FIRST ){
# indx = "IDB.FIND_FIRST"
# } else if ( callback_index == IDB.FIND_LAST ){
# indx = "IDB.FIND_LAST"
# } else if ( callback_index == IDB.FIND_ALL ){
# indx = "IDB.FIND_ALL"
# } else if ( callback_index == IDB.CHANGE ){
# indx = "IDB.CHANGE"
# } else if ( callback_index == IDB.CHANGE_FIND ){
# indx = "IDB.CHANGE_FIND"
# } else if ( callback_index == IDB.CHANGE_ALL ){
# indx = "IDB.CHANGE_ALL"
# } else
# indx = "?unknown(" callback_index ")"
#
# cvdebug("%s indx = (%s) init(%d)", identMsg(), indx, initializing)
#}