Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/toolbox/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/toolbox/_toolbox.vct

�iVERSION =   3.00_toolbox.vcx_vcxtool1	toolbox.hޔ��/..\..\..\vfp9\foxpro.h�T(�0_rootPixelsClass1custom_root11..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/custom1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/_baseclasstoolPixels_dbftool1Class1custom_prgtoolPixelsClass1	_filetool_prgtoolcustom	_categoryPixels1	_category	toolbox.h��/PixelsPixels_activexcategory1_tool_baseclasstoolcustom_toolPixelsClass1_rootPixelsClass_toolcustom_toolbox.vcxcustomClass	_filetool*openitem 
111custom_dynamiccategory_lbxtoolClass1	_filetool_lbxtool,imagefile = dblabel.bmp
Name = "_lbxtool"
custom_toolbox.vcx	toolbox.h��/_dynamiccategoryInstalled ActiveX controls._activexcategory*openitem 
Name = "_activexcategory"
_toolbox.vcx_scxtoolPixels	_filetool
_imagetoolPixels	toolbox.h��/_dynamiccategoryClass_generalcategory	_filetoolPixelsClass1	_category_generalcategory1classtype = CATEGORY
Name = "_generalcategory"
custom_toolbox.vcx	toolbox.h��/Class1_frxtoolPixelsClass1	_filetool_frxtool+imagefile = report.bmp
Name = "_frxtool"
custom_pjxtoolPixels_apptool
_imagetoolcustomClasscustom_toolbox.vcx_toolbox.vcx_dbctool	toolbox.h~��/_toolbox.vcxClasscustom	_filetoolPixels1Name = "_textscrapcategory"
1Class1	_filetool_dbctool_projectcategoryPixelsClass1_dynamiccategory_projectcategorycustomcustom1/classtype = TOOL
tooltype = 
Name = "_tool"
Name = "_projectcategory"
_toolbox.vcx11_filteritemPixelsClass_root_filteritemClassName = "_filteritem"
custom_toolbox.vcx_root_tool_filterPixelsClass1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�01	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�01..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�00classtype = BASECLASS
Name = "_baseclasstool"
)imagefile = menu.bmp
Name = "_mnxtool"
1_scripttoolPixels,imagefile = program.bmp
Name = "_prgtool"
_toolbox.vcx_dbftoolcustom111_activextoolePROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.ShowType = SHOWTYPE_FILTERITEM

ENDPROC
1_root_filterName = "_filter"
custom_toolbox.vcx	_category%dynamiccategory
*onrendercategory 
Class1*classtype = CATEGORY
Name = "_category"
_toolbox.vcxClassName = "_datatool"
_toolbox.vcxcustomClass1custom_apptool1_textscrapcategory	_category11	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�0PixelsW*createform 
*createsubclass 
*droponcontainer 
*createformmenu 
*getpropertyset 

_classtool_activextool1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�01..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/_favoritescategory	_datatoolClassPixels_toolbox.vcx	toolbox.h��/customClassPixels_toolbox.vcxClass_toolbox.vcxCisvirtual = .T.
dynamiccategory = .T.
Name = "_dynamiccategory"
	toolbox.h~��/Class1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/,imagefile = program.bmp
Name = "_apptool"
_webservicecategory_dynamiccategory_webservicecategory_webservice_toolbox.vcx_toolcustomcustomName = "_webservicecategory"
Pixels
_classtool.imagefile = websvc.bmp
Name = "_webservice"
Pixels	_filetoolcustomPixelsPixels,imagefile = library.bmp
Name = "_vcxtool"
	_filetool
_classtool	_filetoolcustomClasscustom_toolbox.vcx_toolbox.vcx_textscrapcategory_webservice_mnxtool*getproxycode 
customPixels_scripttool_toolbox.vcx_toolcustom_toolbox.vcx_foldercategoryPixels_textscraptool_textscraptool_toolbox.vcxClass,imagefile = project.bmp
Name = "_pjxtool"
_toolbox.vcx*openitem 
custom_scxtoolClassClass	_filetool*copytoclipboard 
_mnxtool_foldercategory_toolbox.vcx_toolbox.vcxPixelsName = "_foldercategory"
Class_toolbox.vcx	_datatool
_classtoolcustomPixelsPixelsPixelsClass_vcxtoolaPROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.ShowType = SHOWTYPE_FILTER

ENDPROC
_toolbox.vcx_toolbox.vcx	_filetoolGclasstype = TEXTSCRAP
imagefile = scrap.bmp
Name = "_textscraptool"
Class1Pixels_dynamiccategory*browseitem 
_pjxtoolcustom)imagefile = form.bmp
Name = "_scxtool"
Name = "_favoritescategory"
_toolbox.vcx_favoritescategory	_category1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�0Hclasstype = ACTIVEX
imagefile = olecontrol.bmp
Name = "_activextool"
1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/_baseclasstoolcustom��� ���%>�m�U�	��
��#T�
��CC�filename�����%�C�
��
������T���C�
����(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE6���,��C�\<Modify�oRef.ModifyItem()����UOCONTEXTMENUADDMENU
modifyitem,��createcontextmenu���1�2!����AA2r�2.V�)�1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/
_classtool2lshowproperties
lshowobjectname
lshowclassinfo
_toolbox.vcx�droptexttemplate = 
showaslink = .T.
imagefile = scrap.bmp
lshowproperties = .F.
lshowobjectname = .F.
lshowclassinfo = .F.
classtype = FILE
Name = "_filetool"
1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�0llshowproperties = .T.
lshowobjectname = .T.
lshowclassinfo = .T.
classtype = CLASS
Name = "_classtool"
�imagefile = table.bmp
allowdroponcontainer = .T.
showaslink = .F.
lshowclassinfo = .F.
lshowproperties = .T.
lshowobjectname = .T.
droptexttemplate = USE "<<NVL(THIS.GetDataValue("filename"), '')>>"
Name = "_dbftool"
bHeight = 14
Width = 100
imagefile = 
oengine = .NULL.
odatacollection = .NULL.
uniqueid = 
parentid = 
toolname = 
tooltip = 
filename = 
displayord = 0
user = 
tooltype = 
tooldata = 
classlib = 
classname = 
classtype = 
setid = 
tooltypeid = 
showtype = 
ndatasessionid = 1
helpfile = 
helpid = 0
runbuilder = 
Name = "_root"
|imagefile = database.bmp
droptexttemplate = OPEN DATABASE "<<NVL(THIS.GetDataValue("filename"), '')>>"
Name = "_dbctool"
�PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		MODIFY PROJECT (m.cFilename) NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
�omodifycollection
allowdroponcontainer
classbehavior Set to TRUE to enable class behavior for this file tool.
droptexttemplate Template to use when file is dropped as text.
*openitem 
*runitem 
�imagefile = picture.bmp
showaslink = .F.
allowdroponcontainer = .T.
classbehavior = .T.
lshowobjectname = .T.
lshowproperties = .T.
Name = "_imagetool"
_PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_RUN_LOC, [oRef.RunItem()])

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		MODIFY LABEL (m.cFilename) NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE runitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		LABEL FORM (m.cFilename) PREVIEW NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
t�� [[��%=�%��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA5�qqq�"�A�!Aq1AA�4�2�{	�@#_�7)[1..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�0PROCEDURE ondragover
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState
LOCAL nNewEffect

m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState)
IF VARTYPE(m.nNewEffect) <> 'N'
	IF oDataObject.GetFormat(15) && is there a list of files in the drag source?
		m.nNewEffect = DROPEFFECT_COPY
	ENDIF
ENDIF


RETURN m.nNewEffect

ENDPROC
PROCEDURE ondragdrop
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord
LOCAL nNewEffect
LOCAL i
LOCAL nFileCnt
LOCAL ARRAY aFileList[1]

m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord)
IF VARTYPE(m.nNewEffect) <> 'N'
	IF oDataObject.GetFormat(15)
		IF oDataObject.GetData(15, @aFileList)
			m.nFileCnt = ALEN(m.aFileList, 1)
			FOR m.i = 1 TO m.nFileCnt
				THIS.oEngine.CreateToolsFromFile(THIS.UniqueID, aFileList[m.i])
			ENDFOR
		ENDIF
	ENDIF
ENDIF

RETURN m.nNewEffect
ENDPROC
aPROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_RUN_LOC, [oRef.RunItem()])

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		MODIFY REPORT (m.cFilename) NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE runitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		REPORT FORM (m.cFilename) PREVIEW NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
��� ���%>�m�U6���,��C�\<Modify�oRef.ModifyItem()����UOCONTEXTMENUADDMENU�	��
��#T�
��CC�filename�����%�C�
��
������T�/��
��:��(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGEcreatecontextmenu,��
modifyitem}��1r�3�2!����AA1���)�6_memberdata XML Metadata for customizable properties
B�� ))��%4�3j�U�	��C��8��C�template��Template�-�cfoxeditbox����N��C�classlib��
Class library�-�
cfoxclassinfo��	cClassLib����6��C�	classname���-���
cClassName����@��C�	baseclass��
Base class�-���
cBaseClass����=��C�
objectname��Object name�-�cfoxtextbox����@��C�
properties��
Properties�-�cfoxpropertybox����UTHISADDDATAVALUE���������������C�
���T�
��CW��"T�
��CC�M�����
foxws3.dbf��%�C�
�0��{���L�Q���
�����F��~�C�f�C��	��H�;T�
��C�
WEBSERVICE��
� (���)���	��%�C�
��
��D�#��C�
objectname�loWS�
����1��C�templateCC�template��
��
������C�id���
������C�uri���
������C�wsdl���
������C�service���
������C�port���
������C�wsml���
������C�classC��
��
���� ��C�
runbuilder�Y�
����T�
�������5��C�
objectnameCC�
objectname��
��
����1��C�classlibCC�classlib��
��
����3��C�	classnameCC�	classname��
��
����5��C�
propertiesCC�
properties��
��
������C�
��������C�
��
��������T���%�C�WSCursor���w�Q����F��
���B�UOTOOLCOLLECTIONOTOOLOBJECTNSELECT	CFILENAMEWSCURSORTYPETOOLBOXTHISOENGINEGETVIRTUALTOOLOBJECTCLASSNAMESETDATAVALUEGETDATAVALUEUNIQUEIDURIWSDLPORTWSMLTOOLTIPSAVEVIRTUALADDoncreatedatavalues,��onrendercategory���1���a�4uqqq��!�qq��!1�������RR1QcRAA�Ar�AA�C2]	��	))1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�01..\..\..\vfp9\foxpro.h�T(�0	toolbox.h&���/1	toolbox.h���/..\..\..\vfp9\foxpro.h&�T(�0S_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.RunItem()])

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.PushDS()
	TRY
		IF DBUSED(JUSTFNAME(m.cFilename))
			SET DATABASE TO (JUSTFNAME(m.cFilename))
			CLOSE DATABASES
		ENDIF
		OPEN DATABASE (m.cFilename) EXCLUSIVE
		MODIFY DATABASE NOWAIT
		
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
	THIS.PopDS()
ENDIF
ENDPROC
PROCEDURE openitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.PushDS()
	TRY
		IF !DBUSED(JUSTFNAME(m.cFilename))
			OPEN DATABASE (m.cFilename) SHARED
		ENDIF
		SET DATABASE TO (JUSTFNAME(m.cFilename))
		
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
	THIS.PopDS()
ENDIF
ENDPROC
�� ��*%>!/��U�������������T�
��C�������������T�
��C�
������%�C�
���O������C�
��
��	�����B�U
OTOOLCOLLECTION	CUNIQUEIDOUNIQUECOLLECTION	OTOOLITEMTHISOENGINEGETTOOLSINCATEGORYUNIQUEID
GETTOOLOBJECTADD-	��C��!��C�toptool���a����UTHISADDDATAVALUEd���������������
T�
���"T�
��C��ShowType�	�
�� %�C�
��
��
��T	���%��	�����T�
�������'%�C��
LockDelete�	�
�y����T�
�������#T�
��C�
������6�����%�C�
���N��R�+T�
��C����������B��
���UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE	CSHOWTYPE
NNEWEFFECTTHISGETDRAGDATALOCKADD5%�C����O��.���C��������UTHISOENGINE	CUSTOMIZEUNIQUEID	��C��T����C��UTHISSHOWTYPEB�C������UTHISOENGINESHOWCATEGORYPROPERTIESFORMonrendercategory,��oncreatedatavaluesI��
ondragover���	customizej��Init���onshowproperties���1sqqq���qQAAB3�3�qq�#��q��2AAAr�A�3�aA3�3C4��g�z&��>*MD-t�K)��PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		MODIFY MENU (m.cFilename) NOWAIT
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])

ENDPROC
tPROCEDURE copytoclipboard
* copy text scrap to the clipboard
LOCAL cScrap
LOCAL lTextMerge

m.cScrap = THIS.GetDataValue("textscrap")

IF !ISNULL(m.cScrap)
	m.lTextMerge = THIS.GetDataValue("evaltextmerge")
	IF VARTYPE(m.lTextMerge) <> 'L'
		m.lTextMerge = .F.
	ENDIF
	IF m.lTextMerge
		m.cScrap = TEXTMERGE(m.cScrap, .T., "<<", ">>")
	ENDIF
	_cliptext = m.cScrap
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu
LOCAL cBaseClass
LOCAL oMenuBar

oContextMenu.Addmenu(TOOLMENU_COPYTOCLIPBOARD_LOC, [oRef.CopyToClipboard()])

ENDPROC
PROCEDURE oncreate
* show the property sheet when a text scrap is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScrap
LOCAL lTextMerge

m.cScrap = NVL(THIS.GetDataValue("textscrap"), '')
m.lTextMerge = THIS.GetDataValue("evaltextmerge")
IF VARTYPE(m.lTextMerge) <> 'L'
	m.lTextMerge = .F.
ENDIF

IF m.lTextMerge
	m.cScrap = TEXTMERGE(m.cScrap)
ENDIF

oDataObject.SetData(m.cScrap)

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE



ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

THIS.AddDataValue("textscrap", '', DATAVALUE_TEXTSCRAP_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("evaltextmerge", .F., DATAVALUE_TEXTMERGE_LOC, '', .F., "cfoxcheckbox")

ENDPROC
PROCEDURE ondragover
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState
LOCAL nNewEffect

m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState)
IF VARTYPE(m.nNewEffect) <> 'N'
	IF oDataObject.GetFormat(1) && is there text in the drag source?
		m.nNewEffect = DROPEFFECT_COPY
	ENDIF
ENDIF

RETURN m.nNewEffect

ENDPROC
PROCEDURE ondragdrop
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord
LOCAL nNewEffect
LOCAL cTextScrap

m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord)
IF VARTYPE(m.nNewEffect) <> 'N'
	IF oDataObject.GetFormat(1)
		m.cTextScrap = THIS.GetDragData(oDataObject, 1)
		THIS.oEngine.CreateToolItemScrap(THIS.UniqueID, m.cTextScrap)
	ENDIF
ENDIF

RETURN m.nNewEffect
ENDPROC
APROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_RUN_LOC, [oRef.RunItem()])

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		EDITSOURCE(m.cFilename)
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
PROCEDURE runitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		DO FORM (m.cFilename)
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
�� ����%�c%�U]���,��C�\<Modify�oRef.ModifyItem()����'��C�\<Open�oRef.RunItem()����UOCONTEXTMENUADDMENU�	��
��#T�
��CC�filename�����%�C�
��
����
��C��������%�CC�
�����~�G(�C�
����������
����/�:��(������C�
���0�Toolbox�x����
��C�����U	CFILENAMETHISGETDATAVALUEPUSHDS
OEXCEPTIONMESSAGEPOPDS�	��
��#T�
��CC�filename�����%�C�
��
����
��C��������%�CC�
����
��w����
����G(�C�
������(������C�
���0�Toolbox�x����
��C�����U	CFILENAMETHISGETDATAVALUEPUSHDS
OEXCEPTIONMESSAGEPOPDScreatecontextmenu,��
modifyitem���openitem���1r�q3�2!��QQA�a��A�A2�2!��a�A��A�A1���	�~)��PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		EDITSOURCE(m.cFilename)
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])

ENDPROC
��� ��H%I7��UT���!T�
��CC�folder�����%�C�
����M���C�
������UCFOLDERTHISGETDATAVALUESHELLTO2���(��C�\<Open�oRef.OpenItem()����UOCONTEXTMENUADDMENU����������������������������
��	����
��
������C�
���+T�
��CCCC�folder��
�������+T�
��CCC�	filetypes��
������%�C�
������T�
���*.*���%�C�
��
�	C�
���	����*T�
��C��	C�
��, �;;�a�;�����
����(��
�����%�CC�
��	�
��������*T�
��C��
�
�C�
��	���������T�
���������
����(��
�����$T��CCC�
���
�������%�C��
����<T�
��C��C�
���
�
�C�
���
�����%�C�
��
����-��C�filename�
�C�
���
�
������C�
��������C�
��
������������B�UOTOOLCOLLECTIONOTOOLOBJECTCFOLDER	CFILESPECNSPECCNTJNCNTI	OTOOLTYPE
AFILESPECS	AFILELISTTHISEVALTEXTGETDATAVALUEOENGINEFINDTOOLTYPEBYEXTENSIONGETVIRTUALTOOLOBJECTUNIQUEIDSETDATAVALUESAVEVIRTUALADD�6��C�folder��Folder�-�
cfoxdirectory����S��C�	filetypes��	File type�-�cfoxfiletypescombo��DisplayValue����UTHISADDDATAVALUEopenitem,��createcontextmenu���onrendercategory���oncreatedatavalues���1r!1A2r�3uqqqqqqqq�����!A���q����A�A�!�aRAAAAAAB3c15��O

v41G)��� ���%#�c�U�	��
��#T�
��CC�filename�����%�C�
��
������T���C�
����(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE�	��
��#T�
��CC�filename�����%�C�
��
������R���
����(��|���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE\���,��C�\<Modify�oRef.ModifyItem()����&��C�R\<un�oRef.RunItem()����UOCONTEXTMENUADDMENU
modifyitem,��runitem���createcontextmenu���1�2!����AA2�2!����AA3r�a2.L_�3)��� ����%]sk�U	��C��T����I��UTHISSHOWTYPEInit,��1�2Z)��PROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("tablename", '', DATAVALUE_TABLENAME_LOC, '', .F., "cfoxfieldinfo", '', "cTableName")
THIS.AddDataValue("fieldname", '', DATAVALUE_FIELDNAME_LOC, '', .F., "cfoxfieldinfo", '', "cFieldName")
THIS.AddDataValue("classlib", '', DATAVALUE_CLASSLIBRARY_LOC, '', .F., "cfoxclassinfo", '', "cClassLib")
THIS.AddDataValue("classname", '', DATAVALUE_CLASSNAME_LOC, '', .F., '', '', "cClassName")
THIS.AddDataValue("parentclass", '', DATAVALUE_PARENTCLASS_LOC, '', .F., '', '', "cParentClass")
THIS.AddDataValue("baseclass", '', DATAVALUE_BASECLASS_LOC, '', .F., '', '', "cBaseClass")
THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")


ENDPROC
�PROCEDURE ondragdrop
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord
LOCAL cShowType
LOCAL cSrcUniqueID
LOCAL cSrcParentID
LOCAL nNewEffect

m.nNewEffect = .NULL.

* -- if this is a tool, move or copy it within the toolbox
IF oDataObject.GetFormat("ShowType")
	m.cShowType = THIS.GetDragData(oDataObject, "ShowType")
	
	IF m.cShowType == SHOWTYPE_TOOL
		m.cSrcUniqueID = THIS.GetDragData(oDataObject, "UniqueID")
		m.cSrcParentID = THIS.GetDragData(oDataObject, "ParentID")

		m.nNewEffect = DROPEFFECT_COPY

		THIS.oEngine.CopyTool(m.cSrcUniqueID, THIS.UniqueID)
	ENDIF
ENDIF

RETURN m.nNewEffect

ENDPROC
PROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.ShowType = SHOWTYPE_FAVORITES
ENDPROC
PROCEDURE ondragover
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState
LOCAL cShowType
LOCAL nNewEffect

m.nNewEffect = .NULL.

* if our source is a button, then we handle internally
m.cShowType = THIS.GetDragData(oDataObject, "ShowType")
IF !ISNULL(m.cShowType) AND m.cShowType == SHOWTYPE_TOOL
	* m.nNewEffect = IIF(m.nShift == 2, DROPEFFECT_MOVE, DROPEFFECT_COPY)
	m.nNewEffect = DROPEFFECT_COPY
ENDIF

IF VARTYPE(m.nNewEffect) <> 'N'
	m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState)
ENDIF

RETURN m.nNewEffect

ENDPROC
��� ���%>�m�U�	��
��#T�
��CC�filename�����%�C�
��
������T�/��
��:��(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE6���,��C�\<Modify�oRef.ModifyItem()����UOCONTEXTMENUADDMENU
modifyitem,��createcontextmenu���1�2!����AA3r�29a�)��� ����%]sk�U	��C��T����S��UTHISSHOWTYPEInit,��1�2V)��PROCEDURE onrendercategory
* load the passed collections with the tool objects
* in this category
LPARAMETERS oToolCollection
LOCAL cUniqueID
LOCAL oUniqueCollection
LOCAL oToolItem

m.oUniqueCollection = THIS.oEngine.GetToolsInCategory(THIS.UniqueID)
FOR EACH cUniqueID IN oUniqueCollection
	m.oToolItem = THIS.oEngine.GetToolObject(m.cUniqueID)
	IF VARTYPE(m.oToolItem) == 'O'
		m.oToolCollection.Add(m.oToolItem)
	ENDIF
ENDFOR

RETURN

ENDPROC
PROCEDURE oncreatedatavalues
DODEFAULT()

* use this to save the scroll position between sessions
THIS.AddDataValue("toptool", '', '', '', .T.)

ENDPROC
PROCEDURE ondragover
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState
LOCAL cShowType
LOCAL nNewEffect

m.nNewEffect = .NULL.

* if our source is a button, then we handle internally
m.cShowType = THIS.GetDragData(oDataObject, "ShowType")
IF !ISNULL(m.cShowType) AND m.cShowType == SHOWTYPE_TOOL
	* if this is an Internal category, then we don't allow
	* it as a drop target
	IF THIS.LockAdd
		m.nNewEffect = DROPEFFECT_NONE
	ELSE
		IF THIS.GetDragData(oDataObject, "LockDelete") == 'y'
			* if the source is an Internal item, that means we can't
			* move it to another category (only copy)
			m.nNewEffect = DROPEFFECT_COPY
		ELSE
			* if shift is held down, then copy -- otherwise move
			m.nNewEffect = IIF(m.nShift == 2, DROPEFFECT_COPY, DROPEFFECT_MOVE)
		ENDIF
	ENDIF
ENDIF

IF VARTYPE(m.nNewEffect) <> 'N'
	m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState)
ENDIF

RETURN m.nNewEffect

ENDPROC
PROCEDURE customize
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.Customize(THIS.UniqueID)
ENDIF

ENDPROC
PROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.ShowType = SHOWTYPE_CATEGORY

ENDPROC
PROCEDURE onshowproperties
* -- show the properties dialog

RETURN THIS.oEngine.ShowCategoryPropertiesForm(THIS)



ENDPROC
�imagefile
oengine Reference to Toolbox engine.
odatacollection
uniqueid
parentid
toolname
tooltip
filename
displayord
user
internal
tooltype
tooldata
classlib
classname
classtype
setid
tooltypeid
showtype
showaslink
ndatasessionid
ltooldataparsed
helpfile
lockadd
lockdelete
lockrename
isvirtual
inactive
helpid
runbuilder Y - always run builder, N - never run builder, blank to respect builder lock setting
*onrightclick 
*oncompletedrag 
*ondragdrop 
*ondragstart 
*ondragover 
*renameitem 
*deleteitem 
*newtool 
*onstartdrag 
*onclick 
*getdragdata 
*ondraggivefeedback 
*modifyitem 
*createmenu 
*addcategory 
*togglehelptext 
*togglealwaysontop 
*customize 
*evaltext 
*onolesetdata 
*adddatavalue 
*getdatavalue 
*setdatavalue 
*onshowproperties 
*properties 
*imagefile_access 
*shellto 
*createcontextmenu Create context-specific menu items.
*pushds 
*popds 
*dropobject Create an object on the drop target.
*parsetooldata 
*oncreatedatavalues 
*encodetooldata 
*getimagefile 
*gethelpfile Allows for dynamic setting of the help file.
*oncreate Called when item is created from the Customize toolbox dialog.
*onkeypress 
*tooldata_access 
*tooldata_assign 
*getopenforms 
*ondblclick 
*invokeaddin 
*parsepropertylist 
*getuniqueobjname 
*addclasslib 
*addtofavorites 
*showhelp 
*getregistryvalue 
*addtodataenv 
*createaddinsmenu 
#�� 

�%M
�`�
�U����#T�
��CC�classlib�����%�C�
��
����,%�C�_oobjectbrowserb�O�C����q�	��K���-%�C�_oobjectbrowserb�O�C��
	����������C�
�������������U	CFILENAMETHISGETDATAVALUE_OOBJECTBROWSERLOADTYPELIBY���>T��C�\<Open in Object Browser�oRef.OpenItem()������C�����UOCONTEXTMENUOMENUBARADDMENUTHISCREATEFORMMENU}���������������������	���
�$%�C�
���N�
�
��	��v�%�C�
���O����B�-���r�+T�
��CCC�	classname��
������%�C�
��
��n�+T�
��CCC�	baseclass��
������,T�
��CCC�
objectname��
������%�C�
����@�T�
���o���T�
�����|�GetKeyState�user32�%�CC�����R�T�
��C�������"%�C�
���C�C�
����N��T�
���DEFINE CLASS MyC�
��.�_�� AS �
�C�
 C�
 C�
 C�
 C�	 �PROCEDURE InitC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �PROCEDURE DestroyC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �'PROCEDURE Error(nError, cMethod, nLine)C�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 �	ENDDEFINE������T�
��C�������"%�C�
���C�C�
������2T�
���
�� = CREATEOBJECT("�
��")����%�C�
��
��O�T�
�	�CW��F����!�T�
��C�
�a�<<�>>���(�
�?�T�
���
�����F��
�	�����C�
��
��
�������UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOS	CLASSNAME
OBJECTNAME	BASECLASS	CDROPTEXTNSELECT
OEXCEPTIONTHISEVALTEXTGETDATAVALUEGETKEYSTATEUSER32OENGINECTRLDROPTEXTDROPTEXTMESSAGESETDATA\=��C�classlib��
Class library�a�cfoxtextbox����;��C�	classname��
Class name�a�cfoxtextbox����$��C�
comcontrol���a����=��C�
objectname��Object name�-�cfoxtextbox����%�����)�@��C�
properties��
Properties�-�cfoxpropertybox�����U�$��C�
properties���-�����UTHISADDDATAVALUELSHOWPROPERTIES-������������T�
�����#T�
��CC�classlib�����%�C�
��
�������$T�
��C�tli.tliapplication�N��T�
��C�
��
����T�
��C�
��C� ����������
T�
���
T�
���%�C�
���	C�
�0
���T�
�������B��
���UOTYPELIB	OFILEINFO	CHELPFILE	CFILENAMETHISGETDATAVALUETYPELIBINFOFROMFILEHELPFILEopenitem,��createcontextmenuA��onolesetdata���oncreatedatavalues9��gethelpfile���1t2!��A��1�AAA3r�3uqqqqqqBqq��"��A��q�!�A��!!AA#�����!A�A�AAA3��A��AA3rqqq�1!�A���A����AB�6��h��
A
`KA
pp)
�� ���j%{>+��Ug	��C��[��C�refresh-�*Refresh category after running application�-�cfoxcheckbox�����UTHISADDDATAVALUE%%���
���
��C�����UTHIS
SHOWASLINKRUNITEMI������*T��C�R\<un�oRef.RunItem()����T���a��UOCONTEXTMENUOMENUBARADDMENUBOLD����������#T�
��CC�filename����� T�
��CC�refresh��-��%�C�
���L��|�
T�
��-���%�C�
��
����,%�C�
��=�(�C�
��R�)	��%�#T�
��CC�
�C�
�>�=�\������&cFilename
�(��!���C�
���0�Toolbox�x�����o���A���
����(��k���C�
���0�Toolbox�x�����%��
�������C�������U	CFILENAMELREFRESH
OEXCEPTIONTHISGETDATAVALUEMESSAGEOENGINELOADTOOLBOX
��C����UTHISRUNITEMoncreatedatavalues,��
ondblclick���createcontextmenu���runitemc��onclickX��1��3�A3rq��3sqq2q�A"�1����A�����AA�AA3�2����
�)*::)��PROCEDURE droponcontainer
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cPropertyList
LOCAL cFilename
LOCAL cOriginalObjName

m.cFilename  = NVL(THIS.GetDataValue("filename"), '')

m.cOriginalObjName = NVL(THIS.GetDataValue("objectname"), '')
IF EMPTY(m.cOriginalObjName)
	m.cOriginalObjName = "img" + JUSTSTEM(m.cFilename)
ENDIF

m.cPropertyList = TEXTMERGE( ;
 [BackStyle=0] + CHR(10) + ;
 [Picture=<<m.cFilename>>] + CHR(10), ;
 .F., "<<", ">>") + ;
 CHR(10) + THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))
 

THIS.DropObject(m.oDropTarget, m.cSCXName, m.nXPos, m.nYPos, "Image", '', "Image", m.cOriginalObjName, m.cPropertyList, '', '')


RETURN

ENDPROC
PROCEDURE imagefile_access
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF UPPER(JUSTEXT(m.cFilename)) == "BMP" AND FILE(m.cFilename)
	RETURN m.cFilename
ELSE
	RETURN ''
ENDIF
ENDPROC
PROCEDURE openitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.ShellTo(m.cFilename)
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.OpenItem()])

THIS.CreateFormMenu(m.oContextMenu)


ENDPROC
PROCEDURE oncompletedrag
LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos

THIS.DropOnContainer(m.oDropTarget, '', m.nMouseXPos, m.nMouseYPos)

RETURN


ENDPROC
PROCEDURE onolesetdata
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos

THIS.SetDataValue("classname", "Image")

DODEFAULT(oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos)
ENDPROC
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF



ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
>PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		EDITSOURCE(m.cFilename)
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF
ENDPROC
PROCEDURE runitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	TRY
		DO (m.cFilename)
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_RUN_LOC, [oRef.RunItem()])

ENDPROC
	��� �	�	��%��V1�UV���#T�
��CC�filename�����%�C�
��
��O���C�
������U	CFILENAMETHISGETDATAVALUESHELLTO5%������	��C���.�
��C�����UTHISALLOWDROPONCONTAINER
MODIFYITEM�	��C��=��C�filename��	File name�-�cfoxfilename�����T���C�
Collection�N����������(��C�EDITSOURCE(#filename#)�H���*��C�EDITSOURCE(#filename#)�TXT���*��C�EDITSOURCE(#filename#)�LOG�����UTHISADDDATAVALUEOMODIFYCOLLECTIONADD�������������#T�
��CC�filename�����%�C�
��
��}�T�
��CC�
���f��T�
�����%�C�
���������������T�
��C�
�������(����T�
��������%�C�
�������C�
���	���y�/T�
��C�
��
#filename#�"�
��"�����M���C�
����(��u���C��
�0�Toolbox�x������U	CFILENAMECEXT
OEXCEPTIONCSCRIPTCODETHISGETDATAVALUEOMODIFYCOLLECTIONGETKEYITEMSHELLTOMESSAGE$%������
��C�����UTHIS
SHOWASLINK
ONDBLCLICK������������#T�
��CC�filename�����%�C�
��
����T�
��CC�
���f��%�C�
�����������0T��C�\<Modify�oRef.ModifyItem()�������,T��C�\<Open�oRef.OpenItem()�����T��	�a���U
OCONTEXTMENU	CFILENAMECEXTOMENUBARTHISGETDATAVALUEOMODIFYCOLLECTIONGETKEYADDMENUBOLD'�������������%�����R���C�������� �5%�C�
���N�
�
��	�C�
���O	���#T�
��CC�filename��	���%�C��
�
�������� T�
��C��
-�<<�>>���(���������C�
��
��
������UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCTEXT
OEXCEPTIONTHIS
CLASSBEHAVIORGETDATAVALUEDROPTEXTTEMPLATESETDATAopenitem,��
ondblclick���oncreatedatavalues��
modifyitem5��onclick.��createcontextmenut��onolesetdata���1t2!1A3���A4������A4tqqq2!a������AA1������AAA2�A4rqqq2!a���A�A4rqq��Q21��AA�AA2��5

^���(1�L5BSD1�
h)�	�PROCEDURE browseitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.PushDS()
	TRY
		IF !USED(JUSTSTEM(m.cFilename))
			USE (m.cFilename) IN 0 SHARED AGAIN
		ENDIF
		SELECT (JUSTSTEM(m.cFilename))
		BROWSE NORMAL NOWAIT
		
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
	THIS.PopDS()
ENDIF
ENDPROC
PROCEDURE ondblclick
LOCAL oWindowCollection
LOCAL lBrowse

m.lBrowse = .T.
IF THIS.AllowDropOnContainer
	m.oWindowCollection = THIS.GetOpenForms()
	m.lBrowse = (m.oWindowCollection.Count == 0)
	m.oWindowCollection = .NULL.
ENDIF
	
IF m.lBrowse
	THIS.BrowseItem()
ELSE
	DODEFAULT()
ENDIF


ENDPROC
PROCEDURE droponcontainer
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cClassLib
LOCAL cClassName
LOCAL cPropertyList
LOCAL cOriginalObjName
LOCAL cFilename

m.cClassLib  = THIS.GetRegistryValue("ClassLocation", INTELLIDROP_KEY + "Multiple")
m.cClassName = THIS.GetRegistryValue("ClassName", INTELLIDROP_KEY + "Multiple")
m.cFilename  = NVL(THIS.GetDataValue("filename"), '')

IF EMPTY(m.cClassName) OR !FILE(m.cClassLib)
	m.cClassLib = ''
	m.cClassName = "Grid"
ENDIF

m.cOriginalObjName = NVL(THIS.GetDataValue("objectname"), '')
IF EMPTY(m.cOriginalObjName)
	m.cOriginalObjName = "grd" + JUSTSTEM(m.cFilename)
ENDIF

m.cPropertyList = TEXTMERGE( ;
 [RecordSourceType=1] + CHR(10) + ;
 [RecordSource=<<JUSTSTEM(m.cFilename)>>] + CHR(10), ;
 .F., "<<", ">>") + ;
 CHR(10) + THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))


THIS.DropObject(m.oDropTarget, m.cSCXName, m.nXPos, m.nYPos, m.cClassName, m.cClassLib, '', cOriginalObjName, m.cPropertyList, '', '', m.cFilename)

ENDPROC
PROCEDURE modifyitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL m.cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.PushDS()
	TRY
		IF !USED(JUSTSTEM(m.cFilename))
			USE (m.cFilename) IN 0 SHARED AGAIN
		ENDIF
		SELECT (JUSTSTEM(m.cFilename))
		MODIFY STRUCTURE
		
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
	THIS.PopDS()
ENDIF
ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_BROWSE_LOC, [oRef.BrowseItem()])
oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.OpenItem()])

THIS.CreateFormMenu(m.oContextMenu)

ENDPROC
PROCEDURE openitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL cFilename
LOCAL nDataSessionID

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.PushDS()
	TRY
		IF !USED(JUSTSTEM(m.cFilename))
			USE (m.cFilename) IN 0 SHARED AGAIN
		ENDIF
		SELECT (JUSTSTEM(m.cFilename))
		
	CATCH TO oException
		MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
	THIS.PopDS()
ENDIF
ENDPROC
PROCEDURE oncompletedrag
LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos

THIS.DropOnContainer(m.oDropTarget, '', m.nMouseXPos, m.nMouseYPos)

RETURN


ENDPROC
�� F�%����U&��untitledC�]�:�Uy���+T�
��CCC�	baseclass����������J�O�Q��
��:��(��r���C���0�Toolbox�x����U
CBASECLASSTHISEVALTEXTGETDATAVALUE
OEXCEPTIONMESSAGE���������������+T�
��CCC�	baseclass��	������,T�
��CCC�
objectname��	������,T�
��CCC�
properties��	������)T��
�CC�
runbuilder��	��
��@��C�
��
��
��
��
���
��
��
�����B�UODROPTARGETCSCXNAMENXPOSNYPOS
CBASECLASSCOBJNAME
CPROPERTYLISTTHISEVALTEXTGETDATAVALUE
RUNBUILDER
DROPOBJECT)�������������T���T��C���������%��
�����@��C�
��oRef.DropOnContainer(.NULL., "�
��")������%�C���O����T��C�Add \<to�����C��C�
��oRef.DropOnContainer(.NULL., "�
��")��������B�U	OCONTEXTMENU	LTOPLEVEL	OFORMMENUOWINDOWCOLLECTIONCWINNAMETHISGETOPENFORMSADDMENUSUBMENU1���������������������T�
��CW��F��T�
�����#%�C�
���C�	C�
��
	���T�
��C�
�������
����(��
��	���T�
��C�
��
��
��Q%�C�
��
�<C�
��MemberCount�ContainerClass�ContainerClassLib�
	���)T�
��CCCC�
��
������_��B%�C�(�
���C�)�
��	�CC�
�b�C�U�����@T�
���
�C�	 �
�� = �"�
��"C�
 C�
 ����8T�
���
�C�	 �
�� = C�
�_C�
 C�
 �������F��
���B��
���U

CPROPERTYLISTOPROPERTYCOLLECTION
CPROPERTYNAMECPROPERTYVALUEICPROPSETNSELECTTHISPARSEPROPERTYLISTCOUNTGETKEYEVALTEXTITEM���������&T�
��CCC�	baseclass����@��:%�C�
��	exception�column�header�session�
����9��C�Create \<Subclass�oRef.CreateSubclass()�����%��
��form����1��C�
\<Create Form�oRef.CreateForm()�������C�
�����UOCONTEXTMENU
CBASECLASSOMENUBARTHISGETDATAVALUEADDMENUCREATEFORMMENU����������������������	���
���������
����5%�C�
���N�
�
��	�C�
���O	����+T�
�	�CCC�	baseclass��������T�
���
�	��T�
�����,T�
��CCC�
objectname��������,T�
�
�CCC�
properties��������%�C�
����V�T�
���o���T�
���
���T�
�����|�GetKeyState�user32�T�
��CC�����%��
�����T�
��C�������"%�C�
���C�C�
�������T�
���
DEFINE CLASS �
�� AS �
�	C�
 C�
 C�
�
��C�
 C�
 C�	 �PROCEDURE InitC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �PROCEDURE DestroyC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �'PROCEDURE Error(nError, cMethod, nLine)C�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 �	ENDDEFINE�����T�
��C�������"%�C�
���C�C�
�����2T�
���
�� = CREATEOBJECT("�
�	�")����%�C�
��
����T�
��CW��F����[�T�
��C�
�a�<<�>>���(�
�y�T�
���
�����F��
������C�
��
��
�����UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCLASSLIB	CLASSNAME
OBJECTNAMEOBJNAME	BASECLASSPROPERTYLIST	CDROPTEXTNSELECT
OEXCEPTIONLCTRLKEYPRESSEDTHISEVALTEXTGETDATAVALUEGETKEYSTATEUSER32OENGINECTRLDROPTEXTGETPROPERTYSETDROPTEXTMESSAGESETDATA<������"��C�
���
��
�����B�UNEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSTHISDROPONCONTAINER�;��C�	baseclass��
Base class�a�cfoxtextbox����=��C�
objectname��Object name�-�cfoxtextbox����@��C�
properties��
Properties�-�cfoxpropertybox����>��C�
runbuilder��Builder�-�cfoxbuildercombo����UTHISADDDATAVALUEH����������5��%��
��
��:�B�a���B�-��UNKEYCODE
NSHIFTALTCTRLOWINDOWCOLLECTIONOCONTEXTMENUOREF�������5��T��C����
H�3���������_���C�C���������������-T�
��C�ContextMenu�foxmenu.prg�S�����C�
�a����T�
�����%��C�333333�?��������?�
��	��
T�
����U
OWINDOWCOLLECTIONOCONTEXTMENUOREFTHISGETOPENFORMSCOUNTDROPONCONTAINERITEMCREATEFORMMENUSHOW
createform,��createsubclassM��droponcontainer	��createformmenu���getpropertyset<��createcontextmenu��onolesetdatak��oncompletedragC��oncreatedatavalues���
onkeypress���
ondblclicke��1�2u����A34qqq����B4�qqq����Q�A2AAB3qqqqqq���1����$��AAAA��3rqqb��AqA24vqqqqqqqqqqR����A�����!�A��!!AA#�����!A�A�A31"B4���5�qqq3qAr5qqq�A�B�A�Q�A2<�
�)N�/(��
HC�|O�������,��Mc���h )PROCEDURE onrendercategory
* load the passed collections with the tool objects
* in this category -- in this case a Tool object for
* each class in the active project.
#include "toolbox.h"
LPARAMETERS oToolCollection
LOCAL oToolObject
LOCAL oToolType
LOCAL nCnt
LOCAL i
LOCAL nClassCnt
LOCAL j
LOCAL ARRAY aVCXInfo[1]

DODEFAULT(m.oToolCollection)

IF _VFP.Projects.Count > 0
	WITH _VFP.ActiveProject
		m.nCnt = .Files.Count
		FOR m.i = 1 TO m.nCnt
			IF _VFP.ActiveProject.Files(m.i).Type == 'V'
				m.nClassCnt = AVCXCLASSES(aVCXInfo, _VFP.ActiveProject.Files(m.i).Name)
				FOR m.j = 1 TO m.nClassCnt
					m.cToolTip = aVCXInfo[m.j, 8]  && class description
					m.cImageFile = THIS.oEngine.GetImageForClass(aVCXInfo[m.j, 2])
					oToolObject = THIS.oEngine.GetVirtualToolObject("CLASS", THIS.oEngine.GenerateToolName(_VFP.ActiveProject.Files(m.i).Name, aVCXInfo[m.j, 1]), '')

					IF VARTYPE(oToolObject) == 'O'
						oToolObject.SetDataValue("classlib", _VFP.ActiveProject.Files(m.i).Name)
						oToolObject.SetDataValue("classname", aVCXInfo[m.j, 1])
						oToolObject.SetDataValue("objectname", aVCXInfo[m.j, 1])
						oToolObject.SetDataValue("parentclass", aVCXInfo[m.j, 3])
						oToolObject.SetDataValue("baseclass", aVCXInfo[m.j, 2])

						* m.oToolObject.SetDataValue("filename", m.cFolder + aFileList[m.j, 1])
						THIS.oEngine.SaveVirtual(m.oToolObject)

						m.oToolCollection.Add(m.oToolObject)
					ENDIF
				ENDFOR
			ENDIF
		ENDFOR
	ENDWITH
ENDIF

RETURN

ENDPROC
�PROCEDURE customize
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.Customize(THIS.ParentID)
ENDIF

ENDPROC
PROCEDURE ondragover
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState
LOCAL cShowType
LOCAL nNewEffect
LOCAL lLockDelete
LOCAL cParentID

m.nNewEffect = DODEFAULT(oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState)
IF VARTYPE(m.nNewEffect) <> 'N'
	* if our source is a button, then we handle internally
	m.cShowType   = THIS.GetDragData(oDataObject, "ShowType")
	m.cParentID   = THIS.GetDragData(oDataObject, "ParentID")
	m.lLockDelete = (THIS.GetDragData(oDataObject, "LockDelete") == 'y')

	IF !ISNULL(m.cShowType) AND m.cShowType == SHOWTYPE_TOOL
		IF m.lLockDelete
			m.nNewEffect = IIF(m.cParentID == THIS.ParentID, DROPEFFECT_MOVE, DROPEFFECT_COPY)
		ELSE
			m.nNewEffect = IIF(m.nShift == 2, DROPEFFECT_COPY, DROPEFFECT_MOVE)
		ENDIF
	ENDIF
ENDIF

RETURN m.nNewEffect

ENDPROC
PROCEDURE Init
#include "toolbox.h"
DODEFAULT()

THIS.ShowType = SHOWTYPE_TOOL

ENDPROC
PROCEDURE onshowproperties
* -- show the properties dialog

RETURN THIS.oEngine.ShowPropertiesForm(THIS)

ENDPROC
EPROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("refresh", .F., DATAVALUE_REFRESHCATEGORY_LOC, '', .F., "cfoxcheckbox", '')

ENDPROC
PROCEDURE ondblclick
IF !THIS.ShowAsLink
	THIS.RunItem()
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu
LOCAL oMenuBar

oMenuBar = oContextMenu.Addmenu(TOOLMENU_RUN_LOC, [oRef.RunItem()])
oMenuBar.Bold = .T.

ENDPROC
PROCEDURE runitem
#include "foxpro.h"
#include "toolbox.h"
LOCAL cFilename
LOCAL lRefresh
LOCAL oException

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
m.lRefresh  = NVL(THIS.GetDataValue("refresh"), .F.)
IF VARTYPE(m.lRefresh) <> 'L'
	m.lRefresh = .F.
ENDIF

IF !EMPTY(m.cFilename)
	* if filename to run is surrounded by parens, then execute as a macro
	IF LEFT(m.cFilename, 1) == '(' AND RIGHT(m.cFilename, 1) == ')'
		m.cFilename = SUBSTR(LEFT(m.cFilename, LEN(m.cFilename) - 1), 2)
		TRY
			&cFilename
		CATCH TO oException
			MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
		ENDTRY
	ELSE	
		TRY
			DO (m.cFilename)
		CATCH TO oException
			MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
		ENDTRY
	ENDIF
	IF m.lRefresh
		THIS.oEngine.LoadToolbox()
	ENDIF
ENDIF

ENDPROC
PROCEDURE onclick
THIS.RunItem()

ENDPROC
��� ��:L%�����U	�����������������������	���
����+T�
�	�CCC�	baseclass������
��*T�
��CCC�classlib������
��+T�
��CCC�	classname������
��,T�
��CCC�
objectname������
��,T�
��CCC�
properties������
��3T�
�
�CCC�containerclasslib������
��4T�
��CCC�containerclassname������
��)T���CC�
runbuilder������O��C�
��
��
��
��
��
��
�	�
��
��
��
�
����B�UODROPTARGETCSCXNAMENXPOSNYPOSCOBJNAME
CPROPERTYLIST
CCLASSNAME	CCLASSLIBCORIGINALOBJNAME
CBASECLASSCCONTAINERCLASSLIBCCONTAINERCLASSNAMETHISEVALTEXTGETDATAVALUE
RUNBUILDER
DROPOBJECT����������*T�
��CCC�classlib��������+T�
��CCC�	classname������������"O���
��Q��
����
��:��(������C���0�Toolbox�x����U	CCLASSLIB
CCLASSNAME
OEXCEPTIONTHISEVALTEXTGETDATAVALUEMESSAGE����������*T�
��CCC�classlib��������+T�
��CCC�	classname������������+&��untitledC�]�:Q��
����
����(������C���0�Toolbox�x����U	CCLASSLIB
CCLASSNAME
OEXCEPTIONTHISEVALTEXTGETDATAVALUEMESSAGE<������"��C�
���
��
�����B�UNEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSTHISDROPONCONTAINER�������*T�
��CCC�classlib��������+T�
��CCC�	classname��������%�C�
�0����������C�
���
����������U	CCLASSLIB
CCLASSNAMETHISEVALTEXTGETDATAVALUE������0T��C�\<Modify�oRef.ModifyItem()����-%�CCCC�classlib������@�vcx����9��C�Create \<Subclass�oRef.CreateSubclass()�����,%�CCC�	baseclass����@�form���1��C�
\<Create Form�oRef.CreateForm()�������C�����UOCONTEXTMENUOMENUBARADDMENUTHISGETDATAVALUECREATEFORMMENU����������������������	���
���������
����$%�C�
���N�
�
��	����%�C�
���O����B�-�����|�GetKeyState�user32�T�
��CC�����*T�
��CCC�classlib��������+T�
��CCC�	classname��������%�C�
��
�	C�
��
����+T�
�	�CCC�	baseclass��������,T�
��CCC�
objectname��������%�C�
������T�
���o���T�
���
���,T�
�
�CCC�
properties��������T�
�
����%��
����T�
�
�C�������"%�C�
�
��C�C�
�
�����T�
�
��DEFINE CLASS My�
�� AS �
�� OF C�
���C�
 C�
 C�
�
��C�
 C�
 C�	 �PROCEDURE InitC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �PROCEDURE DestroyC�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 C�	 �'PROCEDURE Error(nError, cMethod, nLine)C�
 C�
 C�
 C�
 C�	 �ENDPROCC�
 C�
 C�
 C�
 �	ENDDEFINE������T�
�
�C�������"%�C�
�
��C�C�
�
�����%�C�
������2T�
�
��
�� = CREATEOBJECT("�
��")�����@T�
�
��
�� = NEWOBJECT("�
��", "C�
����")�����%�C�
�
�
��a�T�
��CW��F����3�T�
�
�C�
�
a�<<�>>���(��Q�T�
�
�������F��
������C�
�
�
��
�������UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCLASSLIB	CLASSNAME
OBJECTNAMEOBJNAME	BASECLASS	CDROPTEXTNSELECT
OEXCEPTIONPROPERTYLISTLCTRLKEYPRESSEDGETKEYSTATEUSER32THISEVALTEXTGETDATAVALUEOENGINECTRLDROPTEXTGETPROPERTYSETDROPTEXTMESSAGESETDATA�%������N��C�classlib��
Class library�-�
cfoxclassinfo��	cClassLib����6��C�	classname���-���
cClassName����@��C�	baseclass��
Base class�-���
cBaseClass����:��C�parentclass���-���cParentClass�������"��C�classlib���-����#��C�	classname���-����#��C�	baseclass���-����%��C�parentclass���-�����%�������=��C�
objectname��Object name�-�cfoxtextbox����� �$��C�
objectname���-�����%�����t�@��C�
properties��
Properties�-�cfoxpropertybox�������$��C�
properties���-�����>��C�
runbuilder��Builder�-�cfoxbuildercombo����UTHISLSHOWCLASSINFOADDDATAVALUELSHOWOBJECTNAMELSHOWPROPERTIESdroponcontainer,��createsubclass��
createform��oncompletedrag6��
modifyitem���createcontextmenu���onolesetdata���oncreatedatavalues���14qqqqqqqq�����2A��B4tqq���!��A3tqq������A33"B4qq���a�AA2rq��A�A3uqqqqqqqqqqBqq��������A����"�A��!!�AAA"�����!A�A�AAA3�a��!11QA��AA�AA�2{�X  y�2+��	F/�	�
Q:�
�_E��q<�)�b�� II�7%L	�
]�	�U�	��
��#T�
��CC�filename�����%�C�
��
����
��C��������%�CC�
��֪
��{�Q���
�����F�C�
�����	:��(������C�
���0�Toolbox�x����
��C�����U	CFILENAMETHISGETDATAVALUEPUSHDS
OEXCEPTIONMESSAGEPOPDS�������
T�
��a��%�����d�T�
��C����T�
���
�����
T�
����%��
�����
��C�������	��C���UOWINDOWCOLLECTIONLBROWSETHISALLOWDROPONCONTAINERGETOPENFORMSCOUNT
BROWSEITEM����������������������|T�
��C�
ClassLocation� Software\Microsoft\VisualFoxPro\�C�� \Options\IntelliDrop\FieldTypes\�Multiple�	�
��xT�
��C�	ClassName� Software\Microsoft\VisualFoxPro\�C�� \Options\IntelliDrop\FieldTypes\�Multiple�	�
��#T�
��CC�filename�	����%�C�
���	C�
�0
����T�
�����T�
���Grid���%T�
��CC�
objectname�	����%�C�
������T�
���grdC�
�������T�
��C�RecordSourceType=1C�
 �&RecordSource=<<JUSTSTEM(m.cFilename)>>C�
 -�<<�>>�C�
 CCC�
properties�	����	�
��J��C�
��
��
��
��
��
����
����
��	���UODROPTARGETCSCXNAMENXPOSNYPOS	CCLASSLIB
CCLASSNAME
CPROPERTYLISTCORIGINALOBJNAME	CFILENAMETHISGETREGISTRYVALUEVERSIONGETDATAVALUEEVALTEXT
DROPOBJECT�	��
��#T�
��CC�filename�����%�C�
��
����
��C��������%�CC�
��֪
��{�Q���
�����F�C�
�����/��(������C�
���0�Toolbox�x����
��C�����U	CFILENAMETHISGETDATAVALUEPUSHDS
OEXCEPTIONMESSAGEPOPDS����,��C�Bro\<wse�oRef.BrowseItem()����,��C�\<Modify�oRef.ModifyItem()����(��C�\<Open�oRef.OpenItem()������C�
�����UOCONTEXTMENUADDMENUTHISCREATEFORMMENU�������#T�
��CC�filename�����%�C�
��
����
��C��������%�CC�
��֪
����Q���
�����F�C�
������(������C�
���0�Toolbox�x����
��C�����U	CFILENAMENDATASESSIONIDTHISGETDATAVALUEPUSHDS
OEXCEPTIONMESSAGEPOPDS<������"��C�
���
��
�����B�UNEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSTHISDROPONCONTAINER
browseitem,��
ondblclickI��droponcontainerB��
modifyitem���createcontextmenu���openitem���oncompletedrag���1�2!��Q1A�a��A�A2qq�1��A����A43qqqqq��1��1AR�A��3�2!��Q1A�Q��A�A2r���23sq2!��Q1A���A�A21"B3��'3)3T�KC&	;
`IZ
kY)��)I{PROCEDURE openitem
#include "toolbox.h"
#include "foxpro.h"

LOCAL cFilename

m.cFilename = NVL(THIS.GetDataValue("classlib"), '')
IF !EMPTY(m.cFilename)
	IF TYPE("_oobjectbrowser") <> 'O' OR ISNULL(_oobjectbrowser)
		DO (_objectbrowser)
	ENDIF
	IF TYPE("_oobjectbrowser") == 'O' AND !ISNULL(_oobjectbrowser)
		TRY
			_oobjectbrowser.LoadTypeLib(m.cFilename)
		CATCH
		ENDTRY
	ENDIF
ENDIF

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oMenuBar = oContextMenu.Addmenu(TOOLMENU_OPENOBJECTBROWSER_LOC, [oRef.OpenItem()])
THIS.CreateFormMenu(oContextMenu)

ENDPROC
PROCEDURE onolesetdata
#include "foxpro.h"
#define VK_CONTROL  0x11
#define CRLF 	CHR(13) + CHR(10)
#define TAB		CHR(9)
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos
LOCAL ClassName
LOCAL ObjectName
LOCAL BaseClass
LOCAL cDropText
LOCAL nSelect
LOCAL oException

IF VARTYPE(m.eFormat) == 'N' AND m.eFormat == CF_TEXT
	IF VARTYPE(m.oDropTarget) == 'O'
		RETURN .F.
	ELSE
		* we're not dropping on an object container, so assume
		* we're dropping text -- create the code to instantiate the object
		m.ClassName  = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))
		
		IF !EMPTY(m.ClassName)
			m.BaseClass  = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))
			m.ObjectName = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
			IF EMPTY(m.ObjectName)
				m.ObjectName = 'o'
			ENDIF

			m.cDropText = ''
			DECLARE INTEGER GetKeyState IN user32 INTEGER vKey 
			IF BITTEST(GetKeyState(VK_CONTROL), 15)
				m.cDropText = THIS.EvalText(THIS.oEngine.CtrlDropText)
				IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
					m.cDropText = ;
					 [DEFINE CLASS My] + CHRTRAN(m.ClassName, '.', '_') + [ AS ] + m.ClassName + CRLF + CRLF + ;
					 TAB + [PROCEDURE Init] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 TAB + [PROCEDURE Destroy] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 TAB + [PROCEDURE Error(nError, cMethod, nLine)] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 [ENDDEFINE]
				ENDIF
			ELSE
				m.cDropText = THIS.EvalText(THIS.oEngine.DropText)
				IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
					m.cDropText = m.ObjectName + [ = CREATEOBJECT("] + m.ClassName + [")]
				ENDIF
			ENDIF
			* CLEAR DLLS "GetKeyState"

			IF !EMPTY(m.cDropText)
				m.nSelect = SELECT()
				SELECT 0 && make sure we won't end up evaluating a field from a table
				TRY
					m.cDropText = TEXTMERGE(m.cDropText, .T., "<<", ">>")
				CATCH TO oException
					m.cDropText = oException.Message
				ENDTRY
				SELECT (m.nSelect)
			ENDIF
			m.oDataObject.SetData(m.cDropText, m.eFormat)
		ENDIF
	ENDIF
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

THIS.AddDataValue("classlib", '', DATAVALUE_CLASSLIBRARY_LOC, '', .T., "cfoxtextbox")
THIS.AddDataValue("classname", '', DATAVALUE_CLASSNAME_LOC, '', .T., "cfoxtextbox")
THIS.AddDataValue("comcontrol", '', '', '', .T.)

THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")

IF THIS.lShowProperties
	THIS.AddDataValue("properties", '', DATAVALUE_PROPERTIES_LOC, '', .F., "cfoxpropertybox")
ELSE
	THIS.AddDataValue("properties", '', '', '', .F.)
ENDIF

ENDPROC
PROCEDURE gethelpfile
* Check the type library for help file
LOCAL oTypeLib
LOCAL oFileInfo
LOCAL cHelpFile
LOCAL cFilename

m.cHelpFile = ''
m.cFilename = NVL(THIS.GetDataValue("classlib"), '')
IF !EMPTY(m.cFilename)
	TRY
		m.oTypeLib = CREATEOBJECT("tli.tliapplication")
		m.oFileInfo = m.oTypeLib.TypeLibInfoFromFile(m.cFilename)
		m.cHelpFile = STRTRAN(m.oFileInfo.HelpFile, CHR(0), '')
	CATCH
	ENDTRY
	m.oTypeLib = .NULL.
	m.oFileInfo = .NULL.

	IF EMPTY(m.cHelpFile) OR !FILE(m.cHelpFile)
		m.cHelpFile = ''
	ENDIF

ENDIF

RETURN m.cHelpFile





ENDPROC
DPROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.OpenItem()])

ENDPROC
PROCEDURE onrendercategory
* load the passed collection with the registered
* ActiveX controls
#include "toolbox.h"
LPARAMETERS oToolCollection

LOCAL oToolObject
LOCAL cFolder
LOCAL nCnt
LOCAL i
LOCAL oToolType
LOCAL cDirectory
LOCAL nControlCnt
LOCAL ARRAY aFileList[1]

LOCAL oReg,i,cOptPath,nPos,nTotDone,cVFPKey,cExtn,oTForm,lnPos
LOCAL aCLSIDs,aKeys,aProgID,aControlName,aServerName,cScanKey,iCount,lcServerName

DODEFAULT(m.oToolCollection)

cOptPath = CLSID_KEY+"\"

IF VARTYPE(m.lAllControls)#"L"
	m.lAllControls = .F.
ENDIF

IF VARTYPE(m.cActiveXFile)#"C"
	m.cActiveXFile = ""
ENDIF
cExtn = UPPER(JUSTEXT(m.cActiveXFile))

m.cVFPKey = VFP_OPTIONS_KEY + _VFP.Version + VFP_OPTIONS_KEY2

cHKEY = IIF(m.lAllControls, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER)
cActiveXKey = IIF(m.lAllControls, CLSID_KEY, m.cVFPKey)

DIMENSION aCLSIDs[1]
DIMENSION aControls[1,3]
STORE "" TO aControls,aCLSIDs

TRY
	oReg = NEWOBJECT("registry", "toolboxregistry.vcx", _TOOLBOX)
CATCH
ENDTRY

IF VARTYPE(oReg)#"O"
	RETURN .F.
ENDIF


IF EMPTY(aCLSIDs[1])
	IF oReg.EnumOptions(@aCLSIDs,m.cActiveXKey,m.cHKey,.T.)#0
		RETURN .F.
	ENDIF
ENDIF

nControlCnt = 0
FOR i = 1 TO ALEN(aCLSIDs)
	DIMENSION aKeys[1]
	DIMENSION aProgID[1,2]
	DIMENSION aServerName[1,2]
	DIMENSION aControlName[1,2]
	STORE "" TO aProgID,aControlName,aServerName,aKeys
	
	IF oReg.EnumOptions(@aKeys,m.cOptPath + aCLSIDs[m.i], '', .T.) == 0
		DO CASE
		CASE m.cExtn="DLL"
			cScanKey=INPROC_KEY
		CASE m.cExtn="EXE"
			cScanKey=LOCALSVR_KEY
		OTHERWISE
			cScanKey=CONTROL_KEY
		ENDCASE
		nPos = ASCAN(aKeys,m.cScanKey)
		IF m.nPos = 0
			LOOP
		ENDIF
		oReg.EnumOptions(@aServerName,cOptPath+aCLSIDs[m.i]+"\"+IIF(m.cExtn="EXE",LOCALSVR_KEY,INPROC_KEY))
		* Need to normalize servername to remove extraneous command switches such as
		* /automation, etc.
		IF !FILE(aServerName[2])
			lnPOS = RATC(" /",aServerName[2])
			IF lnPos>0
				aServerName[2]=	ALLTRIM(SUBSTRC(aServerName[2],1,lnPos-1))
			ENDIF
			lnPOS = RATC(" -",aServerName[2])
			IF lnPos>0
				aServerName[2]=	ALLTRIM(SUBSTRC(aServerName[2],1,lnPos-1))
			ENDIF
			* Check to see if still not right file
			IF !FILE(aServerName[2])
				IF TYPE("aServerName[4]")="C" AND FILE(aServerName[4])
					aServerName[2] = aServerName[4]
				ELSE
					* SKIP control
					LOOP	
				ENDIF
			ENDIF
		ENDIF

		IF EMPTY(m.cActiveXFile) OR ;
		  JUSTFNAME(UPPER(aServerName[2]))==JUSTFNAME(UPPER(m.cActiveXFile))
			oReg.EnumOptions(@aControlName,cOptPath+aCLSIDs[m.i])
			oReg.EnumOptions(@aProgID,cOptPath+aCLSIDs[m.i]+PROGID_KEY)

			IF !EMPTY(aControls[1,1])
				DIMENSION aControls[ALEN(aControls,1)+1,3]
			ENDIF
			
			nControlCnt = nControlCnt + 1
			
			aControls[ALEN(aControls,1),1] = aControlName[2]
			aControls[ALEN(aControls,1),2] = aProgID[2]
			aControls[ALEN(aControls,1),3] = aServerName[2]
		ENDIF
	ENDIF
ENDFOR


FOR m.i = 1 TO m.nControlCnt

	m.oToolObject = THIS.oEngine.GetVirtualToolObject("ACTIVEX", aControls[m.i, 1])
	IF !ISNULL(m.oToolObject)
		m.oToolObject.SetDataValue("classlib", aControls[m.i, 3])
		m.oToolObject.SetDataValue("classname", aControls[m.i, 2])
		m.oToolObject.SetDataValue("comcontrol", .T.)
		m.oToolObject.SetDataValue("objectname", "Olecontrol")
		m.oToolObject.SetDataValue("properties", '')

		THIS.oEngine.SaveVirtual(m.oToolObject)

		m.oToolCollection.Add(m.oToolObject)
	ENDIF
ENDFOR


RETURN

ENDPROC
��� ����%�8$��U����������������������
��������C�
���%��C��	��������C�
����T�
�����	����
����(��
�����!%�C�
��C�
���V����&T�
��C��C�
��C�
��
�����
����(��
�����T�
��C�
�����#T�
��CC�
��������HT��C�CLASSCC�
��C�
��
C�
������������%�C���O����*��C�classlibC�
��C�
��
����&��C�	classnameC�
�������'��C�
objectnameC�
�������(��C�parentclassC�
�������&��C�	baseclassC�
���������C�
��������C�
��
�������������B�UOTOOLCOLLECTIONOTOOLOBJECT	OTOOLTYPENCNTI	NCLASSCNTJAVCXINFOPROJECTSCOUNT
ACTIVEPROJECTFILESTYPENAMECTOOLTIP
CIMAGEFILETHISOENGINEGETIMAGEFORCLASSGETVIRTUALTOOLOBJECTGENERATETOOLNAMESETDATAVALUESAVEVIRTUALADDonrendercategory,��1uqqqqqq��b�1�a��1�R�aq�acRAAAAAAB2�)�PROCEDURE openitem
* -- Open the folder in Windows Explorer
LOCAL cFolder

m.cFolder = NVL(THIS.GetDataValue("folder"), '')
IF DIRECTORY(m.cFolder)
	THIS.ShellTo(m.cFolder)
ENDIF
ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.OpenItem()])

ENDPROC
PROCEDURE onrendercategory
* load the passed collections with the tool objects
* in this category -- in this case a Tool object for
* each file in the specified directory.
#include "toolbox.h"
LPARAMETERS oToolCollection
LOCAL oToolObject
LOCAL cFolder
LOCAL cFilespec
LOCAL nSpecCnt
LOCAL j
LOCAL nCnt
LOCAL i
LOCAL oToolType
LOCAL ARRAY aFileSpecs[1]
LOCAL ARRAY aFileList[1]

DODEFAULT(m.oToolCollection)

m.cFolder   = ADDBS(THIS.EvalText(NVL(THIS.GetDataValue("folder"), '')))
m.cFilespec = THIS.EvalText(NVL(THIS.GetDataValue("filetypes"), ''))

IF EMPTY(m.cFilespec)
	m.cFilespec = "*.*"
ENDIF

IF !EMPTY(m.cFolder) AND DIRECTORY(m.cFolder)
	m.nSpecCnt = ALINES(aFileSpecs, CHRTRAN(m.cFilespec, ", ", ";;"), .T., ';')
	FOR m.i = 1 TO m.nSpecCnt
		IF !EMPTY(aFileSpecs[m.i])
			TRY
				m.nCnt = ADIR(aFileList, m.cFolder + aFileSpecs[m.i], '', 1)
			CATCH
				m.nCnt = 0
			ENDTRY
			FOR m.j = 1 TO m.nCnt
				oToolType = THIS.oEngine.FindToolTypeByExtension(JUSTEXT(aFileList[m.j, 1]))
				IF !ISNULL(oToolType)
					m.oToolObject = THIS.oEngine.GetVirtualToolObject(oToolType.UniqueID, aFileList[m.j, 1], m.cFolder + aFileList[m.j, 1])
					IF !ISNULL(m.oToolObject)
						m.oToolObject.SetDataValue("filename", m.cFolder + aFileList[m.j, 1])
						THIS.oEngine.SaveVirtual(m.oToolObject)

						m.oToolCollection.Add(m.oToolObject)
					ENDIF
				ENDIF
			ENDFOR
		ENDIF
	ENDFOR
ENDIF

RETURN

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

THIS.AddDataValue("folder", '', DATAVALUE_FOLDER_LOC, '', .F., "cfoxdirectory")
THIS.AddDataValue("filetypes", '', DATAVALUE_FILETYPES_LOC, '', .F., "cfoxfiletypescombo", '', "DisplayValue")




ENDPROC

�PROCEDURE openitem
#include "toolbox.h"
#include "foxpro.h"

LOCAL cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	THIS.ShellTo(m.cFilename)
ENDIF

ENDPROC
PROCEDURE ondblclick
IF THIS.AllowDropOnContainer
	DODEFAULT()
ELSE
	THIS.ModifyItem()
ENDIF


ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

DODEFAULT()

* custom to the _filetool
THIS.AddDataValue("filename", '', DATAVALUE_FILENAME_LOC, '', .F., "cfoxfilename", '')

THIS.oModifyCollection = CREATEOBJECT("Collection")

WITH THIS.oModifyCollection
	.Add([EDITSOURCE(#filename#)], "H")
	.Add([EDITSOURCE(#filename#)], "TXT")
	.Add([EDITSOURCE(#filename#)], "LOG")
ENDWITH


ENDPROC
PROCEDURE modifyitem
#include "toolbox.h"
#include "foxpro.h"

LOCAL cFilename
LOCAL cExt
LOCAL oException
LOCAL cScriptCode

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	m.cExt = UPPER(JUSTEXT(m.cFilename))

	m.cScriptCode = ''

	IF THIS.oModifyCollection.GetKey(m.cExt) <> -1
		TRY
			m.cScriptCode = THIS.oModifyCollection.Item(m.cExt)

		CATCH TO oException
			m.cScriptCode = ''
		ENDTRY
	ENDIF
	
	IF EMPTY(m.cScriptCode)
		THIS.ShellTo(m.cFilename)
	ELSE
		m.cScriptCode = STRTRAN(m.cScriptCode, "#filename#", ["] + m.cFilename + ["])
		TRY
			EXECSCRIPT(m.cScriptCode)
		CATCH TO oException
			MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
		ENDTRY
	ENDIF	
ENDIF
ENDPROC
PROCEDURE onclick
IF THIS.ShowAsLink
	THIS.OnDblClick()
ENDIF


ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu
LOCAL cFilename
LOCAL cExt
LOCAL oMenuBar

m.cFilename = NVL(THIS.GetDataValue("filename"), '')
IF !EMPTY(m.cFilename)
	m.cExt = UPPER(JUSTEXT(m.cFilename))
	
	IF THIS.oModifyCollection.GetKey(m.cExt) <> -1
		oMenuBar = oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])
	ELSE
		oMenuBar = oContextMenu.Addmenu(TOOLMENU_OPEN_LOC, [oRef.OpenItem()])
	ENDIF
	oMenuBar.Bold = .T.
ENDIF


ENDPROC
PROCEDURE onolesetdata
#include "foxpro.h"
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cText
LOCAL oException

IF THIS.ClassBehavior
	DODEFAULT(oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos)
ELSE
	IF VARTYPE(m.eFormat) == 'N' AND m.eFormat == CF_TEXT AND VARTYPE(m.oDropTarget) <> 'O'
		* evaluate the Drop Text Template
		m.cText = NVL(THIS.GetDataValue("filename"), '')
		IF !EMPTY(THIS.DropTextTemplate)
			TRY
				m.cText = TEXTMERGE(THIS.DropTextTemplate, .F., "<<", ">>")
			CATCH TO oException
			ENDTRY
		ENDIF
		m.oDataObject.SetData(m.cText, m.eFormat)
	ENDIF
ENDIF

ENDPROC
f�� MMm�%z�
g��U������������������������������	���
����*T�
��CCC�template������
��,T�
��CCC�
objectname������
��%�C�
������T�
���loWS���T�
���
���T�
���
���&T�
��CCC�wsdl������
��%T�
��CCC�uri������
��)T�
��CCC�service������
��&T�
��CCC�port������
��$T�
��CCC�id������
��%�C�
����n���L�3T�
�	�C�	wsfoxcodeC�Q�ffc\_ws3utils.vcx���T�
�
�C�
��
�	���%�C�
�
��O��H�T�
��CC�
������(��j�T�
���������������T�
��C�
�a�<<�>>���(����T�
���������B��
���U	CTEMPLATECOBJNAMEOBJNAME
OBJECTNAMEWSDLURISERVICEPORTCID
OPROXYPREP	OPROXYGEN
OEXCEPTIONTHISEVALTEXTGETDATAVALUEGETPROXYOBJECTGETPROXYCODEMESSAGE��������$%�C�
���N�
�
��	����%�C�
���O��Y�B�-���}���CC���
��
������UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOSSETDATATHISGETPROXYCODEE"��C�classlib���-����#��C�	classname���-����#��C�	baseclass���-����%��C�parentclass���-������C�id���-����8��C�template��Template�-�cfoxeditbox����0��C�wsdl��WSDL�-�cfoxtextbox����.��C�uri��URI�-�cfoxtextbox����6��C�service��Service�-�cfoxtextbox����0��C�port��Port�-�cfoxtextbox����0��C�wsml��WSML�-�cfoxtextbox����2��C�class��Class�-�cfoxtextbox����%�����T�=��C�
objectname��Object name�-�cfoxtextbox�������$��C�
objectname���-�����%�������@��C�
properties��
Properties�-�cfoxpropertybox������$��C�
properties���-�����>��C�
runbuilder��Builder�-�cfoxbuildercombo����UTHISADDDATAVALUELSHOWOBJECTNAMELSHOWPROPERTIESo�����������������������	�*T�
��CCC�classlib�
����
���+T�
��CCC�	classname�
����
���,T�
��CCC�
objectname�
����
���,T�
��CCC�
properties�
����
���%�C�
����/�%T�
��C�Q�ffc\_ws3client.vcx��T�
������%�C�
����\�T�
���	wshandler����T�
��C�9wsdl=<<THIS.EvalText(NVL(THIS.GetDataValue("uri"), ''))>>C�
 �:port=<<THIS.EvalText(NVL(THIS.GetDataValue("port"), ''))>>C�
 �@service=<<THIS.EvalText(NVL(THIS.GetDataValue("service"), ''))>>C�
 �=wsname=<<THIS.EvalText(NVL(THIS.GetDataValue("class"), ''))>>C�
 �webserviceid=<<SYS(2015)>>C�
 �:wsml=<<THIS.EvalText(NVL(THIS.GetDataValue("wsml"), ''))>>-�<<�>>�C�
 �
���)T�
�
�CC�
runbuilder�
��
�
��@��C�
��
��
��
��
��
���
��
��
���B�UODROPTARGETCSCXNAMENXPOSNYPOSCOBJNAME
CPROPERTYLIST
CCLASSNAME	CCLASSLIBCORIGINALOBJNAMECNEWPROPERTYLISTTHISEVALTEXTGETDATAVALUE
RUNBUILDER
DROPOBJECT�����C�����UOCONTEXTMENUTHISCREATEFORMMENUgetproxycode,��onolesetdata���oncreatedatavalues���droponcontainer��createcontextmenu7��1rqqqqqqqqqqq��1AaQ�aA�1�q�A�!A����!AA�5rBqq��AA4#11Q���a!��AA�AA�34qqqqqq����Q�A�A��B8r2�,�P:5ydHM�8id`��)M��� kkEB%
k<
�U2���(��C�\<Open�oRef.OpenItem()����UOCONTEXTMENUADDMENU������������������������
������'��	��
���
����#������������C�
���T�
��CLSID�\��%�C�
����L����
T�
��-���%�C�
����C���T�
������T��CC�
���f��IT�
�
�� Software\Microsoft\VisualFoxPro\�C��\Options\OLEList��(T��C�
�������6��$T��C�
���CLSID��
�
6��
�������������J���(������0T�	�C�registry�toolboxregistry.vcx�S�����!���%�C�	���O��A�B�-���%�CC�������&%�C��
��
�a�	������B�-����
T����������(�C�����
�����������������������������J���(�����-%�C��
�
C�
���a�	������
H�M�����
��DLL��~�T���InProcServer32����
��EXE����T���
LocalServer32��2���T���Control���T��C��
����%��
������.��Z��C��
C�
���\C�
��EXE��
LocalServer32��InProcServer326�	���%�CC��0
����T��C� /C����%�������&T�����CCC�����굛���T��C� -C����%������&T�����CCC�����굛���%�CC��0
���/%�C�aServerName[4]b�C�
CC��0	��o�T�����C�����{�.����,%�C�
���CCC��f��CC�
�f��������C��
C�
���	���*��C��
C�
���\ProgID�	���%�CC����
��0���C���������T������#T��C�������C����#T��C�������C����#T��C�������C����������
����(��
�����-T�
��C�ACTIVEXC�
���� �!�"��%�C�
��
����'��C�classlibC�
����
��#��(��C�	classnameC�
����
��#����C�
comcontrola�
��#��)��C�
objectname�
Olecontrol�
��#����C�
properties��
��#����C�
�� �!�$����C�
��
��%�����B�U&OTOOLCOLLECTIONOTOOLOBJECTCFOLDERNCNTI	OTOOLTYPE
CDIRECTORYNCONTROLCNT	AFILELISTOREGCOPTPATHNPOSNTOTDONECVFPKEYCEXTNOTFORMLNPOSACLSIDSAKEYSAPROGIDACONTROLNAMEASERVERNAMECSCANKEYICOUNTLCSERVERNAMELALLCONTROLSCACTIVEXFILEVERSIONCHKEYCACTIVEXKEY	ACONTROLSENUMOPTIONSTHISOENGINEGETVIRTUALTOOLOBJECTSETDATAVALUESAVEVIRTUALADDcreatecontextmenu,��onrendercategoryy��1r�3trqqqqqq�r1�rr�Ar�AA��A�1��ARqA3aqAA���111���a�a��AAa1AA�C�aA�aAB�q�BAAA���r�A211AAA��!q����bRAAC2��9)kd�� KK%��(b�Ug���������������#T�
��CC�filename�����%T�
��CC�
objectname�����%�C�
������T�
���imgC�
������vT�
��C�BackStyle=0C�
 �Picture=<<m.cFilename>>C�
 -�<<�>>�C�
 CCC�
properties������	��J��C�
��
��
��
��Image��Image�
��
�����
��B�UODROPTARGETCSCXNAMENXPOSNYPOS
CPROPERTYLIST	CFILENAMECORIGINALOBJNAMETHISGETDATAVALUEEVALTEXT
DROPOBJECTu	��
��#T�
��CC�filename�����&%�CC�
���f�BMP�C�
�0	��]�B��
����n�	B�����U	CFILENAMETHISGETDATAVALUEX	��
��#T�
��CC�filename�����%�C�
��
��Q���C�
������U	CFILENAMETHISGETDATAVALUESHELLTOE���(��C�\<Open�oRef.OpenItem()������C�
�����UOCONTEXTMENUADDMENUTHISCREATEFORMMENU<������"��C�
���
��
�����B�UNEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSTHISDROPONCONTAINERX�������!��C�	classname�Image������C�������UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOSTHISSETDATAVALUEdroponcontainer,��imagefile_access��openitem���createcontextmenu.��oncompletedrag���onolesetdata)��13qqq2R�Af�C3�2a���A2�2!1A3r�241"B4q�1����'�K2 p�<$ �E)K+�� ��%�]�U5%�C����O��.���C��������UTHISOENGINE	CUSTOMIZEPARENTID������������������	���
�+T�
��C���������%�C�
���N��s�"T�
��C��ShowType����"T�
�
�C��ParentID����*T�
�	�C��
LockDelete���y�� %�C�
��
��
��T	��o�%��
�	��@�&T�
��C�
�
��
����6���k�#T�
��C�
������6�����B��
���UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE	CSHOWTYPE
NNEWEFFECTLLOCKDELETE	CPARENTIDTHISGETDRAGDATAPARENTID	��C��T����T��UTHISSHOWTYPEB�C������UTHISOENGINESHOWPROPERTIESFORM	customize,��
ondragover���Init���onshowproperties���1�aA3�qqqq�q"!��a�1AAA�3�3C2e���A#h�*)��� ���%�['
�U�������T�
��C�	textscrap����%�C�
��
����#T�
��C�
evaltextmerge����%�C�
���L����
T�
��-���%��
�����T�
��C�
�a�<<�>>���T���
����UCSCRAP
LTEXTMERGETHISGETDATAVALUET���������<��C�C\<opy to Clipboard�oRef.CopyToClipboard()����UOCONTEXTMENU
CBASECLASSOMENUBARADDMENU
B�C����UTHISONSHOWPROPERTIES�����������$T�
��CC�	textscrap�����#T�
��C�
evaltextmerge����%�C�
���L����
T�
��-���%��
�����T�
��C�
������C�
�����	B����UODATAOBJECTNEFFECTCSCRAP
LTEXTMERGETHISGETDATAVALUESETDATA�;��C�	textscrap��
Text scrap�-�cfoxeditbox����M��C�
evaltextmerge-�Evaluate using text merge�-�cfoxcheckbox����UTHISADDDATAVALUEcopytoclipboard,��createcontextmenu)��oncreate���onstartdrag���oncreatedatavalues���1rq�"1q�A��A�A3rqq�3�3�qqB1q�A�AA2�5��2��Ml��x"$�i9)�q�� XX&�%u�"��U�������������������	�
T�
�	��%�C�ShowType��
��	�"T�
��C��ShowType����%��
��T���"T�
��C��UniqueID����"T�
��C��ParentID����T�
�	������C�
�����
�����B��
�	��UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORD	CSHOWTYPECSRCUNIQUEIDCSRCPARENTID
NNEWEFFECT	GETFORMATTHISGETDRAGDATAOENGINECOPYTOOLUNIQUEID	��C��T����F��UTHISSHOWTYPE����������������
T�
���"T�
��C��ShowType�	�
�� %�C�
��
��
��T	����T�
������%�C�
���N����+T�
��C����������B��
���UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE	CSHOWTYPE
NNEWEFFECTTHISGETDRAGDATA
ondragdrop,��Init���
ondragover#��1�qqqq��!B!!��AA�3�2�qq�#�Ar�A�2��0�#)X	�PROCEDURE oncreatedatavalues
#include "toolbox.h"

DODEFAULT()

THIS.AddDataValue("template", '', DATAVALUE_TEMPLATE_LOC, '', .F., "cfoxeditbox")

THIS.AddDataValue("classlib", '', DATAVALUE_CLASSLIBRARY_LOC, '', .F., "cfoxclassinfo", '', "cClassLib")
THIS.AddDataValue("classname", '', '', '', .F., '', '', "cClassName")
THIS.AddDataValue("baseclass", '', DATAVALUE_BASECLASS_LOC, '', .F., '', '', "cBaseClass")

THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("properties", '', DATAVALUE_PROPERTIES_LOC, '', .F., "cfoxpropertybox")


ENDPROC
PROCEDURE onrendercategory
* load the passed collections with the tool objects
* in this category -- in this case a Tool object for
* each installed web service is created
#include "toolbox.h"
LPARAMETERS oToolCollection
LOCAL oToolObject
LOCAL nSelect
LOCAL cFilename

DODEFAULT(m.oToolCollection)

m.nSelect = SELECT()
m.cFilename = ADDBS(JUSTPATH(_Foxcode)) + "foxws3.dbf"
IF FILE(m.cFilename)
	TRY
		USE (m.cFilename) ALIAS WSCursor IN 0 SHARED AGAIN
		SELECT WSCursor
		SCAN FOR UPPER(Type) = 'C' AND Toolbox
			m.oToolObject = THIS.oEngine.GetVirtualToolObject("WEBSERVICE", WSCursor.Class + " (" + WSCursor.Name + ")")
			IF !ISNULL(m.oToolObject)
				m.oToolObject.SetDataValue("objectname", "loWS")

				m.oToolObject.SetDataValue("template", NVL(THIS.GetDataValue("template"), ''))
				m.oToolObject.SetDataValue("id", WSCursor.UniqueID)
				m.oToolObject.SetDataValue("uri", WSCursor.uri)
				m.oToolObject.SetDataValue("wsdl", WSCursor.wsdl)
				m.oToolObject.SetDataValue("service", WSCursor.Name)
				m.oToolObject.SetDataValue("port", WSCursor.Port)
				m.oToolObject.SetDataValue("wsml", WSCursor.WSML)
				m.oToolObject.SetDataValue("class", ALLTRIM(WSCursor.Class))


				m.oToolObject.SetDataValue("runbuilder", 'Y')

				m.oToolObject.ToolTip = WSCursor.uri

				m.oToolObject.SetDataValue("objectname", NVL(THIS.GetDataValue("objectname"), ''))
				m.oToolObject.SetDataValue("classlib", NVL(THIS.GetDataValue("classlib"), ''))
				m.oToolObject.SetDataValue("classname", NVL(THIS.GetDataValue("classname"), ''))
				m.oToolObject.SetDataValue("properties", NVL(THIS.GetDataValue("properties"), ''))


				THIS.oEngine.SaveVirtual(m.oToolObject)

				m.oToolCollection.Add(m.oToolObject)
			ENDIF
		ENDSCAN
	CATCH
	ENDTRY
	
	IF USED("WSCursor")
		USE IN WSCursor
	ENDIF
ENDIF

SELECT (m.nSelect)


RETURN

ENDPROC
S�� ::�n%����U�������������+T�
��C���������%�C�
���N����%�C�������T�
�������B��
���U	ODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE
NNEWEFFECT	GETFORMAT���������������'T�
��C��������%�C�
���N����%�C�������T�
��C���	�
����C�	�
�
��	������B��
���UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORD
NNEWEFFECT
CTEXTSCRAP	GETFORMATTHISGETDRAGDATAOENGINECREATETOOLITEMSCRAPUNIQUEID
ondragover,��
ondragdrop)��1�q�qA�AA�3�qqrqA��AA�1��t):�� ����%$�d�U\���,��C�\<Modify�oRef.ModifyItem()����&��C�R\<un�oRef.RunItem()����UOCONTEXTMENUADDMENU�	��
��#T�
��CC�filename�����%�C�
��
������T���C�
����(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE�	��
��#T�
��CC�filename�����%�C�
��
������S�
��
����(��}���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGEcreatecontextmenu,��
modifyitem���runitemd��1r�a3�2!����AA2�2!����AA1��	 6)��� >�%&�f�U\���,��C�\<Modify�oRef.ModifyItem()����&��C�R\<un�oRef.RunItem()����UOCONTEXTMENUADDMENU�	��
��#T�
��CC�filename�����%�C�
��
������T�/2��
��:��(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE�	��
��#T�
��CC�filename�����%�C�
��
������U�*��
���:��(�����C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGEcreatecontextmenu,��
modifyitem���runitemd��1r�a3�2!����AA3�2!����AA1��	,T)��� ���(%�E�U�������������+T�
��C���������%�C�
���N����%�C�������T�
�������B��
���U	ODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE
NNEWEFFECT	GETFORMAT�����������������
��	����'T�
��C��������%�C�
���N���%�C���
���%�C��	������T�
��C�
�	�����
����(��
����� ��C��C�
��	��
��������B��
���UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORD
NNEWEFFECTINFILECNT	AFILELIST	GETFORMATGETDATATHISOENGINECREATETOOLSFROMFILEUNIQUEID
ondragover,��
ondragdrop)��1�q�qA�AA�3�qqq�rqA�q�AAAA�1���)��� >�%&�f�U\���,��C�\<Modify�oRef.ModifyItem()����&��C�R\<un�oRef.RunItem()����UOCONTEXTMENUADDMENU�	��
��#T�
��CC�filename�����%�C�
��
������T�/3��
��:��(��~���C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGE�	��
��#T�
��CC�filename�����%�C�
��
������U�?��
���:��(�����C�
���0�Toolbox�x�����U	CFILENAMETHISGETDATAVALUE
OEXCEPTIONMESSAGEcreatecontextmenu,��
modifyitem���runitemd��1r�a3�2!����AA3�2!����AA1��	-V)��� ���%1S
?�U�	��C��H��C�	tablename��Table�-�
cfoxfieldinfo��
cTableName����H��C�	fieldname��Field�-�
cfoxfieldinfo��
cFieldName����N��C�classlib��
Class library�-�
cfoxclassinfo��	cClassLib����@��C�	classname��
Class name�-���
cClassName����F��C�parentclass��Parent class�-���cParentClass����@��C�	baseclass��
Base class�-���
cBaseClass����=��C�
objectname��Object name�-�cfoxtextbox����UTHISADDDATAVALUEInit,��1����a�3�)� sPROCEDURE createform
* create a form from the form class
#include "foxpro.h"
#include "toolbox.h"

* using "untitled" + SYS(3) forces VFP to not re-use any existing untitled windows
* (don't ask me why it works, but it does!)
CREATE FORM "untitled" + SYS(3) DEFAULT NOWAIT
ENDPROC
PROCEDURE createsubclass
* create a subclass of the current class
* create a subclass
#include "foxpro.h"
#include "toolbox.h"
LOCAL cBaseClass

m.cBaseClass = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))

TRY
	CREATE CLASS ? AS (m.cBaseClass) NOWAIT
CATCH TO oException
	MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
ENDTRY

ENDPROC
PROCEDURE droponcontainer
* Drop a class on the current container
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cBaseClass
LOCAL cObjName
LOCAL cPropertyList

m.cBaseClass    = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))
m.cObjName      = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
m.cPropertyList = THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))

THIS.RunBuilder = NVL(THIS.GetDataValue("runbuilder"), THIS.RunBuilder)

THIS.DropObject(m.oDropTarget, m.cSCXName, m.nXPos, m.nYPos, m.cBaseClass, '', m.cBaseClass, m.cObjName, m.cPropertyList)

RETURN


ENDPROC
PROCEDURE createformmenu
* add open forms and classes to the context menu
#include "toolbox.h"
LPARAMETERS oContextMenu, lTopLevel
LOCAL oFormMenu
LOCAL oWindowCollection
LOCAL cWinName

oFormMenu = .NULL.
oWindowCollection = THIS.GetOpenForms()
FOR EACH cWinName IN oWindowCollection
	IF m.lTopLevel
		oContextMenu.AddMenu(m.cWinName, [oRef.DropOnContainer(.NULL., "] + m.cWinName + [")])
	ELSE
		IF VARTYPE(oFormMenu) <> 'O'
			oFormMenu = oContextMenu.AddMenu(TOOLMENU_ADDTO_LOC)
		ENDIF

		oFormMenu.SubMenu.AddMenu(m.cWinName, [oRef.DropOnContainer(.NULL., "] + m.cWinName + [")])
	ENDIF
ENDFOR

RETURN

ENDPROC
PROCEDURE getpropertyset
* Given a property list, return a string that
* can be used in code to set the properties.
* For example, if the property list is as follows:
*	name=Ryan
*	success=.F.
*	year=1970
*
* Then return this:
*	name="RMK"
*	success=.F.
*	year=1970
*
#define CRLF 	CHR(13) + CHR(10)
#define TAB		CHR(9)
LPARAMETERS cPropertyList
LOCAL oPropertyCollection
LOCAL cPropertyName
LOCAL cPropertyValue
LOCAL i
LOCAL cPropSet
LOCAL nSelect

m.nSelect = SELECT()
SELECT 0

m.cPropSet = ''
IF VARTYPE(m.cPropertyList) == 'C' AND !EMPTY(m.cPropertyList)
	* Parse the property list into a collection
	m.oPropertyCollection = THIS.ParsePropertyList(m.cPropertyList)
	* -- set any properties specified by "properties"
	FOR m.i = 1 TO m.oPropertyCollection.Count
		m.cPropertyName = m.oPropertyCollection.GetKey(m.i)
		IF !EMPTY(m.cPropertyName) AND !INLIST(m.cPropertyName, "MemberCount", "ContainerClass", "ContainerClassLib")
			m.cPropertyValue = TRANSFORM(NVL(THIS.EvalText(m.oPropertyCollection.Item(m.i)), ''))

			* if we have parens in the return, assume it's a characeter type
			* otherwise our TYPE() function tries to re-evaluate it
			IF (AT('(', m.cPropertyValue) > 0 AND AT(')', m.cPropertyValue) > 0) OR INLIST(TYPE(m.cPropertyValue), 'C', 'U')
				m.cPropSet = m.cPropSet + TAB + m.cPropertyName + " = " + ["] + m.cPropertyValue + ["] + CRLF
			ELSE
				m.cPropSet = m.cPropSet + TAB + m.cPropertyName + " = " + TRANSFORM(m.cPropertyValue) + CRLF
			ENDIF
		ENDIF
	ENDFOR
ENDIF

SELECT (m.nSelect)

RETURN m.cPropSet

ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu
LOCAL cBaseClass
LOCAL oMenuBar

m.cBaseClass = LOWER(NVL(THIS.GetDataValue("baseclass"), ''))

IF !INLIST(m.cBaseClass, "exception", "column", "header", "session") && these aren't supported by CREATE CLASS
	oContextMenu.Addmenu(TOOLMENU_CREATESUBCLASS_LOC, [oRef.CreateSubclass()])
ENDIF
IF m.cBaseClass == "form"
	oContextMenu.Addmenu(TOOLMENU_CREATEFORM_LOC, [oRef.CreateForm()])
ENDIF

THIS.CreateFormMenu(m.oContextMenu)


ENDPROC
PROCEDURE onolesetdata
#include "foxpro.h"
#define VK_CONTROL  0x11
#define CRLF 	CHR(13) + CHR(10)
#define TAB		CHR(9)

LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos
LOCAL ClassLib
LOCAL ClassName
LOCAL ObjectName
LOCAL ObjName
LOCAL BaseClass
LOCAL PropertyList
LOCAL cDropText
LOCAL nSelect
LOCAL oException
LOCAL lCtrlKeyPressed

IF VARTYPE(m.eFormat) == 'N' AND m.eFormat == CF_TEXT AND VARTYPE(m.oDropTarget) <> 'O'
	* we're not dropping on an object container, so assume
	* we're dropping text -- create the code to instantiate the object
	m.BaseClass  = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))
	m.ClassName  = m.BaseClass
	m.ClassLib   = ''
	m.ObjectName = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
	m.PropertyList = THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))
	
	IF EMPTY(m.ObjectName)
		m.ObjectName = 'o'
	ENDIF
	m.ObjName    = m.ObjectName

	m.cDropText = ''
	DECLARE INTEGER GetKeyState IN user32 INTEGER vKey 
	m.lCtrlKeyPressed = BITTEST(GetKeyState(VK_CONTROL), 15)
	* CLEAR DLLS "GetKeyState"

	IF m.lCtrlKeyPressed
		m.cDropText = THIS.EvalText(THIS.oEngine.CtrlDropText)
		IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
			m.cDropText = ;
			 [DEFINE CLASS ] + m.ObjectName + [ AS ] + m.BaseClass + CRLF + ;
			 THIS.GetPropertySet(m.PropertyList) + CRLF + ;
			 TAB + [PROCEDURE Init] + CRLF + CRLF + ;
			 TAB + [ENDPROC] + CRLF + CRLF + ;
			 TAB + [PROCEDURE Destroy] + CRLF + CRLF + ;
			 TAB + [ENDPROC] + CRLF + CRLF + ;
			 TAB + [PROCEDURE Error(nError, cMethod, nLine)] + CRLF + CRLF + ;
			 TAB + [ENDPROC] + CRLF + CRLF + ;
			 [ENDDEFINE]
		ENDIF
	ELSE
		m.cDropText = THIS.EvalText(THIS.oEngine.DropText)
		IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
			m.cDropText = m.ObjectName + [ = CREATEOBJECT("] + m.BaseClass + [")]
		ENDIF
	ENDIF


	IF !EMPTY(m.cDropText)
		m.nSelect = SELECT()
		SELECT 0 && make sure we won't end up evaluating a field from a table
		TRY
			m.cDropText = TEXTMERGE(m.cDropText, .T., "<<", ">>")
		CATCH TO oException
			m.cDropText = oException.Message
		ENDTRY
		SELECT (m.nSelect)
	ENDIF
	m.oDataObject.SetData(m.cDropText, m.eFormat)
ENDIF

ENDPROC
PROCEDURE oncompletedrag
LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos

THIS.DropOnContainer(m.oDropTarget, '', m.nMouseXPos, m.nMouseYPos)

RETURN


ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

THIS.AddDataValue("baseclass", '', DATAVALUE_BASECLASS_LOC, '', .T., "cfoxtextbox")
THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("properties", '', DATAVALUE_PROPERTIES_LOC, '', .F., "cfoxpropertybox")
THIS.AddDataValue("runbuilder", '', DATAVALUE_BUILDER_LOC, '', .F., "cfoxbuildercombo")



ENDPROC
PROCEDURE onkeypress
* When return is pressed, simply drop 
* on the open container in the upper left corner
LPARAMETERS nKeyCode, nShiftAltCtrl
LOCAL oWindowCollection
LOCAL oContextMenu
PRIVATE oRef

* find our drop target
IF m.nKeyCode == 13
*!*		* if they press enter, add to open SCX or VCX
*!*		oWindowCollection = THIS.GetOpenForms()
*!*		DO CASE
*!*		CASE oWindowCollection.Count == 1
*!*			THIS.DropOnContainer(.NULL., oWindowCollection.Item(1))

*!*		CASE oWindowCollection.Count > 1
*!*			m.oContextMenu = NEWOBJECT("ContextMenu", "foxmenu.prg", IIF(ATC(".APP", SYS(16)) > 0, SYS(16), ''))
*!*			THIS.CreateFormMenu(m.oContextMenu, .T.)

*!*			m.oRef = THIS
*!*			m.oContextMenu.Show(.3, .4)
*!*			m.oContextMenu = .NULL.

*!*		ENDCASE

	RETURN .T.
ENDIF

RETURN .F.



ENDPROC
PROCEDURE ondblclick
LOCAL oWindowCollection
LOCAL oContextMenu
PRIVATE oRef


* if they press enter, add to open SCX or VCX
oWindowCollection = THIS.GetOpenForms()
DO CASE
CASE oWindowCollection.Count == 1
	THIS.DropOnContainer(.NULL., oWindowCollection.Item(1))

CASE oWindowCollection.Count > 1
	m.oContextMenu = NEWOBJECT("ContextMenu", "foxmenu.prg", _TOOLBOX)
	THIS.CreateFormMenu(m.oContextMenu, .T.)

	m.oRef = THIS
	m.oContextMenu.Show(.3, .4)
	m.oContextMenu = .NULL.
ENDCASE

ENDPROC
�PROCEDURE getproxycode
* Return code to instantiate a web service proxy object
LOCAL cTemplate
LOCAL cObjName
LOCAL ObjName
LOCAL ObjectName
LOCAL Wsdl
LOCAL URI
LOCAL Service
LOCAL Port
LOCAL cID
LOCAL oProxyPrep
LOCAL oProxyGen
LOCAL oException

m.cTemplate = THIS.EvalText(NVL(THIS.GetDataValue("template"), ''))
m.cObjName  = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))

IF EMPTY(m.cObjName)
	m.cObjName = "loWS"
ENDIF


* don't use variable prefixes because we'll use these in a template
* that will be textmerged and we want to make them as readable as possible
m.ObjName  = m.cObjName
m.ObjectName = m.cObjName
m.Wsdl     = THIS.EvalText(NVL(THIS.GetDataValue("wsdl"), ''))
m.URI      = THIS.EvalText(NVL(THIS.GetDataValue("uri"), ''))
m.Service  = THIS.EvalText(NVL(THIS.GetDataValue("service"), ''))
m.Port     = THIS.EvalText(NVL(THIS.GetDataValue("port"), ''))
m.cID      = THIS.EvalText(NVL(THIS.GetDataValue("id"), ''))


IF EMPTY(m.cTemplate)
	TRY
		m.oProxyPrep = NEWOBJECT("wsfoxcode", HOME() + "ffc\_ws3utils.vcx")
		m.oProxyGen = m.oProxyPrep.GetProxyObject(m.cID)
		IF VARTYPE(m.oProxyGen) == 'O'
			m.cTemplate = NVL(oProxyGen.GetProxyCode(), '')
		ENDIF
	CATCH TO oException
		m.cTemplate = oException.Message
	ENDTRY
ELSE
	TRY
		m.cTemplate = TEXTMERGE(m.cTemplate, .T., "<<", ">>")
	CATCH TO oException
		m.cTemplate = oException.Message
	ENDTRY
ENDIF

RETURN m.cTemplate



ENDPROC
PROCEDURE onolesetdata
#include "foxpro.h"
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos

IF VARTYPE(m.eFormat) == 'N' AND m.eFormat == 1
	IF VARTYPE(m.oDropTarget) == 'O' && AND INLIST(m.oDropTarget.BaseClass, "Form", "Formset", "Page", "Container", "Column", "Toolbar")
		RETURN .F.
	ELSE
		m.oDataObject.SetData(THIS.GetProxyCode(), m.eFormat)
	ENDIF
ENDIF


ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

THIS.AddDataValue("classlib", '', '', '', .F.)
THIS.AddDataValue("classname", '', '', '', .F.)
THIS.AddDataValue("baseclass", '', '', '', .F.)
THIS.AddDataValue("parentclass", '', '', '', .F.)

THIS.AddDataValue("id", '', '', '', .F.)
THIS.AddDataValue("template", '', DATAVALUE_TEMPLATE_LOC, '', .F., "cfoxeditbox")

THIS.AddDataValue("wsdl", '', DATAVALUE_WSDL_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("uri", '', DATAVALUE_URI_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("service", '', DATAVALUE_SERVICE_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("port", '', DATAVALUE_PORT_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("wsml", '', DATAVALUE_WSML_LOC, '', .F., "cfoxtextbox")
THIS.AddDataValue("class", '', DATAVALUE_CLASS_LOC, '', .F., "cfoxtextbox")

IF THIS.lShowObjectName
	THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")
ELSE
	THIS.AddDataValue("objectname", '', '', '', .F.)
ENDIF

IF THIS.lShowProperties
	THIS.AddDataValue("properties", '', DATAVALUE_PROPERTIES_LOC, '', .F., "cfoxpropertybox")
ELSE
	THIS.AddDataValue("properties", '', '', '', .F.)
ENDIF

THIS.AddDataValue("runbuilder", '', DATAVALUE_BUILDER_LOC, '', .F., "cfoxbuildercombo")

ENDPROC
PROCEDURE droponcontainer
* Drop a class on the current container
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cObjName
LOCAL cPropertyList
LOCAL cClassName
LOCAL cClassLib
LOCAL cOriginalObjName
LOCAL cNewPropertyList

m.cClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
m.cClassName = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))
m.cOriginalObjName = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
m.cPropertyList = THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))

IF EMPTY(m.cClassLib)
	m.cClassLib  = HOME() + "ffc\_ws3client.vcx"
	m.cClassName = ''
ENDIF
IF EMPTY(m.cClassName)
	m.cClassName = "wshandler"
ENDIF

m.cPropertyList = ;
 TEXTMERGE( ;
  [wsdl=<<THIS.EvalText(NVL(THIS.GetDataValue("uri"), ''))>>] + CHR(10) + ;
  [port=<<THIS.EvalText(NVL(THIS.GetDataValue("port"), ''))>>] + CHR(10) + ;
  [service=<<THIS.EvalText(NVL(THIS.GetDataValue("service"), ''))>>] + CHR(10) + ;
  [wsname=<<THIS.EvalText(NVL(THIS.GetDataValue("class"), ''))>>] + CHR(10) + ;
  [webserviceid=<<SYS(2015)>>] + CHR(10) + ;
  [wsml=<<THIS.EvalText(NVL(THIS.GetDataValue("wsml"), ''))>>], .F., "<<", ">>") + CHR(10) + ;
  m.cPropertyList

THIS.RunBuilder = NVL(THIS.GetDataValue("runbuilder"), THIS.RunBuilder)

THIS.DropObject(m.oDropTarget, m.cSCXName, m.nXPos, m.nYPos, m.cClassName, m.cClassLib, '', m.cOriginalObjName, m.cPropertyList)

RETURN






ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu

THIS.CreateFormMenu(oContextMenu)

ENDPROC
GPROCEDURE droponcontainer
* Drop a class on the current container
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cObjName
LOCAL cPropertyList
LOCAL cClassName
LOCAL cClassLib
LOCAL cOriginalObjName
LOCAL cBaseClass
LOCAL cContainerClassLib
LOCAL cContainerClassName

m.cBaseClass = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))
m.cClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
m.cClassName = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))
m.cOriginalObjName = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
m.cPropertyList = THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))

m.cContainerClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("containerclasslib"), ''))
m.cContainerClassName = THIS.EvalText(NVL(THIS.GetDataValue("containerclassname"), ''))

THIS.RunBuilder = NVL(THIS.GetDataValue("runbuilder"), THIS.RunBuilder)

THIS.DropObject(m.oDropTarget, m.cSCXName, m.nXPos, m.nYPos, m.cClassName, m.cClassLib, m.cBaseClass, m.cOriginalObjName, m.cPropertyList, m.cContainerClassName, m.cContainerClassLib)

RETURN


ENDPROC
PROCEDURE createsubclass
* create a subclass
#include "foxpro.h"
#include "toolbox.h"
LOCAL cClassLib
LOCAL cClassName
LOCAL oException

m.cClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
m.cClassName = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))

TRY
	CREATE CLASS ? OF (m.cClassLib) AS (m.cClassName) FROM (m.cClassLib) NOWAIT
CATCH TO oException
	MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
ENDTRY

ENDPROC
PROCEDURE createform
* create a form from the form class
#include "foxpro.h"
#include "toolbox.h"
LOCAL cClassLib
LOCAL cClassName
LOCAL oException

m.cClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
m.cClassName = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))

TRY
	* using "untitled" + SYS(3) forces VFP to not re-use any existing untitled windows
	* (don't ask me why it works, but it does!)
	CREATE FORM "untitled" + SYS(3) AS (m.cClassName) FROM (m.cClassLib) NOWAIT
CATCH TO oException
	MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
ENDTRY

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos

THIS.DropOnContainer(m.oDropTarget, '', m.nMouseXPos, m.nMouseYPos)

RETURN


ENDPROC
PROCEDURE modifyitem
LOCAL cClassLib
LOCAL cClassName

m.cClassLib  = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
m.cClassName = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))

IF FILE(m.cClassLib)
	TRY
		EDITSOURCE(m.cClassLib, 0, m.cClassName)
	CATCH
	ENDTRY
ENDIF
ENDPROC
PROCEDURE createcontextmenu
#include "toolbox.h"
LPARAMETERS oContextMenu
LOCAL oMenuBar

oMenuBar = oContextMenu.Addmenu(TOOLMENU_MODIFY_LOC, [oRef.ModifyItem()])

IF LOWER(JUSTEXT(NVL(THIS.GetDataValue("classlib"), ''))) == "vcx"
	oContextMenu.Addmenu(TOOLMENU_CREATESUBCLASS_LOC, [oRef.CreateSubclass()])
ENDIF

IF LOWER(NVL(THIS.GetDataValue("baseclass"), '')) == "form"
	oContextMenu.Addmenu(TOOLMENU_CREATEFORM_LOC, [oRef.CreateForm()])
ENDIF

THIS.CreateFormMenu(oContextMenu)

ENDPROC
PROCEDURE onolesetdata
#include "foxpro.h"
#define VK_CONTROL  0x11
#define CRLF 	CHR(13) + CHR(10)
#define TAB		CHR(9)
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos
LOCAL ClassLib
LOCAL ClassName
LOCAL ObjectName
LOCAL ObjName
LOCAL BaseClass
LOCAL cDropText
LOCAL nSelect
LOCAL oException
LOCAL PropertyList
LOCAL lCtrlKeyPressed

IF VARTYPE(m.eFormat) == 'N' AND m.eFormat == CF_TEXT
	IF VARTYPE(m.oDropTarget) == 'O' && AND INLIST(m.oDropTarget.BaseClass, "Form", "Formset", "Page", "Container", "Column", "Toolbar")
		RETURN .F.
	ELSE
		DECLARE INTEGER GetKeyState IN user32 INTEGER vKey 
		m.lCtrlKeyPressed = BITTEST(GetKeyState(VK_CONTROL), 15)
		* CLEAR DLLS "GetKeyState"

		* we're not dropping on an object container, so assume
		* we're dropping text -- create the code to instantiate the object
		m.ClassLib   = THIS.EvalText(NVL(THIS.GetDataValue("classlib"), ''))
		m.ClassName  = THIS.EvalText(NVL(THIS.GetDataValue("classname"), ''))
		
		IF !EMPTY(m.ClassName) OR !EMPTY(m.ClassLib)
			m.BaseClass  = THIS.EvalText(NVL(THIS.GetDataValue("baseclass"), ''))
			m.ObjectName = THIS.EvalText(NVL(THIS.GetDataValue("objectname"), ''))
			IF EMPTY(m.ObjectName)
				m.ObjectName = 'o'
			ENDIF
			m.ObjName = m.ObjectName

			* get properties
			m.PropertyList = THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))

			m.cDropText = ''
			IF m.lCtrlKeyPressed
				m.cDropText = THIS.EvalText(THIS.oEngine.CtrlDropText)

				IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
					m.cDropText = ;
					 [DEFINE CLASS My] + m.ClassName + [ AS ] + m.ClassName + [ OF ] + JUSTFNAME(m.ClassLib) + CRLF + ;
					 THIS.GetPropertySet(m.PropertyList) + CRLF + ;
					 TAB + [PROCEDURE Init] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 TAB + [PROCEDURE Destroy] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 TAB + [PROCEDURE Error(nError, cMethod, nLine)] + CRLF + CRLF + ;
					 TAB + [ENDPROC] + CRLF + CRLF + ;
					 [ENDDEFINE]
				ENDIF
			ELSE
				m.cDropText = THIS.EvalText(THIS.oEngine.DropText)
				IF VARTYPE(m.cDropText) <> 'C' OR EMPTY(m.cDropText)
					IF EMPTY(m.ClassLib)
						m.cDropText = m.ObjectName + [ = CREATEOBJECT("] + m.ClassName + [")]
					ELSE
						m.cDropText = m.ObjectName + [ = NEWOBJECT("] + m.ClassName + [", "] + JUSTFNAME(m.ClassLib) + [")]
					ENDIF
				ENDIF
			ENDIF

			IF !EMPTY(m.cDropText)
				m.nSelect = SELECT()
				SELECT 0 && make sure we won't end up evaluating a field from a table
				TRY
					m.cDropText = TEXTMERGE(m.cDropText, .T., "<<", ">>")
				CATCH TO oException
					m.cDropText = oException.Message
				ENDTRY
				SELECT (m.nSelect)
			ENDIF
			m.oDataObject.SetData(m.cDropText, m.eFormat)
		ENDIF
	ENDIF
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"

IF THIS.lShowClassInfo
	THIS.AddDataValue("classlib", '', DATAVALUE_CLASSLIBRARY_LOC, '', .F., "cfoxclassinfo", '', "cClassLib")
	THIS.AddDataValue("classname", '', '', '', .F., '', '', "cClassName")
	THIS.AddDataValue("baseclass", '', DATAVALUE_BASECLASS_LOC, '', .F., '', '', "cBaseClass")
	THIS.AddDataValue("parentclass", '', '', '', .F., '', '', "cParentClass")
ELSE
	THIS.AddDataValue("classlib", '', '', '', .F.)
	THIS.AddDataValue("classname", '', '', '', .F.)
	THIS.AddDataValue("baseclass", '', '', '', .F.)
	THIS.AddDataValue("parentclass", '', '', '', .F.)
ENDIF

IF THIS.lShowObjectName
	THIS.AddDataValue("objectname", '', DATAVALUE_OBJECTNAME_LOC, '', .F., "cfoxtextbox")
ELSE
	THIS.AddDataValue("objectname", '', '', '', .F.)
ENDIF
IF THIS.lShowProperties
	THIS.AddDataValue("properties", '', DATAVALUE_PROPERTIES_LOC, '', .F., "cfoxpropertybox")
ELSE
	THIS.AddDataValue("properties", '', '', '', .F.)
ENDIF

THIS.AddDataValue("runbuilder", '', DATAVALUE_BUILDER_LOC, '', .F., "cfoxbuildercombo")

ENDPROC
wn�� UwUwF�-%WgLt�$k�U)���T�
��Ca����B��
���UOCONTEXTMENUTHIS
CREATEMENU������UNEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOS�������������������	���
�
T�
�
��%�C�ShowType�����"T�
��C��ShowType��
��
H������
��T���"T�
��C��UniqueID��
��"T�
��C��ParentID��
��)T�
�	�C��
LockDelete��
�y��%��
�	��f�%����
���K�T�
�
�����b�T�
�
��������#T�
�
�C�
������6���
H������
�
�������C�
����������
�
������C�
�����������B��
�
��UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORD	CSHOWTYPECSRCUNIQUEIDCSRCPARENTIDLLOCKDELETE
NNEWEFFECT	GETFORMATTHISGETDRAGDATAPARENTIDOENGINECOPYTOOLUNIQUEIDMOVETOOL)���������B��UODATAOBJECTNEFFECTNBUTTONNSHIFTNXCOORDNYCOORDNSTATE5%�C����O��.���C��������UTHISOENGINE
RENAMEITEMUNIQUEID6%�C����O��/���C��a������UTHISOENGINE
DELETEITEMUNIQUEID����	B����UODATAOBJECTNEFFECT��������%�C�
�������T�
��C�
�����'%�C���C�CC� ��	����#T�
��C�
�CC� �
��=������
T�
����B��
���UODATAOBJECTCFORMATXDATA	GETFORMATGETDATA����UNEFFECTEMOUSECURSOR'����������������������%�C���O��w�-T�
��C�ContextMenu�foxmenu.prg�S����
%�������C���	����C�����
��%����������C�\-��
���%���
���,��C�\<Rename�oRef.RenameItem()��
���%���
��X�,��C�\<Delete�oRef.DeleteItem()��
���%���
����0��C�\<Properties�oRef.Properties()��
���6%���
���
���
����	������C�\-��
���%���
��6�8��C�Add Class Librar\<y�oRef.AddClassLib()��
���3��C�Add Cate\<gory�oRef.AddCategory()��
��<��C�Re\<fresh Category�oForm.RefreshCategory()��
��6��C�Customize Toolbo\<x�oRef.Customize()��
��T��C�����%��������T��C�F\<ilter��
��=��C�none�oForm.ApplyFilter("")�C�������
��������L��C���oForm.ApplyFilter("���")���������
�������C���
��%����T���T�
��C�������F%�����
C���
� C�
���O��
���F	��]���C�\-��
���)%�C�
���O��
���F	����:��C�Add to Fa\<vorites�oRef.AddToFavorites()��
���!%�����
C���
���&��C�He\<lp�
oRef.ShowHelp��
�����	B����ULDEFAULTOCONTEXTMENUOFILTERCOLLECTIONOFILTER	OMENUITEMOADDINCOLLECTIONOADDIN	OCATEGORYTHISCREATECONTEXTMENUCREATEADDINSMENU
TOOLTYPEIDMENUBARCOUNTADDMENU
LOCKRENAME
LOCKDELETE	ISVIRTUALLOCKADDOENGINE
GETFILTERSCOUNTSUBMENUFILTERID
FILTERNAMEUNIQUEIDSHOWTYPE
GETTOOLOBJECTPARENTIDHELPIDHELPFILE/%�C����O��(���C������UTHISOENGINEADDCATEGORY5%�C����O��.���C��������UTHISOENGINE	CUSTOMIZEPARENTID�������%�C�
���O��9�T�
���
�����R�T�
���
����=%�C�
���C�C�
��=�(	�C�
��R�)	��������T�
��CC�
�����������B��
���UXTEXTCTEXTVALUE!�������B�-��UODATAOBJECTEFORMATODROPTARGET
NMOUSEXPOS
NMOUSEYPOS�#�������������"%�C�
���C�C�
����S�B�-���%�C�t�
��w�T�
������%�C�
���C����T�
������%�C�
���C����T�
������%�C�
���C����T�
������%�C�
���C���T�
������%�C�
���C��I�T�
������T�
��C�empty�N����C�
��DataName�
�
����C�
��	DataValue�
�
��!��C�
��DataCaption�
�
��!��C�
��Description�
�
�� ��C�
��
IsReadOnly�
�
����C�
��	EditClass�
�
��!��C�
��EditLibrary�
�
��"��C�
��EditProperty�
�
��!��C�
��DataTypeC�
���
����C�
�C�
�f�	�
���B�a��UCNAMEXVALUECCAPTIONCDESCRIPTIONLISREADONLY
CEDITCLASSCEDITLIBRARY
CEDITPROPERTY
ODATAPROPERTYTHISODATACOLLECTIONADD�������������"%�C�
���C�C�
����E�B�-���
T�
�������T��CC�
�f�����T�
������%�C�
���C����T�
��C�
�������(������B��
���U	CNAME
ODATAPROPERTY
OEXCEPTIONXVALUETHISODATACOLLECTIONITEM	DATAVALUEEVALTEXT�����������"%�C�
���C�C�
����B�B�-���T�������T��CC�
�f�����T����
����(������B�C���UCNAMEXVALUE
ODATAPROPERTY
OEXCEPTIONTHISODATACOLLECTIONITEM	DATAVALUE@���%�C����O��9�B�C��
�������ULNOAUTOSAVETHISOENGINESHOWPROPERTIES:%�C������
B�C�����3�B������UTHIS	IMAGEFILEGETIMAGEFILE��������������&|�GetDesktopWindow�
user32.dll�.|�GetSystemDirectory�kernel32.dll��2|�ShellExecute�shell32.dll������%�C�
���C����T�
������T�
���open��,T�
��CC��
��
��
����
��%��
������T�
��C�X��T�
��C�
�C�
�>���T�
��C�
���
�\��T�
���RUNDLL32.EXE��'T���shell32.dll,OpenAs_RunDLL ��5T�
��CC��open�
��
��
��
���
���B��
���U
CFILECPARAMETERSCRUNCSYSDIR	NRETVALUEGETDESKTOPWINDOWUSER32DLLGETSYSTEMDIRECTORYKERNEL32SHELLEXECUTESHELL32
COPERATION
���UOCONTEXTMENU+T���C�DATASESSIONv��G�(����UTHISNDATASESSIONIDG�(�����UTHISNDATASESSIONID23�����������	�
�������
��������������������������������������������������������� ���!���"���#���$���%���&���'���(���)�
��*����
��+����
��,����
��-������.���/�T�
�����T�
�����T�
� ����T�
�!����
T�
�(�-��6T�
��C�
���O�C�
���C	�	C�
��
	��%��
�����
H������C�.VCX�
����'�(T���CLASS DESIGNER -� �
����C�.SCX�
����m�)T�
���FORM DESIGNER -� �
���2���)T�
���FORM DESIGNER -� �
����%�C�
��
�C�
��	����
t,��
����%�C��*�`���9��%�CC��
�*�0�Form�Formset�Page�	Pageframe�	Container�Grid�Column�Toolbar�Optiongroup�Commandgroup�Dataenvironment�
�C�m.aFrmObj[1].Parentb�O	��W��%�C��
�*�1�0�Form�&C�m.aFrmObj[1].Parent.Captionb�C	�C�m.aFrmObj[1].Nameb�C	�C��
�*�1�2C��
�*�3	��5�T�
��C��*���S�T�
��C��*�1����r�T�
��C��*���"%�C�
��	AddObject��h
��5�6%�C�m.oDropTarget.Topb�N�C�
���N	����T�
���
��4���7%�C�m.oDropTarget.Leftb�N�C�
���N	��1�T�
���
��5�����q�%�C��*��`���m�T�
��C��*����<�*�T�*���'�T�
�.�C�9�2���T�
�/�C�9�2���%�C�
���O��#�4%�C��,����CC��,�3@�toolbox	���	<�
�,�B��|�GetKeyState�user32�%�CC��6�����%�C��,�������T�$�C��,��'+�C�oTempObject.Parentb�O����%��$�1�0�Form����!��T�$��$�1���`%�C�oTempObject.Parent.Captionb�C�C�oTempObject.Nameb�C	��$�1�2�$�3	��o�T�
���
�$��T�
��C��
�,��T�
��C��
�,�����T�
��C��,��T�
��C��
�,��T�
��C��
�,���T�$��<�$���%�C�
���O���%�C��,�����T�
��C��,����	<�
�,���%�C�
���C��Q�T�
������:%�C�
���O� CC�
���Session�	Exception�	��	�
T�
���u��C�\This class has no visual representation and therefore cannot be dropped onto this container.�0�Toolbox�x���O%�C�
���C�	C�
��
	�C�
���O	�C�
��	BaseClass��h	���1�%�C�
�����	�T�
���
����T�
��C�
�����%�C�
��0�Form�Formset�Page�	Pageframe�	Container�Grid�Column�Toolbar�Optiongroup�Commandgroup�Dataenvironment�
����%�C�m.oDropTarget.Parentb�O�C�
��1�0�Form�Formset�Page�	Pageframe�	Container�Grid�Column�Toolbar�Optiongroup�Commandgroup�Dataenvironment�	�`C�m.oDropTarget.Parent.Captionb�C�C�m.oDropTarget.Nameb�C��
��1�2�
��3	��T�T�
���
��1�����	<�
��E��C�,Cannot add objects to non-container classes.�0�Toolbox�x��B���T�
�����
T�
���T�
���
���(+�C�m.oTopObject.Parentb�O��r�:%�C�m.oTopObject.ScaleModeb�N�
�
��8�	��Z�T�
���
���!��T�
���
��1���%�C�
���O����!%�C�
��	ScaleMode��h����T�
���
��8�����T�
��������T�
��8�����T�
���
���(+�C�m.oTopObject.Parentb�O���
�A%�C�m.oTopObject.Captionb�C�C�
��	�C�
��2�	���
�T�
���
��2���T�
���
��1���%�C�
���N���
�T�
������%�C�
���N���
�T�
������s%�C�
���O���0�Column	��
��Column	�C�oDropTarget.Parentb�O	���1�0�Grid	��y�T�
���
��1���%�C�
���O���1�"%�C�
���C�C�
������T�
���
����%�C�
���C����T�
������%�C�
���C���T�
������T�
��C�
��9�:��T�
��C�
��
��9�;��$T�
��CCC�
���f�DLL�OCX���%�C�
��
���&���.%�+%���0�Grid��
��Column	����b%�C�@Do you want to add a column to the grid to contain this control?�$�Toolbox�x�����T��<�C��<��D��T�
�$�C��<��=��<��T�
���
�$��	<�
�$�
T�
�(�a�����
T�
�����
H���*%��C���O����.���0�	Pageframe��
��Page	��������T�
�!����O%�C��>fC�
�f�2C��?fC�
�f�C��?��C�
�f�PAGE		��o�T��@���@������L%�C�IDropping this class will result in destroying the existing member classesC�
 �,and recreating new ones based on new values.C�
 C�
 �JThis will result in loss of property settings, new, added, and/or modifiedC�
 �method code, and added objects.C�
 C�
 �Do you want to continue?�$�Toolbox�x�����T��>��
���T��?��
������(������)���0�Page��
��Page	������z�]%�C��1�>fC�
�f�=C��1�?fC�
�f�%CC��1�?�ҡ�C�
�f�PAGE		����T��1�@���1�@����v�L%�C�IDropping this class will result in destroying the existing member classesC�
 �,and recreating new ones based on new values.C�
 C�
 �JThis will result in loss of property settings, new, added, and/or modifiedC�
 �method code, and added objects.C�
 C�
 �Do you want to continue?�$�Toolbox�x���r�T�
�A��
��1��
T�
���
T�
���	<�
��	<�
��T�A�>��
���T�A�?��
���T�A�@�������(������+���0�Grid��
��Column	��������V%�C��>fC�
�f�9C��?fC�
�f�$CC��?�ҡ�C�
�f�COLUMN		��/�T��<�C��<�D������L%�C�IDropping this class will result in destroying the existing member classesC�
 �,and recreating new ones based on new values.C�
 C�
 �JThis will result in loss of property settings, new, added, and/or modifiedC�
 �method code, and added objects.C�
 C�
 �Do you want to continue?�$�Toolbox�x�����T��>��
���T��?��
������(������:���0�Optiongroup�C�
���Optionbutton	�������\%�C��>fC�
�f�?C��?fC�
�f�*CC��?�ҡ�C�
�f�OPTIONBUTTON		��t�T��B���B������L%�C�IDropping this class will result in destroying the existing member classesC�
 �,and recreating new ones based on new values.C�
 C�
 �JThis will result in loss of property settings, new, added, and/or modifiedC�
 �method code, and added objects.C�
 C�
 �Do you want to continue?�$�Toolbox�x�����T��>��
���T��?��
������(�����-���0�Column��
��Header	�������0%�C��CfC�
�f�C��DfC�
�f	��i����T%��
�(�BC�GDropping this class will result in destroying the existing header classC�
 �-and recreating a new one based on new values.C�
 C�
 �JThis will result in loss of property settings, new, added, and/or modifiedC�
 �method code, and added objects.C�
 C�
 �Do you want to continue?�$�Toolbox�x�����T��C��
���T��D��
������(�����C��E�x����2�*%�%��
���M�&��C�
��
olecontrol�
���F�����%�C�
��
��������T�
��C�
�C�
����������T�
����������Y�-T�
�"�CC�ContainerClass�
��H�9�G��0T�
�#�CC�ContainerClassLib�
��H�9�G��(%�C�
�"��C�
�#��	C�
�#0
��U�T�
�"����T�
�#��������T�
�"����T�
�#������
H���m���
��Page���T�
���
���T�
� ��
��� T�
��C�
�"�	Pageframe��T�
���
�#��T�
��C�
��
��9�;����
��Optionbutton����T�
���
���T�
� ��
���"T�
��C�
�"�Optiongroup��T�
���
�#��T�
��C�
��
��9�;����
��Column��2�T�
���
���T�
� ��
���T�
��C�
�"�Grid��T�
���
�#��T�
��C�
��
��9�;����
��Header��m�T�
���
���T�
� ��
����%�C�
��������C�
��
���F�������C�
��
��
���I��������%m.oObjRef = oDropTarget.&cObjName
������%�C�
���O��&%�T�
��3��
���%��
���.!�M%�C�
��Width��h�C�
��Width��h
	�C�
��Width��h
	��� ���� �T�
��J������� ����P%�C�
��Height��h�C�
��Height��h
	�C�
��Height��h
	��*!���!�T�
��K�������&!�����"%�%�C�
��
���#����!�*T�
�!�CC�MemberCount�
��H�9�G��%�C�
�!��C���!�T�
�!�C�
�!g���%�C�
�!��N���!�T�
�!��������!�T�
�!������
H��!��#���
��0�	Pageframe���"�%�C�
� �
��S"�T�
��>��
� ��T�
��?��
����%��
�!���~"�T�
��@��
�!���!��
��0�Optiongroup��#�%�C�
� �
���"�T�
��>��
� ��T�
��?��
����%��
�!���#�T�
��B��
�!�����
��0�Grid���#�%�C�
� �
��`#�T�
��>��
� ��T�
��?��
����%��
�!����#�T�
��<��
�!�����%��
��0�Column��%�%��9�L�M���#����#�T�
��N��
��3�����#����%��
�(�
�9�L�O��%���%���
�
���(��
��P��
%�%%�C�
�
�
��Q�3�Text1��%��%��
�(�yC�`Do you want to replace the default Text1 control with the control you are adding to this column?�$�Toolbox�x����$���C�Text1�
��R���!������%���������(����S�����&�%�C�
��T���%�@��C�'Container is not valid for this object.�0�Toolbox�x����&�1T�
��CC�
��T� code � from ����g��
H��%�|&���
�����:&���@��C�'Container is not valid for this object.�0�Toolbox�x��2�|&���6��CCC�
��TC�: �
��T�\��0�Toolbox�x�����(���&�����C�
��E�0�Toolbox�x�����%�C�
���O���1���;'�J%�C�
��Left��h�C�
��Left��h
	�C�
��Left��h
	��7'�T�
��5��
������C'������'�G%�C�
��Top��h�C�
��Top��h
	�C�
��Top��h
	���'�T�
��4��
�������'�����6(�`%�C�
��Visible��h�C�
��Visible��h
	�C�
��Visible��h
	�
�
��U
	��2(�T�
��U�a�����>(���X%�C�m.oObjRef.ClassLibraryb�C�C�
��V�	�C�m.oObjRef.AutoSizeb�L	��})���q)�T�
��W�a��$%�C�m.oObjRef.Heightb�N��)����(�T�
��K��
��K�����(����#%�C�m.oObjRef.Widthb�N��S)���G)�T�
��J��
��J����O)������C�AutoSize�
��X����y)����n%�C�m.oObjRef.Classb�C�C�m.oObjRef.BaseClassb�C	��
��Y�Timer	��
��0�Timer	���*�$%�C�m.oObjRef.Heightb�N��9*���-*�T�
��K������5*����#%�C�m.oObjRef.Widthb�N���*���z*�T�
��J�������*�������
�
���(��
��Z���,�T�
��C�
�
�
��[�3�� T�
��CC�
�
�
��[�\_��%�C�
��
��~,�*%�C�
�f�.T.�C�
�f�.F.��6+�T�
���L���_+�!T�
��C�
m.oObjRef.�
�b�����r,�
H�x+�n,���
��N���+�4m.oObjRef.&cPropertyName = VAL(m.cPropertyValue)
��
��L��7,�cm.oObjRef.&cPropertyName = (UPPER(m.cPropertyValue) == ".T." OR UPPER(m.cPropertyValue) == "T")
2�n,�/m.oObjRef.&cPropertyName = m.cPropertyValue
���z,��������%��
�
��-�.%�C�
���O�	C�
��
	�C�
��	��-�!%�C�
m.oObjRef.Topb�N��-�T�
�����T�
��������&%��
�
��
��0�Column	��:.��������
�.���
�/���P%�C�
��0�	Container�Commandgroup�	Pageframe�Optiongroup�Grid���2.���
H��-�.���
�����-������
�.���
�/������
����.������
�.����
�/�����������
�.���
�/��������%�C�
��Refresh��h��p.���C�
��]���%�C�
���O���.����.�%��
�������.���C�	ScaleMode�
��X����.�T�
��8��
�������.����#%�C�
���C�	C�
��
	��./���C�
��
��9�^���%�C�9�_��C��^/�T�
�&�C�9�_f���u/�T�
�&��������0�(T�
�'�CC�	_drophook�
��H�9�G��#%�C�
�'��C�	C�
�'�
	���0����0�?%�CCC�
�'��@�prg�fxp�mpr�qpr�app��C�
�'0	��00�T�
�`�CC�
�'���
����L0�T�
�`�C�
�'���!%�C�
�`��L��
�`
	���0�T�
�&��N����(���0�Y��C�+Error encountered executing _DropHook code:C�
 C�
 �
��E�0�Toolbox�x��������0���B%��
�&�Y��
�&�N�
�9�L�a	�C�:�
	�C�:0	���1�%��
����1�T�
�)�C�DATASESSIONv��G�(������:��
���TOOLBOX��G�(��
�)����1���C�9�L�b�����
T�
�����	<�
��	<�
��	<�
��	<�
��UcODROPTARGETCSCXNAME
NMOUSEXPOS
NMOUSEYPOS
CCLASSNAME	CCLASSLIB
CBASECLASSCORIGINALOBJNAME
CPROPERTYLISTCCONTAINERCLASSNAMECCONTAINERCLASSLIBCDETABLECOBJNAMEIOOBJREF
OEXCEPTION
CPROPERTYNAMECPROPERTYVALUE	CDATATYPENCNTNPOSOPROPERTYCOLLECTIONLACTIVEXCBUILDERNOLEERRORNO
LPIXELMODE
CACTIVEWINDOW
OTOPOBJECT
NSCALEMODEOFORMOBJECTLNODRAGCMEMBERCLASSCMEMBERCLASSLIBNMEMBERCOUNTCLEAFPARENTCLASSCLEAFPARENTCLASSLIBOTEMPOBJECTCCLASSCRUNBUILDERCDROPSCRIPT
LNEWCOLUMNNDATASESSIONAFRMOBJ
APROPERTYLISTADROPTARGET	AMOUSEPOS
NSCREENROW
NSCREENCOL	BASECLASSPARENTCAPTIONNAMETOPLEFTGETKEYSTATEUSER32	SCALEMODETHISPARSEPROPERTYLISTGETUNIQUEOBJNAMECOLUMNCOUNTCOLUMNSMEMBERCLASSLIBRARYMEMBERCLASS	PAGECOUNTOPARENTBUTTONCOUNTHEADERCLASSLIBRARYHEADERCLASSMESSAGE	ADDOBJECTEVALTEXTGETPROPERTYVALUE	NEWOBJECTWIDTHHEIGHTOENGINECOLUMNSETCURRENTCONTROLCURRENTCONTROLCOLUMNREMOVETEXT1CONTROLCOUNTCONTROLSREMOVEOBJECTERRORNODETAILSVISIBLECLASSLIBRARYAUTOSIZERESETTODEFAULTCLASSCOUNTITEMVALUEREFRESHADDTODATAENV
RUNBUILDER	LRETVALUEBUILDERLOCKBUILDER�������%�������%�C�
���C��K�T�
�������%�C�
��
��m���������^�%%�C�<���>�
�����Z�5T�
��C�
��<���>�</���>��
H���V���
��.T.�����C��a������
��.F.��5���C��-����2�V���C���
���������T����T���a��B�U		CTOOLDATACVALUETHISLTOOLDATAPARSEDTOOLDATA
ODATAVALUEODATACOLLECTIONDATANAMESETDATAVALUEU�������T�
����������r�CT�
���
��<���>C��_�</���>C�
 ����T���B��
���U
ODATAVALUECENCODEDTHISODATACOLLECTIONDATANAME	DATAVALUE	B����UB�����UTHISHELPFILE
B�a��U����B�-��UNKEYCODE
NSHIFTALTCTRL
B�C����UTHISENCODETOOLDATA0���T���C�
�����B�����U	CTOOLDATATHISTOOLDATA
PARSETOOLDATA������������
������T�
��C�
Collection�N��T�
��C�SCREEN���%��
��������
�����
����(��
�����'T���
���C�SCREEN�
�������"��
���
��(����������T�
��C�
����
H�
���(�C�FORM DESIGNER -�
����a�/T�
��CC�
�C�FORM DESIGNER -��@��)�C�CLASS DESIGNER -�
������0T�
��CC�
�C�CLASS DESIGNER -��@��2���T�
������%�C�
��
������C�
��
��������B��
���U
NTOTALWINDOWSIOWINDOWCOLLECTIONCWINNAME	ATMPARRAYADD5�������
H�$�.��C�t���g�2��C�
���
��
��
��
�������C�t�����,��C�
���
��
��
�������C�t�����&��C�
���
��
�������C�t���� ��C�
���
������2�.���C�
��������U	CUNIQUEIDP1P2P3P4THISOENGINEINVOKEADDIN�������������������������
������:T�
��C�PropertyCollection�ToolboxEngine.prg�S���%�C�
��
����T�
��C���
�-C�
 �����
����(��
�����T�
��C�=C�
����%��
������!T�
��CC�
���
��=��!T�
��CC�
���
��\��%�C�
��
����T�
��C�
��	�
��%�C�
��
����������C�
��
��
�����(������C���x����������B��
���U

CPROPERTYLISTINCNTNPOS
CPROPERTYNAMECPROPERTYVALUEOPROPERTYCOLLECTION
OEXCEPTION
APROPERTYLISTTHISEVALTEXTADDPROPERTYVALUEMESSAGEB����������>T�
��CC�
��� -!@#$%^&*()+={}[]:;?/<>,\|~`'�"����&%�C�
�9
�C�
��=�_����T�
���o�
����T�
�����T�
���
�C�
�_��+�a��0�/IF TYPE("oDropTarget.&cObjName.") = "U"���!��T�
���
����T�
���
�C�
�_���B��
���UODROPTARGETCORIGINALOBJNAMEICOBJNAME/%�C����O��(���C������UTHISOENGINEADDCLASSLIB5%�C����O��.���C��������UTHISOENGINEADDTOFAVORITESUNIQUEID1���������T�
��C�HELP�v��%�C���
�	C��0	��o���c�G(�������k����T�
���HELP NOWAIT��%��������+T�
���HELP ID C��_� NOWAIT���
&cHelpCmd
%�C�
���	C�
�0
������G(�������*�G(��
����UCHELPCMD	CHELPFILE
CSAVEHELPFILETHISHELPFILEHELPIDS�����������%�C�t�
��=�T�
������ %�C���C�C�
����l�B��
����"%�C�
���C�C�
������B��
����T�
�������(�0T��C�registry�toolboxregistry.vcx�S���+%�C�
���
��������$�T�
���
������A�T�
���
�����B��
���UCOPTIONCKEYPATHCDEFAULTORECCVALUEOREG	GETREGKEYk������������������������������	���
���������
�
������
������
������T�
���
���>+�C�m.oFormb�O�	C�
��
	��
���Form
	����T�
���
�����-%�C�
���O��
���Form
��.�	<�
��B��T�
�
�CW��T�
��C�DataSessionv��G�(��
����T�
�	����T�
��C�
�@��T�
��C���y����
����(��
����!%�CCC�
���&@�
�����T�
�	�C�
�����!����T�
�
�C�
�	���%��
�
��m�F����R�Q��
����T�
�	�C����i�T�
�	�������%�C�
�	�
��8�!T�
��CC�DATABASE�
�	�@��#T�
��CC�
SOURCENAME�
�	�@��T�
��C����`��%��
�����T�
��C����<��%�C�
���O���T�
��C���
���b����
����(��
����T�
��C�
��������m.oObjRef = m.oDE.&cObjName
������Q%�C�
���O��
���Cursor	��
���
�	��
���
�	���<��	<�
��F��
�
��B����"T�
��C�
��Cursor������C�
��Cursor�
��������m.oObjRef = m.oDE.&cObjName
������%�C�
���O����T�
���CC@��T�
����
���%�C�
��
����T�
����
�����
T�
�����%��
�
��+�
Q��
�	���	<�
���	<�
��	<�
��G�(��
���F��
�
��UODROPTARGETCTABLEODENCNTOOBJREFCOBJNAMEICSOURCE	CDATABASECALIASNSELECTOFORMNDATASESSIONID
LOPENTABLEAINUSEADATAENV	ACHILDREN	BASECLASSPARENT
DATASESSIONIDCURSORSOURCEDATABASETHISGETUNIQUEOBJNAME	ADDOBJECTALIAS������������������ T��C�
��
����	��%���
�����%�C�
��������C�\-�����������%�����A�T��C��
����%�C���
���������C��������(�����C�
���0�Toolbox�x�������C���
����������9T��C��
�oRef.InvokeAddIn("���")��������UOCONTEXTMENUCTOOLTYPEID	CPARENTIDOADDINCOLLECTIONOADDIN	OMENUITEM
OEXCEPTIONTHISOENGINE	GETADDINSCOUNTADDMENUISMENU	ADDINNAMEMENUCODESUBMENUMESSAGECREATEADDINSMENUUNIQUEIDI	��C��T���C�
Collection�N��
��C����T�������UTHISODATACOLLECTIONONCREATEDATAVALUESTOOLDATAT����T����UTHISODATACOLLECTIONOENGINEonrightclick,��oncompletedragy��
ondragdrop���
ondragover���
renameitem��
deleteitems��onstartdrag���getdragdata��ondraggivefeedback���
createmenu��addcategory���	customize���evaltextG
��onolesetdata1��adddatavalue���getdatavalue���setdatavalue��
properties��imagefile_accessq��shellto���createcontextmenuU��pushdsq��popds���
dropobject���
parsetooldata�N��oncreatedatavalues�P��encodetooldata�P��getimagefile_Q��gethelpfileoQ��oncreate�Q��
onkeypress�Q��tooldata_access�Q��tooldata_assign�Q��getopenformsZR��invokeaddin�T��parsepropertylist#V��getuniqueobjname�X��addclasslibZ��addtofavorites]Z��showhelp�Z��getregistryvalue0\��addtodataenv�]��createaddinsmenu1d��Init�f��Destroyg��1rB�423�qqqqq��!�A!!��a���A�1A�1�2�BAA�3�r3�aA2�qA2��3�qr�q1A��A�2�3�qqqqqqR�D�sB!A�A�AAb!A�A1�aDA����AAS�a!A��AaAAB�3�A2�aA3tqrA�A����AA�3ss32q"qA�Ar�Ar�Aq�Aq�Aq�Ar���!�r4uqqq"qA���!r�A�B�3�qq"qA���!�B�4s��A3"���A4��qqqd�(r�A2�1!���qQA�3q5��3�37qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq����qq�����e��������A��Ab1�1�aA�1A"aAAqAAA��1AAq��aaqB�AA�r�q�AAAQQ�1QQA�qAAra1AA�BAr�A��QA�A1�SB��QAAA����AAAAsA�A!A�AABAs�Aq�A<AAs!Aq�Aq�A��B#��!��q����AA�Q����r��!!AA�A������A����"!AA�A��b���!!AA�A���r��!!AA�A���A!!AA��A��b�"����AA�����A���A�q��"�����B���AB�Q�ArA���!�AA�!�AA�"��s1Aq�A��A��!AAA1AA!AAA1AA�!AAA1AAAA�2�q�AA���Q�qAAAA�ABACAA�A��AA�AaAA�A�AAs��AA�A�qAA�A�A�A��A�q�AA1�q�AA��AA�A�!�AA1�!�AAA��#��A��AAA1��A�AAAA���AAAcA�A�1�1�AAaAAAA��Ar�A��AA�AA2�A�A��A��2����AAA��AA�B"������AAB�AA����3sqBr!A"q"QQ�aAaA��AAA�A�B3:sq�"1A��4�3�4w3�s2�3q��5sqqq���2��qA"a������A"QAAA�3u�!�a��A4wqqqqqqq��"���1!�!����AAAAAA�3�qq�aaA����AAQ�A�3�A2�aA3qqq�����AA�A�A���a�A��A3�qq�A�A!�A���A�A�3�qqqqqqqqqqqqq����AA��AA���1A��AAA3�������AA"1r11qr��a���Aq��AAA"����As1A!AAA�AA��A�B����3�qqqqA!A�q2����AA���AAA3���23��1����(�?+@�F/�K3&�P6�%	WBN	�	iD�	�n~�=��]��������v���`����!���!@��!�"Z��"o#d��#�*n�+u+��+�+�,0,�Q,%��JI����e��ڕ�f��}��o����q͗�s"���u�i�x���z���!~��I�,�k���V�נq�l���Q���s�̨���Z���y�����ӫT��w�!�qH�%�|�@�����ܼ��)Uw�PROCEDURE onrightclick
#include "toolbox.h"
LOCAL oContextMenu

m.oContextMenu = THIS.CreateMenu(.T.)

RETURN m.oContextMenu


ENDPROC
PROCEDURE oncompletedrag
* abstract method
LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos

ENDPROC
PROCEDURE ondragdrop
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord
LOCAL cShowType
LOCAL cSrcUniqueID
LOCAL cSrcParentID
LOCAL lLockDelete
LOCAL nNewEffect

m.nNewEffect = .NULL.

* -- if this is a tool, move or copy it within the toolbox
IF oDataObject.GetFormat("ShowType")
	m.cShowType = THIS.GetDragData(oDataObject, "ShowType")

	DO CASE
	CASE m.cShowType == SHOWTYPE_TOOL
		m.cSrcUniqueID = THIS.GetDragData(oDataObject, "UniqueID")
		m.cSrcParentID = THIS.GetDragData(oDataObject, "ParentID")
		m.lLockDelete  = THIS.GetDragData(oDataObject, "LockDelete") == 'y'


		IF m.lLockDelete 
			IF THIS.ParentID == m.cSrcParentID
				m.nNewEffect = DROPEFFECT_MOVE
			ELSE
				m.nNewEffect = DROPEFFECT_COPY
			ENDIF
		ELSE
			m.nNewEffect = IIF(m.nShift == 2, DROPEFFECT_COPY, DROPEFFECT_MOVE)
		ENDIF

		DO CASE
		CASE m.nNewEffect == DROPEFFECT_COPY
			THIS.oEngine.CopyTool(m.cSrcUniqueID, THIS.UniqueID)

		CASE m.nNewEffect == DROPEFFECT_MOVE
			THIS.oEngine.MoveTool(m.cSrcUniqueID, THIS.UniqueID)

		ENDCASE
	ENDCASE
ENDIF

RETURN m.nNewEffect

ENDPROC
PROCEDURE ondragover
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect, nButton, nShift, nXCoord, nYCoord, nState

RETURN .NULL.

ENDPROC
PROCEDURE renameitem
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.RenameItem(THIS.UniqueID)
ENDIF
ENDPROC
PROCEDURE deleteitem
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.DeleteItem(THIS.UniqueID, .T.)
ENDIF
ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE

ENDPROC
PROCEDURE getdragdata
* -- Utility function to return drag data
* -- by stripping off the null at the end
LPARAMETERS oDataObject, cFormat
LOCAL xData

IF oDataObject.GetFormat(m.cFormat)
	m.xData = oDataObject.GetData(m.cFormat)
	IF VARTYPE(xData) == 'C' AND AT(CHR(0), xData) > 0
		m.xData = LEFT(m.xData, AT(CHR(0), m.xData) - 1)
	ENDIF
ELSE
	m.xData = .NULL.
ENDIF


RETURN m.xData
ENDPROC
PROCEDURE ondraggivefeedback
* abstract method
LPARAMETERS nEffect, eMouseCursor

ENDPROC
PROCEDURE createmenu
* Create a context menu object
* [lDefault] = TRUE to add default items
* [oContextMenu] = optional existing menu
#include "toolbox.h"
LPARAMETERS lDefault, oContextMenu
LOCAL oFilterCollection
LOCAL oFilter
LOCAL oMenuItem
LOCAL oAddInCollection
LOCAL oAddIn
LOCAL oCategory

IF VARTYPE(oContextMenu) <> 'O'
	m.oContextMenu = NEWOBJECT("ContextMenu", "foxmenu.prg", _TOOLBOX)
*!*		IF TYPE("_oToolbox") == 'O' AND !ISNULL(_oToolbox)
*!*			m.oContextMenu.ShowInScreen = (_oToolbox.Dockable == 0)
*!*		ENDIF
ENDIF

IF lDefault
	* CreateContextMenu() adds additional menu items specific to this tool
	THIS.CreateContextMenu(oContextMenu)

	* Add any add-ins that might exist
	THIS.CreateAddInsMenu(oContextMenu, THIS.ToolTypeID)

	IF oContextMenu.MenuBarCount > 0
		oContextMenu.Addmenu("\-")
	ENDIF

	IF !THIS.LockRename
		oContextMenu.Addmenu(TOOLMENU_RENAME_LOC, [oRef.RenameItem()])
	ENDIF
	IF !THIS.LockDelete
		oContextMenu.Addmenu(TOOLMENU_DELETE_LOC, [oRef.DeleteItem()])
	ENDIF
	IF !THIS.IsVirtual
		oContextMenu.Addmenu(TOOLMENU_PROPERTIES_LOC, [oRef.Properties()])
	ENDIF

	IF (!THIS.LockRename OR !THIS.LockDelete OR !THIS.IsVirtual) AND oContextMenu.MenuBarCount > 0
		oContextMenu.Addmenu("\-")
	ENDIF

	IF !THIS.LockAdd
		oContextMenu.Addmenu(TOOLMENU_ADDCLASSLIB_LOC, [oRef.AddClassLib()])
	ENDIF
	oContextMenu.Addmenu(TOOLMENU_ADDCATEGORY_LOC, [oRef.AddCategory()])
	* oContextMenu.Addmenu(TOOLMENU_REFRESH_LOC, [oForm.RefreshToolbox()])
	oContextMenu.Addmenu(TOOLMENU_REFRESHCATEGORY_LOC, [oForm.RefreshCategory()])
	oContextMenu.Addmenu(TOOLMENU_CUSTOMIZE_LOC, [oRef.Customize()])


	* show the available filters
	oFilterCollection = THIS.oEngine.GetFilters()
	IF oFilterCollection.Count > 0
		oMenuItem = oContextMenu.AddMenu(TOOLMENU_FILTERS_LOC)
		oMenuItem.SubMenu.AddMenu(TOOLMENU_NOFILTER_LOC, [oForm.ApplyFilter("")], '', EMPTY(THIS.oEngine.FilterID))

		FOR EACH oFilter IN oFilterCollection
			oMenuItem.SubMenu.AddMenu(oFilter.FilterName, [oForm.ApplyFilter("] + oFilter.UniqueID + [")], '', THIS.oEngine.FilterID == oFilter.UniqueID)
		ENDFOR
	ENDIF

	* get global add-ins that aren't for a specific tool type
	THIS.CreateAddInsMenu(oContextMenu)


	IF THIS.ShowType == SHOWTYPE_TOOL 
		m.oCategory = THIS.oEngine.GetToolObject(THIS.ParentID)
		IF ((THIS.HelpID > 0 OR !EMPTY(THIS.HelpFile)) OR (VARTYPE(m.oCategory) == 'O' AND m.oCategory.ShowType <> SHOWTYPE_FAVORITES))
			oContextMenu.Addmenu("\-")
		ENDIF
		IF (VARTYPE(m.oCategory) == 'O' AND m.oCategory.ShowType <> SHOWTYPE_FAVORITES)		
			oContextMenu.Addmenu(TOOLMENU_ADDTOFAVORITES_LOC, [oRef.AddToFavorites()])
		ENDIF
		IF THIS.HelpID > 0 OR !EMPTY(THIS.HelpFile)
			oContextMenu.Addmenu(TOOLMENU_ITEMHELP_LOC, [oRef.ShowHelp])
		ENDIF
	ENDIF

ENDIF

RETURN oContextMenu

ENDPROC
PROCEDURE addcategory
* Add a new category
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.AddCategory()
ENDIF
ENDPROC
PROCEDURE customize
* Customize the toolbox
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.Customize(THIS.ParentID)
ENDIF

ENDPROC
PROCEDURE evaltext
* Evaluate passed string.
* If it is surrounded by parens, then
* evaluate it, otherwise return the original text.
LPARAMETERS xText
LOCAL cText

IF VARTYPE(m.xText) == 'O'
	m.cText = m.xText.Value
ELSE
	m.cText = m.xText
ENDIF

IF VARTYPE(m.cText) == 'C' AND LEFT(m.cText, 1) == '(' AND RIGHT(m.cText, 1) == ')'
	TRY
		m.cText = NVL(EVALUATE(m.cText), '')
	CATCH
	ENDTRY
ENDIF

RETURN m.cText

ENDPROC
PROCEDURE onolesetdata
* Put code here to return data for queried eFormat
* Return .T. if data was put into oDataObject with SetData() method
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos


RETURN .F.

ENDPROC
PROCEDURE adddatavalue
* -- Create a new Data value
LPARAMETERS cName, xValue, cCaption, cDescription, lIsReadOnly, cEditClass, cEditLibrary, cEditProperty
LOCAL oDataProperty

IF VARTYPE(m.cName) <> 'C' OR EMPTY(m.cName)
	RETURN .F.
ENDIF

IF PCOUNT() < 2
	m.xValue = ''
ENDIF

IF VARTYPE(m.cCaption) <> 'C'
	m.cCaption = ''
ENDIF

IF VARTYPE(m.cDescription) <> 'C'
	m.cDescription = ''
ENDIF
IF VARTYPE(m.cEditClass) <> 'C'
	m.cEditClass = ''
ENDIF
IF VARTYPE(m.cEditLibrary) <> 'C'
	m.cEditLibrary = ''
ENDIF
IF VARTYPE(m.cEditProperty) <> 'C'
	m.cEditProperty = ''
ENDIF

m.oDataProperty = CREATEOBJECT("empty")
AddProperty(m.oDataProperty, "DataName", m.cName)
AddProperty(m.oDataProperty, "DataValue", m.xValue)
AddProperty(m.oDataProperty, "DataCaption", m.cCaption)
AddProperty(m.oDataProperty, "Description", m.cDescription)
AddProperty(m.oDataProperty, "IsReadOnly", m.lIsReadOnly)
AddProperty(m.oDataProperty, "EditClass", m.cEditClass)
AddProperty(m.oDataProperty, "EditLibrary", m.cEditLibrary)
AddProperty(m.oDataProperty, "EditProperty", m.cEditProperty)
AddProperty(m.oDataProperty, "DataType", VARTYPE(m.xValue))

THIS.oDataCollection.Add(m.oDataProperty, UPPER(m.cName))

RETURN .T.


ENDPROC
PROCEDURE getdatavalue
* -- Return a data value given the data value name,
* -- or null if not found
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS cName
LOCAL oDataProperty
LOCAL oException
LOCAL xValue

IF VARTYPE(m.cName) <> 'C' OR EMPTY(m.cName)
	RETURN .F.
ENDIF

m.xValue = .NULL.
TRY
	oDataProperty = THIS.oDataCollection.Item(UPPER(m.cName))
	m.xValue = oDataProperty.DataValue
	
	IF VARTYPE(m.xValue) == 'C'
		m.xValue = THIS.EvalText(m.xValue)
	ENDIF

CATCH TO oException
	* no error message, just return the null
ENDTRY


RETURN m.xValue

ENDPROC
PROCEDURE setdatavalue
* -- Set a Data value that already exists in the collection
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS cName, xValue
LOCAL oDataProperty
LOCAL oException

IF VARTYPE(m.cName) <> 'C' OR EMPTY(m.cName)
	RETURN .F.
ENDIF


oException = .NULL.
TRY
	oDataProperty = THIS.oDataCollection.Item(UPPER(m.cName))
	oDataProperty.DataValue = m.xValue
CATCH TO oException
	* no error message, just ignore the setting and return false
ENDTRY


RETURN ISNULL(oException)


ENDPROC
PROCEDURE properties
* process through the ToolboxEngine because
* the engine knows how to save our changes
LPARAMETERS lNoAutoSave

IF VARTYPE(THIS.oEngine) == 'O'
	RETURN THIS.oEngine.ShowProperties(THIS, m.lNoAutoSave)
ENDIF

ENDPROC
PROCEDURE imagefile_access
*To do: Modify this routine for the Access method
IF EMPTY(THIS.ImageFile)
	RETURN THIS.GetImageFile()
ELSE
	RETURN THIS.ImageFile
ENDIF


ENDPROC
PROCEDURE shellto
* Abstract:
*   This shell out to specified file, which can be a URL (e.g. http://www.microsoft.com),
*	a filename, etc
*
* Parameters:
*	<cFile>
*	[cParameters]
* used by the ShellTo method
#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_FORCEMINIMIZE    11
#define SW_MAX              11
#define SE_ERR_NOASSOC 		31

LPARAMETERS cFile, cParameters
LOCAL cRun
LOCAL cSysDir
LOCAL nRetValue

*-- GetDesktopWindow gives us a window handle to
*-- pass to ShellExecute.
DECLARE INTEGER GetDesktopWindow IN user32.dll
DECLARE INTEGER GetSystemDirectory IN kernel32.dll ;
	STRING @cBuffer, ;
	INTEGER liSize

DECLARE INTEGER ShellExecute IN shell32.dll ;
	INTEGER, ;
	STRING @cOperation, ;
	STRING @cFile, ;
	STRING @cParameters, ;
	STRING @cDirectory, ;
	INTEGER nShowCmd

IF VARTYPE(m.cParameters) <> 'C'
	m.cParameters = ''
ENDIF

m.cOperation = "open"
m.nRetValue = ShellExecute(GetDesktopWindow(), @m.cOperation, @m.cFile, @m.cParameters, '', SW_SHOWNORMAL)
IF m.nRetValue = SE_ERR_NOASSOC && No association exists
	m.cSysDir = SPACE(260)  && MAX_PATH, the maximum path length

	*-- Get the system directory so that we know where Rundll32.exe resides.
	m.nRetValue = GetSystemDirectory(@m.cSysDir, LEN(m.cSysDir))
	m.cSysDir = SUBSTR(m.cSysDir, 1, m.nRetValue)
	m.cRun = "RUNDLL32.EXE"
	cParameters = "shell32.dll,OpenAs_RunDLL "
	m.nRetValue = ShellExecute(GetDesktopWindow(), "open", m.cRun, m.cParameters + m.cFile, m.cSysDir, SW_SHOWNORMAL)
ENDIF

RETURN m.nRetValue

ENDPROC
PROCEDURE createcontextmenu
LPARAMETERS oContextMenu

* Use AddMenu to add additional menu items to the right-click menu

ENDPROC
PROCEDURE pushds
* push the datasession
THIS.nDataSessionID = SET("DATASESSION")
SET DATASESSION TO 1

ENDPROC
PROCEDURE popds
SET DATASESSION TO (THIS.nDataSessionID)

ENDPROC
PROCEDURE dropobject
* Create an object of the specified class on the specified drop target
#include "foxpro.h"
#include "toolbox.h"
#define VK_SHIFT  	0x10
#define VK_CONTROL  0x11

LPARAMETERS oDropTarget, cSCXName, nMouseXPos, nMouseYPos, cClassName, cClassLib, cBaseClass, cOriginalObjName, cPropertyList, cContainerClassName, cContainerClassLib, cDETable
LOCAL cObjName
LOCAL i
LOCAL oObjRef
LOCAL oException
LOCAL cPropertyName
LOCAL cPropertyValue
LOCAL cDataType
LOCAL nCnt
LOCAL nPos
LOCAL oPropertyCollection
LOCAL lActiveX
LOCAL cBuilder
LOCAL nOleErrorNo
LOCAL lPixelMode
LOCAL cActiveWindow
LOCAL oTopObject
LOCAL nScaleMode
LOCAL oFormObject
LOCAL lNoDrag
LOCAL cMemberClass
LOCAL cMemberClassLib
LOCAL nMemberCount
LOCAL cLeafParentClass
LOCAL cLeafParentClassLib
LOCAL oTempObject
LOCAL cClass
LOCAL cRunBuilder
LOCAL cDropScript
LOCAL lNewColumn
LOCAL nDataSession
LOCAL ARRAY aFrmObj[1]
LOCAL ARRAY aPropertyList[1]
LOCAL ARRAY aDropTarget[1]
LOCAL ARRAY aMousePos[1]
LOCAL nScreenRow
LOCAL nScreenCol

m.cActiveWindow = ''

m.cMemberClass    = ''
m.cMemberClassLib = ''
m.nMemberCount    = 0

m.lNewColumn = .F.


* lNoDrag means it wasn't dragged to the form -- but rather 
* programmatically being added through the keyboard or such
m.lNoDrag = VARTYPE(m.oDropTarget) <> 'O' AND VARTYPE(m.cSCXName) == 'C' AND !EMPTY(m.cSCXName)
IF m.lNoDrag
	DO CASE
	CASE ATCC(".VCX", m.cSCXName) > 0
		cActiveWindow = WIN_VCX_DESIGN_LOC + " " + m.cSCXName
	CASE ATCC(".SCX", m.cSCXName) > 0
		m.cActiveWindow = WIN_SCX_DESIGN_LOC + " " + m.cSCXName
	OTHERWISE
		m.cActiveWindow = WIN_SCX_DESIGN_LOC + " " + m.cSCXName
	ENDCASE

	IF !EMPTY(m.cActiveWindow) AND WEXIST(m.cActiveWindow)
		ACTIVATE WINDOW (m.cActiveWindow)
	ENDIF

	IF ASELOBJ(aFrmObj) > 0
		IF !INLIST(m.aFrmObj[1].BaseClass, "Form", "Formset", "Page", "Pageframe", "Container", "Grid", "Column", "Toolbar", "Optiongroup", "Commandgroup", "Dataenvironment") AND TYPE("m.aFrmObj[1].Parent") == 'O'
			IF m.aFrmObj[1].Parent.BaseClass == "Form" AND TYPE("m.aFrmObj[1].Parent.Caption") == 'C' AND TYPE("m.aFrmObj[1].Name") == 'C' AND m.aFrmObj[1].Parent.Caption == m.aFrmObj[1].Name
				m.oDropTarget = aFrmObj[1]
			ELSE
				m.oDropTarget = aFrmObj[1].Parent
			ENDIF
		ELSE
			m.oDropTarget = aFrmObj[1]
		ENDIF

		IF !PEMSTATUS(m.oDropTarget, "AddObject", 5)
			IF TYPE("m.oDropTarget.Top") == 'N' AND VARTYPE(m.nMouseYPos) <> 'N'
				m.nMouseYPos = m.oDropTarget.Top
			ENDIF
			IF TYPE("m.oDropTarget.Left") == 'N' AND VARTYPE(m.nMouseXPos) <> 'N'
				m.nMouseXPos = m.oDropTarget.Left
			ENDIF
		ENDIF
	ELSE
		IF ASELOBJ(aFrmObj, 1) > 0
			m.oDropTarget = aFrmObj[1]
		ENDIF
	ENDIF
	RELEASE aFrmObj
	aFrmObj = .NULL.
ELSE
	m.nScreenRow = MROW(_SCREEN.Caption, 3)
	m.nScreenCol = MCOL(_SCREEN.Caption, 3)
	IF VARTYPE(m.oDropTarget) <> 'O'
		* don't create objects on the Toolbox form
		IF AMOUSEOBJ(aDropTarget, 1) > 0 AND LOWER(aDropTarget[2].Name) = "toolbox"
			RELEASE m.aDropTarget
			RETURN
		ENDIF
	
		* If control key is pressed, then drop on outermost container
		DECLARE INTEGER GetKeyState IN user32 INTEGER vKey 

		IF BITTEST(GetKeyState(VK_CONTROL), 15)
			IF AMOUSEOBJ(aDropTarget, 1) > 0
				* first traverse up from our current position until we get the target form or the target form's caption is equal to our caption
				oTempObject = aDropTarget[1]
				DO WHILE TYPE("oTempObject.Parent") == 'O'
					IF oTempObject.Parent.BaseClass == "Form"
						EXIT
					ENDIF
					oTempObject = oTempObject.Parent
				ENDDO
				IF TYPE("oTempObject.Parent.Caption") == 'C' AND TYPE("oTempObject.Name") == 'C' AND oTempObject.Parent.Caption == oTempObject.Name
					m.oDropTarget = m.oTempObject
					m.nMouseYPos = m.aDropTarget[4]
					m.nMouseXPos = m.aDropTarget[3]
				ELSE
					m.oDropTarget = aDropTarget[2]
					m.nMouseYPos = m.aDropTarget[4]
					m.nMouseXPos = m.aDropTarget[3]
				ENDIF
				oTempObject = .NULL.
				RELEASE oTempObject
			ENDIF
		ENDIF

		IF VARTYPE(m.oDropTarget) <> 'O'
			IF AMOUSEOBJ(aDropTarget) > 0
				m.oDropTarget = aDropTarget[1]
			ENDIF
		ENDIF
		* CLEAR DLLS "GetKeyState"

		RELEASE m.aDropTarget

	ENDIF
ENDIF

IF VARTYPE(m.cBaseClass) <> 'C'
	m.cBaseClass = ''
ENDIF

IF VARTYPE(m.oDropTarget) == 'O' AND INLIST(PROPER(m.cBaseClass), "Session", "Exception")
	m.oDropTarget = .NULL.
	MESSAGEBOX(ERROR_NONVISUALDROP_LOC, MB_ICONEXCLAMATION, TOOLBOX_LOC)
ENDIF


IF VARTYPE(m.cClassName) == 'C' AND !EMPTY(m.cClassName) AND VARTYPE(m.oDropTarget) == 'O' AND PEMSTATUS(m.oDropTarget, "BaseClass", 5)
	IF EMPTY(m.cBaseClass)
		m.cBaseClass = m.cClassName
	ENDIF
	m.cBaseClass = PROPER(m.cBaseClass)

	* if the current drop target isn't a container, then try its parent
	IF !INLIST(m.oDropTarget.BaseClass, "Form", "Formset", "Page", "Pageframe", "Container", "Grid", "Column", "Toolbar", "Optiongroup", "Commandgroup", "Dataenvironment") 
		IF TYPE("m.oDropTarget.Parent") == 'O' AND ;
		 INLIST(m.oDropTarget.Parent.BaseClass, "Form", "Formset", "Page", "Pageframe", "Container", "Grid", "Column", "Toolbar", "Optiongroup", "Commandgroup", "Dataenvironment") AND ;
		 (TYPE("m.oDropTarget.Parent.Caption") <> 'C' OR TYPE("m.oDropTarget.Name") <> 'C' OR m.oDropTarget.Parent.Caption <> m.oDropTarget.Name)

			m.oDropTarget = m.oDropTarget.Parent
		ELSE
			RELEASE m.oDropTarget
			MESSAGEBOX(ERROR_NONCONTAINER_LOC, MB_ICONEXCLAMATION, TOOLBOX_LOC)
			RETURN
		ENDIF
	ENDIF
	
	* set the scale mode to pixels
	m.nScaleMode  = 3
	m.oFormObject = .NULL.
	m.oTopObject  = m.oDropTarget
	DO WHILE TYPE("m.oTopObject.Parent") == 'O'
		IF TYPE("m.oTopObject.ScaleMode") == 'N' AND m.oTopObject.ScaleMode <> 3
			m.oFormObject = m.oTopObject
			EXIT
		ENDIF
		m.oTopObject = m.oTopObject.Parent
	ENDDO


	IF VARTYPE(m.oFormObject) == 'O'
		IF PEMSTATUS(m.oFormObject, "ScaleMode", 0)
			m.nScaleMode = m.oFormObject.ScaleMode
		ELSE
			m.nScaleMode = -1 && means we need to do a ResetToDefault when done
		ENDIF
		m.oFormObject.ScaleMode = 3  && set to pixels
	ENDIF

	* get design form window name
	m.oTopObject = m.oDropTarget
	DO WHILE TYPE("m.oTopObject.Parent") == 'O' && AND TYPE("m.oTopObject.Parent.Top") == 'N'
		IF TYPE("m.oTopObject.Caption") == 'C' AND EMPTY(m.cActiveWindow) AND WEXIST(m.oTopObject.Caption)
			m.cActiveWindow = m.oTopObject.Caption
		ENDIF

		m.oTopObject = m.oTopObject.Parent
	ENDDO


	IF VARTYPE(m.nMouseXPos) <> 'N'
		m.nMouseXPos = 0
	ENDIF
	IF VARTYPE(m.nMouseYPos) <> 'N'
		m.nMouseYPos = 0
	ENDIF

	* used keyboard to add control, so offset as necessary
*!*		m.oExistingRef = SYS(1270, m.nMouseXPos + m.nLeftOffset, m.nMouseYPos + m.nTopOffset)
*!*		DO WHILE VARTYPE(m.oExistingRef) == 'O' AND !(m.oExistingRef.Name == m.oTopObject.Name)
*!*			m.nMouseXPos = m.nMouseXPos + 10
*!*			m.nMouseYPos = m.nMouseYPos + 10

*!*			m.oExistingRef = SYS(1270, m.nMouseXPos + m.nLeftOffset, m.nMouseYPos + m.nTopOffset)
*!*		ENDDO

	* if dropping a column onto a column, then change the drop target to the grid instead
	IF VARTYPE(m.oDropTarget) == 'O' AND oDropTarget.BaseClass == "Column" AND m.cBaseClass == "Column" AND TYPE("oDropTarget.Parent") == 'O' AND oDropTarget.Parent.BaseClass == "Grid"
		m.oDropTarget = m.oDropTarget.Parent
	ENDIF


	IF VARTYPE(m.oDropTarget) == 'O'
		IF VARTYPE(m.cOriginalObjName) <> 'C' OR EMPTY(m.cOriginalObjName)
			m.cOriginalObjName = m.cClassName
		ENDIF
		IF VARTYPE(m.cClassLib) <> 'C'
			m.cClassLib = ''
		ENDIF
		IF VARTYPE(m.cPropertyList) <> 'C'
			m.cPropertyList = ''
		ENDIF


		* Parse the property list into a collection
		m.oPropertyCollection = THIS.ParsePropertyList(m.cPropertyList)

		m.cObjName = THIS.GetUniqueObjName(m.oDropTarget, m.cOriginalObjName)
		
		m.lActiveX = INLIST(UPPER(JUSTEXT(m.cClassLib)), "DLL", "OCX")

		* make sure we can locate the file
		IF !EMPTY(m.cClassName)
			TRY
				* if dropping a control on a grid (and it's not a column), ask to add a column
				IF oDropTarget.BaseClass == "Grid" AND m.cBaseClass <> "Column"
					IF MESSAGEBOX(DROPOBJECT_CREATECOLUMN_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
						oDropTarget.ColumnCount = MAX(oDropTarget.ColumnCount + 1, 1)
						m.oTempObject = oDropTarget.Columns(oDropTarget.ColumnCount)
						RELEASE oDropTarget
						m.oDropTarget = m.oTempObject
						RELEASE m.oTempObject
						m.lNewColumn = .T.
					ELSE
						m.oDropTarget = .NULL.
					ENDIF
				ENDIF

				* determine if the drop target is a valid container
				* for the object we're trying to drop.  We have
				* special handling for dropping:
				*	- Pages onto pageframes
				*	- Columns onto grids
				*	- Headers onto grid columns
				*   - Option buttons onto option groups
				DO CASE
				CASE VARTYPE(oDropTarget) <> 'O'
					* don't do anything if we don't have a drop target at this point

				CASE oDropTarget.BaseClass == "Pageframe" AND m.cBaseClass == "Page"
					TRY
						m.nMemberCount = 1
						IF UPPER(oDropTarget.MemberClassLibrary) == UPPER(m.cClassLib) AND ;
						 (UPPER(oDropTarget.MemberClass) == UPPER(m.cClassName) OR (EMPTY(oDropTarget.MemberClass) AND UPPER(m.cClassName) == "PAGE"))
							* if the MemberClass is already set, then simply increase the page count
							oDropTarget.PageCount = oDropTarget.PageCount + 1
						ELSE
							IF MESSAGEBOX(MEMBERCLASS_WARNING_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
								oDropTarget.MemberClassLibrary = m.cClassLib
								oDropTarget.MemberClass        = m.cClassName
							ENDIF
						ENDIF
					CATCH TO oException
					ENDTRY

				CASE oDropTarget.BaseClass == "Page" AND m.cBaseClass == "Page"
					TRY
						IF UPPER(oDropTarget.Parent.MemberClassLibrary) == UPPER(m.cClassLib) AND ;
						 (UPPER(oDropTarget.Parent.MemberClass) == UPPER(m.cClassName) OR  (EMPTY(NVL(oDropTarget.Parent.MemberClass, '')) AND UPPER(m.cClassName) == "PAGE"))
							* if the MemberClass is already set, then simply increase the page count
							oDropTarget.Parent.PageCount = oDropTarget.Parent.PageCount + 1
						ELSE
							IF MESSAGEBOX(MEMBERCLASS_WARNING_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
								m.oParent = m.oDropTarget.Parent
								m.oDropTarget = .NULL.
								m.oTopObject  = .NULL.
								
								* release now because we can't change the parent
								* MemberClass properties if we have references to
								* the child page
								RELEASE m.oDropTarget
								RELEASE m.oTopObject

								oParent.MemberClassLibrary = m.cClassLib
								oParent.MemberClass        = m.cClassName
								oParent.PageCount          = 1
							ENDIF
						ENDIF
					CATCH TO oException
					ENDTRY

				CASE oDropTarget.BaseClass == "Grid" AND m.cBaseClass == "Column"
					TRY
						IF UPPER(oDropTarget.MemberClassLibrary) == UPPER(m.cClassLib) AND ; 
						 (UPPER(oDropTarget.MemberClass) == UPPER(m.cClassName) OR (EMPTY(NVL(oDropTarget.MemberClass, '')) AND UPPER(m.cClassName) == "COLUMN"))
							* if the MemberClass is already set, then simply increase the page count
							oDropTarget.ColumnCount = MAX(oDropTarget.ColumnCount, 0) + 1
						ELSE
							IF MESSAGEBOX(MEMBERCLASS_WARNING_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
								oDropTarget.MemberClassLibrary = m.cClassLib
								oDropTarget.MemberClass        = m.cClassName
							ENDIF
						ENDIF
					CATCH TO oException
					ENDTRY

				CASE oDropTarget.BaseClass == "Optiongroup" AND PROPER(m.cBaseClass) == "Optionbutton"
					TRY
						IF UPPER(oDropTarget.MemberClassLibrary) == UPPER(m.cClassLib) AND ;
						 (UPPER(oDropTarget.MemberClass) == UPPER(m.cClassName) OR (EMPTY(NVL(oDropTarget.MemberClass, '')) AND UPPER(m.cClassName) == "OPTIONBUTTON"))
							* if the MemberClass is already set, then simply increase the page count
							oDropTarget.ButtonCount = oDropTarget.ButtonCount + 1
						ELSE
							IF MESSAGEBOX(MEMBERCLASS_WARNING_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
								oDropTarget.MemberClassLibrary = m.cClassLib
								oDropTarget.MemberClass        = m.cClassName
							ENDIF
						ENDIF
					CATCH TO oException
					ENDTRY

				CASE oDropTarget.BaseClass == "Column" AND m.cBaseClass == "Header"
					TRY
						IF (UPPER(oDropTarget.HeaderClassLibrary) == UPPER(m.cClassLib) AND ;
						 (UPPER(oDropTarget.HeaderClass) == UPPER(m.cClassName)))
							* if the HeaderClass is already set, then don't do anything
						ELSE
							IF m.lNewColumn OR MESSAGEBOX(HEADERCLASS_WARNING_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
								oDropTarget.HeaderClassLibrary = m.cClassLib
								oDropTarget.HeaderClass        = m.cClassName
							ENDIF
						ENDIF
					CATCH TO oException
						MESSAGEBOX(oException.Message)
					ENDTRY

				OTHERWISE

					IF m.lActiveX
						* drop ActiveX control
						oDropTarget.AddObject(m.cObjName, "olecontrol", m.cClassName)
					ELSE
						* standard VFP class from a VCX or PRG
						IF !EMPTY(m.cClassLib)
							TRY
								m.cClassLib = LOCFILE(m.cClassLib, JUSTEXT(m.cClassLib))
							CATCH
								m.cClassLib = ''
							ENDTRY
						ENDIF

						* If "ContainerClass" and "ContainerClassLib" are defined as
						* properties for the class, then we want to use these when
						* we drop a leaf class -- create the specified container first,
						* then set the MemberClass/MemberClassLib properties for that container
						TRY
							m.cLeafParentClass    = THIS.EvalText(m.oPropertyCollection.GetPropertyValue("ContainerClass"))
							m.cLeafParentClassLib = THIS.EvalText(m.oPropertyCollection.GetPropertyValue("ContainerClassLib"))

							IF EMPTY(m.cLeafParentClass) OR EMPTY(m.cLeafParentClassLib) OR !FILE(m.cLeafParentClassLib)
								m.cLeafParentClass    = ''
								m.cLeafParentClassLib = ''
							ENDIF
							
						CATCH
							m.cLeafParentClass    = ''
							m.cLeafParentClassLib = ''
						ENDTRY

						DO CASE
						CASE m.cBaseClass == "Page"
							m.cMemberClass    = m.cClassName
							m.cMemberClassLib = m.cClassLib

							m.cClassName = EVL(m.cLeafParentClass, "Pageframe")
							m.cClassLib  = m.cLeafParentClassLib

							m.cObjName = THIS.GetUniqueObjName(m.oDropTarget, m.cClassName)

						CASE m.cBaseClass == "Optionbutton"
							m.cMemberClass    = m.cClassName
							m.cMemberClassLib = m.cClassLib

							m.cClassName = EVL(m.cLeafParentClass, "Optiongroup")
							m.cClassLib  = m.cLeafParentClassLib

							m.cObjName = THIS.GetUniqueObjName(m.oDropTarget, m.cClassName)

						CASE m.cBaseClass == "Column"
							m.cMemberClass    = m.cClassName
							m.cMemberClassLib = m.cClassLib

							m.cClassName = EVL(m.cLeafParentClass, "Grid")
							m.cClassLib  = m.cLeafParentClassLib

							m.cObjName = THIS.GetUniqueObjName(m.oDropTarget, m.cClassName)

						CASE m.cBaseClass == "Header"
							m.cMemberClass    = m.cClassName
							m.cMemberClassLib = m.cClassLib

						ENDCASE


						IF EMPTY(m.cClassLib)
							oDropTarget.AddObject(m.cObjName, m.cClassName)
						ELSE
							oDropTarget.NewObject(m.cObjName, m.cClassName, m.cClassLib)
						ENDIF

					ENDIF
					
					TRY
						m.oObjRef = oDropTarget.&cObjName
					CATCH
					ENDTRY

					IF VARTYPE(m.oObjRef) == 'O' 
						m.oObjRef.Name = m.cObjName
						* ActiveX controls don't necessarily have a default width/height
						IF m.lActiveX
							IF PEMSTATUS(m.oObjRef, "Width", 5) AND !PEMSTATUS(m.oObjRef, "Width", 1) AND !PEMSTATUS(m.oObjRef, "Width", 2)
								TRY
									m.oObjRef.Width = 200
								CATCH
								ENDTRY
							ENDIF
							IF PEMSTATUS(m.oObjRef, "Height", 5) AND !PEMSTATUS(m.oObjRef, "Height", 1) AND !PEMSTATUS(m.oObjRef, "Height", 2)
								TRY
									m.oObjRef.Height = 150
								CATCH
								ENDTRY
							ENDIF
							
						ELSE
							* handle creating a container for a dropped leaf class
							IF !EMPTY(m.cMemberClass)
								* if we're adding a container for a leaf,
								* then determine how many leaf classes to add
								TRY
									m.nMemberCount = THIS.EvalText(m.oPropertyCollection.GetPropertyValue("MemberCount"))


									IF VARTYPE(m.nMemberCount) == 'C'
										m.nMemberCount = VAL(m.nMemberCount)
									ENDIF
									IF VARTYPE(m.nMemberCount) <> 'N'
										m.nMemberCount = 1
									ENDIF
								CATCH
									m.nMemberCount = 1
								ENDTRY
								
								DO CASE
								CASE m.oObjRef.BaseClass == "Pageframe"
									IF !EMPTY(m.cMemberClassLib)
										m.oObjRef.MemberClassLibrary = m.cMemberClassLib
										m.oObjRef.MemberClass        = m.cMemberClass
									ENDIF
									IF m.nMemberCount <> 0
										m.oObjRef.PageCount = m.nMemberCount
									ENDIF

								CASE m.oObjRef.BaseClass == "Optiongroup"
									IF !EMPTY(m.cMemberClassLib)
										m.oObjRef.MemberClassLibrary = m.cMemberClassLib
										m.oObjRef.MemberClass        = m.cMemberClass
									ENDIF
									IF m.nMemberCount <> 0
										m.oObjRef.ButtonCount = m.nMemberCount
									ENDIF

								CASE m.oObjRef.BaseClass == "Grid"
									IF !EMPTY(m.cMemberClassLib)
										m.oObjRef.MemberClassLibrary = m.cMemberClassLib
										m.oObjRef.MemberClass        = m.cMemberClass
									ENDIF
									IF m.nMemberCount <> 0
										m.oObjRef.ColumnCount = m.nMemberCount
									ENDIF
								ENDCASE
							ENDIF
							
							* special handling if we're dropping control on a grid column
							IF m.oDropTarget.BaseClass == "Column"
								* -- set the current control if option set to do so
								IF THIS.oEngine.ColumnSetCurrentControl
									TRY
										m.oDropTarget.CurrentControl = m.oObjRef.Name
									CATCH
									ENDTRY
								ENDIF

								* prompt to remove the Text1 control if it exists
								IF m.lNewColumn OR THIS.oEngine.ColumnRemoveText1
									TRY
										* see if Text1 exists in grid
										FOR m.i = 1 TO m.oDropTarget.ControlCount
											IF m.oDropTarget.Controls(m.i).Name == "Text1"
												IF m.lNewColumn OR MESSAGEBOX(DROPOBJECT_REMOVETEXT1_LOC, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2, TOOLBOX_LOC) == IDYES
													m.oDropTarget.RemoveObject("Text1")
												ENDIF
												EXIT
											ENDIF
										ENDFOR
									CATCH
									ENDTRY

								ENDIF
							ENDIF

					
						ENDIF
					ENDIF
				ENDCASE


			* error handling in case the object didn't drop
			CATCH TO oException WHEN oException.ErrorNo == 1429
				IF ISNULL(m.oException.Details)
					MESSAGEBOX(ERROR_INVALIDCONTAINER_LOC, MB_ICONEXCLAMATION, TOOLBOX_LOC)
				ELSE
					* parse the OLE error string
					m.nOLEErrorNo = VAL(STREXTRACT(m.oException.Details, " code ", " from ", 1, 1))
					DO CASE
					CASE m.nOLEErrorNo == 744  && invalid container
						DOEVENTS
						MESSAGEBOX(ERROR_INVALIDCONTAINER_LOC, MB_ICONEXCLAMATION, TOOLBOX_LOC)
					OTHERWISE
						DOEVENTS
						MESSAGEBOX(ALLTRIM(SUBSTR(m.oException.Details, AT_C(": ", m.oException.Details) + 1)), MB_ICONEXCLAMATION, TOOLBOX_LOC)
					ENDCASE
				ENDIF

			CATCH TO oException
				DOEVENTS
				MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
			ENDTRY
		ENDIF


		IF VARTYPE(m.oObjRef) == 'O'
			TRY
				IF PEMSTATUS(m.oObjRef, "Left", 5) AND !PEMSTATUS(m.oObjRef, "Left", 1) AND !PEMSTATUS(m.oObjRef, "Left", 2)
					m.oObjRef.Left = m.nMouseXpos
				ENDIF
			CATCH
			ENDTRY
			TRY
				IF PEMSTATUS(m.oObjRef, "Top", 5) AND !PEMSTATUS(m.oObjRef, "Top", 1) AND !PEMSTATUS(m.oObjRef, "Top", 2)
					m.oObjRef.Top  = m.nMouseYPos
				ENDIF
			CATCH
			ENDTRY
			TRY
				IF PEMSTATUS(m.oObjRef, "Visible", 5) AND !PEMSTATUS(m.oObjRef, "Visible", 1) AND !PEMSTATUS(m.oObjRef, "Visible", 2) AND !m.oObjRef.Visible
					m.oObjRef.Visible = .T.
				ENDIF
			CATCH
			ENDTRY

			* if this is a baseclass, set the AutoSize and then reset it back
			IF TYPE("m.oObjRef.ClassLibrary") == 'C' AND EMPTY(m.oObjRef.ClassLibrary) AND TYPE("m.oObjRef.AutoSize") == 'L'
				TRY
					m.oObjRef.AutoSize = .T.
					IF TYPE("m.oObjRef.Height") == 'N'
						TRY
							m.oObjRef.Height = m.oObjRef.Height
						CATCH
						ENDTRY
					ENDIF
					IF TYPE("m.oObjRef.Width") == 'N'
						TRY
							m.oObjRef.Width = m.oObjRef.Width
						CATCH
						ENDTRY
					ENDIF
					m.oObjRef.ResetToDefault("AutoSize")
				CATCH
				ENDTRY
			ENDIF
			
			* if this is a timer baseclass, adjust the size manually
			IF TYPE("m.oObjRef.Class") == 'C' AND TYPE("m.oObjRef.BaseClass") == 'C' AND m.oObjRef.Class == "Timer" AND m.oObjRef.BaseClass == "Timer"
				IF TYPE("m.oObjRef.Height") == 'N'
					TRY
						m.oObjRef.Height = 23
					CATCH
					ENDTRY
				ENDIF
				IF TYPE("m.oObjRef.Width") == 'N'
					TRY
						m.oObjRef.Width = 23
					CATCH
					ENDTRY
				ENDIF
			ENDIF			

			* -- set any properties specified by "properties"
			FOR m.i = 1 TO m.oPropertyCollection.Count
				m.cPropertyName = m.oPropertyCollection.Item(m.i).Name
				m.cPropertyValue = TRANSFORM(m.oPropertyCollection.Item(m.i).Value)


				IF !EMPTY(m.cPropertyName)
					IF UPPER(m.cPropertyValue) == ".T." OR UPPER(m.cPropertyValue) == ".F."
						m.cDataType = 'L'
					ELSE
						m.cDataType = TYPE("m.oObjRef." + m.cPropertyName)
					ENDIF
					TRY
						DO CASE
						CASE m.cDataType == 'N'
							m.oObjRef.&cPropertyName = VAL(m.cPropertyValue)
						CASE m.cDataType == 'L'
							m.oObjRef.&cPropertyName = (UPPER(m.cPropertyValue) == ".T." OR UPPER(m.cPropertyValue) == "T")
						OTHERWISE
							m.oObjRef.&cPropertyName = m.cPropertyValue
						ENDCASE
					CATCH
					ENDTRY
				ENDIF
			ENDFOR
			DOEVENTS

			IF !m.lNoDrag 
				IF VARTYPE(m.oTopObject) == 'O' AND !EMPTY(m.cActiveWindow) AND WEXIST(m.cActiveWindow)
					IF TYPE("m.oObjRef.Top") <> 'N' 
						* no Top property on this control, so assume it's in the upper left corner
						m.nMouseYPos = 0
						m.nMouseXPos = 0
					ENDIF
				ENDIF
			ENDIF


			IF !m.lNoDrag AND m.oDropTarget.BaseClass <> "Column"
				DOEVENTS
				MOUSE CLICK AT m.nScreenRow, m.nScreenCol PIXELS SHIFT CONTROL

				* if we're dropping a container object, we need to SHIFT-CTRL click outside 
				* of it to deselect it so we're not drilled into (halo effect) by default, and
				* then do a regular click directly on it to select it again
 				IF INLIST(m.oObjRef.BaseClass, "Container", "Commandgroup", "Pageframe", "Optiongroup", "Grid")
 					DOEVENTS
 					
 					* click in an area outside the container
 					* the CASE statement determines whether we have
 					* room to the left or the top to click
 					DO CASE
 					CASE m.nMouseXPos > 2
		 				MOUSE CLICK AT m.nScreenRow, m.nScreenCol-3 PIXELS SHIFT CONTROL
 					CASE m.nMouseYPos > 2
		 				MOUSE CLICK AT m.nScreenRow - 3, m.nScreenCol PIXELS SHIFT CONTROL
		 			ENDCASE
	 				DOEVENTS
					MOUSE CLICK AT m.nScreenRow, m.nScreenCol PIXELS
				ENDIF
				DOEVENTS
			ENDIF
			DOEVENTS

			IF PEMSTATUS(m.oDropTarget, "Refresh", 5)
				m.oDropTarget.Refresh()
			ENDIF

			IF VARTYPE(m.oFormObject) == 'O'
				TRY
					IF m.nScaleMode == -1
						m.oFormObject.ResetToDefault("ScaleMode")
					ELSE
						m.oFormObject.ScaleMode = m.nScaleMode
					ENDIF
				CATCH
				ENDTRY
			ENDIF

			IF VARTYPE(m.cDETable) == 'C' AND !EMPTY(m.cDETable)
				THIS.AddToDataEnv(m.oDropTarget, m.cDETable)
			ENDIF



			* 'Y' = always run builder, 'N' = never run builder, anything else makes it default to the BuilderLock setting
			IF VARTYPE(THIS.RunBuilder) == 'C'
				m.cRunBuilder = UPPER(THIS.RunBuilder)
			ELSE
				m.cRunBuilder = ''
			ENDIF

			* If there is a custom property called "_drophook", then
			* execute that script code after dropping but before running the
			* builder.  If it returns FALSE, then don't run the
			* builder regardless of the cRunBuilder setting
			TRY
				m.cDropScript = THIS.EvalText(m.oPropertyCollection.GetPropertyValue("_drophook"))
			
				IF VARTYPE(m.cDropScript) == 'C' AND !EMPTY(m.cDropScript)
					TRY
						IF INLIST(LOWER(JUSTEXT(m.cDropScript)), "prg", "fxp", "mpr", "qpr", "app") AND FILE(m.cDropScript)
							m.lRetValue = EXECSCRIPT(FILETOSTR(m.cDropScript), m.oObjRef)
						ELSE
							m.lRetValue = EXECSCRIPT(m.cDropScript)
						ENDIF
						IF VARTYPE(m.lRetValue) == 'L' AND !m.lRetValue
							m.cRunBuilder = 'N'
						ENDIF
					CATCH TO oException
						MESSAGEBOX(ERROR_DROPHOOK_LOC + CHR(10) + CHR(10)+ m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
					ENDTRY
				ENDIF
			CATCH
				* ignore error -- we exepect an error if no _drophook property is defined
			ENDTRY			

			IF (m.cRunBuilder == 'Y' OR (m.cRunBuilder <> 'N' AND THIS.oEngine.BuilderLock)) AND !EMPTY(_builder) AND FILE(_builder)
				IF m.lNoDrag
					m.nDataSession = SET("DATASESSION")
					SET DATASESSION TO 1
					DO (_Builder) WITH m.oObjRef, "TOOLBOX"
					SET DATASESSION TO (m.nDataSession)
				ELSE
					* delay running of builder when drag/dropped so we can
					* get out of the OLECompleteDrag() event before it executes
					THIS.oEngine.Builder()
				ENDIF
			ENDIF

		ENDIF

		m.oObjRef =.NULL.
	ENDIF
ENDIF

RELEASE m.oDropTarget
RELEASE m.oTopObject
RELEASE m.oFormObject
RELEASE m.oObjRef

ENDPROC
PROCEDURE parsetooldata
* Parse whatever is in the ToolData property,
* loading up the DataValue collection appropriately
LPARAMETERS cToolData
LOCAL cValue

IF THIS.lToolDataParsed
	* RETURN
ENDIF

IF VARTYPE(m.cToolData) <> 'C'
	m.cToolData = THIS.ToolData
ENDIF

IF !EMPTY(m.cToolData)
	LOCAL oDataValue

	FOR EACH oDataValue IN THIS.oDataCollection
		IF ATC('<' + oDataValue.DataName + '>', m.cToolData) > 0
			m.cValue = STREXTRACT(m.cToolData, '<' + oDataValue.DataName + '>', '</' + oDataValue.DataName + '>')
			DO CASE
			CASE m.cValue == ".T."
				THIS.SetDataValue(oDataValue.DataName, .T.)
			CASE m.cValue == ".F."
				THIS.SetDataValue(oDataValue.DataName, .F.)
			OTHERWISE
				THIS.SetDataValue(oDataValue.DataName, m.cValue)
			ENDCASE
		ENDIF
	ENDFOR
	oDataValue = .NULL.
ENDIF

THIS.lToolDataParsed = .T.

RETURN

ENDPROC
PROCEDURE oncreatedatavalues
* Call AddDateValue() for each of the attributes you want
* to track for this category/tool.  The format for AddDataValue 
* is as follows:
*
* 	THIS.AddDataValue(<cName>, <xDefaultValue>, <cCaption>, <cTooltip>, <lReadOnly>, <cClassName>, <cClassLibrary>, <cValueProperty>)
*


ENDPROC
PROCEDURE encodetooldata
* Encode the Data Values
#include "toolbox.h"
LOCAL oDataValue
LOCAL cEncoded

m.cEncoded = ''
* gather the data properties for this class
FOR EACH oDataValue IN THIS.oDataCollection
	m.cEncoded = m.cEncoded + '<' + oDataValue.DataName + '>' + TRANSFORM(oDataValue.DataValue) + "</" + oDataValue.DataName + ">" + CHR(10)
ENDFOR
oDataValue = .NULL.

RETURN m.cEncoded


ENDPROC
PROCEDURE getimagefile
RETURN ''

ENDPROC
PROCEDURE gethelpfile
* -- Show help for this item
RETURN THIS.HelpFile


ENDPROC
PROCEDURE oncreate
* Put code in here to do when an item is
* added in the Customize dialog.
* For example, for File types, we might
* ask what type of file to add.
* Return FALSE if item should not be created.

RETURN .T.

ENDPROC
PROCEDURE onkeypress
LPARAMETERS nKeyCode, nShiftAltCtrl

* return TRUE issues a NODEFAULT
RETURN .F.
ENDPROC
PROCEDURE tooldata_access
*To do: Modify this routine for the Access method
RETURN THIS.EncodeToolData()

ENDPROC
PROCEDURE tooldata_assign
LPARAMETERS cToolData

* THIS.ToolData = m.cToolData
THIS.ToolData = THIS.ParseToolData(m.cToolData)

RETURN THIS.ToolData



ENDPROC
PROCEDURE getopenforms
* Return a collection of open VCX/SCX designer windows
#include "toolbox.h"
LOCAL nTotalWindows
LOCAL i
LOCAL oWindowCollection
LOCAL cWinName
LOCAL ARRAY aTmpArray[1]

m.oWindowCollection = CREATEOBJECT("Collection")
m.nTotalWindows = WCHILD("SCREEN")

IF m.nTotalWindows > 0
	DIMENSION aTmpArray[m.nTotalWindows]

	FOR m.i = 1 TO m.nTotalWindows
		aTmpArray[m.i] = WCHILD("SCREEN", m.i - 1)
	ENDFOR

	FOR m.i = m.nTotalWindows TO 1 STEP -1
		m.cWinName = aTmpArray[m.i]

		DO CASE
		CASE ATCC(WIN_SCX_DESIGN_LOC, m.cWinName) <> 0
			m.cWinName = LOWER(SUBSTRC(m.cWinName, LENC(WIN_SCX_DESIGN_LOC) + 2))

		CASE ATCC(WIN_VCX_DESIGN_LOC, m.cWinName) <> 0
			m.cWinName = LOWER(SUBSTRC(m.cWinName, LENC(WIN_VCX_DESIGN_LOC) + 2))

		OTHERWISE
			m.cWinName = ''
		ENDCASE

		IF !EMPTY(m.cWinName)
			m.oWindowCollection.Add(m.cWinName)
		ENDIF
	ENDFOR
ENDIF

RETURN m.oWindowCollection

ENDPROC
PROCEDURE invokeaddin
* -- Invoke an add-in.
* -- Assumes the Add-In class has a method called: Execute(oToolItem)
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS cUniqueID, p1, p2, p3, p4

DO CASE
CASE PCOUNT() == 5
	THIS.oEngine.InvokeAddIn(m.cUniqueID, THIS, m.p1, m.p2, m.p3, m.p4)
CASE PCOUNT() == 4
	THIS.oEngine.InvokeAddIn(m.cUniqueID, THIS, m.p1, m.p2, m.p3)
CASE PCOUNT() == 3
	THIS.oEngine.InvokeAddIn(m.cUniqueID, THIS, m.p1, m.p2)
CASE PCOUNT() == 2
	THIS.oEngine.InvokeAddIn(m.cUniqueID, THIS, m.p1)
OTHERWISE
	THIS.oEngine.InvokeAddIn(m.cUniqueID, THIS)
ENDCASE


ENDPROC
PROCEDURE parsepropertylist
* given a property list in the below format, parse
* it into a collection object
*
*	AutoSize=.T.
*	Name=MyForm1
*
LPARAMETERS cPropertyList
LOCAL i
LOCAL nCnt
LOCAL nPos
LOCAL cPropertyName
LOCAL cPropertyValue
LOCAL oPropertyCollection
LOCAL oException
LOCAL ARRAY aPropertyList[1]

m.oPropertyCollection = NEWOBJECT("PropertyCollection", "ToolboxEngine.prg", _TOOLBOX)

IF !EMPTY(m.cPropertyList)
	m.nCnt = ALINES(aPropertyList, m.cPropertyList, .F., CHR(10))
	FOR m.i = 1 TO m.nCnt
		m.nPos = AT('=', aPropertyList[m.i])
		IF m.nPos > 1
			m.cPropertyName = LEFT(aPropertyList[m.i], m.nPos - 1)
			m.cPropertyValue = SUBSTR(aPropertyList[m.i], m.nPos + 1)
			IF !EMPTY(m.cPropertyName)
				m.cPropertyValue = THIS.EvalText(m.cPropertyValue)
				IF !EMPTY(m.cPropertyValue)
					TRY
						* m.oPropertyCollection.Add(m.cPropertyValue, m.cPropertyName)
						m.oPropertyCollection.AddPropertyValue(m.cPropertyName, m.cPropertyValue)
					CATCH TO oException
						* ignore the error message unless we're debugging
						MESSAGEBOX(oException.Message)
					ENDTRY
				ENDIF
			ENDIF
		ENDIF
	ENDFOR
ENDIF

RETURN m.oPropertyCollection

ENDPROC
PROCEDURE getuniqueobjname
* Given the drop target object, and the original name
* we want to use, add a numeric indentifier to the
* end until we find a unique name on the target object
#include "toolbox.h"
LPARAMETERS oDropTarget, cOriginalObjName
LOCAL i
LOCAL cObjName

m.cOriginalObjName = CHRTRAN(ALLTRIM(m.cOriginalObjName), INVALID_OBJNAME_CHARS, '')
IF !ISALPHA(m.cOriginalObjName) OR (LEFT(m.cOriginalObjName, 1) == '_')
	m.cOriginalObjName = 'o' + m.cOriginalObjName
ENDIF

m.i = 1
m.cObjName = m.cOriginalObjName + TRANSFORM(m.i)
DO WHILE .T.
	IF TYPE("oDropTarget.&cObjName.") = "U"
		EXIT
	ENDIF
	m.i = m.i + 1
	m.cObjName = m.cOriginalObjName + TRANSFORM(m.i)
ENDDO

RETURN m.cObjName

ENDPROC
PROCEDURE addclasslib
* Add a new category
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.AddClassLib()
ENDIF
ENDPROC
PROCEDURE addtofavorites
* Add to favorites
IF VARTYPE(THIS.oEngine) == 'O'
	THIS.oEngine.AddToFavorites(THIS.UniqueID)
ENDIF

ENDPROC
PROCEDURE showhelp
LOCAL cHelpCmd
LOCAL cHelpFile
LOCAL cSaveHelpFile

m.cSaveHelpFile = SET("HELP", 1)

IF !EMPTY(THIS.HelpFile) AND FILE(THIS.HelpFile)
	TRY
		SET HELP TO (THIS.HelpFile)
	CATCH
	ENDTRY
ENDIF

m.cHelpCmd = "HELP NOWAIT"
IF THIS.HelpID > 0
	m.cHelpCmd = [HELP ID ] + TRANSFORM(THIS.HelpID) + [ NOWAIT]
ENDIF

&cHelpCmd


IF EMPTY(m.cSaveHelpFile) OR !FILE(m.cSaveHelpFile)
	* if there is no help file setup, we
	* may get an error here, so wrap in try/catch
	TRY
		SET HELP TO
	CATCH
	ENDTRY
ELSE
	SET HELP TO (m.cSaveHelpFile)
ENDIF

ENDPROC
PROCEDURE getregistryvalue
* Simple way to return a registry value
* Mainly used for retrieving IntelliDrop class and library
#include "toolbox.h"
LPARAMETERS cOption, cKeyPath, cDefault
LOCAL oRec
LOCAL cValue

IF PCOUNT() < 3
	m.cDefault = ''
ENDIF
IF VARTYPE(cKeyPath) <> 'C' OR EMPTY(m.cKeyPath)
	RETURN m.cDefault
ENDIF
IF VARTYPE(m.cOption) <> 'C' OR EMPTY(m.cOption)
	RETURN m.cDefault
ENDIF

m.cValue = ''
TRY
	oReg = NEWOBJECT("registry", "toolboxregistry.vcx", _TOOLBOX)
	IF oReg.GetRegKey(m.cOption, @cValue, m.cKeyPath, HKEY_CURRENT_USER) <> 0
		m.cValue = m.cDefault
	ENDIF
CATCH
	m.cValue = m.cDefault
ENDTRY

RETURN m.cValue

ENDPROC
PROCEDURE addtodataenv
* Add a table to the dataenvironment
LPARAMETERS oDropTarget, cTable
LOCAL oDE
LOCAL nCnt
LOCAL oObjRef
LOCAL cObjName
LOCAL nCnt
LOCAL i
LOCAL cSource
LOCAL cDatabase
LOCAL cAlias
LOCAL nSelect
LOCAL oForm
LOCAL nDataSessionID
LOCAL lOpenTable
LOCAL ARRAY aInUse[1]
LOCAL ARRAY aDataEnv[1]
LOCAL ARRAY aChildren[1]


m.oForm = m.oDropTarget
DO WHILE TYPE("m.oForm") == 'O' AND !ISNULL(m.oForm) AND !(m.oForm.BaseClass == "Form")
	m.oForm = m.oForm.Parent
ENDDO

IF VARTYPE(m.oForm) <> 'O' OR !(m.oForm.BaseClass == "Form")
	RELEASE m.oForm
	RETURN
ENDIF

m.nSelect = SELECT()


m.nDataSessionID = SET("DataSession")
SET DATASESSION TO (m.oForm.DataSessionID)

* determine if this table is already open
m.cAlias = ''
m.cTable = LOWER(m.cTable)
m.nCnt = AUSED(aInUse)
FOR m.i = 1 TO m.nCnt
	IF LOWER(DBF(aInUse[m.i, 1])) == m.cTable
		m.cAlias = aInUse[m.i, 1]
		EXIT
	ENDIF
ENDFOR

* if table isn't already open, then open it
m.lOpenTable = EMPTY(m.cAlias)
IF m.lOpenTable
	SELECT 0
	TRY
		USE (m.cTable) SHARED AGAIN
		m.cAlias = ALIAS()
	CATCH
		m.cAlias = ''
	ENDTRY
ENDIF

IF !EMPTY(m.cAlias)
	m.cDatabase = LOWER(CURSORGETPROP("DATABASE", m.cAlias))
	m.cSource = LOWER(CURSORGETPROP("SOURCENAME", m.cAlias))

	m.nCnt = ASELOBJ(aDataEnv, 2)
	IF m.nCnt > 0
		m.oDE = aDataEnv[1]
		RELEASE aDataEnv

		IF VARTYPE(m.oDE) == 'O'
			* don't add if we already have a cursor based upon the same table		
			m.nCnt = AMEMBERS(aChildren, m.oDE, 2)
			FOR m.i = 1 TO m.nCnt
				m.cObjName = aChildren[m.i]
				TRY
					m.oObjRef = m.oDE.&cObjName
				CATCH
				ENDTRY
				IF VARTYPE(m.oObjRef) == 'O' AND m.oObjRef.BaseClass == "Cursor" AND m.oObjRef.CursorSource == m.cSource AND m.oObjRef.Database == m.cDatabase
					RELEASE oObjRef
					RELEASE m.oForm

					SELECT (m.nSelect)
					RETURN
				ENDIF
			ENDFOR

			m.cObjName = THIS.GetUniqueObjName(m.oDE, "Cursor")
			m.oDE.AddObject(m.cObjName, "Cursor")

			TRY
				m.oObjRef = m.oDE.&cObjName
			CATCH
			ENDTRY


			IF VARTYPE(m.oObjRef) == 'O'
				m.oObjRef.Alias = LOWER(ALIAS())
				m.oObjRef.CursorSource = m.cSource
				IF !EMPTY(m.cDatabase)
					m.oObjRef.Database = m.cDatabase
				ENDIF
			ENDIF
			m.oObjRef = .NULL.
		ENDIF
	ENDIF

	IF m.lOpenTable
		USE IN (m.cAlias)
	ENDIF

	RELEASE m.oDE

ENDIF
RELEASE m.oObjRef
RELEASE m.oForm

SET DATASESSION TO (m.nDataSessionID)

SELECT (m.nSelect)

ENDPROC
PROCEDURE createaddinsmenu
* Update passed in context menu with add-in items,
* displaying submenu items by calling this recursively
#include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oContextMenu, cToolTypeID, cParentID
LOCAL oAddInCollection
LOCAL oAddIn
LOCAL oMenuItem
LOCAL oException

oAddInCollection = THIS.oEngine.GetAddIns(m.cToolTypeID, m.cParentID)
IF oAddInCollection.Count > 0
	IF EMPTY(m.cParentID)
		oContextMenu.Addmenu("\-")
	ENDIF

	FOR EACH oAddIn IN oAddInCollection
		IF oAddIn.IsMenu
			oMenuItem = oContextMenu.AddMenu(oAddIn.AddInName)

			IF !EMPTY(oAddIn.MenuCode)
				TRY
					EXECSCRIPT(oAddIn.MenuCode, THIS, oMenuItem.SubMenu)
				CATCH TO oException
					MESSAGEBOX(m.oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
				ENDTRY
			ENDIF

			THIS.CreateAddInsMenu(oMenuItem.SubMenu, m.cToolTypeID, oAddIn.UniqueID)
		ELSE
			oMenuItem = oContextMenu.AddMenu(oAddIn.AddInName, [oRef.InvokeAddIn("] + oAddIn.UniqueID + [")])
		ENDIF
	ENDFOR
ENDIF

ENDPROC
PROCEDURE Init
DODEFAULT()

THIS.oDataCollection = CREATEOBJECT("Collection")
THIS.OnCreateDataValues()

THIS.ToolData = THIS.ToolData

ENDPROC
PROCEDURE Destroy
THIS.oDataCollection = .NULL.
THIS.oEngine = .NULL.
ENDPROC
_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF


WAIT " " TIMEOUT .5
ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� uu�l%U�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����R���?��� ��U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�"�A�!Aq1AA�43qq�"����AA�2�B�2v�;`� "�4)u6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h� T(�0	toolbox.h�!��/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF


MESSAGEBOX("done")
ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� mm�%M�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�������C�done�x��U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate!��1�B�33qq�"����AA2�qqq�"�A�!Aq1AA�4�2��	�R$q�7)m6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h�ܒ�/..\..\..\vfp9\foxpro.h��T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
t�� [[��%=�%��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�"�A�!Aq1AA�43qq�"����AA3�B�2v�;`� !��2)[6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.hV�T(�0	toolbox.h^ؒ�/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

MESSAGEBOX("done")
m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� mm�%M�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�������������C�done�x��)T�
��CC�completescript�����%�C�
��
����������C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate!��1�B�33qq�"����AA3�qqq�"�A�!Aq1AA�4�2��	�P$o�6)m6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h.:��/..\..\..\vfp9\foxpro.h6;T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

MESSAGEBOX("done")

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� mm�%M�&��U
B�C����UTHISONSHOWPROPERTIES����������������C�done�x��!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�"�A�!Aq1AA�43qq�"����AA3�B�2v�Qv�""�4)m6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.hn�T(�0	toolbox.hv���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
MESSAGEBOX(m.cText)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� kkl�%K�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
�����C�
��x���(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA3�qqq�"�A��!Aq1AA�4�2�w	�S$r�7)k6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h�ے�/..\..\..\vfp9\foxpro.h��T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
		DOEVENTS 

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
z�� aa�%A�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
������(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�"�AA�!Aq1AA�43qq�"����AA3�B�2v�Jo�""��4)a6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h�WT(�0	toolbox.h�X��/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
		DOEVENTS FORCE

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
{�� bbC?%B�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
������(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA3�qqq�"�AQ�!Aq1AA�4�2�w	�P$o�7)b6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h�W��/..\..\..\vfp9\foxpro.h�XT(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
		WAIT "" TIMEOUT .5

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� tt`%T�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
���R���?������(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�"�Aq�!Aq1AA�43qq�"����AA3�B�2v�Sx�""�4)t6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h��T(�0	toolbox.h���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''

IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)
		WAIT " " TIMEOUT .1

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� uu�l%U�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
��������T�
��C�
���R���������?��� ���(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate)��1�B�33qq�"����AA3�qqq�"�A��!Aq1AA�4�2�w	�U$t�7)u6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h���/..\..\..\vfp9\foxpro.h�T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
? WONTOP()

	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� hhՄ%H�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������C�������T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!��A�!Aq1AA�43qq�"����AA3�B�2v�In�""��4)h6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h��T(�0	toolbox.h���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
? WOUTPUT()

	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� hhՄ%H�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������C�������T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA3�qqq�!��A�!Aq1AA�4�2�w	�K$j�7)h6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h����/..\..\..\vfp9\foxpro.h�T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

	DOEVENTS FORCE

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
{�� bbC?%B�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
���������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�A�!Aq1ARB�43qq�"����AA3�B�2v�Pu�#"��5)b6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.hfgT(�0	toolbox.hnh��/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

	WAIT " " TIMEOUT .5

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� uu�l%U�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
������R���?��� ���	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate)��1�B�33qq�"����AA3�qqq�!�A�!Aq1A�B�4�2�w	�V$u�8)u6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h����/..\..\..\vfp9\foxpro.h�T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

	MESSAGEBOX(m.ctext)
ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� kkl�%K�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
��������C�
��x���	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�A�!Aq1A�A�43qq�"����AA3�B�2v�Sx�""�4)k6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h��T(�0	toolbox.h���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
		
		WAIT " " TIMEOUT .5
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� uu�l%U�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�����R���?��� ����	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate)��1�B�33qq�"����AA3�qqq�!�A�!Aq1�AB�4�2�w	�Y$x�8)u6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h���/..\..\..\vfp9\foxpro.h��T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
t�� [[��%=�%��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�A�!Aq1AB�43qq�"����AA3�B�2v�=b�!!��3)[6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.hT(�0	toolbox.h���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		DOEVENTS
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
z�� aa�%A�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
����������T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA3�qqq�!�AA�!Aq1AB�4�2�w	�J$i�7)a6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.hư��/..\..\..\vfp9\foxpro.hαT(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		DOEVENTS FORCE
		m.cText = EXECSCRIPT(m.cScript)
		DOEVENTS FORCE

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� iiB�%G�'��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
����������T�
��C�
������(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�QAQ�!Aq1AB�43qq�"����AA3�B�2v�a��##�5)i6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h�AT(�0	toolbox.h�B��/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
		DOEVENTS FORCE
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
{�� bbC?%B�&��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
���������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate��1�B�33qq�"����AA3�qqq�!�A�!Aq1QAB�4�2�w	�P$o�7)b6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.h�[��/..\..\..\vfp9\foxpro.h�\T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
MESSAGEBOX(ctext)
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
��� iiB�%I�&��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C��x����C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�A�!Aq�1AB�43qq�"����AA3�B�2v�Pu�""��4)i6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h&�T(�0	toolbox.h.���/_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		WAIT WINDOW m.cText NOWAIT
		WAIT CLEAR
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
��� qq�"%O�'��U�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUE�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C����
R,:��
���R���C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA
B�C����UTHISONSHOWPROPERTIESoncreatedatavalues,��oncompletedrag���onstartdrag���oncreate#��1�B�33qq�"����AA3�qqq�!�A�!Aq�Q1AB�4�2�w	�j%��8)q6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1	toolbox.hFڒ�/..\..\..\vfp9\foxpro.hN�T(�0_tool_toolbox.vcxcustom_scripttoolS_memberdata = 
classtype = SCRIPT
imagefile = program.bmp
Name = "_scripttool"
�PROCEDURE oncreate
* show the property sheet when a script item is created manually
RETURN THIS.OnShowProperties()

ENDPROC
PROCEDURE onstartdrag
#include "foxpro.h"
LPARAMETERS oDataObject, nEffect
LOCAL cScript
LOCAL cText
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("script"), '')

m.cText = ''
IF !EMPTY(m.cScript)
	TRY
		m.cText = EXECSCRIPT(m.cScript)

	CATCH TO oException
		m.cText = oException.Message
	ENDTRY
	IF VARTYPE(m.cText) == 'C'
		oDataObject.SetData(m.cText)
	ENDIF

ENDIF

RETURN DROPEFFECT_COPY + DROPEFFECT_MOVE


ENDPROC
PROCEDURE oncompletedrag
#include "foxpro.h"
#include "toolbox.h"
PARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cScript
LOCAL oException

m.cScript = NVL(THIS.GetDataValue("completescript"), '')

IF !EMPTY(m.cScript)
	TRY
		EXECSCRIPT(m.cScript)
	CATCH TO oException
		MESSAGEBOX(oException.Message, MB_ICONEXCLAMATION, TOOLBOX_LOC)
	ENDTRY
ENDIF

ENDPROC
PROCEDURE oncreatedatavalues
#include "toolbox.h"
DODEFAULT()

THIS.AddDataValue("script", '', DATAVALUE_SCRIPT_LOC, '', .F., "cfoxeditbox")
THIS.AddDataValue("completescript", '', DATAVALUE_COMPLETESCRIPT_LOC, '', .F., "cfoxeditbox")

ENDPROC
t�� [[��%=�%��U
B�C����UTHISONSHOWPROPERTIES��������������!T�
��CC�script�����T�
�����%�C�
��
������~�T�
��C�
����(����T�
��������%�C�
���C������C�
�������	B����U	ODATAOBJECTNEFFECTCSCRIPTCTEXT
OEXCEPTIONTHISGETDATAVALUEMESSAGESETDATA�4�����������)T�
��CC�completescript�����%�C�
��
������r���C�
����(������C���0�Toolbox�x�����U	NEFFECTODROPTARGET
NMOUSEXPOS
NMOUSEYPOSCSCRIPT
OEXCEPTIONTHISGETDATAVALUEMESSAGE�	��C��4��C�script��Script�-�cfoxeditbox����J��C�completescript��Complete drag script�-�cfoxeditbox����UTHISADDDATAVALUEoncreate,��onstartdragX��oncompletedrag���oncreatedatavalues���1�3�qqq�!�A�!Aq1AB�43qq�"����AA3�B�2v�=b�!!��3)[6_memberdata XML Metadata for customizable properties
_scripttool_tool1ClassPixels_scripttool1..\..\..\vfp9\foxpro.h�8T(�0	toolbox.h�9��/