/*******************************************************/
/* Adds a new (or edited) default tool to the listview */
/*******************************************************/
PROC gui_add_default_tool()

	DEF old_def_tool : PTR TO CHAR
	DEF new_def_tool : PTR TO CHAR

	DEF add_default_tool_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , add_default_tool_hook
	a4_tmp := add_default_tool_hook.data
	MOVE.L	a4_tmp , A4

	IF current_edited_def_tool = NO_CURRENT_EDITED_DEF_TOOL

		set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_old_def_tool )

	ELSE

		set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )
		doMethod( deftII.lv_default_tools , [ MUIM_List_Remove , current_edited_def_tool ] )
		set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )
		set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )

	ENDIF

	get( deftII.stR_old_def_tool , MUIA_String_Contents , {old_def_tool} )
	get( deftII.stR_PO_new_def_tool , MUIA_String_Contents , {new_def_tool} )
	add_default_tool( old_def_tool , new_def_tool )

ENDPROC


/*****************************************************************/
/* Adds a default tool if it isn't already there in the listview */
/*****************************************************************/
PROC add_default_tool( old_def_tool : PTR TO CHAR , new_def_tool : PTR TO CHAR )

	DEF def_tool : PTR TO default_tool
	DEF def_tool_tmp : PTR TO default_tool
	DEF i = 0 , already_there = FALSE
	DEF return = 0

	set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )

	REPEAT

		doMethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool_tmp} ] )
		IF def_tool_tmp <> NIL THEN already_there := str_cmp_no_case( old_def_tool , def_tool_tmp.old )

	UNTIL ( def_tool_tmp = NIL ) OR already_there

	IF ( already_there = FALSE ) AND ( StrLen( old_def_tool ) > 0 )

		def_tool := New( SIZEOF default_tool )

		def_tool.old := String( StrLen( old_def_tool ) )
		StrCopy( def_tool.old , old_def_tool , ALL )

		def_tool.old_raw := String ( StrLen( old_def_tool ) + 2 )
		StringF( def_tool.old_raw , '\ei\s' , old_def_tool )

		def_tool.new := String( StrLen( new_def_tool ) )
		StrCopy( def_tool.new , new_def_tool , ALL )

		doMethod( deftII.lv_default_tools , [ MUIM_List_InsertSingle , def_tool , MUIV_List_Insert_Sorted ] )
		modified := TRUE

	ELSE

		return := 10
		DisplayBeep( NIL )

	ENDIF

	current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
	doMethod( deftII.stR_old_def_tool , [ MUIM_Set , MUIA_String_Contents , '' ] )
	doMethod( deftII.stR_PO_new_def_tool , [ MUIM_Set , MUIA_String_Contents , '' ] )

	set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )

ENDPROC


/*******************************************************************/
/* Prepares the edition of the active default tool in the listview */
/*******************************************************************/
PROC edit_default_tool()

	DEF def_tool : PTR TO default_tool

	DEF edit_default_tool_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , edit_default_tool_hook
	a4_tmp := edit_default_tool_hook.data
	MOVE.L	a4_tmp , A4

	get( deftII.lv_default_tools , MUIA_List_Active , {current_edited_def_tool} )
	doMethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {def_tool} ] )
	doMethod( deftII.stR_old_def_tool , [ MUIM_Set , MUIA_String_Contents , def_tool.old ] )
	doMethod( deftII.stR_PO_new_def_tool , [ MUIM_Set , MUIA_String_Contents , def_tool.new ] )
	set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_old_def_tool )

ENDPROC


/***************************************************/
/* Deletes the active default tool in the listview */
/***************************************************/
PROC delete_default_tool()

	DEF delete_default_tool_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , delete_default_tool_hook
	a4_tmp := delete_default_tool_hook.data
	MOVE.L	a4_tmp , A4

	set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )

	doMethod( deftII.lv_default_tools , [ MUIM_List_Remove , MUIV_List_Remove_Active ] )
	current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
	doMethod( deftII.stR_old_def_tool , [ MUIM_Set , MUIA_String_Contents , '' ] )
	doMethod( deftII.stR_PO_new_def_tool , [ MUIM_Set , MUIA_String_Contents , '' ] )

	set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )

	set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )

ENDPROC


/**************************************************************/
/* Hook function called to add a default tool to the listview */
/**************************************************************/
PROC app_add_default_tool()

	DEF app_def_tools : PTR TO appmessage
	DEF one_def_tool : PTR TO wbarg
	DEF icon : PTR TO diskobject
	DEF old_dir , i

	DEF app_add_default_tool_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , app_add_default_tool_hook
	MOVE.L	(A1) , app_def_tools
	a4_tmp := app_add_default_tool_hook.data
	MOVE.L	a4_tmp , A4

	one_def_tool := app_def_tools.arglist

	FOR i := 1 TO app_def_tools.numargs

		old_dir := CurrentDir( one_def_tool.lock )
		icon := GetDiskObject( one_def_tool.name )

		IF ( icon = NIL ) OR ( icon.type <> WBPROJECT )

			DisplayBeep( NIL )

		ELSE

			add_default_tool( icon.defaulttool , '' )
			FreeDiskObject( icon )

		ENDIF

		CurrentDir( old_dir )
		one_def_tool++

	ENDFOR

	set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )

ENDPROC


/***********************************************************/
/* Hook function to display a default tool in the listview */
/***********************************************************/
PROC display_def_tool()

	DEF def_tool : PTR TO default_tool
	DEF string_array : PTR TO LONG

	DEF a4_tmp
	DEF display_def_tool_hook : PTR TO hook
	MOVE.L	A0 , display_def_tool_hook
	MOVE.L	A1 , def_tool
	MOVE.L	A2 , string_array
	a4_tmp := display_def_tool_hook.data
	MOVE.L	a4_tmp , A4

	string_array[ 0 ] := ( IF EstrLen( def_tool.new ) = 0 THEN def_tool.old_raw ELSE def_tool.old )
	string_array[ 1 ] := def_tool.new

ENDPROC


/***********************************************************************/
/* Hook function to compare default tools to sort them in the listview */
/***********************************************************************/
PROC compare_def_tool()

	DEF def_tool1 : PTR TO default_tool
	DEF def_tool2 : PTR TO default_tool
	DEF name1 : PTR TO CHAR
	DEF name2 : PTR TO CHAR

	DEF a4_tmp
	DEF compare_def_tool_hook : PTR TO hook
	MOVE.L	A0 , compare_def_tool_hook
	MOVE.L	A1 , def_tool1
	MOVE.L	A2 , def_tool2
	a4_tmp := compare_def_tool_hook.data
	MOVE.L	a4_tmp , A4

	name1 := IF EstrLen( def_tool1.new ) > 0 THEN def_tool1.old ELSE def_tool1.old_raw
	name2 := IF EstrLen( def_tool2.new ) > 0 THEN def_tool2.old ELSE def_tool2.old_raw

ENDPROC str_order_no_case( name1 , name2 )


/***********************************************************/
/* Hook function called before opening the pop object list */
/***********************************************************/
PROC open_new_def_tools_list()

	DEF new_def_tool : PTR TO CHAR
	DEF new_def_tool_tmp : PTR TO CHAR
	DEF def_tool : PTR TO default_tool
	DEF i = 0 , j , found = FALSE , already_there

	DEF str_obj_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , str_obj_hook
	a4_tmp := str_obj_hook.data
	MOVE.L	a4_tmp , A4

	set( deftII.lv_new_def_tools , MUIA_List_Quiet , MUI_TRUE )

	doMethod( deftII.lv_new_def_tools , [ MUIM_List_Clear ] )

	REPEAT

		doMethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool} ] )

		IF ( def_tool <> NIL ) AND ( EstrLen( def_tool.new ) > 0 )

			already_there := FALSE
			j := 0

			REPEAT

				doMethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , j++ , {new_def_tool_tmp} ] )
				already_there := str_cmp_no_case( def_tool.new , new_def_tool_tmp )

			UNTIL ( new_def_tool_tmp = NIL ) OR already_there

			IF already_there = FALSE THEN doMethod( deftII.lv_new_def_tools , [ MUIM_List_InsertSingle , def_tool.new , MUIV_List_Insert_Sorted ] )

		ENDIF

	UNTIL def_tool = NIL

	get( deftII.stR_PO_new_def_tool , MUIA_String_Contents , {new_def_tool} )

	i := 0

	REPEAT

		doMethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , i++ , {new_def_tool_tmp} ] )
		IF new_def_tool_tmp <> NIL THEN found := str_cmp_no_case( new_def_tool , new_def_tool_tmp )

	UNTIL ( new_def_tool_tmp = NIL ) OR found

	IF found

		doMethod( deftII.lv_new_def_tools , [ MUIM_Set , MUIA_List_Active , i - 1 ] )

	ELSE

		doMethod( deftII.lv_new_def_tools , [ MUIM_Set , MUIA_List_Active , MUIV_List_Active_Top ] )

	ENDIF

	set( deftII.lv_new_def_tools , MUIA_List_Quiet , FALSE )

ENDPROC MUI_TRUE
  

/***********************************************************/
/* Hook function called before closing the pop object list */
/***********************************************************/
PROC close_new_def_tools_list()

	DEF new_def_tool : PTR TO CHAR

	DEF str_obj_hook : PTR TO hook
	DEF a4_tmp
	MOVE.L	A0 , str_obj_hook
	a4_tmp := str_obj_hook.data
	MOVE.L	a4_tmp , A4

	doMethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {new_def_tool} ] )
	doMethod( deftII.stR_PO_new_def_tool , [ MUIM_Set , MUIA_String_Contents , new_def_tool ] )
	set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
	set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )

ENDPROC
