Mini Kabibi Habibi

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

:�VERSION =   3.00	vfpglry.h��$
_classitem	vfpglry.hPixels1Class�Height = 22
Width = 23
cbaseclass = 
csamplefile = 
citemhelpfile = 
vhelpitem = 0
citemtype = Class
cpicture = graphics\class.ico
Name = "_classitem"

_classitemcustom_gallery.vcx_item1Pixels	vfpglry.h��s$JArial, 0, 9, 5, 15, 12, 21, 3, 0
MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0

itempicker	vfpglry.hPixelsClass4form
itempicker
itempicker	vfpglry.h�H��$	vfpglry.h1
projectpickerJArial, 0, 9, 5, 15, 12, 21, 3, 0
MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
	classdropPixelsClass4form	classdrop	classdropcmdOKLabel1_activexfolder1Class1	vfpglry.h֏�$_programitemClass	vfpglry.hPixels1_item_programitemMcitemtype = Program
cpicture = graphics\program.ico
Name = "_programitem"
custom_catalogitem_urlitem	vfpglry.hPixelsClass_folder_activexfoldercustom	vfpglry.h�m'E*	_fileitem	vfpglry.h^�Av�(glryreg	vfpglry.hPixels	vfpglry.h��s$	vfpglry.h1PixelsClassPixelsClass	vfpglry.h.��$_sampleitem9Class1_item_urlitemcustom_gallery.vcx1cmdOK	vfpglry.hv$s$1Name = "errorhandler"
errorhandlerPixels11_item	vfpglry.hPixels_itemPixels	_formitem_sampleitem	vfpglry.h��m'E*5
_templateitemcustomPixels	vfpglry.h1	vfpglry.hPixelsClassClassform
projectpicker_gallery.vcx	vfpglry.h^��$	_dataitemClass<oshared
*addtoform 
*oshared_access 
*cfilename_assign 
Pixels1	vfpglry.h��s$_catalogitemcustom	vfpglry.h_item1PixelsClass	vfpglry.h�Q.�y$galleryutils	vfpglry.hPixels
_templateitemcustom_gallery.vcx_reportitemcustom1
projectpicker1
datapicker_gallery.vcxchkFavorites	vfpglry.hlabelPixelslabel	vfpglry.h��s$	vfpglry.hPixelsClass_item	vfpglry.h��s$_reportitem	vfpglry.h��s$.PROCEDURE Click
THISFORM.Release()
ENDPROC

commandbuttonfileglryreg
commandbuttonlabelClassformJArial, 0, 9, 5, 15, 12, 32, 3, 0
MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
checkboxfileglryreg1checkbox.PROCEDURE Click
THISFORM.Release()
ENDPROC
cmdOKLoshared
*addtoproject 
*addtoform 
*oshared_access 
*cfilename_assign 
newclassPixelsClass13formlabel1	classdroplabel	_menuitem
datapickercustom_gallery.vcx
_sounditem_item	classdrop
datapicker
projectpicker	vfpglry.hogDropActioncustomClassJArial, 0, 9, 5, 15, 12, 21, 3, 0
MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
�Top = 218
Left = 6
Height = 15
Width = 103
FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 0
Caption = "Include in Project:"
Value = .T.
Name = "chkProject"

chkProjectClass	vfpglry.hKm'E*	vfpglry.hClass1_item	_fileitemcustom_gallery.vcxglryregcustomcheckboxcheckboxoptiongroup	vfpglry.h��s$
datapickercboProjectsoptiongroup	oaction
formnewclassnewclasscomboboxcomboboxcustomgalleryutils�PROCEDURE Init
LOCAL oCatalog
IF !ISNULL(_oBrowser)
	oCatalog = _oBrowser.GetFolder("favorites")
	IF !ISNULL(oCatalog)
		RETURN
	ENDIF	
ENDIF
THIS.Value = .F.
THIS.Enabled = .F.

ENDPROC
	cmdCancellabellistbox	vfpglry.h
datapickerchkFavoritescustom_activexitem_item1txtClasslibtextboxformlstActxClassPixelslistboxlabelformcheckboxAPROCEDURE Click
THISFORM.Finish()
THISFORM.Release()
ENDPROC
checkbox	_menuitem
itempicker
commandbuttonClassform_label1custom_gallery.vcx_gallery.vcx_gallery.vcx
commandbuttonglryreg	vfpglry.h��s$	vfpglry.h
commandbuttonIcparmblock
lruntimer Use if launching modal form with ActiveX control.
label_label1+oshared
*addtoproject 
*oshared_access 

commandbuttonPixelsClass	vfpglry.h��s$
_videoitem	vfpglry.hPixels	_fileitem
_sounditemcustomName = "fileglryreg"

datapickercustomcustomvfpglry.vcx	vfpglry.h��s$label
_imageitem	vfpglry.h���$Mcpicture = graphics\catalog.ico
citemtype = Catalog
Name = "_catalogitem"
_activexitem_gallery.vcx	vfpglry.hPixels|FontName = "MS Sans Serif"
FontSize = 8
Height = 22
Left = 114
Style = 2
Top = 214
Width = 132
Name = "cboProjects"
.PROCEDURE Click
THISFORM.Release()
ENDPROC

datapickerformClass_folder1�PROCEDURE Init
LOCAL oCatalog
IF !ISNULL(_oBrowser)
	oCatalog = _oBrowser.GetFolder("favorites")
	IF !ISNULL(oCatalog)
		RETURN
	ENDIF	
ENDIF
THIS.Value = .F.
THIS.Enabled = .F.

ENDPROC

itempicker	_fileitemClass�Top = 121
Left = 10
Height = 15
Width = 133
FontName = "MS Sans Serif"
FontSize = 8
Caption = "Add to Favorites catalog"
Value = .T.
Name = "chkFavorites"

projectpicker	containerPixels	cmdCancel
commandbuttonvfpglry.vcxClass_item
commandbutton
projectpicker_folder	_formitem
commandbutton
datapickercustomlabel	vfpglry.h6�m'E*_shareditem	vfpglry.h_gallery.vcxcmdOK��� ��,�%7UO�UB�Urefreshpicture,��1B1?)�_item_shareditemName = "_shareditem"
customJArial, 0, 9, 5, 15, 12, 21, 3, 0
MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
textbox..\ffc\_controls.vcxnewclass
commandbuttontxtClasstextboxAPROCEDURE Click
THISFORM.Finish()
THISFORM.Release()
ENDPROC

commandbutton
_videoitem_gallery.vcxcustom�Top = 196
Left = 6
Height = 15
Width = 133
FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 0
Caption = "Add to Favorites catalog"
Value = .T.
Name = "chkFavorites"
textbox
commandbutton
datapickerowizstyle
*finish 

Tablemover	container..\ffc\_movers.vcxShape1	vfpglry.h��s$_projectitem	vfpglry.hClass_tablemover
datapickershapeshape�citemtype = Report
cclass = _cmdrunreport
cformclasslibrary = _miscbtns.vcx
cpicture = graphics\report.ico
Name = "_reportitem"
	vfpglry.h}FontName = "MS Sans Serif"
FontSize = 8
Height = 21
Left = 81
TabIndex = 4
Top = 94
Width = 197
Name = "txtClasslib"
zFontName = "MS Sans Serif"
FontSize = 8
Height = 21
Left = 81
TabIndex = 1
Top = 10
Width = 225
Name = "txtClass"
newclasslblClassNamelabellabel�Top = 126
Left = 260
Height = 23
Width = 66
FontName = "MS Sans Serif"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 3
Name = "cmdCancel"
newclass2cparams = 
citemtype = File
Name = "_fileitem"
Pixels�PROCEDURE Click
THISFORM.cboProjects.Enabled = THIS.Value
ENDPROC
PROCEDURE Init
LOCAL i
IF _VFP.Projects.Count=0
	THIS.Value = .F.
	THIS.Enabled = .F.
	THISFORM.cboProjects.Enabled = .F.
ELSE
	FOR i = 1 TO _VFP.Projects.Count
		THISFORM.cboProjects.AddItem(LOWER(_VFP.Projects[m.i].Name))
	ENDFOR
	THISFORM.cboProjects.Value = LOWER(_VFP.ActiveProject.Name)
ENDIF
ENDPROC
	vfpglry.hlblFromFileowizstyle
*finish 
newclass�FontName = "MS Sans Serif"
FontSize = 8
Height = 132
Left = 6
Top = 29
Width = 306
ItemTips = .T.
Name = "lstActxClass"
7oactivex
*finish 
*setlist 
^aactivexclasses[1,1] 
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "Select the data you want in your document:"
Height = 18
Left = 6
Top = 7
Width = 318
TabIndex = 4
Name = "_label1"
�citemtype = URL
cclass = _hyperlinklabel
cclasslib = 
cformclasslibrary = (HOME()+"FFC\_hyperlink.vcx")
lgetfileaddress = .T.
cpicture = graphics\webfile.ico
Name = "_urlitem"
_item_projectitemPcoutputname
nbuildaction
lbuildall
lbuilderrors
lrunafterbuild
*buildapp 
custom_gallery.vcx�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)��Top = 111
Left = 188
Height = 23
Width = 72
FontName = "MS Sans Serif"
FontSize = 8
Caption = "OK"
Default = .T.
Name = "cmdOK"
cTop = 94
Left = 286
Height = 21
Width = 21
Caption = "..."
TabIndex = 5
Name = "cmdStoreIn"
newclass�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�
cmdStoreInnewclass�Top = 215
Left = 427
Height = 23
Width = 64
FontName = "MS Sans Serif"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 3
Name = "cmdCancel"
ClassDcitemtype = Menu
cpicture = graphics\menu.ico
Name = "_menuitem"
1_itemvfpglry.vcx
commandbutton	_dataitem�ctemplatename = 
cvisualstyle = 
ccodestyle = 
cvisualclasslib = 
ccodeclasslib = 
ctemplatetype = 
citemtype = Template
cpicture = graphics\frmstyle.ico
Name = "_templateitem"

commandbutton
cmdBasedOn
commandbutton
commandbuttonSTop = 26
Left = 6
Height = 162
Width = 484
SpecialEffect = 0
Name = "Shape1"
ocoutputname = 
nbuildaction = 0
cpicture = graphics\project.ico
citemtype = Project
Name = "_projectitem"
�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�cboClasscomboboxCPROCEDURE Click
THISFORM.Finish()
THISFORM.Release()

ENDPROC
comboboxnewclass	cmdCancel
commandbuttonJPROCEDURE refreshpicture
* override _fileitem behavior
RETURN
ENDPROC
customvfpglry.vcxcustom
commandbutton�Top = 215
Left = 358
Height = 23
Width = 64
FontName = "MS Sans Serif"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 2
Name = "cmdOK"
Class	_fileitem
_imageitemMPROCEDURE Click
THISFORM.oAction.cNewClass=""
THISFORM.Release()
ENDPROC
�citemtype = Sound
cformclasslibrary = _multimedia.vcx
cclass = _soundplayer
cpicture = graphics\audio.ico
Name = "_sounditem"
*setformpicture 
custom�FontName = "MS Sans Serif"
FontSize = 8
Caption = ""
Height = 15
Left = 81
Top = 66
Width = 224
TabIndex = 12
Name = "lblFromFile"
�PROCEDURE Click
LOCAL aClassArray
DIMENSION aClassArray[1]
IF AGETCLASS(aClassArray)
	THISFORM.AddCustomClass(aClassArray[1],aClassArray[2])
ENDIF

ENDPROC
newclasserrorhandlercmdOK�Top = 126
Left = 188
Height = 23
Width = 66
FontName = "MS Sans Serif"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 2
Name = "cmdOK"

commandbuttonnewclass�� ��K]%hw�U
��C����
��C����UTHISFORMFINISHRELEASEClick,��1��28)��Top = 169
Left = 240
Height = 23
Width = 72
FontName = "MS Sans Serif"
FontSize = 8
Caption = "OK"
Default = .T.
Name = "cmdOK"
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "Select class for ActiveX Component:"
Height = 18
Left = 5
Top = 9
Width = 318
Name = "_label1"
cTop = 37
Left = 286
Height = 21
Width = 21
Caption = "..."
TabIndex = 3
Name = "cmdBasedOn"

commandbutton
lblStoreInlabellabelnewclass_gallery.vcxlblFromlabellabelnewclass
lblBasedOn�� ��K]%hw�U
��C����
��C����UTHISFORMFINISHRELEASEClick,��1��16)�Pixels�FontName = "MS Sans Serif"
FontSize = 8
RowSourceType = 5
Height = 22
Left = 81
Style = 2
TabIndex = 2
Top = 36
Width = 198
Name = "cboClass"
uoshared
lruntimer Use if launching modal form with ActiveX control.
*addtoproject 
*addtoform 
*oshared_access 
H�� //��%����Uq���1cPutFile = GETFILE("VCX","Store In","&Save")	
%�C�
��
��j� T����CC�
��VCX��@���UCPUTFILETHISFORMTXTCLASSLIBVALUEClick,��1t!A2�)/[cactivexparent
lreadfoxonly
oshared
cactivexfolderid
*refreshnodes 
*oshared_access 
�� �%����UH���
�����%�C�����A���CC��C�������UACLASSARRAYTHISFORMADDCUSTOMCLASSClick,��1q�!�A2�)Eoaction
^acustclasses[1,0] 
^auserclasses[1,0] 
*addcustomclass 
Ycitemtype = Image
cclass = image
cpicture = graphics\picture.ico
Name = "_imageitem"
bcviewname = 
citemtype = Data
cclass = grid
cpicture = graphics\table.ico
Name = "_dataitem"
�Top = 38
Left = 319
Height = 22
Width = 64
FontName = "MS Sans Serif"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 7
Name = "cmdCancel"
Wcparmblock = 
citemtype = File
cpicture = graphics\sample.ico
Name = "_sampleitem"
�PROCEDURE finish
IF !EMPTY(THISFORM.lstActxClass.Value)
	THIS.oActiveX.cProgID = THIS.aActivexClasses[THISFORM.lstActxClass.ListItemID,2]
ENDIF

ENDPROC
PROCEDURE setlist
PARAMETERS aGetClasses
ACOPY(aGetClasses,THIS.aActivexClasses)
THIS.lstActxClass.RowSourceType = 5
THIS.lstActxClass.RowSource = "aGetClasses"
THIS.lstActxClass.Value = aGetClasses[1]

ENDPROC
PROCEDURE Init
IF  fontmetric(1, 'MS Sans Serif', 8, '') # 13 OR ;
	fontmetric(4, 'MS Sans Serif', 8, '') # 2 OR ;
	fontmetric(6, 'MS Sans Serif', 8, '') # 5 OR ;
	fontmetric(7, 'MS Sans Serif', 8, '') # 11
	this.setall('fontname', 'Arial')
ELSE
	this.setall('fontname','MS Sans Serif')
ENDIF
this.setall('fontsize',8)

ENDPROC
�Top = 10
Left = 319
Height = 22
Width = 64
FontName = "MS Sans Serif"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 6
Name = "cmdOK"
�Height = 156
Width = 332
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "Application Wizard"
MaxButton = .F.
MinButton = .F.
WindowType = 1
Name = "projectpicker"
�citemtype = Video
cpicture = graphics\video.ico
cformclasslibrary = _multimedia.vcx
cclass = _videoplayer
Name = "_videoitem"
�ctemplatename
cvisualstyle
ccodestyle
cvisualclasslib
ccodeclasslib
ctemplatetype
outils
*runformwizard 
*runreportwizard 
*runappwizard 
*cpicture_access 
*outils_access 
*ctemplatetype_assign 
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "\<Store In:"
Height = 15
Left = 14
Top = 97
Width = 42
TabIndex = 11
Name = "lblStoreIn"
�nuserkey = 0
cvfpoptpath = 
cregdllfile = 
cinidllfile = 
codbcdllfile = 
ncurrentos = 0
ncurrentkey = 0
capppathkey = 
Name = "glryreg"
�Height = 198
Width = 318
DoCreate = .T.
AutoCenter = .T.
Caption = "Gallery ActiveX Class Picker"
MaxButton = .F.
MinButton = .F.
WindowType = 1
Name = "itempicker"
PROCEDURE Click
#DEFINE C_STOREIN_LOC "Store In"
#DEFINE C_SAVEBTN_LOC "&Save"

LOCAL cPutFile
cPutFile = GETFILE("VCX",C_STOREIN_LOC,C_SAVEBTN_LOC)	
IF !EMPTY(m.cPutFile)
	THISFORM.txtClasslib.Value = LOWER(FORCEEXT(m.cPutFile,"VCX"))
ENDIF

ENDPROC
�cviewname
oshared
outils
*autoform 
*autoreport 
*makepivot 
*mailmerge 
*addtoform 
*isview 
*makehtml 
*addtoproject 
*oshared_access 
*outils_access 
*adddataenv 
*cfilename_assign 
*cviewname_assign 
�� ��4S%z���U#T�������
��C����UTHISFORMOACTION	CNEWCLASSRELEASEClick,��11�1B)��FontName = "MS Sans Serif"
FontSize = 8
Caption = "How would you like to add this class to your project?"
Height = 15
Left = 8
Top = 12
Width = 249
Name = "Label1"
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "From:"
Height = 15
Left = 14
Top = 66
Width = 28
TabIndex = 10
Name = "lblFrom"
�Height = 245
Width = 496
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 3
Caption = "Gallery Data Picker"
MaxButton = .F.
MinButton = .F.
WindowType = 1
Name = "datapicker"
�PROCEDURE Error
LPARAMETERS nError, cMethod, nLine

DO CASE
CASE nError = 1948
	WAIT WINDOW MESSAGE() TIMEOUT 1
	RETURN .F.
ENDCASE

ENDPROC
V�� ==Dd%����U
H�
����C������H�"��C�Class Name required�0�x��B��C��������&��C�Class Filename required�0�x��B��
�������T����C������T���������T������	�
��T����C��������
��C����U
THISFORMTXTCLASSVALUETXTCLASSLIBOACTION	CNEWCLASS
CFROMCLASSCBOCLASS
CFROMCLASSLIBLBLFROMFILECAPTION
CSAVECLASSLIBRELEASEClick,��1�Q!AQaAA�rQQqB�1)=�� ff��%����U
��C����UTHISFORMRELEASE
��C����UTHISFORMRELEASE
��C����UTHISFORMRELEASEOption1.DblClick,��Option2.DblClickS��Option3.DblClickz��1�2�2�1.Ug��)f�� ��K]%hw�U
��C����
��C����UTHISFORMFINISHRELEASEClick,��1��16)��PROCEDURE Option1.DblClick
THISFORM.Release()
ENDPROC
PROCEDURE Option2.DblClick
THISFORM.Release()
ENDPROC
PROCEDURE Option3.DblClick
THISFORM.Release()
ENDPROC
�Height = 142
Width = 268
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "Add Class to Project"
MaxButton = .F.
MinButton = .F.
WindowType = 1
HelpContextID = 229996602
Name = "classdrop"
��� xx��%�-��Uq%�C������B��%���C�����O�T����C������j�T��������UTHISFORMACUSTCLASSESTHISVALUELBLFROMFILECAPTION�������
�����I�T������	ActiveDoc��T������CheckBox��T������ComboBox��!T������
CommandButton�� T������CommandGroup��T������	Container��T������Control��T������Custom��T���	���EditBox��T���
���Form��T������FormSet��T������	HyperLink��T���
���Image��T������Grid��T������Label��T������Line��T������ListBox�� T������OptionButton��T������OptionGroup��#T������OleBoundControl��T������
OleControl��T������	PageFrame��T������ProjectHook��T������	Separator��T������Shape��T������Spinner��T������TextBox��T������Timer��T������Toolbar����%T����THISFORM.aUserClasses��T���C�����UTHISFORMAUSERCLASSESTHIS	ROWSOURCEVALUEInteractiveChange,��Init���1!AA���1A2�����������������1���������ARq2�
�E)x��� ��
/%1]
I�U�
H�
���=�C���
�'CCC����@�	music.ico�	audio.ico�
	��J��CCC����f�RMI�����&T����	graphics\�	music.ico��2���&T����	graphics\�	audio.ico���T���C������UTHISCPICTURE	CFILENAMEFULLPATHrefreshpicture,��1���a�aA�2G)�RPROCEDURE refreshpicture
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_MUSIC,ICO_AUDIO)
CASE INLIST(UPPER(JUSTEXT(THIS.cFileName)),"RMI")
	THIS.cPicture = ICONFOLDER+ICO_MUSIC
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_AUDIO
ENDCASE	
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
nctrlwidth
nctrlheight
csourceproject
cremotefile
cprogid
oshared
*addtoform 
*addtosystem 
*isserver 
*viewtypelib 
*regremote 
*getversion 
*nctrlheight_access 
*nctrlwidth_access 
*regfile 
^aextrafiles[4,2] 
*oshared_access 
*cfilename_assign 
*getprogid 
PPROCEDURE InteractiveChange
IF EMPTY(THISFORM.aCustClasses)
	RETURN
ENDIF

IF THIS.Value == THISFORM.aCustClasses[2]
	THISFORM.lblFromFile.Caption = THISFORM.aCustClasses[1]
ELSE
	THISFORM.lblFromFile.Caption = ""
ENDIF
ENDPROC
PROCEDURE Init

DIMENSION THISFORM.aUserClasses[29]
WITH THISFORM
	.aUserClasses[1] = "ActiveDoc"
	.aUserClasses[2] = "CheckBox"
	.aUserClasses[3] = "ComboBox"
	.aUserClasses[4] = "CommandButton"
	.aUserClasses[5] = "CommandGroup"
	.aUserClasses[6] = "Container"
	.aUserClasses[7] = "Control"
	.aUserClasses[8] = "Custom"
	.aUserClasses[9] = "EditBox"
	.aUserClasses[10] = "Form"
	.aUserClasses[11] = "FormSet"
	.aUserClasses[12] = "HyperLink"
	.aUserClasses[13] = "Image"
	.aUserClasses[14] = "Grid"
	.aUserClasses[15] = "Label"
	.aUserClasses[16] = "Line"
	.aUserClasses[17] = "ListBox"
	.aUserClasses[18] = "OptionButton"
	.aUserClasses[19] = "OptionGroup"
	.aUserClasses[20] = "OleBoundControl"
	.aUserClasses[21] = "OleControl"
	.aUserClasses[22] = "PageFrame"
	.aUserClasses[23] = "ProjectHook"
	.aUserClasses[24] = "Separator"
	.aUserClasses[25] = "Shape"
	.aUserClasses[26] = "Spinner"
	.aUserClasses[27] = "TextBox"
	.aUserClasses[28] = "Timer"
	.aUserClasses[29] = "Toolbar"
ENDWITH

THIS.RowSource = "THISFORM.aUserClasses"
THIS.Value = THISFORM.aUserClasses[1]

ENDPROC
�cwiztitle
coutfile
nwizaction
lusepages
cwiztable
cwizalias
lsortascend
ltruncate
llandscape
ncolumns
cstylefile
nlayout
lmetric
lhassorttag
clbldata
clibs
lrunwizard
lblankform
nprojecttype
cprojectname
lcreatedir
ndatabasetype
cexistingdbc
cdatabasetemplate
lfavorites
cappbuilder
laddappobject
^awizfields[1,1] 
^awizstyles[1,1] 
^awizsorts[1,1] 
^albllines[1,1] 
*shellexec 
*autowizard 
*savesets 
*restoresets 
*opendata 
*runwizard 
*autoapp 
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "\<Based On:"
Height = 15
Left = 14
Top = 41
Width = 52
TabIndex = 9
Name = "lblBasedOn"
�� ��%����UK�����
H��D�������D�R,����CE��B�-���UNERRORCMETHODNLINEError,��1��!�qA2�)��oshared
cparams
*shellroutine 
*getshellmenuitems 
*getdefaultshell 
*getshellinfo 
*menuhandler 
*addtoproject 
*oshared_access 
*addtoform 
*cfilename_assign 
�nctrlwidth = 200
nctrlheight = 150
csourceproject = 
cremotefile = 
cprogid = 
citemtype = ActiveX Component
cclass = olecontrol
cpicture = graphics\actxocx.ico
Name = "_activexitem"
C�� **�G%����UT���������UTHISFORMOACTION
NGETACTIONOGDROPACTIONVALUE�4��%�C����O��#�B�-���
�������T�������C�
nGetAction��������C�lIsForm�����%��������T�����a������%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$���Y� ��C�fontname�Arial�������(��C�fontname�
MS Sans Serif�������C�fontsize�����U	OACTIONTHISFORMADDPROPERTYLISFORMOGDROPACTIONOPTION3ENABLEDTHISSETALLRelease,��Init���1�3qQqA����!AAe	��A�2Ni�)*[�� BB�%����Uo���%�C��
��L�T��C�	favorites����%�C��
��H�B���T���-��T���-��UOCATALOG	_OBROWSER	GETFOLDERTHISVALUEENABLEDInit,��1q�AAA��2�)BTop = 0
Left = 0
Name = "_folder1"
lblProjectName.Name = "lblProjectName"
txtProjectName.Name = "txtProjectName"
lblProjectFile.Name = "lblProjectFile"
txtProjectFile.Name = "txtProjectFile"
cmdProjectFile.Name = "cmdProjectFile"
chkCreateProjDir.Name = "chkCreateProjDir"
�FontName = "MS Sans Serif"
FontSize = 8
Caption = "Class \<Name:"
Height = 15
Left = 14
Top = 14
Width = 61
TabIndex = 8
Name = "lblClassName"
�*genobjname 
*classtoform 
*addtoform 
*addtoproject 
*getwindowstack 
*getactivex 
*getversion 
*getwindowtypes 
*addprojectmenu 
*addformmenu 
*checkitem 
�*getapppath Checks and returns path of application associated with a particular extension (e.g., XLS, DOC).
*getlatestversion Returns latest version for a specified application.
*getapplication Retrieves application key.
�oshared = .NULL.
citemtype = Form
cpicture = graphics\form.ico
cformclasslibrary = _miscbtns.vcx
cclass = _cmdrunform
Name = "_formitem"
�� ����%d���U|������u�T��������T��������T�����	���T�
������T��a����U
THIS	OWIZSTYLECPROJECTNAME_FOLDER1TXTPROJECTNAMEVALUECOUTFILETXTPROJECTFILE
LCREATEDIRCHKCREATEPROJDIR
LFAVORITESCHKFAVORITES
LRUNWIZARD�%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$����� ��C�fontname�Arial�������(��C�fontname�
MS Sans Serif�������C�fontsize�����UTHISSETALLfinish,��InitJ��1qqqA�A3d	��A�2	"[)��Height = 126
Width = 394
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "New Class"
MaxButton = .F.
MinButton = .F.
WindowType = 1
HelpContextID = 536875199
Name = "newclass"
p�� WWi%��*��U�����
�������%�C�����A���C������T��C�����
���&T�����THISFORM.aUserClasses��T�����
���T�����
����	����T�	�����
���T�	�����
�����U
	CCLASSLIBCCLASSTHISFORMAUSERCLASSESCBOCLASS	ROWSOURCEVALUELBLFROMFILECAPTIONACUSTCLASSESi4��%�C����O��#�B�-���T������
�����]���C�	cNewClass�����%�C������C����T������������C�
cSaveClassLib�����%�C������C����T������������C�
cFromClass�������C�
cFromClassLib�����'%�C������C�C����
	��Y���C���
����	������%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$���� ��C�fontname�Arial�����G�(��C�fontname�
MS Sans Serif�������C�fontsize�����U
OACTIONTHISFORMADDPROPERTY	CNEWCLASSTXTCLASSVALUE
CSAVECLASSLIBTXTCLASSLIB
CFROMCLASSADDCUSTOMCLASS
CFROMCLASSLIBTHISSETALLaddcustomclass,��Init���1��AQA�a11�aaA3qQqA���QA��QA��q�ABe	��A�2��n)Wp�� WWYX%����U@%�C����
��9�#T����C���������UTHISFORMLSTACTXCLASSVALUETHISOACTIVEXCPROGIDAACTIVEXCLASSES
LISTITEMIDe4����C����
��T�������T�����aGetClasses��T����C����UAGETCLASSESTHISAACTIVEXCLASSESLSTACTXCLASS
ROWSOURCETYPE	ROWSOURCEVALUE�%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$����� ��C�fontname�Arial�������(��C�fontname�
MS Sans Serif�������C�fontsize�����UTHISSETALLfinish,��setlist���Init���1a1A3q11�q3d	��A�2��o��)W#PROCEDURE Click
#DEFINE C_NOCLASS_LOC		"Class Name required"
#DEFINE C_NOCLASSLIB_LOC	"Class Filename required"

DO CASE
CASE EMPTY(THISFORM.txtClass.Value)
	MESSAGEBOX(C_NOCLASS_LOC,48)
	RETURN
CASE EMPTY(THISFORM.txtClasslib.Value)
	MESSAGEBOX(C_NOCLASSLIB_LOC,48)
	RETURN
ENDCASE

WITH THISFORM

	.oAction.cNewClass = ALLTRIM(.txtClass.Value)
	.oAction.cFromClass = .cboClass.Value
	.oAction.cFromClassLib = .lblFromFile.Caption
	.oAction.cSaveClassLib = ALLTRIM(.txtClasslib.Value)

ENDWITH

THISFORM.Release()
ENDPROC
icwiztitle = 
coutfile = 
nwizaction = 1
lusepages = .T.
cwiztable = 
cwizalias = 
lsortascend = .T.
ncolumns = 1
cstylefile = 
nlayout = 1
clbldata = 
clibs = 
lrunwizard = .T.
nprojecttype = 1
cprojectname = 
lcreatedir = .T.
ndatabasetype = 1
cexistingdbc = 
cdatabasetemplate = 
cappbuilder = 
laddappobject = .F.
Name = "galleryutils"
�PROCEDURE finish
LOCAL aTmpArr
THIS.oWizStyle.cWizAlias = THIS.TableMover.CurrentAlias
DIMENSION aTmpArr[1,1]
STORE "" TO aTmpArr[1,1]
THIS.TableMover.GetSelections(@aTmpArr)
DIMENSION THIS.oWizStyle.aWizFields[ALEN(aTmpArr,1),1]
ACOPY(aTmpArr,THIS.oWizStyle.aWizFields)
THIS.oWizStyle.lRunWizard = .T.
THIS.oWizStyle.lFavorites = THIS.chkFavorites.Value
IF THIS.chkProject.Value
	THIS.oWizStyle.cProjectName = THIS.cboProjects.Value
ELSE
	THIS.oWizStyle.cProjectName = ""
ENDIF

ENDPROC
PROCEDURE Init
IF !ISNULL(_oBrowser)
	THIS.Icon = _oBrowser.Icon
ENDIF
IF  fontmetric(1, 'MS Sans Serif', 8, '') # 13 OR ;
	fontmetric(4, 'MS Sans Serif', 8, '') # 2 OR ;
	fontmetric(6, 'MS Sans Serif', 8, '') # 5 OR ;
	fontmetric(7, 'MS Sans Serif', 8, '') # 11
	this.setall('fontname', 'Arial')
ELSE
	this.setall('fontname','MS Sans Serif')
ENDIF
this.setall('fontsize',8)

ENDPROC
PROCEDURE Release
this.oWizStyle = null
ENDPROC
��� ��:%�?�Ug%�C�
���B�-���%������B�B�C��������`�B�C��������UTHISOHOSTLADDFILEDEFAULTADDFILE	CFILENAMEOPENFILE������Z%�C����
�C����O�	C����C��f�SCREEN
����
��p�B�-���.������������������a��U	OSOURCENXCOORDNYCOORDTHIS	CFILENAMENAMEOHOSTLDRAGDROPTODESKTOPCPROGRAMNAME����%�C��
�� �B�-���Q��C�
\<Add Catalog�$oTHIS.oHost.AddFile(othis.cFileName)�����������T��C�\<Open Catalog�%oTHIS.oHost.OpenFile(othis.cFileName)�������
����UTOOBJECTTHIS
ADDMENUBAROHOSTLADDFILEDEFAULTdblclick,��	dragdrop2���setmenu���1�qA2a�aA3��qA�3q"qAA2�
�
*P)�[�� BB�%����Uo���%�C��
��L�T��C�	favorites����%�C��
��H�B���T���-��T���-��UOCATALOG	_OBROWSER	GETFOLDERTHISVALUEENABLEDInit,��1q�AAA��2�)B�� ��#S%��E��U0����������������
J���(��'T��CC�����L�	���-6��)%�C��
�
��	�

��
�
	����B�-���%�C����
�	��X��%�C�=No ActiveX Controls were found registered in Options dialog. �*Would you like search the entire Registry?�$�x���E���C�a��	�
���T�B�-����T��C��
�����%�C�����B�-���T��CW��
F�����%%�C�����C�
C���
	����T��C���!��f����'T��C���!�ACTXSYSCTRLSf���T��C��f���CC��f�
��� T��C�
�C�!�
���\���CC��f�
�����Ca������
F����-R,:��"Adding ActiveX Items to Catalog...�������(�C�������������.�8T��C���vfpglry.vcx,_ActivexItem�������%�C���E�.��
�������T�����T�����T��C���f��%�C������T��CC�
�������T��C�
�����T��C�
�����
��Caa������� R,:��Refreshing catalog...����Ca����R�UONODEILNLASTSELECTCPARENTLREADFOXOFOLDERAGETCONTROLSTHISLREADFOXONLYOSHARED
GETACTIVEXOHOST	GETFOLDERCACTIVEXFOLDERIDCSOURCEALIASCACTIVEXPARENTCID2CIDPARENTOCATALOGCLEANUP
CREATENODECCATALOGPATHOPARENTCTEXTCPROGID	CFILENAMEWRITEPROPERTIESREFRESHV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT^���%�C��
�� �B�-���7��C�Refre\<sh Controls�oThis.RefreshNodes����UTOOBJECTTHIS
ADDMENUBART����UTHISOSHAREDrefreshnodes,��oshared_access���setmenu��Destroy���1�1�q�qA�!Q�qAA��qA��R��qA#QQC���1�A�AA���A�A���AA�Q3��A�3q"qAq3�2!8F�I=�RPCp�Y)��cactivexparent = 
lreadfoxonly = .T.
cactivexfolderid = actxsysctrls
lnewmenu = .F.
ldynamic = .T.
Name = "_activexfolder"
��� ���%Sq�U��������������%�C�	�
��
C�	�
0
��P�B�-���T��-�������(��C������$%�CC�
��C�
�fC�	�
f����T��a��!����%��
�
����
��C�	����
T�����T��CC�	�_f��
H������
��1��&�
T������C�
��2�APP���^�
T�����T���APP���C�
��3�EXE�����
T�����T���EXE���C�
��4�DLL�����
T�����T���DLL���T���	���
H�������
����8�6T��CC�	���C�	�
�
����C�	��
���6����
����X�
T������CC�	���f�APP����
T������CC�	���f�EXE����
T������CC�	���f�DLL����
T������1T��CC�THIS.lBuildAllb�L�	�	��-6��4T��CC�THIS.lBuildErrorsb�L�	�	��-6��6T��CC�THIS.lRunAfterBuildb�L�	�	��-6��3T��C�
��
��
��
�C�	�
�C��
��%��
�����B�� %��
��C�
����	������
����UNBUILDACTION	LBUILDALLLBUILDERRORSCOUTPUTNAMECEXT	LHADERRORCACTIONILPROJECTISOPENTHIS	CFILENAMEPROJECTSCOUNTPROJECTNAMEMODIFYLRUNAFTERBUILDBUILD`%�C�
���
�� �B�-���%�C����
C��0
��J�B�-���/����:�UTHISLMODIFY	CFILENAME)%�C�
���B�-���
B�C����UTHISMODIFY����%�C��
�� �B�-���1��C�Mo\<dify...�oTHIS.Modify()����a����*��C�\<Build�oTHIS.BuildApp()����UTOOBJECTTHIS
ADDMENUBAR������7%�C����
�C����O����
��M�B�-���0%�C��f�FORM�C��f�SCREEN	����
��C�����U	OSOURCENXCOORDNYCOORDTHISOHOSTLDRAGDROPTODESKTOP	BASECLASSNAMEMODIFYbuildapp,��modify���dblclickN��setmenu���	dragdrop2+��12q�qA��A�AAA�A�C�A�������A�1a1�������AAa1�AA�A3�qA�qA�3�qA�3q"qA�3�sqA�A2�7�uC?��ND��UK��	`)�Top = 36
Left = 15
TabIndex = 1
Name = "Tablemover"
lstLeft.FontName = "MS Sans Serif"
lstLeft.FontSize = 8
lstLeft.Name = "lstLeft"
cmdAdd.Name = "cmdAdd"
cmdRemove.Name = "cmdRemove"
lstRight.FontName = "MS Sans Serif"
lstRight.FontSize = 8
lstRight.Name = "lstRight"
Label1.FontName = "MS Sans Serif"
Label1.FontSize = 8
Label1.Name = "Label1"
Label2.FontName = "MS Sans Serif"
Label2.FontSize = 8
Label2.Name = "Label2"
cmdAddAll.Name = "cmdAddAll"
cmdRemoveAll.Name = "cmdRemoveAll"
CBODATA.FontName = "MS Sans Serif"
CBODATA.FontSize = 8
CBODATA.Name = "CBODATA"
LSTTABLES.FontName = "MS Sans Serif"
LSTTABLES.FontSize = 8
LSTTABLES.Name = "LSTTABLES"
LABEL3.FontName = "MS Sans Serif"
LABEL3.FontSize = 8
LABEL3.Name = "LABEL3"
CMDOPEN.Name = "CMDOPEN"
fPROCEDURE finish
WITH THIS.oWizStyle
	.cProjectName = THIS._folder1.txtProjectName.Value
	.cOutFile = THIS._folder1.txtProjectFile.Value
	.lCreateDir = THIS._folder1.chkCreateProjDir.Value
	.lFavorites = THIS.chkFavorites.Value
	.lRunWizard = .T.
ENDWITH

ENDPROC
PROCEDURE Init
IF  fontmetric(1, 'MS Sans Serif', 8, '') # 13 OR ;
	fontmetric(4, 'MS Sans Serif', 8, '') # 2 OR ;
	fontmetric(6, 'MS Sans Serif', 8, '') # 5 OR ;
	fontmetric(7, 'MS Sans Serif', 8, '') # 11
	this.setall('fontname', 'Arial')
ELSE
	this.setall('fontname','MS Sans Serif')
ENDIF
this.setall('fontsize',8)

ENDPROC
=PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE modify
THIS.oShared.Modify(THIS)
ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

LOCAL oProjMenu

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,,.T.)
this.AddMenuSeparator
oProjMenu = THIS.NewMenu()
THIS.oShared.AddProjectMenu(@oProjMenu)
this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.Modify()

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
��� ���%
�h�U�%%�C���
�C�����C	����"T��������������%%�C���
�C�����C	����"T�����������������*T�����������WIZBTNS.VCX����%%�C���
�C�����C	����"T��������������%%�C���
�C�����C	��V�"T�����������������*T�����������WIZBTNS.VCX����B�C�FORM�����UTHISCVISUALSTYLEOUTILS
AWIZSTYLESCVISUALCLASSLIB
CCODESTYLE
CCODECLASSLIB
AUTOWIZARD%%�C���
�C�����C	��_�T��������T�������T����-���B�C�REPORT�����UTHISCVISUALSTYLEOUTILS
CSTYLEFILENLAYOUT
LLANDSCAPE
AUTOWIZARDf���
T�����%%�C���
�C�����C	��I�T�������B�C�
������U	CTEMPLATETHIS
CTEMPLATENAMEOUTILSAUTOAPPL
H�
��R�C���
�<CCC����@�appstyle.ico�rptstyle.ico�frmstyle.ico�
	��_��C��f�A����)T����	graphics\�appstyle.ico���C��f�R����)T����	graphics\�rptstyle.ico���C��f�F���)T����	graphics\�frmstyle.ico���T���C������B�����UTHISCPICTURE
CTEMPLATETYPEFULLPATHX%�C�����O��E�-T���C�VFPGLRY!GLRYUTILOBJ������B�����UTHISOUTILSOHOST	GETOBJECT)���T����
���
��C����UVNEWVALTHIS
CTEMPLATETYPEREFRESHPICTURET����UTHISOUTILS)%�C�
���B�-���
B�C����UTHISRUN�%�C�
���B�-���
H�&�������A��H�
��C��������F��j�
��C��������R����
��C����2����UTHIS
CTEMPLATETYPERUNAPPWIZARD
RUNFORMWIZARDRUNREPORTWIZARD�������%�C��
��'�B�-���
H�8�������A��k�T���Ne\<w Application������F����T���
Ne\<w Form������R����T���Ne\<w Report��2����&��C�
��oTHIS.Run()����a����UTOOBJECTCNEWTYPETHIS
CTEMPLATETYPE
ADDMENUBAR@
H�
��R�C���
�<CCC����@�appstyle.ico�rptstyle.ico�frmstyle.ico�
	��_��C��f�A����)T����	graphics\�appstyle.ico���C��f�R����)T����	graphics\�rptstyle.ico���C��f�F���)T����	graphics\�frmstyle.ico���T���C������UTHISCPICTURE
CTEMPLATETYPEFULLPATH�����
��C����UOSOURCENXCOORDNYCOORDTHISDBLCLICK
runformwizard,��runreportwizard:��runappwizard��cpicture_access���
outils_access��ctemplatetype_assign���Destroy���dblclick��runL��setmenu.��refreshpicturea��	dragdrop2�	��1S!Q!��AAS!Q!��AAs3Ra1A�3q�RAc3�"q�q�q�A��3��A�3q!�2�3�qA�3�qA�Q�Q�Q��B3qq!qA�Q�QqQ��Bb3�"q�q�q�A�3��28���'!�f3-��B2"lI6��N8��R=	Y
YJw
7iZ\�
~eU�)�`PROCEDURE runformwizard

* Set Visual Style and its Class Library
IF !EMPTY(THIS.cVisualStyle) AND VARTYPE(THIS.cVisualStyle) = "C"
	THIS.oUtils.aWizStyles[1,1] = THIS.cVisualStyle
	IF !EMPTY(THIS.cVisualClassLib) AND VARTYPE(THIS.cVisualClassLib) = "C"
		THIS.oUtils.aWizStyles[1,2] = THIS.cVisualClassLib
	ELSE
		THIS.oUtils.aWizStyles[1,2] = DEFWIZCLASSLIB
	ENDIF
ENDIF

* Set Button Style and its Class Library
IF !EMPTY(THIS.cCodeStyle) AND VARTYPE(THIS.cCodeStyle) = "C"
	THIS.oUtils.aWizStyles[2,1] = THIS.cCodeStyle
	IF !EMPTY(THIS.cCodeClasslib) AND VARTYPE(THIS.cCodeClasslib) = "C"
		THIS.oUtils.aWizStyles[2,2] = THIS.cCodeClasslib
	ELSE
		THIS.oUtils.aWizStyles[2,2] = DEFWIZCLASSLIB
	ENDIF
ENDIF

* Run Wizard
RETURN THIS.oUtils.AutoWizard("FORM")

ENDPROC
PROCEDURE runreportwizard
* Set Visual Style and its Class Library
IF !EMPTY(THIS.cVisualStyle) AND VARTYPE(THIS.cVisualStyle) = "C"
	THIS.oUtils.cStyleFile = THIS.cVisualStyle
	THIS.oUtils.nLayout = 1				&& report layout: 1 = columns, 2 = rows
	THIS.oUtils.lLandscape = .F.		&& portrait/landscape
ENDIF

* Run Wizard
RETURN THIS.oUtils.AutoWizard("REPORT")

ENDPROC
PROCEDURE runappwizard
LOCAL cTemplate
cTemplate = ""
* Set template
IF !EMPTY(THIS.cTemplateName) AND VARTYPE(THIS.cTemplateName) = "C"
	cTemplate = THIS.cTemplateName
ENDIF

* Run Wizard
RETURN THIS.oUtils.AutoApp(m.cTemplate)

ENDPROC
PROCEDURE cpicture_access
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_APPSTYLE,ICO_RPTSTYLE,ICO_FRMSTYLE)
CASE UPPER(THIS.cTemplateType) = "A"
	THIS.cPicture = ICONFOLDER+ICO_APPSTYLE
CASE UPPER(THIS.cTemplateType) = "R"
	THIS.cPicture = ICONFOLDER+ICO_RPTSTYLE
CASE UPPER(THIS.cTemplateType) = "F"
	THIS.cPicture = ICONFOLDER+ICO_FRMSTYLE
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)
RETURN THIS.cpicture

ENDPROC
PROCEDURE outils_access
IF VARTYPE(THIS.oUtils) # "O"
	THIS.oUtils = THIS.oHost.GetObject(OBJ_GLRYUTIL)
ENDIF
RETURN THIS.oUtils

ENDPROC
PROCEDURE ctemplatetype_assign
LPARAMETERS vNewVal
THIS.ctemplatetype = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE Destroy
THIS.oUtils = null

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
RETURN this.Run()

ENDPROC
PROCEDURE run
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
DO CASE
CASE this.cTemplateType = "A"	&&Application Wizard template
	THIS.RunAppWizard()
CASE this.cTemplateType = "F"	&&Form Wizard template
	THIS.RunFormWizard()
CASE this.cTemplateType = "R"	&&Report Wizard template
	THIS.RunReportWizard()
OTHERWISE
	* user-defined
ENDCASE

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject
LOCAL cNewType
IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

DO CASE
CASE this.cTemplateType = "A"	&&Application Wizard template
	cNewType = MENU_NEWAPP_LOC
CASE this.cTemplateType = "F"	&&Form Wizard template
	cNewType = MENU_NEWFORM_LOC
CASE this.cTemplateType = "R"	&&Report Wizard template	
	cNewType = MENU_NEWREPO_LOC
OTHERWISE
	* User-defined
ENDCASE

this.AddMenuBar(m.cNewType,"oTHIS.Run()",,,,,.T.)

ENDPROC
PROCEDURE refreshpicture
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_APPSTYLE,ICO_RPTSTYLE,ICO_FRMSTYLE)
CASE UPPER(THIS.cTemplateType) = "A"
	THIS.cPicture = ICONFOLDER+ICO_APPSTYLE
CASE UPPER(THIS.cTemplateType) = "R"
	THIS.cPicture = ICONFOLDER+ICO_RPTSTYLE
CASE UPPER(THIS.cTemplateType) = "F"
	THIS.cPicture = ICONFOLDER+ICO_FRMSTYLE
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS osource,nxcoord,nycoord
THIS.DBLClick()

ENDPROC
�PROCEDURE Release
THISFORM.oAction.nGetAction = THISFORM.ogDropAction.Value

ENDPROC
PROCEDURE Init
PARAMETER oAction
IF VARTYPE(oAction)#"O"
	RETURN .F.
ENDIF
WITH THISFORM
	.oAction = oAction
	.oAction.AddProperty("nGetAction",1)
	.oAction.AddProperty("lIsForm")
	IF .oAction.lIsForm
		.ogDropAction.Option3.Enabled = .T.
	ENDIF
ENDWITH

IF  fontmetric(1, 'MS Sans Serif', 8, '') # 13 OR ;
	fontmetric(4, 'MS Sans Serif', 8, '') # 2 OR ;
	fontmetric(6, 'MS Sans Serif', 8, '') # 5 OR ;
	fontmetric(7, 'MS Sans Serif', 8, '') # 11
	this.setall('fontname', 'Arial')
ELSE
	this.setall('fontname','MS Sans Serif')
ENDIF
this.setall('fontsize',8)

ENDPROC
gButtonCount = 3
BackStyle = 0
Value = 1
Height = 66
Left = 8
Top = 36
Width = 252
Name = "ogDropAction"
Option1.FontName = "MS Sans Serif"
Option1.FontSize = 8
Option1.Caption = "Add class to project."
Option1.Value = 1
Option1.Height = 17
Option1.Left = 5
Option1.Top = 5
Option1.Width = 128
Option1.AutoSize = .F.
Option1.Name = "Option1"
Option2.FontName = "MS Sans Serif"
Option2.FontSize = 8
Option2.Caption = "Create new class from selected class."
Option2.Height = 17
Option2.Left = 5
Option2.Top = 24
Option2.Width = 228
Option2.AutoSize = .F.
Option2.Name = "Option2"
Option3.FontName = "MS Sans Serif"
Option3.FontSize = 8
Option3.Caption = "Create new form from selected class."
Option3.Enabled = .F.
Option3.Height = 17
Option3.Left = 5
Option3.Top = 43
Option3.Width = 223
Option3.AutoSize = .F.
Option3.Name = "Option3"
�PROCEDURE setformpicture
LOCAL aFrmObj,cObjBase

DIMENSION aFrmObj[1]
IF ASELOBJ(aFrmObj,1) < 1
	RETURN .null.
ENDIF

cObjBase =  UPPER(aFrmObj[1].BaseClass)
IF !INLIST(m.cObjBase,"FORM")
	RETURN .null.
ENDIF

aFrmObj[1].Show
aFrmObj[1].Picture = THIS.cFileName

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

LOCAL lHasForm,aFrmObj
DIMENSION aFrmObj[1]
lHasForm=ASELOBJ(aFrmObj,1)#0

this.AddMenuSeparator
this.AddMenuBar(MENU_SETWALL_LOC,"_screen.Picture=oTHIS.cFilename")
IF !EMPTY(_SCREEN.Picture)
	this.AddMenuBar(MENU_CLEARWALL_LOC,"_screen.Picture=''")
ENDIF
this.AddMenuSeparator
this.AddMenuBar(MENU_FORMWALL_LOC,"oThis.SetFormPicture()",,,,!m.lHasForm)

ENDPROC
PROCEDURE refreshpicture
LOCAL cExt
cExt = UPPER(JUSTEXT(THIS.cFileName))
DO CASE
CASE m.cExt="ICO"
	THIS.cPicture = THIS.cFileName
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_JPEG,ICO_GIF,ICO_PICTURE)
CASE m.cExt="JPG"
	THIS.cPicture = ICONFOLDER+ICO_JPEG
CASE m.cExt="GIF"
	THIS.cPicture = ICONFOLDER+ICO_GIF
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_PICTURE
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
L�� 33��%c���U
���T�����������������J���(����������C����������C���������C�����
��T����a��T���	���
���%��������T���
��������T���
�����UATMPARRTHIS	OWIZSTYLE	CWIZALIAS
TABLEMOVERCURRENTALIAS
GETSELECTIONS
AWIZFIELDS
LRUNWIZARD
LFAVORITESCHKFAVORITESVALUE
CHKPROJECTCPROJECTNAMECBOPROJECTS/%�C��
��#�T���������%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$����� ��C�fontname�Arial�����
�(��C�fontname�
MS Sans Serif�������C�fontsize�����U	_OBROWSERTHISICONSETALLT����UTHIS	OWIZSTYLEfinish,��Init���Release=��1q�1�A�a�1��1A31Ad	��A�3�1�	}��!)3:�� !!�%����UT��������UTHISFORMCBOPROJECTSENABLEDTHISVALUE����%��C�����J�T���-��T���-��T����-����������(��C������!��CCC�
��C��	@�������T����C�C�
�	@���UIPROJECTSCOUNTTHISVALUEENABLEDTHISFORMCBOPROJECTSADDITEMNAME
ACTIVEPROJECTClick,��Initv��1a2qa����A�A1:Uz)!_�� FF�S%��)K�U&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAMEV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT��C������UTHISOSHAREDMODIFY�������%�C��
��'�B�-���%�C����
��K�B�-���1��C�Mo\<dify...�oTHIS.Modify()����a����
����T��C������C������3��C�\<Add to Project�����C�	�
�����UTOOBJECT	OPROJMENUTHISOSHARED	CHECKITEM
ADDMENUBARADDMENUSEPARATORNEWMENUADDPROJECTMENUPROJECTSCOUNTM%�C�
���B�-���%�C����
��9�B�-���
��C����UTHISOSHARED	CHECKITEMMODIFYV�����%�C����
��/�B�-��� ��C���������UOSOURCENXCOORDNYCOORDTHISOSHARED	CHECKITEM	DRAGDROP2T����UTHISOSHAREDaddtoproject,��oshared_access���modify��setmenu5��dblclick���	dragdrop2��Destroy���1q�3��A�3A2qr"qA�qA�A13�qA�qA�3��qA3�2c��	,
J��I#!i�-'25)F[PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF

IF this.oHost.lAddFileDefault
	RETURN THIS.oHost.AddFile(this.cFileName)
ELSE
	RETURN THIS.oHost.OpenFile(this.cFileName)
ENDIF

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord

IF NOT DODEFAULT(oSource, nXCoord, nYCoord) OR VARTYPE(oSource)#"O" OR;
  EMPTY(this.cFileName) OR NOT UPPER(oSource.Name)=="SCREEN" OR;
  !this.oHost.lDragDropToDesktop 
	RETURN .F.
ENDIF

DO (this.oHost.cProgramName) WITH (this.cFileName),,,,,.T.

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject) 
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_ADDCATALOG_LOC,"oTHIS.oHost.AddFile(othis.cFileName)",,,,,this.oHost.lAddFileDefault)
this.AddMenuBar(MENU_OPENCATALOG_LOC,"oTHIS.oHost.OpenFile(othis.cFileName)",,,,,!this.oHost.lAddFileDefault)

ENDPROC
�nuserkey User registry key.
cvfpoptpath Registry path to VFP options settings.
cregdllfile DLL file for registry functions.
cinidllfile DLL file for INI functions.
codbcdllfile DLL file for ODBC functions.
ncurrentos Current operating system code.
ncurrentkey Current registry key.
lloadeddlls Whether registry key functions loaded.
lloadedinis Whether INI functions loaded.
capppathkey Application path registry key.
lcreatekey Whether to create key if one does not already exist.
lhaderror Whether an error occurred.
lloadedodbcs Whether ODBC functions loaded.
*loadregfuncs Loads funtions needed for Registry.
*openkey Opens a registry key.
*closekey Closes a registry key.
*setregkey Sets a registry key setting.
*getregkey Gets a registry key setting.
*getkeyvalue Obtains a value from a registry key.
*setkeyvalue Sets a key value.
*deletekey Deletes a registry key.
*enumoptions Enumerates through all entries for a key and populates array.
*iskey Checks to see if a key exists.
*enumkeys Enumerates through a registry key.
*enumkeyvalues Enumerates through values of a registry key
*deletekeyvalue Deletes value from registry key.
	�� ����%�C��U&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAME$�����C��
������UCSCXNAMETHISOSHARED	ADDTOFORMV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTUREV�����%�C����
��/�B�-��� ��C���������UOSOURCENXCOORDNYCOORDTHISOSHARED	CHECKITEM	DRAGDROP2y%�C�
���B�-���%�C����
��9�B�-���%������]�
��C�����r�
��C�����UTHISOSHARED	CHECKITEMOHOSTLRUNFILEDEFAULTRUNMODIFY��C������UTHISOSHAREDRUN��C������UTHISOSHAREDMODIFY{��������%�C��
��/�B�-���%�C����
��S�B�-���:��C�Mo\<dify...�oTHIS.Modify()�������	
����4��C�	Previe\<w�oTHIS.Run()�������	����
���
�T��C������C������3��C�\<Add to Project�����C�
������T��C����T��C������(��C�
Add to \<Form����
����UTOOBJECT	OPROJMENU	OFORMMENULHASFORMTHISOSHARED	CHECKITEM
ADDMENUBAROHOSTLRUNFILEDEFAULTADDMENUSEPARATORNEWMENUADDPROJECTMENUPROJECTSCOUNTADDFORMMENUT����UTHISOSHARED�
H�
���>�C���
�(CCC����@�	label.ico�
report.ico�
	��K��CCC����f�LBX�����&T����	graphics\�	label.ico��2���'T����	graphics\�
report.ico���T���C������UTHISCPICTURE	CFILENAMEFULLPATHaddtoproject,��	addtoform���oshared_access���cfilename_assignO��	dragdrop2���dblclick@��run���modify+��setmenu]��Destroy���refreshpicture���1q�3q�3��A�3q!�2��qA3�qA�qA1���A3A3A3q�"qA�qA�A�A1��3�3���a�qA�2c���T{��w�="Wo-$��1&�>58\qN:��R)�
PROCEDURE getapppath
* Checks and returns path of application
* associated with a particular extension (e.g., XLS, DOC). 
LPARAMETER cExtension,cExtnKey,cAppKey,lServer
LOCAL nErrNum,cOptName
cOptName = ""

* Check Extension parameter
IF TYPE("m.cExtension") # "C" OR LEN(m.cExtension) > 3
	RETURN ERROR_BADPARM
ENDIF
m.cExtension = "."+m.cExtension

* Open extension key
nErrNum = THIS.OpenKey(m.cExtension)
IF m.nErrNum  # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Get key value for file extension
nErrNum = THIS.GetKeyValue(cOptName,@cExtnKey)

* Close extension key
THIS.CloseKey()

IF m.nErrNum  # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF
RETURN THIS.GetApplication(cExtnKey,@cAppKey,lServer)

ENDPROC
PROCEDURE getlatestversion
LPARAMETER cClass,cExtnKey,cAppKey,lServer

LOCAL nErrNum,cOptName
cOptName = ""

* Open class key (e.g., Excel.Sheet)
nErrNum = THIS.OpenKey(m.cClass+CURVER_KEY)
IF m.nErrNum  # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Get key value for file extension
nErrNum = THIS.GetKeyValue(cOptName,@cExtnKey)

* Close extension key
THIS.CloseKey()

IF m.nErrNum  # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF
RETURN THIS.GetApplication(cExtnKey,@cAppKey,lServer)

ENDPROC
PROCEDURE getapplication
PARAMETER cExtnKey,cAppKey,lServer

LOCAL nErrNum,cOptName
cOptName = ""

* lServer - checking for OLE server.
IF TYPE("m.lServer") = "L" AND m.lServer
	THIS.cAppPathKey = OLE_PATH_KEY
ELSE	
	THIS.cAppPathKey = APP_PATH_KEY
ENDIF

* Open extension app key
m.nErrNum = THIS.OpenKey(m.cExtnKey+THIS.cAppPathKey)
IF m.nErrNum  # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Get application path
nErrNum = THIS.GetKeyValue(cOptName,@cAppKey)

* Close application path key
THIS.CloseKey()

RETURN m.nErrNum

ENDPROC
PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE addtoform
LPARAMETER cSCXName
THIS.oShared.AddToForm(THIS,m.cSCXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)

ENDPROC
PROCEDURE run
THIS.oShared.Run(THIS)

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

IF THIS.oHost.lRunFileDefault
	THIS.Run()
ELSE
	THIS.Modify()
ENDIF

ENDPROC
PROCEDURE modify
THIS.oShared.Modify(THIS)

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

LOCAL oProjMenu,oFormMenu,lHasForm

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,,!this.oHost.lRunFileDefault)
this.AddMenuBar(MENU_RUN_LOC,"oTHIS.Run()",,,,,this.oHost.lRunFileDefault)

this.AddMenuSeparator

oProjMenu = THIS.NewMenu()
THIS.oShared.AddProjectMenu(@oProjMenu)
this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

oFormMenu = THIS.NewMenu()
lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
|oshared
lruntimer Use if launching modal form with ActiveX control.
*addtoproject 
*oshared_access 
*cfilename_assign 
PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)

ENDPROC
PROCEDURE run
THIS.oShared.Run(THIS)

ENDPROC
PROCEDURE modify
THIS.oShared.Modify(THIS)
ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

LOCAL oProjMenu

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,,!this.oHost.lRunFileDefault)
this.AddMenuBar(MENU_RUN_LOC,"oTHIS.Run()",,,,!INLIST(UPPER(JUSTEXT(THIS.cFileName)),"PRG","QPR","MPR"),this.oHost.lRunFileDefault)
this.AddMenuSeparator
oProjMenu = THIS.NewMenu()
THIS.oShared.AddProjectMenu(@oProjMenu)
this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
IF this.oHost.lRunFileDefault
	this.Run()
ELSE
	this.Modify()
ENDIF

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
PROCEDURE refreshpicture
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_PROGRAM,ICO_TEXT)
CASE INLIST(UPPER(JUSTEXT(THIS.cFileName)),"PRG","QPR","MPR")
	THIS.cPicture = ICONFOLDER+ICO_PROGRAM
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_TEXT
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
I�� 00�	%Vg6��U&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAME$�����C��
������UCSCXNAMETHISOSHARED	ADDTOFORMV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECTV�����%�C����
��/�B�-��� ��C���������UOSOURCENXCOORDNYCOORDTHISOSHARED	CHECKITEM	DRAGDROP2��C������UTHISOSHAREDRUNy%�C�
���B�-���%�C����
��9�B�-���%������]�
��C�����r�
��C�����UTHISOSHARED	CHECKITEMOHOSTLRUNFILEDEFAULTRUNMODIFY��C������UTHISOSHAREDMODIFYw��������%�C��
��/�B�-���%�C����
��S�B�-���:��C�Mo\<dify...�oTHIS.Modify()�������	
����0��C�Ru\<n�oTHIS.Run()�������	����
���
�T��C������C������3��C�\<Add to Project�����C�
������T��C����T��C������(��C�
Add to \<Form����
����UTOOBJECT	OPROJMENU	OFORMMENULHASFORMTHISOSHARED	CHECKITEM
ADDMENUBAROHOSTLRUNFILEDEFAULTADDMENUSEPARATORNEWMENUADDPROJECTMENUPROJECTSCOUNTADDFORMMENUT����UTHISOSHAREDaddtoproject,��	addtoform���oshared_access���	dragdrop2O��run���dblclick��modify���setmenu��Destroy2��1q�3q�3��A�3��qA3A3�qA�qA2���A3A3q�"qA�qA��A1��3�2c���Tt
$<[ !<-"Z�14�K)0S�� ::pM
%#a=��U&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAMEV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTUREV�����%�C����
��/�B�-��� ��C���������UOSOURCENXCOORDNYCOORDTHISOSHARED	CHECKITEM	DRAGDROP2��C������UTHISOSHAREDRUN��C������UTHISOSHAREDMODIFY=������%�C��
��'�B�-���%�C����
��K�B�-���:��C�Mo\<dify...�oTHIS.Modify()�������
����O��C�Ru\<n�oTHIS.Run()���CCC����f�PRG�QPR�MPR�
�������
���	�T��C��
����C������3��C�\<Add to Project�����C��
�����UTOOBJECT	OPROJMENUTHISOSHARED	CHECKITEM
ADDMENUBAROHOSTLRUNFILEDEFAULT	CFILENAMEADDMENUSEPARATORNEWMENUADDPROJECTMENUPROJECTSCOUNTy%�C�
���B�-���%�C����
��9�B�-���%������]�
��C�����r�
��C�����UTHISOSHARED	CHECKITEMOHOSTLRUNFILEDEFAULTRUNMODIFYT����UTHISOSHARED�
H�
���>�C���
�(CCC����@�program.ico�text.ico�
	��K�)�CCC����f�PRG�QPR�MPR�����(T����	graphics\�program.ico��2���%T����	graphics\�text.ico���T���C������UTHISCPICTURE	CFILENAMEFULLPATHaddtoproject,��oshared_access���cfilename_assign��	dragdrop2Z��run���modify#��setmenuU��dblclick0��Destroy���refreshpicture��1q�3��A�3q!�3��qA3A3A2qr"qA�qA���A13�qA�qA1���A3�3�����QA�2c��	e

�5Mj���"&�w62��D4�	H):yPROCEDURE addcustomclass
LPARAMETERS cClasslib,cClass

WITH THISFORM
	IF ALEN(.aUserClasses) = 29	&&total classes
		DIMENSION .aUserClasses[ALEN(.aUserClasses)+1]
	ENDIF
	.aUserClasses[ALEN(.aUserClasses)] = m.cClass
	.cboClass.RowSource = "THISFORM.aUserClasses"
	.cboClass.Value = m.cClass
	.lblFromFile.Caption = m.cClasslib
	DIMENSION .aCustClasses[2]
	.aCustClasses[1] = m.cClasslib
	.aCustClasses[2] = m.cClass
ENDWITH

ENDPROC
PROCEDURE Init
PARAMETER oAction
IF VARTYPE(oAction)#"O"
	RETURN .F.
ENDIF
THISFORM.oAction = oAction

WITH THISFORM

	.oAction.AddProperty("cNewClass")
	IF VARTYPE(.oAction.cNewClass) = "C"
		.txtClass.Value = .oAction.cNewClass 
	ENDIF

	.oAction.AddProperty("cSaveClassLib")
	IF VARTYPE(.oAction.cSaveClassLib) = "C"
		.txtClasslib.Value = .oAction.cSaveClassLib
	ENDIF

	.oAction.AddProperty("cFromClass")
	.oAction.AddProperty("cFromClassLib")
	IF VARTYPE(.oAction.cFromClass) = "C" AND !EMPTY(.oAction.cFromClass)
		.AddCustomClass(.oAction.cFromClassLib,.oAction.cFromClass)
	ENDIF

ENDWITH

IF  fontmetric(1, 'MS Sans Serif', 8, '') # 13 OR ;
	fontmetric(4, 'MS Sans Serif', 8, '') # 2 OR ;
	fontmetric(6, 'MS Sans Serif', 8, '') # 5 OR ;
	fontmetric(7, 'MS Sans Serif', 8, '') # 11
	this.setall('fontname', 'Arial')
ELSE
	this.setall('fontname','MS Sans Serif')
ENDIF
this.setall('fontsize',8)

ENDPROC
?�� &&�4%
�@=�U)%�C�
���B�-���
B�C����UTHISRUNP���%�C��
�� �B�-���)��C�\<Open�oTHIS.Run()����a����UTOOBJECTTHIS
ADDMENUBAR�������%�C�
��(�B�-���%�C���
��P�
��C����B��%�C����
C��0
��z�B�-���G�(����T������T��C�����
H������C�.SCX��������%���	��p�%�C���
��6�>THIS.oHost.RunCodeTimer([DO FORM "&cCmd" WITH &cTmpParm.])
�l�.THIS.oHost.RunCodeTimer([DO FORM "&cCmd"])
����%�C���
����+DO FORM (THIS.cFileName) WITH &cTmpParm
����������<�CCC���Rf�.PRG�.MPR�.QPR�.FXP�.APP�����%���	����%�C���
��l�9THIS.oHost.RunCodeTimer([DO "&cCmd" WITH &cTmpParm.])
���)THIS.oHost.RunCodeTimer([DO "&cCmd"])
����%�C���
����&DO (THIS.cFileName) WITH &cTmpParm
���
��������C�.EXE������.�RUN /N "&cCmd"
4�C�.FRX�����C�.LBX������q�?������2�����C����open��
����G�(���
���U
	CHELPFILECSETHELPCTMPPARMCCMDTHISCSCRIPT	RUNSCRIPT	CFILENAME
CPARMBLOCK	LRUNTIMEROHOSTSHELLEXECUTE
DATASESSIONIDdblclick,��setmenud��run���1�qA�3q!qA�31�qA3�AA�qA�!��1���A�1���AA�1���A�1a��AA�!B���A"2Om�E)&��� ��l�%�-1��U����������
T�����/%�C�m.cExtensionb�C�C�
�>���d�
B�������T�
���.�
���T��C�
�����%��
������B��
����T��C������
��C��	��%��
������B��
����B�C�����
��U
CEXTENSIONCEXTNKEYCAPPKEYLSERVERNERRNUMCOPTNAMETHISOPENKEYGETKEYVALUECLOSEKEYGETAPPLICATION�����������
T�����!T��C�
��\CurVer����%��
����j�B��
����T��C������
��C��	��%��
������B��
����B�C�����
��UCCLASSCEXTNKEYCAPPKEYLSERVERNERRNUMCOPTNAMETHISOPENKEYGETKEYVALUECLOSEKEYGETAPPLICATION 4��������
T�����&%�C�	m.lServerb�L��
�	��|�/T����\Protocol\StdFileEditing\Server�����#T����\Shell\Open\Command���T�
��C�
�������%��
������B��
����T��C������
��C��	��B��
���U
CEXTNKEYCAPPKEYLSERVERNERRNUMCOPTNAMETHISCAPPPATHKEYOPENKEYGETKEYVALUECLOSEKEY
getapppath,��getlatestversion���getapplication���13����Aas1�A��2�A�31��1�A��2�A�3���c��1A�1�A���2��� !��8)��PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE addtoform
LPARAMETER cSCXName
THIS.oShared.AddToForm(THIS,m.cSCXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
IF this.oHost.lRunFileDefault
	this.Run()
ELSE
	this.Modify()
ENDIF

ENDPROC
PROCEDURE run
THIS.oShared.RUN(THIS)

ENDPROC
PROCEDURE modify
THIS.oShared.Modify(THIS)

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

LOCAL oProjMenu,oFormMenu,lHasForm

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,,!this.oHost.lRunFileDefault)
this.AddMenuBar(MENU_PREVIEW_LOC,"oTHIS.Run()",,,,,this.oHost.lRunFileDefault)
this.AddMenuSeparator

oProjMenu = THIS.NewMenu()
THIS.oShared.AddProjectMenu(@oProjMenu)
this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

oFormMenu = THIS.NewMenu()
lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
PROCEDURE refreshpicture
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_LABEL,ICO_REPORT)
CASE INLIST(UPPER(JUSTEXT(THIS.cFileName)),"LBX")
	THIS.cPicture = ICONFOLDER+ICO_LABEL
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_REPORT
ENDCASE	
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
I�� 00�%0�+q�U�����
�����%�C����`�
��8�B���T��CC���f��%�C�
��FORM�
��r�B����������T����������UAFRMOBJCOBJBASE	BASECLASSSHOWPICTURETHIS	CFILENAMEC���%�C��
�� �B�-�������
�����T��C����`���
����C��C�Set VFP Wallpaper�_screen.Picture=oTHIS.cFilename����%�C�9��
����8��C�Clear VFP Wallpaper�_screen.Picture=''�����
����F��C�Set Form \<Wallpaper�oThis.SetFormPicture()���
�
����UTOOBJECTLHASFORMAFRMOBJTHISADDMENUSEPARATOR
ADDMENUBARPICTURE`���T��CC����f��
H�)�?���
��ICO��R�T�������H�C���
�2CCC����@�jpeg.ico�gif.ico�picture.ico�
	������
��JPG����%T����	graphics\�jpeg.ico����
��GIF���$T����	graphics\�gif.ico��2�?�(T����	graphics\�picture.ico���T���C������UCEXTTHIS	CFILENAMECPICTUREFULLPATHsetformpicture,��setmenu��refreshpicture���1���qAb�qA�3q"qA����1!�A�a3qQ�a1�aQaA��A�2
3��&)0��� ���%��|�U B�C�FORM�������UTHISOUTILS
AUTOWIZARD	CFILENAME"B�C�REPORT�������UTHISOUTILS
AUTOWIZARD	CFILENAME!B�C�PIVOT�������UTHISOUTILS	RUNWIZARD	CFILENAME B�C�MAIL�������UTHISOUTILS	RUNWIZARD	CFILENAME�������T��C��
������%�C�
����O����#%�C������CC�
	����T���C����C���	����U
CSCXNAMEONEWOBJTHISOSHARED	ADDTOFORMOUTILSOPENDATA	CFILENAMERECORDSOURCE
ADDDATAENV)&B�C���
�CC����f�DBC	��UTHIS	CVIEWNAME	CFILENAME�	��
��T��CW��G�(����%�C�������g�%�CC�
��c���G�����C�������F��
���G�(������U	NSAVEAREATHISOUTILSOPENDATA	CFILENAMEOHOST
DATASESSIONID&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAMEV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECTX%�C�����O��E�-T���C�VFPGLRY!GLRYUTILOBJ������B�����UTHISOUTILSOHOST	GETOBJECT����%�CC����B�����������
�����T������T��CC�DATABASE�@��T��CC�
SOURCENAME�@��$+�C�oFormb�O�C��
	���� %�C��
ShowWindow��h����!%�C��
ShowWindow��h
����%�C����`����!��T��C����T���1��-+�C�oDataEnvRef.Cursor�
�b�U����T���Cursor�
���#WITH oDataEnvRef.&cNewName.���"%��	�
���
�
�	����
T�����B����T�
��CCC�
�g�Z����T���Cursor�
�����C�
��cursor����#WITH oDataEnvRef.&cNewName.���T��CC@��T�	��
���%�C�
��
����T�
��
�������!��T�������
T�����
T�����U
OSOURCEOFORMODATAENVREFADATAENVNINCCNEWNAME	CDATABASECSOURCENAMEPARENTCURSORSOURCEDATABASE	ADDOBJECTALIAS)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTURE)���T����
���
��C����UVNEWVALTHIS	CVIEWNAMEREFRESHPICTURE���������%�C����
��6�B�-���%�C����O�B��$T��C���������%�C�
����O����G�(���	��#%�C����
��CC�
	����T��
�C����C�������UOSOURCENXCOORDNYCOORDONEWOBJTHISOSHARED	CHECKITEMISVIEW	DRAGDROP2
DATASESSIONIDOUTILSOPENDATA	CFILENAMERECORDSOURCE
ADDDATAENV����%�C��
�� �B�-���%�C����
��D�B�-��������1��C�\<Browse�	oTHIS.Run�������	����8��C�Mo\<dify...�oTHIS.Modify�������	
����%�C��

����
����T��C����T��C����
��(��C�
Add to \<Form����
����T��C������C������3��C�\<Add to Project�����C�������
����-��C�\<Quick Form�oTHIS.AutoForm����1��C�Quic\<k Report�oTHIS.AutoReport����
����3��C�\<Word Mail Merge�oTHIS.MailMerge����5��C�\<Excel Pivot Table�oTHIS.MakePivot����1��C�\<Output to HTML�oTHIS.MakeHTML�����UTOOBJECTTHISOSHARED	CHECKITEMLHASFORM	OPROJMENU	OFORMMENU
ADDMENUBAROHOSTLRUNFILEDEFAULTISVIEWADDMENUSEPARATORNEWMENUADDFORMMENUADDPROJECTMENUPROJECTSCOUNTy%�C�
���B�-���%�C����
��9�B�-���%������]�
��C�����r�
��C�����UTHISOSHARED	CHECKITEMOHOSTLRUNFILEDEFAULTRUNMODIFY@���%�C�
���
��'�B�-���%�C���
�	C��0	��9�T��CW��F��%�C��
����%�C���a�������G�(����/����G�(����������+%�C���view�
sourcetype�����/�������/�������F��
���G�(����	���U
	NSAVEAREATHISLMODIFY	CFILENAMEISVIEWOUTILSOPENDATA	CVIEWNAMEOHOST
DATASESSIONID����%�C�
���B�-���%�C���
�	C��0	����T��CW�� %�C���������|�G�(����	:���U	NSAVEAREATHIS	CFILENAMEOUTILSOPENDATA	CVIEWNAMET����T����UTHISOSHAREDOUTILS�
H�
���<�C���
�&CCC����@�view.ico�	table.ico�
	��I��C���
����%T����	graphics\�view.ico��2���&T����	graphics\�	table.ico���T���C������UTHISCPICTURE	CVIEWNAMEFULLPATHautoform,��
autoreportu��	makepivot���	mailmerge	��	addtoformQ��isviewJ��makehtml���addtoprojectg��oshared_access���
outils_access>��
adddataenv���cfilename_assign��cviewname_assignk��	dragdrop2���setmenuG
��dblclick�
��modifyW��run���Destroy���refreshpicture���1�3�3�3�3qq�q1�AA3a3������AA�!3q�3��A�3��A�3q�AA����B�BA���1"�AAA�A��1�!AAAAAA��3q!�2q!�2�q�qAAACr�1�AA3q"qA�qA��"���A1���1QA3�qA�qA1���A3q�qA���!��QA�������AA�!A3q�qA���aAA3��2��1Q�aA�2Jk���	N
	ni����! R.#w�3(	v:-��
AY�
2{]Y��a��
�r�
z���@��]����������0D�)��PROCEDURE addtoform
LPARAMETER cSCXName
LOCAL oNewObj
oNewObj=THIS.oShared.AddToForm(THIS,m.cSCXName)
IF VARTYPE(m.oNewObj)="O"
	WITH oNewObj
		.Caption = this.cText
		.AutoSize = .T.
		.cTarget = this.cFileName
	ENDWITH
ENDIF

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
LOCAL oNewObj
oNewObj=THIS.oShared.DragDrop2(oSource,nXCoord,nYCoord,THIS)
IF VARTYPE(m.oNewObj)="O"
	WITH oNewObj
		.Caption = this.cText
		.AutoSize = .T.
		.cTarget = this.cFileName
	ENDWITH
ENDIF

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

LOCAL lHasForm

this.AddMenuBar(MENU_OPEN_LOC,"oTHIS.Run()",,,,,.T.)
this.AddMenuSeparator

oFormMenu = THIS.NewMenu()
lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
this.AddMenuBar(MENU_ADDHYPER_LOC,oFormMenu,,,,!lHasForm)

ENDPROC
PROCEDURE run
LOCAL lcURL, oUtils, nErr
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
lcURL = this.cFileName
IF EMPTY(m.lcURL)
	RETURN .F.
ENDIF
nErr = this.oHost.ShellExecute(m.lcURL)
RETURN m.nErr>31

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
this.Run()

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
PROCEDURE refreshpicture
LOCAL cExt
cExt = UPPER(JUSTEXT(THIS.cFileName))

DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_WEBFILE,ICO_WEBDOC,ICO_WEBSITE)
CASE ATC("http://",THIS.cFileName)#0
	THIS.cPicture = ICONFOLDER+ICO_WEBSITE
CASE INLIST(m.cExt,"ASP","HTM","HTML")
	THIS.cPicture = ICONFOLDER+ICO_WEBFILE
CASE m.cExt="APP"
	THIS.cPicture = ICONFOLDER+ICO_WEBDOC
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_WEBSITE
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
�PROCEDURE shellexec
* WinApi :: ShellExecute
*********************************
***  Function: Opens a file in the application that it's
***            associated with.
***      Pass: lcFileName -  Name of the file to open
***   
***  Return:   2  - Bad Association (e.g., invalid URL)
***            31 - No application association
***            29 - Failure to load application
***            30 - Application is busy 
***
***            Values over 32 indicate success
***            and return an instance handle for
***            the application started (the browser) 
************************************************************************
LPARAMETERS lcFileName, lcWorkDir, lcOperation

lcWorkDir=IIF(type("m.lcWorkDir")="C",m.lcWorkDir,"")  &&can be SYS(2023)
lcOperation=IIF(type("m.lcOperation")="C" AND !EMPTY(m.lcOperation),m.lcOperation,"Open")

*-* HINSTANCE ShellExecute(hwnd, lpszOp, lpszFile, lpszParams, lpszDir, wShowCmd)
*-* 
*-* HWND hwnd;	/* handle of parent window	*/
*-* LPCTSTR lpszOp;	/* address of string for operation to perform	*/
*-* LPCTSTR lpszFile;	/* address of string for filename	*/
*-* LPTSTR lpszParams;	/* address of string for executable-file parameters	*/
*-* LPCTSTR lpszDir;	/* address of string for default directory	*/
*-* INT wShowCmd;	/* whether file is shown when opened	*/

DECLARE INTEGER ShellExecute ;
    IN SHELL32.DLL ;
    INTEGER nWinHandle,;
    STRING cOperation,;   
    STRING cFileName,;
    STRING cParameters,;
    STRING cDirectory,;
    INTEGER nShowWindow

    
RETURN ShellExecute(0,m.lcOperation,m.lcFilename,"",m.lcWorkDir,1)

ENDPROC
PROCEDURE autowizard
LPARAMETER cWizard,cWizFile
LOCAL nSaveArea, cFileDatabase
IF VARTYPE(m.cWizard)#"C" OR EMPTY(m.cWizard)
	RETURN .F.
ENDIF
THIS.cOutFile = ""
THIS.cProjectName = ""
SET DATASESSION TO 1
nSaveArea = SELECT()

DO CASE
CASE VARTYPE(m.cWizFile)="C" AND !FILE(m.cWizFile)
	THIS.lRunWizard = .F.
CASE VARTYPE(m.cWizFile)="C"
	IF THIS.OpenData(m.cWizFile)
		THIS.cWizAlias = ALIAS()
	ELSE
		THIS.lRunWizard = .F.
	ENDIF
OTHERWISE
	THIS.lRunWizard = .F.
	oData = NewObject(DATAPICKER_CLASS,HOME()+VFPGLRY_VCX)
	oData.oWizStyle = THIS
	oData.Show
	IF EMPTY(THIS.aWizFields)
		THIS.lBlankform = .T.
	ENDIF
ENDCASE

IF THIS.lRunWizard
	DO CASE
	CASE ATC("FORM",m.cWizard) # 0
		THIS.nWizAction = 3
		DO (_WIZARD) WITH "AUTOFORM","","",THIS
	CASE ATC("REPORT",m.cWizard) # 0
		THIS.nWizAction = 2
		DO (_WIZARD) WITH "AUTOREPORT","","",THIS
	ENDCASE
ENDIF


SELECT (m.nSaveArea)
SET DATASESSION TO (_oBrowser.DataSessionID)

* Reset properties
THIS.SaveSets()

IF !EMPTY(THIS.cOutFile) AND FILE(THIS.cOutFile)
	IF THIS.lFavorites
		oCatalog = _oBrowser.GetFolder("favorites")
		IF !ISNULL(oCatalog)
			oNode=_oBrowser.CreateNode(oCatalog,"_FileItem",THIS.cOutFile,.T.)
		ENDIF	
	ENDIF
	IF !EMPTY(THIS.cProjectName)
		_VFP.Projects(THIS.cProjectName).Files.Add(THIS.cOutFile)
	ENDIF
ENDIF

ENDPROC
PROCEDURE savesets
* Reset properties
DIMENSION THIS.aWizFields[1,1]
DIMENSION THIS.aWizSorts[1,1]
DIMENSION THIS.aWizStyles[2,2]

THIS.cWizAlias = ""
STORE "" TO THIS.aWizFields,THIS.aWizSorts,THIS.aWizStyles
THIS.lBlankform = .F.

ENDPROC
PROCEDURE opendata
LPARAMETER cDataSource,cViewName,lExclusive,nDataSession
LOCAL cEXCL

IF EMPTY(m.cDataSource) OR TYPE("m.cDataSource")#"C" OR !FILE(m.cDataSource)
	RETURN .F.
ENDIF

IF TYPE("m.lExclusive")#"L"
	m.lExclusive = .F.
ENDIF
cEXCL = IIF(m.lExclusive,"EXCLUSIVE","SHARED")

* Ensure we have datasession set
IF TYPE("m.nDataSession")#"N"
	SET DATASESSION TO 1
ENDIF

* Assume we have a view
IF !EMPTY(m.cViewName)
	OPEN DATA (m.cDataSource)
	USE (m.cViewName) AGAIN &cEXCL.
ELSE
	IF USED(JUSTSTEM(m.cDataSource))
		SELECT (JUSTSTEM(m.cDataSource))
		IF !ISEXCLUSIVE() AND m.lExclusive
			USE (m.cDataSource) AGAIN &cEXCL.
		ENDIF
	ELSE
		SELECT 0
		USE (m.cDataSource) AGAIN &cEXCL.
	ENDIF
ENDIF

IF EMPTY(ALIAS())
	RETURN .F.
ENDIF

ENDPROC
PROCEDURE runwizard
LPARAMETER cWizName,cWizFile
LOCAL nSaveArea, cFileDatabase
THIS.lRunWizard=.F.

SET DATASESSION TO 1
nSaveArea = SELECT()

IF THIS.OpenData(m.cWizFile)
	THIS.lRunWizard=.T.
ENDIF

IF THIS.lRunWizard
	IF !EMPTY(m.cWizName)
		DO (_WIZARD) WITH m.cWizName
	ELSE
		DO (_WIZARD)
	ENDIF
ENDIF

SELECT (m.nSaveArea)
SET DATASESSION TO (_oBrowser.DataSessionID)

ENDPROC
PROCEDURE autoapp
LPARAMETER cTemplate,nProjectType

LOCAL oProj, oCatalog, oNode
LOCAL lcHookFile, lcHookClass

IF VARTYPE(m.nProjectType)#"N"
	THIS.nProjectType=IIF(FILE(HOME()+"WIZARDS\_FRAMEWK.DBF"),3,2)
ELSE
	THIS.nProjectType = m.nProjectType
ENDIF

IF !EMPTY(m.cTemplate)
	THIS.nProjectType = 1
	THIS.nDatabaseType = 2
	THIS.cDatabaseTemplate = m.cTemplate
ELSE
	THIS.nDatabaseType = 1
	THIS.cDatabaseTemplate = ""
ENDIF

THIS.lRunWizard = .F.
oProj = NewObject(PROJPICKER_CLASS,HOME()+VFPGLRY_VCX)
oProj.oWizStyle = THIS
oProj.Show

IF !THIS.lRunWizard OR EMPTY(THIS.cOutFile) OR EMPTY(THIS.cProjectName)
	RETURN
ENDIF

DO HOME()+"WIZARDS\WZAPP.APP" WITH "","",THIS

IF FILE(THIS.cOutFile)
	IF THIS.lFavorites
		oCatalog = _oBrowser.GetFolder("favorites")
		IF ISNULL(oCatalog)
			RETURN
		ENDIF	
		oNode=_oBrowser.CreateNode(oCatalog,"_FileItem",THIS.cOutFile,.T.)
	ENDIF
	
	_VFP.Projects[THIS.cOutFile].Build(FORCEEXT(THIS.cOutFile,"APP"),2)
	MODIFY PROJECT (THIS.cOutFile) NOWAIT

	* setup project hooks
	IF THIS.nDatabaseType=1 AND FILE(HOME()+"WIZARDS\"+APPHOOK_FILE)
		lcHookFile = HOME()+"WIZARDS\"+APPHOOK_FILE
		lcHookClass = APPHOOK_CLASS
		_VFP.Projects[THIS.cOutFile].ProjectHookLibrary = lcHookFile
		_VFP.Projects[THIS.cOutFile].ProjectHookClass = lcHookClass
		_VFP.Projects[THIS.cOutFile].Close
		MODIFY PROJECT (THIS.cOutFile) NOWAIT
		_SHELL = [DO (_WIZARD) WITH "Project",,,.T.]
	ENDIF
ENDIF

ENDPROC
PROCEDURE Destroy
THIS.RestoreSets
ENDPROC
PROCEDURE Init
THIS.SaveSets()

ENDPROC
��� ��x=%����UU�������������	���
���
�����������%�����x�	B�����%|�
RegOpenKey�Win32API����%�������
B�������'|�RegCreateKey�Win32API����$|�RegDeleteKey�Win32API���%|�RegDeleteValue�Win32API�� |�RegCloseKey�Win32API�,|�
RegSetValueEx�Win32API������1|�RegQueryValueEx�Win32API�������'|�
RegEnumKey�Win32API�����4|�RegEnumKeyEx�Win32API���������4|�RegEnumValue�Win32API���������T���a��	B����U"NHKEYCSUBKEYNRESULTHKEYIVALUE	LPSZVALUE
LPCCHVALUELPDWTYPELPBDATALPCBDATALPCSTRLPSZVALNLENLPDWRESERVED
LPSZVALUENAME
DWRESERVEDFDWTYPEISUBKEYLPSZNAMECCHNAMETHISLLOADEDDLLS
REGOPENKEYWIN32API	LHADERRORREGCREATEKEYREGDELETEKEYREGDELETEVALUEREGCLOSEKEY
REGSETVALUEEXREGQUERYVALUEEX
REGENUMKEYREGENUMKEYEXREGENUMVALUE������������
T�����T��C��(%�C�	m.nRegKeyb�N�C�
����z�T�
������T��C����%��
������B��
����T������-%��
���C�m.lCreateKeyb�L	���T����
����%�����2�T��C�
��
���	���X�T��C�
��
���
���T����
���%�������B��
����T����
���	B����U
CLOOKUPKEYNREGKEY
LCREATEKEYNSUBKEYNERRCODENPCOUNTLSAVECREATEKEYTHISLOADREGFUNCSREGCREATEKEY
REGOPENKEYNCURRENTKEY#��C�����T������UREGCLOSEKEYTHISNCURRENTKEY�������������
T�����
T�����
T�����T�
��C�
��
���	��%��
������B��
����T��C�
��
���
��
��C����B��
���UCOPTNAMECOPTVALCKEYPATHNUSERKEYIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYSETKEYVALUECLOSEKEY�������������
T�����
T�����
T�����T�
��C�
��
���	��%��
������B��
����T��C����
��
��C����B��
���UCOPTNAMECOPTVALCKEYPATHNUSERKEYIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYGETKEYVALUECLOSEKEYs�����������J���(���J�C�X�(��J�C�
�>�(�
��
H�c���2�C�THIS.nCurrentKeyb�N��������
B������ �C�m.cValueNameb�C����
B�������.T�
��C���
��
�����	��%��
�����B��
���� %��
���
�
��	��G�
B�������T�
��C�
��
��=��	B����U

CVALUENAME	CKEYVALUELPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODETHISNCURRENTKEYREGQUERYVALUEEXK��������
H�#���2�C�THIS.nCurrentKeyb�N������_�
B������6�C�m.cValueNameb�C�C�m.cValueb�C����
B�������C�
���C�
������
B�������T���
�C� ��T��C�
�>��.T�
��C���
����
��
����%��
����;�B��
����	B����U
CVALUENAMECVALUE
NVALUESIZENERRCODETHISNCURRENTKEY
REGSETVALUEEXI�������
T�����T�
��C�
��
����B��
���UNUSERKEYCKEYPATHNERRNUMREGDELETEKEY&������������
T�����
T�����
T�����)%�C�
�C�m.lEnumKeysb�L����T��-���T�
��C�
��
���	��%��
������B��
����%��
�����T��C���
����T��C������
��C����B��
���U
AREGOPTSCOPTPATHNUSERKEY	LENUMKEYSIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYENUMKEYS
ENUMKEYVALUESCLOSEKEY^����T��C�
��
�����%��
����H�
��C�����B��
����UCKEYNAMENREGKEYNERRNUMTHISOPENKEYCLOSEKEY�4����������
T�����
�����+�a����
T�����T��C�dX��T��C�
�>��T��C�dX��T��C�
�>��T��C�dX��3T�
��C�
��
��������	��
H������
������!���
�����!��T��C�
����T��C�
�C�
�>�=��%�CC���
��l���C�����T��C����
���T���
�����!%��
���
�
��	����T�
������B��
���U	AKEYNAMES	NKEYENTRYCNEWKEYCNEWSIZECBUFNBUFLENCRETTIMENKEYSIZENERRCODEREGENUMKEYEXTHISNCURRENTKEY������������������	�
J���(��2%�C�THIS.nCurrentKeyb�N��
����}�
B�������%��
������
B�������+�a����J���(����J�C�X�(���J�C�>�(�
��J�C�>�(�
��4T��C�
��
����
�����
��
H�;�j���
����S�!���
����j�!��T���
�������
������$T���
������C�
��
�=��
H�����������(T���
������C�
��
��=�������4�#T���
�������*Binary*�������m�(T���
������C�
��
��=��2���)T���
�������*Unknown type*����!%��
���
�
��	����T�
������B��
���U
AKEYVALUES	LPSZVALUE
LPCCHVALUELPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODE	NKEYENTRYLARRAYPASSEDTHISNCURRENTKEY
NCURRENTOSREGENUMVALUE����������
T�����
T�����T�
��C�
��
�����%��
����q�B��
����T�
��C���
����
��C��	��B��
���U
COPTNAMECKEYPATHNUSERKEYCOPTIONNERRNUMTHISOPENKEYREGDELETEVALUENCURRENTKEYCLOSEKEY�T�������JT���� Software\Microsoft\VisualFoxPro\�C��\Options\OLEList��
H�j�����2��4��3����B�-��!�C�	Windows 3C�J������T������1�C�
Windows NTC�J���CC�Jg���M�T������T����ADVAPI32.DLL��T����KERNEL32.DLL��T����
ODBC32.DLL��2���T������T����ADVAPI32.DLL��T����KERNEL32.DLL��T����
ODBC32.DLL���UTHISNUSERKEYCVFPOPTPATHVERSION
NCURRENTOSCREGDLLFILECINIDLLFILECODBCDLLFILE+�����T���a����CCE�x��UNERRORCMETHODNLINETHIS	LHADERRORloadregfuncs,��openkey���closekey2��	setregkeyy��	getregkey���getkeyvalue���setkeyvalue�
��	deletekeyg��enumoptions���iskey���enumkeys��
enumkeyvaluesx��deletekeyvalue��Init��Error4��1��1���AS�AsCS�sDE��3�2���qA1�A�!A���A"�A"�3351����1�A���351����1�A���3�r1�!��A�3�A�A��3���!�a���AS�3�A�3�q���321�����A�1�A�R�RA��3��1�A�3q��������2�AA1AA�AAA�1A�A�3r����"�AC�A�RAC�AA1AA2SA��2���AA�A�2�����1�A���31���q�������A3���2��
:43
�
c7�
�iD�)�QK��f���x�`�~���2,�Ko��]#:��#�$v�%`'�|'�'�)�'�PROCEDURE loadregfuncs
* Loads funtions needed for Registry
LOCAL nHKey,cSubKey,nResult
LOCAL hKey,iValue,lpszValue,lpcchValue,lpdwType,lpbData,lpcbData
LOCAL lpcStr,lpszVal,nLen,lpdwReserved
LOCAL lpszValueName,dwReserved,fdwType
LOCAL iSubKey,lpszName,cchName

IF THIS.lLoadedDLLs
	RETURN ERROR_SUCCESS
ENDIF

DECLARE Integer RegOpenKey IN Win32API ;
	Integer nHKey, String @cSubKey, Integer @nResult

IF THIS.lhaderror && error loading library
	RETURN -1
ENDIF

DECLARE Integer RegCreateKey IN Win32API ;
	Integer nHKey, String @cSubKey, Integer @nResult

DECLARE Integer RegDeleteKey IN Win32API ;
	Integer nHKey, String @cSubKey

DECLARE Integer RegDeleteValue IN Win32API ;
	Integer nHKey, String cSubKey

DECLARE Integer RegCloseKey IN Win32API ;
	Integer nHKey

DECLARE Integer RegSetValueEx IN Win32API ;
	Integer hKey, String lpszValueName, Integer dwReserved,;
	Integer fdwType, String lpbData, Integer cbData

DECLARE Integer RegQueryValueEx IN Win32API ;
	Integer nHKey, String lpszValueName, Integer dwReserved,;
	Integer @lpdwType, String @lpbData, Integer @lpcbData

DECLARE Integer RegEnumKey IN Win32API ;
	Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName

DECLARE Integer RegEnumKeyEx IN Win32API ;
	Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName,;
	Integer dwReserved,String @lpszName, Integer @cchName,String @cchName

DECLARE Integer RegEnumValue IN Win32API ;
	Integer hKey, Integer iValue, String @lpszValue, ;
	Integer @lpcchValue, Integer lpdwReserved, Integer @lpdwType, ;
	String @lpbData, Integer @lpcbData
    		
THIS.lLoadedDLLs = .T.

* Need error check here
RETURN ERROR_SUCCESS

ENDPROC
PROCEDURE openkey
* Opens a registry key
LPARAMETER cLookUpKey,nRegKey,lCreateKey

LOCAL nSubKey,nErrCode,nPCount,lSaveCreateKey
nSubKey = 0
nPCount = PARAMETERS()

IF TYPE("m.nRegKey") # "N" OR EMPTY(m.nRegKey)
	m.nRegKey = HKEY_CLASSES_ROOT
ENDIF

* Load API functions
nErrCode = THIS.LoadRegFuncs()
IF m.nErrCode # ERROR_SUCCESS
	RETURN m.nErrCode
ENDIF

lSaveCreateKey = THIS.lCreateKey
IF m.nPCount>2 AND TYPE("m.lCreateKey") = "L"
	THIS.lCreateKey = m.lCreateKey
ENDIF

IF THIS.lCreateKey
	* Try to open or create registry key
	nErrCode = RegCreateKey(m.nRegKey,m.cLookUpKey,@nSubKey)
ELSE
	* Try to open registry key
	nErrCode = RegOpenKey(m.nRegKey,m.cLookUpKey,@nSubKey)
ENDIF

THIS.lCreateKey = m.lSaveCreateKey

IF nErrCode # ERROR_SUCCESS
	RETURN m.nErrCode
ENDIF

THIS.nCurrentKey = m.nSubKey
RETURN ERROR_SUCCESS

ENDPROC
PROCEDURE closekey
* Closes a registry key
=RegCloseKey(THIS.nCurrentKey)
THIS.nCurrentKey =0 

ENDPROC
PROCEDURE setregkey
* This routine sets a registry key setting
* ex. THIS.SetRegKey("ResWidth","640",;
*		"Software\Microsoft\VisualFoxPro\4.0\Options",;
*		HKEY_CURRENT_USER)
LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey
LOCAL iPos,cOptKey,cOption,nErrNum
iPos = 0
cOption = ""
nErrNum = ERROR_SUCCESS

* Open registry key
m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey)
IF m.nErrNum # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Set Key value
nErrNum = THIS.SetKeyValue(m.cOptName,m.cOptVal)

* Close registry key 
THIS.CloseKey()		&&close key
RETURN m.nErrNum

ENDPROC
PROCEDURE getregkey
* This routine gets a registry key setting
* ex. THIS.GetRegKey("ResWidth",@cValue,;
*		"Software\Microsoft\VisualFoxPro\4.0\Options",;
*		HKEY_CURRENT_USER)
LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey
LOCAL iPos,cOptKey,cOption,nErrNum
iPos = 0
cOption = ""
nErrNum = ERROR_SUCCESS

* Open registry key
m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey)
IF m.nErrNum # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Get the key value
nErrNum = THIS.GetKeyValue(cOptName,@cOptVal)

* Close registry key 
THIS.CloseKey()		&&close key
RETURN m.nErrNum

ENDPROC
PROCEDURE getkeyvalue
* Obtains a value from a registry key
* Note: this routine only handles Data strings (REG_SZ)
LPARAMETER cValueName,cKeyValue

LOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCode
STORE 0 TO lpdwReserved,lpdwType
STORE SPACE(256) TO lpbData
STORE LEN(m.lpbData) TO m.lpcbData

DO CASE
CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
	RETURN ERROR_BADKEY
CASE TYPE("m.cValueName") #"C"
	RETURN ERROR_BADPARM
ENDCASE

m.nErrCode=RegQueryValueEx(THIS.nCurrentKey,m.cValueName,;
		m.lpdwReserved,@lpdwType,@lpbData,@lpcbData)

* Check for error 
IF m.nErrCode # ERROR_SUCCESS
	RETURN m.nErrCode
ENDIF

* Make sure we have a data string data type
IF m.lpdwType # REG_SZ AND m.lpdwType # REG_EXPAND_SZ 
	RETURN ERROR_NONSTR_DATA		
ENDIF

m.cKeyValue = LEFT(m.lpbData,m.lpcbData-1)
RETURN ERROR_SUCCESS

ENDPROC
PROCEDURE setkeyvalue
* This routine sets a key value
* Note: this routine only handles data strings (REG_SZ)
LPARAMETER cValueName,cValue
LOCAL nValueSize,nErrCode 

DO CASE
CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
	RETURN ERROR_BADKEY
CASE TYPE("m.cValueName") #"C" OR TYPE("m.cValue")#"C"
	RETURN ERROR_BADPARM
CASE EMPTY(m.cValueName) OR EMPTY(m.cValue)
	RETURN ERROR_BADPARM
ENDCASE

* Make sure we null terminate this guy
cValue = m.cValue+CHR(0)
nValueSize = LEN(m.cValue)

* Set the key value here
m.nErrCode = RegSetValueEx(THIS.nCurrentKey,m.cValueName,0,;
	REG_SZ,m.cValue,m.nValueSize)

* Check for error
IF m.nErrCode # ERROR_SUCCESS
	RETURN m.nErrCode
ENDIF

RETURN ERROR_SUCCESS

ENDPROC
PROCEDURE deletekey
* This routine deletes a Registry Key
LPARAMETER nUserKey,cKeyPath
LOCAL nErrNum
nErrNum = ERROR_SUCCESS

* Delete key
m.nErrNum = RegDeleteKey(m.nUserKey,m.cKeyPath)
RETURN m.nErrNum

ENDPROC
PROCEDURE enumoptions
* Enumerates through all entries for a key and populates array
LPARAMETER aRegOpts,cOptPath,nUserKey,lEnumKeys
LOCAL iPos,cOptKey,cOption,nErrNum
iPos = 0
cOption = ""
nErrNum = ERROR_SUCCESS

IF PARAMETERS()<4 OR TYPE("m.lEnumKeys") # "L"
	lEnumKeys = .F.
ENDIF

* Open key
m.nErrNum = THIS.OpenKey(m.cOptPath,m.nUserKey)
IF m.nErrNum # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Enumerate through keys
IF m.lEnumKeys
	* Enumerate and get key names
	nErrNum = THIS.EnumKeys(@aRegOpts)
ELSE
	* Enumerate and get all key values
	nErrNum = THIS.EnumKeyValues(@aRegOpts)
ENDIF

* Close key
THIS.CloseKey()		&&close key
RETURN m.nErrNum

ENDPROC
PROCEDURE iskey
* Checks to see if a key exists
LPARAMETER cKeyName,nRegKey

* Open extension key		
nErrNum = THIS.OpenKey(m.cKeyName,m.nRegKey)
IF m.nErrNum  = ERROR_SUCCESS
	* Close extension key
	THIS.CloseKey()
ENDIF

RETURN m.nErrNum = ERROR_SUCCESS

ENDPROC
PROCEDURE enumkeys
PARAMETER aKeyNames
LOCAL nKeyEntry,cNewKey,cNewSize,cbuf,nbuflen,cRetTime
nKeyEntry = 0
DIMENSION aKeyNames[1]
DO WHILE .T.
	nKeySize = 0
	cNewKey = SPACE(100)
	nKeySize = LEN(m.cNewKey)
	cbuf=space(100)
	nbuflen=len(m.cbuf)
	cRetTime=space(100)

	m.nErrCode = RegEnumKeyEx(THIS.nCurrentKey,m.nKeyEntry,@cNewKey,@nKeySize,0,@cbuf,@nbuflen,@cRetTime)
	
	DO CASE
	CASE m.nErrCode = ERROR_EOF
		EXIT
	CASE m.nErrCode # ERROR_SUCCESS
		EXIT
	ENDCASE

	cNewKey = ALLTRIM(m.cNewKey)
	cNewKey = LEFT(m.cNewKey,LEN(m.cNewKey)-1)
	IF !EMPTY(aKeyNames[1])
		DIMENSION aKeyNames[ALEN(aKeyNames)+1]
	ENDIF
	aKeyNames[ALEN(aKeyNames)] = m.cNewKey 
	nKeyEntry = m.nKeyEntry + 1
ENDDO

IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0
	m.nErrCode = ERROR_SUCCESS
ENDIF
RETURN m.nErrCode

ENDPROC
PROCEDURE enumkeyvalues
* Enumerates through values of a registry key
LPARAMETER aKeyValues

LOCAL lpszValue,lpcchValue,lpdwReserved
LOCAL lpdwType,lpbData,lpcbData
LOCAL nErrCode,nKeyEntry,lArrayPassed

STORE 0 TO nKeyEntry

IF TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
	RETURN ERROR_BADKEY
ENDIF

* Sorry, Win32s does not support this one!
IF THIS.nCurrentOS = OS_W32S
	RETURN ERROR_BADPLAT
ENDIF

DO WHILE .T.

	STORE 0 TO lpdwReserved,lpdwType,nErrCode
	STORE SPACE(256) TO lpbData, lpszValue
	STORE LEN(lpbData) TO m.lpcchValue
	STORE LEN(lpszValue) TO m.lpcbData

	nErrCode=RegEnumValue(THIS.nCurrentKey,m.nKeyEntry,@lpszValue,;
		@lpcchValue,m.lpdwReserved,@lpdwType,@lpbData,@lpcbData)
	
	DO CASE
	CASE m.nErrCode = ERROR_EOF
		EXIT
	CASE m.nErrCode # ERROR_SUCCESS
		EXIT
	ENDCASE

	nKeyEntry = m.nKeyEntry + 1

	* Set array values
	DIMENSION aKeyValues[m.nKeyEntry,2]
	aKeyValues[m.nKeyEntry,1] = LEFT(m.lpszValue,m.lpcchValue)
	DO CASE
	CASE lpdwType = REG_SZ
		aKeyValues[m.nKeyEntry,2] = LEFT(m.lpbData,m.lpcbData-1)
	CASE lpdwType = REG_BINARY
		* Don't support binary
		aKeyValues[m.nKeyEntry,2] = REG_BINARY_LOC
	CASE lpdwType = REG_DWORD
		* You will need to use ASC() to check values here.
		aKeyValues[m.nKeyEntry,2] = LEFT(m.lpbData,m.lpcbData-1)
	OTHERWISE
		aKeyValues[m.nKeyEntry,2] = REG_UNKNOWN_LOC
	ENDCASE
ENDDO
 
IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0
	m.nErrCode = ERROR_SUCCESS
ENDIF
RETURN m.nErrCode
ENDPROC
PROCEDURE deletekeyvalue
LPARAMETER cOptName,cKeyPath,nUserKey
LOCAL cOption,nErrNum
cOption = cOptName
nErrNum = ERROR_SUCCESS

* Open key
m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey)
IF m.nErrNum # ERROR_SUCCESS
	RETURN m.nErrNum
ENDIF

* Delete the key value
m.nErrNum = RegDeleteValue(THIS.nCurrentKey,m.cOption)

* Close key
THIS.CloseKey()		&& close key
RETURN m.nErrNum

ENDPROC
PROCEDURE Init
THIS.nUserKey = HKEY_CURRENT_USER
THIS.cVFPOptPath = VFP_OPTIONS_KEY1 + _VFP.VERSION + VFP_OPTIONS_KEY2
DO CASE
	CASE _DOS OR _UNIX OR _MAC
		RETURN .F.
	CASE ATC("Windows 3",OS(1)) # 0
		THIS.nCurrentOS = OS_W32S
	CASE ATC("Windows NT",OS(1)) # 0 OR VAL(OS(3))>=5
		THIS.nCurrentOS = OS_NT
		THIS.cRegDLLFile = DLL_ADVAPI_NT
		THIS.cINIDLLFile = DLL_KERNEL_NT	
		THIS.cODBCDLLFile = DLL_ODBC_NT
	OTHERWISE
		* Windows 95
		THIS.nCurrentOS = OS_WIN95
		THIS.cRegDLLFile = DLL_ADVAPI_WIN95
		THIS.cINIDLLFile = DLL_KERNEL_WIN95
		THIS.cODBCDLLFile = DLL_ODBC_WIN95
ENDCASE

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
THIS.lhaderror = .T.
=MESSAGEBOX(MESSAGE())

ENDPROC
�cbaseclass something
csamplefile sdfsdf
oshared
citemhelpfile
vhelpitem
*viewsample 
*addtoform 
*addtoproject 
*cbaseclass_access 
*opensample 
*viewbrowser 
*createform 
*cclass_assign 
*oshared_access 
*locatesample 
*addtopath 
OPROCEDURE autoform
RETURN THIS.oUtils.AutoWizard("FORM",this.cFileName)

ENDPROC
PROCEDURE autoreport
RETURN THIS.oUtils.AutoWizard("REPORT",this.cFileName)

ENDPROC
PROCEDURE makepivot
RETURN THIS.oUtils.RunWizard("PIVOT",this.cFileName)

ENDPROC
PROCEDURE mailmerge
RETURN THIS.oUtils.RunWizard("MAIL",this.cFileName)

ENDPROC
PROCEDURE addtoform
LPARAMETER cSCXName
LOCAL oNewObj
oNewObj=THIS.oShared.AddToForm(THIS,m.cSCXName)
IF VARTYPE(m.oNewObj)="O"
	IF THIS.oUtils.OpenData(this.cFileName) AND !EMPTY(ALIAS())
		oNewObj.recordsource = ALIAS()
		THIS.AddDataEnv(oNewObj)
	ENDIF
ENDIF

ENDPROC
PROCEDURE isview
RETURN (!EMPTY(THIS.cViewName) AND UPPER(JUSTEXT(THIS.cFileName))="DBC")

ENDPROC
PROCEDURE makehtml
LOCAL m.nSaveArea
nSaveArea = SELECT()
SET DATASESSION TO 1
IF THIS.oUtils.OpenData(this.cFileName) 
	IF !EMPTY(ALIAS())
		DO (_GENHTML) WITH "",ALIAS(),2
	ENDIF
ENDIF
SELECT (m.nSaveArea)
SET DATASESSION TO (THIS.oHost.DataSessionID)

ENDPROC
PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE outils_access
IF VARTYPE(THIS.oUtils) # "O"
	THIS.oUtils = THIS.oHost.GetObject(OBJ_GLRYUTIL)
ENDIF
RETURN THIS.oUtils

ENDPROC
PROCEDURE adddataenv
LPARAMETERS oSource
* Set DataEnvironment
* Check if in designer

IF EMPTY(ALIAS())
	RETURN
ENDIF

LOCAL oForm,oDataEnvRef,aDataEnv,nInc,cNewName,cDataBase,cSourceName 
DIMENSION aDataEnv[1]
oForm = oSource.Parent
cDatabase = LOWER(CURSORGETPROP("DATABASE"))
cSourceName = LOWER(CURSORGETPROP("SOURCENAME"))

DO WHILE TYPE("oForm") = "O" AND !ISNULL(oForm)
	IF PEMSTATUS(oForm,"ShowWindow",5)
		IF !PEMSTATUS(oForm,"ShowWindow",1)
			* In design mode
			IF ASELOBJ(aDataEnv,2) = 0
				* In Class Designer, not Form Designer
				EXIT
			ENDIF
			oDataEnvRef  = aDataEnv[1]
			
			* Add Cursor record
			nInc = "1"			
			DO WHILE TYPE("oDataEnvRef.Cursor"+m.nInc) # "U"
				* Check if cursor already exists
				cNewName = "Cursor"+m.nInc
				WITH oDataEnvRef.&cNewName.
					IF .CursorSource == m.cSourceName AND;
						.Database == m.cDatabase
						oForm = ""
						RETURN
					ENDIF
				ENDWITH
				m.nInc = ALLTRIM(STR(VAL(m.nInc)+1))
			ENDDO
			cNewName = "Cursor"+m.nInc

			oDataEnvRef.ADDOBJECT(m.cNewName,"cursor")
			WITH oDataEnvRef.&cNewName.
				.Alias = LOWER(ALIAS())
				.CursorSource = m.cSourceName
				IF !EMPTY(m.cDatabase)
					.Database = m.cDatabase
				ENDIF
			ENDWITH
		ENDIF
		EXIT
	ENDIF
	oForm = oForm.Parent
ENDDO
oForm = ""
oDataEnvRef = ""

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE cviewname_assign
LPARAMETERS vNewVal
THIS.cviewname = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
LOCAL oNewObj
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

IF THIS.IsView()
	RETURN
ENDIF

* Add Grid object to form
oNewObj=THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)

IF VARTYPE(m.oNewObj)="O"
	SET DATASESSION TO oSource.DataSessionID
	IF THIS.oUtils.OpenData(this.cFileName) AND !EMPTY(ALIAS())
		oNewObj.recordsource = ALIAS()
		THIS.AddDataEnv(oNewObj)
	ENDIF
ENDIF

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

LOCAL lHasForm,oProjMenu,oFormMenu 

this.AddMenuBar(MENU_BROWSER_LOC,"oTHIS.Run",,,,,this.oHost.lRunFileDefault)
this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify",,,,,!this.oHost.lRunFileDefault)

IF !THIS.ISVIEW()
	this.AddMenuSeparator
	oFormMenu = THIS.NewMenu()
	lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
	this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)
	oProjMenu = THIS.NewMenu()
	THIS.oShared.AddProjectMenu(@oProjMenu)
	this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

	this.AddMenuSeparator
	this.AddMenuBar(MENU_QUICKFORM_LOC,"oTHIS.AutoForm")
	this.AddMenuBar(MENU_QUICKREPORT_LOC,"oTHIS.AutoReport")

	this.AddMenuSeparator
	this.AddMenuBar(MENU_MAILMERGE_LOC,"oTHIS.MailMerge")
	this.AddMenuBar(MENU_PIVOT_LOC,"oTHIS.MakePivot")
	this.AddMenuBar(MENU_OUTHTML_LOC,"oTHIS.MakeHTML")
ENDIF

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
IF this.oHost.lRunFileDefault
	this.Run()
ELSE
	this.Modify()
ENDIF

ENDPROC
PROCEDURE modify
LOCAL nSaveArea
IF NOT DODEFAULT() OR NOT THIS.lModify
	RETURN .F.
ENDIF
IF !EMPTY(THIS.cFileName) AND FILE(this.cFileName)
	nSaveArea = SELECT()
	SELECT 0
	IF !THIS.ISVIEW()
		IF THIS.oUtils.OpenData(this.cFileName,"",.T.) 
			SET DATASESSION TO 1
			MODIFY STRUCTURE
		ENDIF
	ELSE
		SET DATASESSION TO 1
		OPEN DATA (this.cFileName)
		IF DBGETPROP(this.cViewName,"view","sourcetype")=1  &&Local View
			MODIFY VIEW (this.cViewName)
		ELSE
			MODIFY VIEW (this.cViewName) REMOTE
		ENDIF
	ENDIF
	SELECT (m.nSaveArea)
	SET DATASESSION TO (this.oHost.DataSessionID)
ENDIF

ENDPROC
PROCEDURE run
LOCAL nSaveArea
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !EMPTY(THIS.cFileName) AND FILE(this.cFileName)
	nSaveArea = SELECT()	
	IF THIS.oUtils.OpenData(this.cFileName,this.cViewName)
		SET DATASESSION TO 1
		BROWSE NORMAL NOWAIT
	ENDIF
ENDIF

ENDPROC
PROCEDURE Destroy
THIS.oShared = null
THIS.oUtils = null
ENDPROC
PROCEDURE refreshpicture
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_VIEW,ICO_TABLE)
CASE !EMPTY(THIS.cViewName)
	THIS.cPicture = ICONFOLDER+ICO_VIEW
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_TABLE
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
	 �� 		��	%�>L��U�������T��C��
������%�C�
����O����
�����~�T������T��a��T����	�����U
CSCXNAMEONEWOBJTHISOSHARED	ADDTOFORMCAPTIONCTEXTAUTOSIZECTARGET	CFILENAMEV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTURE���������$T��C���������%�C�
����O����
�������T������T�	�a��T�
��������UOSOURCENXCOORDNYCOORDONEWOBJTHISOSHARED	DRAGDROP2CAPTIONCTEXTAUTOSIZECTARGET	CFILENAME����%�C��
�� �B�-������)��C�\<Open�oTHIS.Run()����a����
����T��C����T��C������5��C�Add Hyperlink to \<Form...����
����U	TOOBJECTLHASFORMTHIS
ADDMENUBARADDMENUSEPARATOR	OFORMMENUNEWMENUOSHAREDADDFORMMENU������%�C�
��$�B�-���T������%�C�
����P�B�-���T��C�
������B��
����ULCURLOUTILSNERRTHIS	CFILENAMEOHOSTSHELLEXECUTE)%�C�
���B�-���
��C����UTHISRUNT����UTHISOSHARED����T��CC����f��
H�)�x�N�C���
�8CCC����@�webfile.ico�
webdoc.ico�website.ico�
	��w� �C�http://��������(T����	graphics\�website.ico��$�C�
��ASP�HTM�HTML����(T����	graphics\�webfile.ico����
��APP��H�'T����	graphics\�
webdoc.ico��2�x�(T����	graphics\�website.ico���T���C������UCEXTTHIS	CFILENAMECPICTUREFULLPATH	addtoform,��oshared_access��cfilename_assign���	dragdrop2���setmenu���run��dblclick���Destroy	��refreshpicture-��1qq�q��AA3��A�3q!�2�qAq��AA3q"qAr���Q3��qAqA��3�qA�3�3qQ���A�aq��A�2���� $W'+q.86M�E;��L=��P)	/�� (I%��O�Ui������%�C�
����C��,�B�-���'T��C����
��������B��
����UCSHELLNERRTHISOHOSTSHELLEXECUTE	CFILENAMECPARAMS������
�����
T�����T��-��%�C����
��Y�B�-��������(�C������R��CC�
����oTHIS.ShellRoutine('C�
����')����
��������%��
����0��C�\<Quick View�oTHIS.QuickView()�����U
ASHELLOPTSLQVIEWILBOLDTHISGETSHELLINFO
ADDMENUBAR�������
�����
T�����
T�����T��-��:%�C������C�
����C	�	C�
��
	����B��
����	B����U
ASHELLOPTSLQVIEWCDEFAULTITHISGETSHELLINFO�������������#���	��
���
��
�������������
�����J���(���
T�����
T�	����T��C�����%�C�
������B�-���%T��C�VFPGLRY!REGOBJ�����%�C����B�-�����������
J���(��T��C�
���	����%�����c�B��T��C�
���\Shell\��T��C��
��a����%��
������B����������T��C��
������7%�C�aShellDefault[1,2]b�C�CC����
	��;�T��CC�������T�T���open���
T�������
���(�C����� %�CCC�
�
��fC�
�f����T��C�
�
���T���
�
�����%��������C��
������C�����T������
������
���(�C�����$%�C�printtoC�
�
�����X�.��%�CC���
������C���������&J�C�
�
��(��C�������
�����(T��C��
�C�
�
�������%����C�aShellCaptions[1,2]b�C	�CC����
	�C�*Binary*C�����	�C�aShellCaptions[1,1]b�C	�C�MuiVerbC�����	����1J�CC����&�\<��(��C����������T�
�C�
�
���
H������C�
�
�open�����T�
��\<Open���C�
�
�print����G�T�
��\<Print���C�
�
�new����t�T�
��\<New���C�
�
�show������T�
��S\<how��2���T�
�C�
�
����!J��
�
�(��C����������%�CC�����������
���(�C����q�"%�C�\<C�
�
������m�+T���
�
������\<C�
�
�������%T��C�QuickView\.�
�����T���
���U
ASHELLOPTIONS
LHASQUICKVIEWCDEFAULTCOPTPATHOREGASHELLVERBS
ASHELLDEFAULTASHELLCAPTIONSCEXTNKEYCAPPKEYICEXTNNERRORCSHELL2NPOSTHIS	CFILENAMEOHOST	GETOBJECT
GETAPPPATHENUMOPTIONS
CSHELLDEFAULTISKEY&�����C���
������UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAMEV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT$�����C��
������UCSCXNAMETHISOSHARED	ADDTOFORM)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTURE����T��CC����f��
H�)������DOC��b�%T����	graphics\�word.ico�����XLS����&T����	graphics\�	excel.ico�����PPT����+T����	graphics\�powerpoint.ico���C��MSG�OFT����(T����	graphics\�outlook.ico���C��CHM�HLP���^�%T����	graphics\�help.ico���C����
��x�B�2���%T����	graphics\�file.ico���T���C������ULCEXTNTHIS	CFILENAMECPICTUREOPARENTCFOLDERPICTUREFULLPATHV�����%�C����
��/�B�-��� ��C���������UOSOURCENXCOORDNYCOORDTHISOSHARED	CHECKITEM	DRAGDROP20%�C�
���B�-�����CC������UTHISSHELLROUTINEGETDEFAULTSHELL<!%�C�
�C����
��(�B�-���
B�C����UTHISOSHARED	CHECKITEMRUNI�������%�C��
��+�B�-���%�C����
��O�B�-���
��C����
����T��C������C����	��3��C�\<Add to Project�����C�����
��%%�C��
���C�
C��
�
	��B�
����T��C����T��C������(��C�
Add to \<Form����
��
���UTOOBJECT	OPROJMENULHASFORMTHISOSHARED	CHECKITEMGETSHELLMENUITEMSADDMENUSEPARATORNEWMENUADDPROJECTMENU
ADDMENUBARPROJECTSCOUNTCCLASS	OFORMMENUADDFORMMENU7������
T�����%T��C�VFPGLRY!REGOBJ�����%�C���[�B�-���7T��C���QuickView\Shell\Open\Command����$%�C�%SystemRoot%�
�������2T�
��C�
SYSTEMROOT5C�
��%SystemRoot%����%����	C�
�0
���B�-���RUN /n &cQView. "&cFile"
UOREGCQVIEWCFILENERRTHISOHOST	GETOBJECT	GETREGKEYT����UTHISOSHAREDshellroutine,��getshellmenuitems���getdefaultshell.��getshellinfo��addtoproject�
��oshared_access�
��	addtoformr��cfilename_assign���refreshpicture��	dragdrop2%��run���dblclick��setmenuw��	quickviewx��Destroy���1qqqqAq�31����qA�!A�A31������A�3�r1�1���1qAR�qA3��AA��1AA3�rb�A��A�AA!QA�BAAB�Aa��
�A��1�A�!�1�AAAbD�!�AAS�2q�3��A�3q�3q!�2qQ�AQAaA����QaA�QA�3��qA3�qAA3qA�3q�"qA�qA��A1R���A31�R�qArA!A�qA�3�2�	�n��!��.w��z5�����(n�������n�������W��u����C�av)_gallery.vcxName = "_datafolder"
�PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()")

ENDPROC
PROCEDURE modify
modify database (oTHIS.cFileName)
ENDPROC
_datafolder_folder1ClassPixels	vfpglry.h_datafolder	vfpglry.hN�Av�(custom	�PROCEDURE buildapp
* Check if project open already
LOCAL nBuildAction,lBuildAll,lBuildErrors,cOutPutName
LOCAL cExt,lHadError,cAction,i,lProjectIsOpen
IF EMPTY(this.cFileName) OR !FILE(this.cFileName)
	RETURN .F.
ENDIF
lProjectIsOpen = .F.
FOR i = 1 TO _VFP.Projects.Count
	IF UPPER(_VFP.Project[m.i].Name) = UPPER(THIS.cFileName)
		lProjectIsOpen = .T.
		EXIT
	ENDIF
ENDFOR

IF !m.lProjectIsOpen
	THIS.Modify()
ENDIF

nBuildAction = 0

* Give priority to nBuildAction parameter like in product
cAction = UPPER(TRANS(THIS.nBuildAction))	
DO CASE
CASE m.cAction=="1"
	nBuildAction = 1
CASE INLIST(m.cAction,"2","APP")
	nBuildAction = 2
	cExt = "APP"
CASE INLIST(m.cAction,"3","EXE")
	nBuildAction = 3
	cExt = "EXE"
CASE INLIST(m.cAction,"4","DLL")
	nBuildAction = 4
	cExt = "DLL"
ENDCASE

* Set output name
cOutPutName = THIS.cOutputName
DO CASE
CASE m.nBuildAction > 1
	cOutPutName=IIF(EMPTY(THIS.cOutputName),FORCEEXT(This.cFileName,m.cExt),FORCEEXT(THIS.cOutputName,m.cExt))
CASE m.nBuildAction = 1
	cOutPutName = ""
CASE UPPER(JUSTEXT(THIS.cOutputName))="APP"
	nBuildAction = 2
CASE UPPER(JUSTEXT(THIS.cOutputName))="EXE"
	nBuildAction = 3
CASE UPPER(JUSTEXT(THIS.cOutputName))="DLL"
	nBuildAction = 4
ENDCASE

lBuildAll = IIF(TYPE("THIS.lBuildAll")="L",THIS.lBuildAll,.F.)
lBuildErrors = IIF(TYPE("THIS.lBuildErrors")="L",THIS.lBuildErrors,.F.)
lRunAfterBuild = IIF(TYPE("THIS.lRunAfterBuild")="L",THIS.lRunAfterBuild,.F.)
lHadError = !_VFP.Projects[this.cFileName].Build(m.cOutPutName,m.nBuildAction,m.lBuildAll,m.lBuildErrors)

IF m.lHadError 
	RETURN
ENDIF

IF m.lRunAfterBuild AND INLIST(m.nBuildAction,2,3) 
	DO (m.cOutPutName)
ENDIF

ENDPROC
PROCEDURE modify
IF NOT DODEFAULT() OR NOT THIS.lModify
	RETURN .F.
ENDIF
IF EMPTY(this.cFileName) OR !FILE(this.cFileName)
	RETURN .F.
ENDIF

MODIFY PROJECT (this.cFileName) NOWAIT

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
RETURN this.Modify()

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,,.T.)
this.AddMenuBar(MENU_BUILD_LOC,"oTHIS.BuildApp()")

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord

IF NOT DODEFAULT(oSource, nXCoord, nYCoord) OR;
  VARTYPE(oSource)#"O" OR !this.oHost.lDragDropToDesktop
	RETURN .F.
ENDIF

IF UPPER(oSource.BaseClass)="FORM" AND UPPER(oSource.Name)=VFP_SCREEN
	this.Modify()
ENDIF

ENDPROC
k�� RRH�%��	��US���%�C��
�� �B�-���,��C�Mo\<dify...�oTHIS.Modify()����UTOOBJECTTHIS
ADDMENUBAR/�����UOTHIS	CFILENAMEsetmenu,��modify���1q"qA�3�1���
)R�PROCEDURE refreshnodes
LOCAL oNode,i,lnLastSelect,cParent,lReadFox,oFolder
DIMENSION aGetControls[1,2]
STORE "" TO aGetControls
lReadFox = IIF(VARTYPE(THIS.lReadFoxOnly)="L",THIS.lReadFoxOnly,.F.)

IF !THIS.oShared.GetActivex(@aGetControls,!m.lReadFox) AND !m.lReadFox
	RETURN .F.
ENDIF

IF EMPTY(aGetControls) AND m.lReadFox
	IF MESSAGEBOX(REGPROMPT1_LOC,MSG_YESNO) = MSG_YES
		THIS.oShared.GetActivex(@aGetControls,.T.)
	ELSE
		RETURN .F.
	ENDIF
ENDIF

oFolder=this.oHost.GetFolder(THIS.cActiveXFolderID)
IF ISNULL(oFolder)
	RETURN .F.
ENDIF

lnLastSelect=SELECT()
SELECT (this.cSourceAlias)

IF VARTYPE(this.cActivexParent)= "C" AND !EMPTY(this.cActivexParent)
	cParent = UPPER(this.cID2+"!"+this.cActivexParent)
ELSE
	cParent = UPPER(this.cID2+"!"+C_DEFACTX_PARENT)
ENDIF

* Locate and delete for full catalog!folder name
cParent = UPPER(this.cID)
DELETE ALL FOR UPPER(ALLTRIM(Parent)) == m.cParent

* Locate and delete for just folder name
cParent = SUBSTR(m.cParent,RAT("!",m.cParent)+1)
DELETE ALL FOR UPPER(ALLTRIM(Parent)) == m.cParent

* Add packing routine here. Call Gallery Cleanup routine.
THIS.oHost.oCatalog.Cleanup(.T.)

SELECT (lnLastSelect)

WAIT WINDOW NOWAIT MSG_ADDACTIVEX4_LOC
FOR i = 1 TO ALEN(aGetControls,1)
	WITH this.oHost.oCatalog
		oNode=this.oHost.CreateNode(.cSourceAlias,.cCatalogPath+"vfpglry.vcx,_ActivexItem")
	ENDWITH
	IF ISNULL(oNode)
		LOOP
	ENDIF
	WITH oNode
		.oFolder=oFolder
		.oParent=.oFolder
		.cParent=UPPER(.oParent.cID)
			IF EMPTY(.cText)
				.cText=ALLTRIM(aGetControls[m.i,1])
			ENDIF
		.cProgId=aGetControls[m.i,2]
		.cFileName=aGetControls[m.i,3]
		.WriteProperties(.T.,.T.)
	ENDWITH
ENDFOR

* Replace following with auto-refresh
WAIT WINDOW NOWAIT TMP_ADDACTIVEXTMP_LOC
THIS.Refresh(.T.)
WAIT CLEAR

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
this.AddMenuBar(MENU_ACTIVEX_LOC,"oThis.RefreshNodes")

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC
PPROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
RETURN this.Run()

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject
IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
this.AddMenuBar(MENU_OPEN_LOC,"oTHIS.Run()",,,,,.T.)

ENDPROC
PROCEDURE run
LOCAL cHelpFIle,cSetHelp,cTmpParm,cCmd
IF NOT DODEFAULT()
	RETURN .F.
ENDIF

* check for override script
IF !EMPTY(THIS.cScript)
	THIS.RunScript()
	RETURN
ENDIF

IF EMPTY(THIS.cFileName) OR  !FILE(THIS.cFileName)
	RETURN .F.
ENDIF

SET DATASESSION TO 1
cCmd = THIS.cFileName
cTmpParm = ALLTRIM(THIS.cParmBlock)

DO CASE
CASE ATC(".SCX",THIS.cFileName)#0
	IF THIS.lRunTimer
		IF !EMPTY(THIS.cParmBlock)
			THIS.oHost.RunCodeTimer([DO FORM "&cCmd" WITH &cTmpParm.])
		ELSE
			THIS.oHost.RunCodeTimer([DO FORM "&cCmd"])
		ENDIF
	ELSE
		IF !EMPTY(THIS.cParmBlock)
			DO FORM (THIS.cFileName) WITH &cTmpParm
		ELSE
			DO FORM (THIS.cFileName)
		ENDIF
	ENDIF
CASE INLIST(UPPER(RIGHT(THIS.cFileName,4)),".PRG",".MPR",".QPR",".FXP",".APP")
	IF THIS.lRunTimer
		IF !EMPTY(THIS.cParmBlock)
			THIS.oHost.RunCodeTimer([DO "&cCmd" WITH &cTmpParm.])
		ELSE
			THIS.oHost.RunCodeTimer([DO "&cCmd"])
		ENDIF
	ELSE
		IF !EMPTY(THIS.cParmBlock)
			DO (THIS.cFileName) WITH &cTmpParm
		ELSE
			DO (THIS.cFileName)
		ENDIF
	ENDIF
CASE ATC(".EXE",THIS.cFileName)#0
	RUN /N "&cCmd"
CASE ATC(".FRX",THIS.cFileName)#0 OR;
	 ATC(".LBX",THIS.cFileName)#0
	REPORT FORM (THIS.cFileName) PREVIEW
OTHERWISE
	this.oHost.ShellExecute(THIS.cFileName,,SHELLDEFAULT)
ENDCASE

SET DATASESSION TO (THIS.oHost.DataSessionID)

ENDPROC
p�� WW��%���T�U������/T��CC�m.lcWorkDirb�C��
���6��AT��CC�
m.lcOperationb�C�	C�
��
	��
���Open6��.|�ShellExecute�SHELL32.DLL������%B�C��
��
���
�����U
LCFILENAME	LCWORKDIRLCOPERATIONSHELLEXECUTESHELL32DLL]��������"%�C�
����C�C�
����?�B�-���T������T������G�(����T��CW��
H�����#�C�
����C�	C�
�0
	����T���-���C�
����C���%�C�
�������T��	�C����T���-���2���T���-��4T�
�C�
datapickerC�Q�gallery\vfpglry.vcx���T�
�����
��
��%�C��
�����T���a����%�����f�
H���b��C�FORM�
������T������'��<���AUTOFORM����������C�REPORT�
�����b�T������)��<���
AUTOREPORT�����������F��
���G�(�����
��C����%�C���
�	C��0	��V�%������T��C�	favorites����%�C��
���(T��C��	_FileItem��a������%�C���
��R�!��C��������������UCWIZARDCWIZFILE	NSAVEAREA
CFILEDATABASETHISCOUTFILECPROJECTNAME
LRUNWIZARDOPENDATA	CWIZALIASODATA	OWIZSTYLESHOW
AWIZFIELDS
LBLANKFORM
NWIZACTION	_OBROWSER
DATASESSIONIDSAVESETS
LFAVORITESOCATALOG	GETFOLDERONODE
CREATENODEPROJECTSFILESADD����������������������������T������J���(�������T���-��UTHIS
AWIZFIELDS	AWIZSORTS
AWIZSTYLES	CWIZALIAS
LBLANKFORM����������8%�C�
���C�
m.cDataSourceb�C�	C�
�0
��Y�B�-��� %�C�m.lExclusiveb�L����
T�
��-���,T��C�
���	EXCLUSIVE�	�SHARED6��"%�C�m.nDataSessionb�N����G�(�����%�C�
��
��-�
���
���#USE (m.cViewName) AGAIN &cEXCL.
���%�CC�
��֪����F�C�
�����%�C�
��
�	����%USE (m.cDataSource) AGAIN &cEXCL.
����F��%USE (m.cDataSource) AGAIN &cEXCL.
��%�CC�����B�-���UCDATASOURCE	CVIEWNAME
LEXCLUSIVENDATASESSIONCEXCL���������T���-��G�(����T��CW��%�C�
�����`�T���a���%�������%�C�
��
������<��
�����	��<����F��
���G�(�����U	CWIZNAMECWIZFILE	NSAVEAREA
CFILEDATABASETHIS
LRUNWIZARDOPENDATA	_OBROWSER
DATASESSIONID��������������%�C�
����N��t�8T���CCC�Q�WIZARDS\_FRAMEWK.DBF0����6�����T����
����%�C�
��
����T������T������T��	��
������T������T��	�����T��
�-��7T��C�
projectpickerC�Q�gallery\vfpglry.vcx���T������
����)%���

�	C��
��	C�������B��.�C�Q�WIZARDS\WZAPP.APP���������%�C��
0��}�%�����>�T��C�	favorites����%�C����B��(T��C��	_FileItem��
a�����-��C����
���C��
�APP������/���
�:�8%�����!CC�Q�WIZARDS\�APPHOOK.VCX0	��y�(T��C�Q�WIZARDS\�APPHOOK.VCX��T���APPHOOK��T�C����
������T�C����
��������C����
���/���
�:�-T�7��!DO (_WIZARD) WITH "Project",,,.T.����U	CTEMPLATENPROJECTTYPEOPROJOCATALOGONODE
LCHOOKFILELCHOOKCLASSTHIS
NDATABASETYPECDATABASETEMPLATE
LRUNWIZARD	OWIZSTYLESHOWCOUTFILECPROJECTNAME
LFAVORITES	_OBROWSER	GETFOLDER
CREATENODEPROJECTSBUILDPROJECTHOOKLIBRARYPROJECTHOOKCLASSCLOSE

����UTHISRESTORESETS
��C����UTHISSAVESETS	shellexec,��
autowizardE��savesets���opendata���	runwizard���autoapp�	��Destroy~��Init���1����S3��!qA���1�qq���A��A�!�AA��q��AA������AA1AA3baa��31q�qA�A�#�A#�1�A�qQA��QAA�qA3�����r�A!���AA��3���r��!A"!�A�q��AA�"��AA�A����A��Q��AA3�2�2g	��,=��iD��tb�k�t�8��Vf�����)W��� ��3�%�<*��U����T��C����%�C�0
��O� ��C�No sample available.�x��B�-���
H�`����C�.SCX������������C�.FRX�������?�����2���
�����ULCSAMPLEFILETHISLOCATESAMPLE$�����C��
������UCSCXNAMETHISOSHARED	ADDTOFORM<���2��C���
���C��f�FORM�����UCPJXNAMETHISOSHAREDADDTOPROJECT	CFILENAMECCLASS
CBASECLASS6����
�����1%�C�THIS.cBaseClassb�C�
C���
	��U�B������*%�C�.PRG�����
C��0
����B������%�C��������#������(�C�����"%�CC�
���fC��f���T���C�
�������Caa����!�����B�����UAGETCLASSESITHIS
CBASECLASS	CFILENAMECCLASSWRITEPROPERTIES|�����T��C����%�C�0
��W� ��C�No sample available.�x��B�-���T��CC�PATHv���	G)(����CC�Q�FFC������CC�Q�WIZARDS������CC�Q�GALLERY����
H���E��C�.SCX�������/&���:��C�.FRX������/3���:��C�.PRG�����E�/����:��%�C����a�	G)(���u�G)(�����ULCSAMPLEFILE	LCSETPATH	LCFFCPATHTHISLOCATESAMPLE	ADDTOPATH�4%�C����	C����CC����f�VCX��;�B�-���������y������C�������C�������UTHIS	CFILENAMECCLASSOHOST
SWITCHBROWSERADDFILE	SEEKCLASS����
�����/cNewForm = PUTFILE("Select &form",'',"SCX")
%�C�
����_�B�-���%�C�0���������C��SCT�����T����-��T��C�
��SCX���"&��
��:Q�����������C����`��T������C�����UATMPCNEWFORMTHISOHOSTALWAYSONTOPCCLASS	CFILENAMELEFT.	��
��T����
���T������UVNEWVALTHISCCLASS
CBASECLASSV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT������
H�����C�����7�	B����"�CC���ա
�	C��0	��e�B������CC���ա����)T��C��Q�solution\solution.dbf��%�C�0����F��Q�����%�CC�
����T��CC����f��
H���Q����SCX���T���F�����FRX��;�T���R��2�Q�T���Z���'-�CC��fCC����f�
C�f�	��%�C4����1T��C��Q�	solution\C���\C�����T�������Q�B��������B�����U	
LCFILENAMELCTYPELCEXTNTHISCSAMPLEFILELCSOLUTIONSDBFFILETYPEPATH������T��C����T��CC�PATHv���%�C��������
H�U����C��;�����t�B��CC����;�������B��CC�C�>R�������B���%�C������G)(������-G)(��CC��R�;����;6����UTCPATHLCPATH	LCSETPATH������%�C�
�	C�����0�B�-���T���1�� +�C�oForm�
�b�U��}�T�
��CCC�
�g�Z����T���oForm�
���PUBLIC &cFrmName.
MR,:���?���.A public variable for form was created named: �
���6&cFrmName. = NEWOBJECT(this.cClass,this.cFileName)
"IF VARTYPE(&cFrmName.)#"O"���_��C�SThis class was not created -- possibly due to the INIT event returning a .F. value.�x��RELEASE &cFrmName.
B��&cFrmName..show
UCSAVELIBNINCCFRMNAMETHIS	CFILENAME���%�C��
�� �B�-���%�C�a���
��E�B�-������������	�
���T��C��
f��*T��C��FORM�FORMSET�TOOLBAR���T������#T��C�
�
�a�
���
6��T��CC����f�PRG��;��C�Mo\<dify...�oTHIS.Modify()���
�
�
�����%��
�����-��C�Ru\<n�oTHIS.Run()����
�
����%���FORM����5��C�Create \<Form...�oTHIS.CreateForm()������@��C�View in \<Browser�oTHIS.ViewBrowser()����
�����6%�C��CUSTOM�	CONTAINER���
���
�����
����T�	�C������C�	�����3��C�\<Add to Project�	����C��������'%��
�
�C�.VCX����	���T�
�C����T��C�
�����(��C�
Add to \<Form�
���
�����
����%�CC��0����T��C����+��C�\<Open�oTHIS.OpenSample()����*��C�Ru\<n�oTHIS.ViewSample()�������
T������-��C�
View \<Sample����C��0
����(��C�	\<Help...�oTHIS.Help()����UTOOBJECTTHISOSHARED	CHECKITEM
LFORMCLASSLMODIFYALLOWLMODIFYDEFAULTLCBASECLASSOSAMPLEMENU	OPROJMENU	OFORMMENULHASFORM	LPRGCLASS
CBASECLASSLMODIFYOHOSTLRUNFILEDEFAULT	CFILENAME
ADDMENUBARADDMENUSEPARATORNEWMENUADDPROJECTMENUPROJECTSCOUNTADDFORMMENULOCATESAMPLECSAMPLEFILEk���������
T��C���%�C�a���
��H�B�-���
H�Y�Y�B�C����O�*CC����f�PRG�C�
�@�command	����B�-��+�C����O�C�
�@�command	������C�command��	�
��=�C��f�FORM�C��f�SCREEN	�
��	�
	��1�
��C����2�Y� ��C����������T���UOSOURCENXCOORDNYCOORD	CMOUSEWINOREFTHISOSHARED	CHECKITEM	CFILENAMEOHOST
FORMADDOBJECT
CBASECLASSNAMELDRAGDROPTODESKTOPRUN	DRAGDROP2�������J%�C�
���
�	C����"C����C�.PRG����
	��d�B�-���%G&(��Loading Class Designer ...��
H������C�.PRG������P�J���(���T�����	��T���	�a��2J�C�
DEFINE CLASS C���C���̸�(���T���	����/�����:��
����
����C��
���{�/O��������:�2���T��C��
���JMODIFY CLASS (this.cClass) OF (this.cFileName) METHOD &lcMethod NOWAIT
�G&(�ULCMETHODNSTARTNENDLSAVEIGNOREERRORSTHISLMODIFY	CFILENAMECCLASSOHOST
LIGNOREERRORSCMETHOD�%�C�
���B�-���%�C�a���
��:�B�-���<%�CC��f�FORM�FORMSET�TOOLBAR��
���	����
��C�������
��C�����UTHISOSHARED	CHECKITEM
CBASECLASSOHOSTLRUNFILEDEFAULTRUNMODIFY�����%�C�����?���C�No help available.�x��B��T��-��T��C�HELP�v��%�C�HELPv�OFF����G ��
H���8�J�C����5C�FOXHELP.CHM����C�MSDNVS98.COL���	�����C������G(�T��a���CC��������8�G(�����T��a���
H�I����C�����C��y�$� (THIS.vItemHelp)��C�����N����$I�������
%������G(�����ULCSAVEHELPFILELCHANGEDHELPTHIS	VHELPITEM
CITEMHELPFILET����UTHISOSHARED
viewsample,��	addtoform��addtoprojectb��cbaseclass_access���
opensampleh��viewbrowser+��
createform���
cclass_assignJ��oshared_access���locatesample��	addtopathg
��run���setmenu�
��	dragdrop2��modify��dblclickk��help]��Destroye��1qqA�������A3q�2q!3���A��A��!��AAAA�3�qAS�q���������A����A3AqA�A3���qA��AA�!�3�!2��A�3��!�!�Q�����Q�A�A���Ar�AA�AAA�3qr�Qb��A�A�AAA����A3��qA��A�R�a!�aAA13q"qA�qA2q"�1����QQAAc�A1As��A�3����A��3����qA�"q�����A�31�qAR��1!1�!��!�Aa3�qA�qA����A3�"�AA�a�aA��"a����A����A��A3�1Nn��Ckb)�"3BDSK1�	^[
Z
s_
�
xd��������������M�j�)��� D� �#T(�#�#z)�#�PROCEDURE viewsample
LOCAL lcSampleFile
lcSampleFile = THIS.LocateSample()
IF !FILE(lcSampleFile)
	MESSAGEBOX(MSG_NOSAMPLE_LOC) 
	RETURN .F.
ENDIF

DO CASE
CASE ATC(".SCX",lcSampleFile )#0
	DO FORM (lcSampleFile)
CASE ATC(".FRX",lcSampleFile)#0
	REPORT FORM (lcSampleFile) PREVIEW
OTHERWISE
	DO (lcSampleFile)
ENDCASE

ENDPROC
PROCEDURE addtoform
LPARAMETER cSCXName
THIS.oShared.AddToForm(this,m.cSCXName)
ENDPROC
PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName,this.cClass,UPPER(this.cBaseClass)=="FORM")

ENDPROC
PROCEDURE cbaseclass_access
LOCAL aGetClasses,i
DIMENSION aGetClasses[1]
IF (TYPE("THIS.cBaseClass")="C" and !EMPTY(THIS.cBaseClass))
	RETURN THIS.cBaseClass
ENDIF

IF ATC(".PRG",this.cFileName)#0 OR !FILE(THIS.cFileName)
	RETURN THIS.cBaseClass
ENDIF

IF AVCXCLASSES(aGetClasses,THIS.cFileName)>0
	FOR i = 1 TO ALEN(aGetClasses,1)
		IF UPPER(aGetClasses[m.i,1]) == UPPER(THIS.cClass)
			THIS.cBaseClass = aGetClasses[m.i,2]
			THIS.WriteProperties(.T.,.T.)
			EXIT
		ENDIF
	ENDFOR
ENDIF
RETURN THIS.cBaseClass

ENDPROC
PROCEDURE opensample
LOCAL lcSampleFile,lcSetPath,lcFFCPath
lcSampleFile = THIS.LocateSample()

IF !FILE(lcSampleFile )
	MESSAGEBOX(MSG_NOSAMPLE_LOC)
	RETURN .F.
ENDIF

* Need to set paths in case sample needs to locate file
lcSetPath = ALLTRIM(SET("PATH"))
SET PATH TO
THIS.AddToPath(HOME()+"FFC")
THIS.AddToPath(HOME()+"WIZARDS")
THIS.AddToPath(HOME()+"GALLERY")

DO CASE
CASE ATC(".SCX",lcSampleFile )#0
	MODIFY FORM (lcSampleFile ) NOWAIT
CASE ATC(".FRX",lcSampleFile )#0
	MODIFY REPORT (lcSampleFile ) NOWAIT
CASE ATC(".PRG",lcSampleFile )#0
	MODIFY COMMAND (lcSampleFile) NOWAIT
ENDCASE

IF EMPTY(lcSetPath)
	SET PATH TO
ELSE
	SET PATH TO (lcSetPath)
ENDIF

ENDPROC
PROCEDURE viewbrowser
IF EMPTY(this.cFileName) OR EMPTY(this.cClass) OR UPPER(JUSTEXT(this.cFileName))#"VCX"
	RETURN .F.
ENDIF
WITH this.oHost
	.SwitchBrowser
	.AddFile(this.cFileName)
	.SeekClass(this.cClass)
ENDWITH

ENDPROC
PROCEDURE createform
LOCAL aTmp,cNewForm
DIMENSION aTmp[1]

cNewForm = PUTFILE(C_SELECTFORM_LOC,'',"SCX")
IF EMPTY(m.cNewForm)
	RETURN .F.
ENDIF
IF FILE(cNewForm)
	DELETE FILE (cNewForm)
	DELETE FILE (FORCEEXT(cNewForm,"SCT"))
ENDIF
THIS.oHost.AlwaysOnTop = .F.
cNewForm = FORCEEXT(m.cNewForm,"SCX")
CREATE FORM (m.cNewForm) AS (THIS.cClass) FROM (THIS.cFileName) NOWAIT
* Ensure that form gets saved

aSelObj(aTmp,1)
aTmp[1].Left=aTmp[1].Left

ENDPROC
PROCEDURE cclass_assign
LPARAMETERS m.vNewVal
THIS.cclass = m.vNewVal
THIS.cBaseClass = ""	&&Reset
ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE locatesample
LOCAL lcFileName,lcType,lcExtn

DO CASE
CASE EMPTY(THIS.cSampleFile)
	* no sample file
	RETURN ""
CASE !EMPTY(JUSTPATH(THIS.cSampleFile)) AND FILE(THIS.cSampleFile)
	* user provided 
 	RETURN THIS.cSampleFile
CASE EMPTY(JUSTPATH(THIS.cSampleFile))
	* no path - check solutions
	lcSolutionsDBF = HOME(2)+"solution\solution.dbf"
	IF FILE(lcSolutionsDBF)
		SELECT 0
		USE (lcSolutionsDBF) AGAIN SHARED
		IF !EMPTY(ALIAS())
			lcExtn = UPPER(JUSTEXT(THIS.cSampleFile))
			DO CASE
			CASE lcExtn = "SCX"
				lcType = "F"
			CASE lcExtn = "FRX"
				lcType = "R"
			OTHERWISE
				lcType = "Z"
			ENDCASE
			LOCATE FOR UPPER(ALLTRIM(file)) == UPPER(JUSTSTEM(THIS.cSampleFile)) AND;
			  UPPER(type) = lctype
			IF FOUND()
				lcFileName = HOME(2)+"solution\"+ALLTRIM(path)+"\"+ALLTRIM(THIS.cSampleFile)
				THIS.cSampleFile = lcFileName
			ENDIF
			USE
			RETURN THIS.cSampleFile
		ENDIF
	ENDIF
ENDCASE
 	
RETURN THIS.cSampleFile

ENDPROC
PROCEDURE addtopath
LPARAMETER tcPath

LOCAL lcPath
tcPath = ALLTRIM(tcPath)
lcSetPath = ALLTRIM(SET("PATH"))

IF ATC(tcPath,lcSetPath)#0
	DO CASE
	CASE ATC(tcPath+";",lcSetPath)#0
		RETURN
	CASE ATC(ADDBS(tcPath)+";",lcSetPath)#0
		RETURN
	CASE ATC(RIGHT(lcSetPath,LEN(tcPath)),tcPath)#0
		RETURN
	ENDCASE
ENDIF

IF EMPTY(lcSetPath)
	SET PATH TO (tcPath)	
ELSE
	SET PATH TO (lcSetPath + IIF(RIGHT(lcSetPath,1)=";","",";") + tcPath)
ENDIF

ENDPROC
PROCEDURE run
LOCAL cSaveLib,nInc,cFrmName
IF NOT DODEFAULT() OR EMPTY(this.cFileName)
	RETURN .F.
ENDIF
nInc = "1"
DO WHILE TYPE("oForm"+m.nInc)#"U"
	m.nInc=ALLT(STR(VAL(m.nInc)+1))
ENDDO
cFrmName = "oForm"+m.nInc

PUBLIC &cFrmName.

WAIT WINDOW FORMNAMEVAR_LOC+m.cFrmName TIMEOUT .5 NOWAIT
&cFrmName. = NEWOBJECT(this.cClass,this.cFileName)
IF VARTYPE(&cFrmName.)#"O"
	MESSAGEBOX(ERR_OBJNOTCREATED_LOC)
	RELEASE &cFrmName.
	RETURN
ENDIF
&cFrmName..show

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS,.T.)
	RETURN .F.
ENDIF

LOCAL lFormClass,lModifyAllow,lModifyDefault,lcBaseClass
LOCAL oSampleMenu,oProjMenu,oFormMenu,lHasForm,lPRGClass

lcBaseClass = UPPER(this.cBaseClass)
lFormClass = INLIST(lcBaseClass,"FORM","FORMSET","TOOLBAR")
lModifyAllow = this.lModify
lModifyDefault = IIF(!m.lFormClass,.T.,!this.oHost.lRunFileDefault)
lPRGClass = UPPER(JUSTEXT(THIS.cFileName))="PRG"

* Modify and Run menus
this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,!m.lModifyAllow,m.lModifyDefault)
IF m.lFormClass
	this.AddMenuBar(MENU_RUN_LOC,"oTHIS.Run()",,,,,!m.lModifyDefault)
	IF lcBaseClass=="FORM"
		this.AddMenuBar(MENU_CLASSFORM_LOC,"oTHIS.CreateForm()")
	ENDIF
ENDIF
this.AddMenuBar(MENU_CLSBROWSER_LOC,"oTHIS.ViewBrowser()",,,,m.lPRGClass)

* Add to Project menu - for Form classes mainly
IF INLIST(lcBaseClass,"CUSTOM","CONTAINER") OR m.lFormClass OR m.lPRGClass
	this.AddMenuSeparator
	oProjMenu = THIS.NewMenu()
	THIS.oShared.AddProjectMenu(@oProjMenu)
	this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)
ENDIF

* Add To Form menu - only for non form class types
IF !m.lFormClass AND ATC(".VCX",this.cFileName)#0	&&VCX classes only
	oFormMenu = THIS.NewMenu()
	lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
	this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)
ENDIF
this.AddMenuSeparator

* View Sample menu
IF FILE(THIS.LocateSample())
	oSampleMenu = THIS.NewMenu()
	oSampleMenu.AddMenuBar(MENU_SAMPLEOPEN_LOC,"oTHIS.OpenSample()")
	oSampleMenu.AddMenuBar(MENU_SAMPLERUN_LOC,"oTHIS.ViewSample()")
ELSE
	oSampleMenu = ""
ENDIF
this.AddMenuBar(MENU_SAMPLE_LOC,oSampleMenu,,,,!FILE(THIS.cSampleFile))

* Help menu
this.AddMenuBar(MENU_HELP_LOC,"oTHIS.Help()")

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
LOCAL cMouseWin,oRef
cMouseWin = MWINDOW()
IF !THIS.oShared.CheckItem(THIS,.T.)
	RETURN .F.
ENDIF
DO CASE
CASE VARTYPE(oSource)#"O" AND (UPPER(JUSTEXT(THIS.cFileName))="PRG" OR;
	LOWER(m.cMouseWin)#"command")
	RETURN .F.
CASE VARTYPE(oSource)#"O" AND LOWER(m.cMouseWin)=="command"
	THIS.oHost.FormAddobject("command")
CASE UPPER(this.cBaseClass)="FORM" AND UPPER(oSource.Name)=VFP_SCREEN AND;
	this.oHost.lDragDropToDesktop
	this.Run()
OTHERWISE
	THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)
ENDCASE
oSource = null

ENDPROC
PROCEDURE modify
LOCAL lcMethod,nStart,nEnd,lSaveIgnoreErrors

IF NOT DODEFAULT() OR NOT THIS.lModify OR;
	EMPTY(this.cFileName) OR;
	(EMPTY(this.cClass) AND	!ATC(".PRG",this.cFileName)#0)
	RETURN .F.
ENDIF

SET MESSAGE TO STAT_LOADCLASS_LOC
DO CASE
CASE ATC(".PRG",this.cFileName) #0
	STORE 0 TO nStart,nEnd
	lSaveIgnoreErrors = THIS.oHost.lIgnoreErrors 
	THIS.oHost.lIgnoreErrors = .T.
	STORE ATC(DEFCLASS+ALLTRIM(THIS.cClass),FileToStr(THIS.cFileName)) TO nStart,nEnd
	THIS.oHost.lIgnoreErrors = lSaveIgnoreErrors
	MODIFY COMM (this.cFileName) NOWAIT RANGE m.nStart,m.nEnd
CASE EMPTY(this.cMethod)
	MODIFY CLASS (this.cClass) OF (this.cFileName) NOWAIT
OTHERWISE
	lcMethod=ALLTRIM(this.cMethod)
	MODIFY CLASS (this.cClass) OF (this.cFileName) METHOD &lcMethod NOWAIT
ENDCASE
SET MESSAGE TO

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT()
	RETURN .F.
ENDIF
IF !THIS.oShared.CheckItem(THIS,.T.)
	RETURN .F.
ENDIF

IF INLIST(UPPER(this.cBaseClass),"FORM","FORMSET","TOOLBAR") AND;
	this.oHost.lRunFileDefault
	this.Run()
ELSE
	this.Modify()
ENDIF

ENDPROC
PROCEDURE help
LOCAL lcSaveHelpFile,lChangedHelp

IF EMPTY(THIS.vHelpItem)
	MESSAGEBOX(NOHELP_LOC)
	RETURN
ENDIF

lChangedHelp=.F.
lcSaveHelpFile = SET("HELP",1)
IF SET("HELP") = "OFF"
	SET HELP ON
ENDIF

DO CASE
CASE EMPTY(THIS.cItemHelpFile) AND ;
	(ATC(VFPHELPFILE,lcSaveHelpFile)#0 OR ATC(MSDNHELPFILE,lcSaveHelpFile)#0)
	* using VFP help -- FFC class
CASE EMPTY(THIS.cItemHelpFile)
	SET HELP TO
	lChangedHelp=.T.
CASE ATC(JUSTFNAME(THIS.cItemHelpFile),lcSaveHelpFile)=0
	SET HELP TO (THIS.cItemHelpFile)
	lChangedHelp=.T.
ENDCASE

DO CASE
CASE VARTYPE(THIS.vHelpItem)="C"
	HELP (THIS.vItemHelp)
CASE VARTYPE(THIS.vHelpItem)="N"
	HELP ID (THIS.vHelpItem)
ENDCASE
 
IF lChangedHelp
	SET HELP TO (lcSaveHelpFile)
ENDIF

ENDPROC
PROCEDURE Destroy
THIS.oShared = null
ENDPROC
�� ���%�}W�U�������T��C��
������4%�C�
����O�C���
olecontrol��	����T�������T�����	���U
CSCXNAMEOACTIVEXTHISOSHARED	ADDTOFORM	BASECLASSWIDTH
NCTRLWIDTHHEIGHTNCTRLHEIGHT��������������	� %�C�
�0
�
C�
�0
	����3��C�'File name does not exist for this item.�x��B�-�����������RT��C�windir5CC�NTCJ���CC�Jg���
\SYSTEM32\��\SYSTEM\6��T���
���T��-��T�
�a��
H�$���3�C�
�0�	C�
�0	�C�
�fC�
�f	����S%�C�<Would you like to update this item from its remote location?�$�x�����B�-����C�
�0�
C�
�0
	����%�CC�
��ҡ��P�2T��C�
��Select directory for control:�3��%�C�
����3�B�-���T���
�C�
��������S%�C�<Would you like to update this item from its remote location?�$�x�����B�-����2���T�
�-���T���������
���T���������
���T��������a��%��
�
��@�!��
����(�C�
����q�A%�C�THIS.aExtraFiles[m.i,1]b�C�CC�
���
�0	��m�T��C��������
������(T���
������C�
���
���7T���
������CC�
�����CC�
���
�����RT���
������CC�THIS.aExtraFiles[m.i,2]b�L�C�
���
��a6�������
����(�C����<�&�C�
����(�C�
�����%�CC�
���0
��8�]��C�QCould not copy ActiveX file to local machine. Check for access or write problems.�x��B�-��������
����(�C������%�C�
���������CC�
����
������%�C�
�fC�
�f����T�
���
���T�
���
���
T�
��a���T�	�C�
���%��	����
T�
��a���%��
���=���Caa�
����%��	�����5��C�)ActiveX component successfully installed.�x���U
CWINSYSDIR
CTARGETDIRCTARGETFILECREGSVRILWRITEPROPS
ACOPYFILESNARRLEN
CASSOCFILELNERRORCODETHIS	CFILENAMECREMOTEFILE	LCOPYFILEAEXTRAFILESREGFILE	GETPROGIDWRITEPROPERTIES�%�C������	B�����
H�,����CC����f�DLL��Q�	B�����CC����f�EXE��v�	B����2���	B�����UTHIS	CFILENAMEH���T��C���TLB���%�C�
�0
����T��C���OLB���%�C�
�0
��m�T�������%�C�
�0
����B���%�C����O����	��K���%�C����O����
������C�
������A�V��C�JCould not locate Object Browser. Check this setting in the Options dialog.�x���UCTYPELIBTHIS	CFILENAME_OOBJECTBROWSERSHOWLOADTYPELIB�����T��C���VBR���T��C�Q�CLIREG32.EXE��%�C�
�0
����d��C�XCould not locate CLIREG32.EXE in your FoxPro folder. Make sure it is properly installed.�x��B�-���%�C�
���	C�
�0
��b�{��C�oCould not locate associated VBR file with ActiveX Server. Make sure it is installed in same location as server.�x��B�-���)RUN /N &cCliReg. "&cVBRFile." -NOLOGO
UCVBRFILECCLIREGTHIS	CFILENAMEB�C�������UTHISOSHARED
GETVERSION	CFILENAMEJ&%�C�����N����	��2�B������C�	B������UTHISNCTRLHEIGHTJ&%�C�����N����	��2�B������C�	B�����UTHIS
NCTRLWIDTH��������RT��C�windir5CC�NTCJ���CC�Jg���
\SYSTEM32\��\SYSTEM\6��%�CC�
���f�EXE���� RUN /N &cReGFile. /RegServer
���T���
��REGSVR32.EXE��%�C�
�0���T�
���
�� -s��!RUN /N &cRegSvr. "&cReGFile."
���l��C�`Could not locate REGSVR32.EXE in your Windows System folder. Make sure it is properly installed.�x��B�-����UCREGFILECREGSVR
CWINSYSDIRV%�C�����O��C�+T���C�VFPGLRY!SHAREDOBJ������B�����UTHISOSHAREDOHOST	GETOBJECT)���T����
���
��C����UVNEWVALTHIS	CFILENAMEREFRESHPICTURE�������!T��CC����L�-��6��
%����L�T�������%�C���
��l�	B��������5����������
J���(��T��C������%�C�a����	
����	B�����%�CC���
����T���C�����%�C�������4T�
�C�
itempickerC�Q�gallery\vfpglry.vcx���T�
�������C��
���
��
�
����
%������C��C�0Only one class is registerd for this component: ���x�����b�p��C�dComponent does not appear to be properly registered. Try selecting Install on my System menu option.�x��	B�����
%��������Caa�����	B����UTLRESETLRESETTHISCPROGID
LCFILENAMEAGETCONTROLSFULLPATH	CFILENAMEOSHARED
GETACTIVEXOCLASSOACTIVEXSETLISTSHOWWRITEPROPERTIES����%%�C�
���
�	C�����3�B�-���%�CC����f�PJX��a�/��������T��C�������B��
�����UNERRTHISLMODIFYCSOURCEPROJECTOHOSTSHELLEXECUTE���������%�C��
��/�B�-���%�C����
��S�B�-������T��C����DT���
��
C��	�
	�%�
���C��
f�
OLECONTROL	��T��CC����f��.%��
���C��
�
�
C���
	��G�T�
�C����T��C�
�����(��C�
Add to \<Form�
���
�����7��C�Mo\<dify...�oTHIS.Modify()���C�������
��C����G��C�Install on my S\<ystem�oTHIS.AddToSystem()���C�������N��C�Change Regi\<stered Class...�oTHIS.GetProgID(.T.)���C�������H��C�Version \<Information...�oTHIS.GetVersion()���C�������<��C�Vie\<w Type Library...�oTHIS.ViewTypeLib()����%��
�������UTOOBJECT	CACTXTYPELADDFORMCEXTNTHISOSHARED	CHECKITEMLHASFORMISSERVERCPROGIDCCLASS	CFILENAMECFORMCLASSLIBRARY	OFORMMENUNEWMENUADDFORMMENU
ADDMENUBARCSOURCEPROJECTADDMENUSEPARATOR���������%�C����
��6�B�-���$T��C���������2%�C����O�C���
olecontrol��	����T��	���
��T��������U
OSOURCENXCOORDNYCOORDOACTIVEXTHISOSHARED	CHECKITEM	DRAGDROP2	BASECLASSWIDTH
NCTRLWIDTHHEIGHTNCTRLHEIGHTp��������(�C�����`�J���(����
������J�a�(����
��������	��C��UITHISAEXTRAFILEST����UTHISOSHAREDE���T��CC����f��
H�)�$�O�C���
�9CCC����@�actxexe.ico�actxdll.ico�actxocx.ico�
	��x���
��EXE����(T����	graphics\�actxexe.ico����
��DLL����(T����	graphics\�actxdll.ico��2�$�(T����	graphics\�actxocx.ico���T���C������UCEXTTHIS	CFILENAMECPICTUREFULLPATH	addtoform,��addtosystem��isserverw��viewtypelib	��	regremote�
��
getversion_��nctrlheight_access���nctrlwidth_access
��regfilec
��oshared_access��cfilename_assign���	getprogid���modify��setmenu���	dragdrop2���Init���DestroyQ��refreshpictureu��1qq�A11A3�11qA1!���22qA�R!qA��1qAA��A��q�qQ�q!AA�a��qAAA�q�AA�1!�A�A��AQA2!�A�������A3r�"�!A!AAAR�AQ�1�aA3���"AqA��qA�3a3a���A3a���A3s�!������qAA3��A�3q!�3qr�A3�Arq1�q��ABqqA���1AA��A��A�2qQqA�����A3q�"qA�qArAQ���As�s���2D3�q�qAA!11A3q���A�3�3qQ��a�a���A�2	)zR��
n^�
}s$h�������U��}���
%��J����'��G��� �>� �� "P�9"�"]�"�"f!#�$j)�N,PROCEDURE genobjname
LPARAMETERS oSource, cClassName, cDataName, lShortName

*oSource = container source to check
*cClassName = class name to check
*cDataName = data source to add to end
*lShortName = use shortnames for baseclasses

IF PARAMETERS()<2 OR VARTYPE(m.oSource)#"O" OR ;
	VARTYPE(m.cClassName)#"C"
	RETURN ""
ENDIF

LOCAL nInc, cNewName
nInc = "1"

STORE LOWER(m.cClassName) TO cClassName,cNewName

IF VARTYPE(m.lShortName)="L" AND m.lShortName
	* Baseclasses only
	DO CASE
	CASE m.cClassName = "checkbox"
		cNewName = "chk"
	CASE m.cClassName = "combobox"
		cNewName = "cbo"
	CASE m.cClassName = "commandbutton"
		cNewName = "cmd"
	CASE m.cClassName = "commandgroup"
		cNewName = "cmg"
	CASE m.cClassName = "container"
		cNewName = "ctr"
	CASE m.cClassName = "control"
		cNewName = "ctl"
	CASE m.cClassName = "custom"
		cNewName = "cst"
	CASE m.cClassName = "editbox"
		cNewName = "edt"
	CASE m.cClassName = "form"
		cNewName = "frm"
	CASE m.cClassName = "formset"
		cNewName = "fst"
	CASE m.cClassName = "grid"
		cNewName = "grd"
	CASE m.cClassName = "image"
		cNewName = "img"
	CASE m.cClassName = "label"
		cNewName = "lbl"
	CASE m.cClassName = "line"
		cNewName = "lin"
	CASE m.cClassName = "listbox"
		cNewName = "lst"
	CASE m.cClassName = "optionbutton"
		cNewName = "opt"
	CASE m.cClassName = "optiongroup"
		cNewName = "opg"
	CASE m.cClassName = "oleboundcontrol"
		cNewName = "olb"
	CASE m.cClassName = "olecontrol"
		cNewName = "ole"
	CASE m.cClassName = "pageframe"
		cNewName = "pgf"
	CASE m.cClassName = "shape"
		cNewName = "shp"
	CASE m.cClassName = "separator"
		cNewName = "sep"
	CASE m.cClassName = "spinner"
		cNewName = "spn"
	CASE m.cClassName = "textbox"
		cNewName = "txt"
	CASE m.cClassName = "timer"
		cNewName = "tmr"
	CASE m.cClassName = "toolbar"
		cNewName = "tbr"
	ENDCASE
ENDIF

IF VARTYPE(m.cDataName)="C"
	cNewName = cNewName+ALLTRIM(m.cDataName)
ENDIF

DO WHILE TYPE("oSource."+m.cNewName+m.nInc) # "U"
	m.nInc = ALLTRIM(STR(VAL(m.nInc)+1))
ENDDO

RETURN m.cNewName+m.nInc

ENDPROC
PROCEDURE classtoform
LPARAMETERS oSource, nXCoord, nYCoord, toObject

LOCAL cSaveLib,cNewObjName,cFormClass,cFormLib,oSourceObj,aDropObjs
DIMENSION aDropObjs[4]

WITH toObject
	cFormClass = .cClass
	cFormLib = IIF(EMPTY(.cFormClassLibrary),.cFileName,.cFormClassLibrary)
ENDWITH

IF EMPTY(m.cFormClass)
	RETURN .null.
ENDIF

cNewObjName = THIS.GenObjName(oSource,m.cFormClass)

DO CASE
CASE UPPER(m.cFormClass)=OLECONTROL_CLASS 	&&ActiveX Controls
	IF TYPE("toObject.cProgID")#"C" OR EMPTY(toObject.cProgID)
		RETURN .F.
	ENDIF
	oSource.AddObject(m.cNewObjName,"olecontrol",toObject.cProgID)
CASE ATC(".VCX",m.cFormLib)#0	&&VCX classes only
	oSource.NewObject(m.cNewObjName,m.cFormClass,m.cFormLib)
OTHERWISE
	* Base Classes
	oSource.NewObject(m.cNewObjName,m.cFormClass)
ENDCASE

IF TYPE("oSource.&cNewObjName")#"O"
	RETURN .null.
ENDIF

oSourceObj = oSource.&cNewObjName.

WITH oSourceObj

	* If no coordinates passed, then center it
	.LEFT=IIF(VARTYPE(m.nXCoord)="N",m.nXCoord,MAX((oSource.WIDTH-.WIDTH)/2,0))
	.TOP=IIF(VARTYPE(m.nYCoord)="N",m.nYCoord,MAX((oSource.HEIGHT-.HEIGHT)/2,0))

	* Special Case - Set Picture property for Image items
	IF UPPER(.BaseClass)="IMAGE"
		.Picture = toObject.cFileName
	ENDIF

	* Special Case - Check for user added custom property named cFileName
	* This is used for media files, forms, reports, etc.
	IF TYPE(".cFileName")#"U" AND UPPER(JUSTEXT(toObject.cFileName))#"VCX"
		.cFileName = toObject.cFileName
	ENDIF

	IF TYPE(".Visible")="L"
		.Visible = .T.
	ENDIF

	.SetFocus()
	
ENDWITH

IF toObject.oHost.lFFCBuilderLock AND;
	 (PEMSTATUS(oSourceObj,"builder",5) OR;
	  PEMSTATUS(oSourceObj,"builderx",5))
	* Before calling builder, check if we have running form.
	AMOUSEOBJ(aDropObjs,1)
	IF TYPE("aDropObjs[2].ShowWindow")#"U" AND ;
		  PEMSTATUS(aDropObjs[2],"ShowWindow",1)
		* Special builder handling for running forms, toolbars.
	ELSE
		* Form in design mode
		aDropObjs[2].Activate
		DO (_builder) WITH oSourceObj,""
	ENDIF
ENDIF

RETURN oSourceObj

ENDPROC
PROCEDURE addtoform
LPARAMETERS toObject,cFormName

LOCAL aFrmObj,cObjBase

IF VARTYPE(toObject)#"O"
	RETURN .null.
ENDIF

IF !EMPTY(m.cFormName) AND;
	VARTYPE(m.cFormName)="C" AND;
	UPPER(JUSTEXT(m.cFormName))#"VCX"
	ACTIVATE WINDOW (WIN_SCX_DESIGN_LOC+" "+m.cFormName)
ENDIF

DIMENSION aFrmObj[1]
IF ASELOBJ(aFrmObj,1) < 1
	RETURN .null.
ENDIF

cObjBase =  UPPER(aFrmObj[1].BaseClass)
IF !INLIST(m.cObjBase,"FORM","PAGE","TOOLBAR")
	WAIT WINDOW NOWAIT MSG_NOFORM_LOC 
	RETURN .null.
ENDIF

IF m.cObjBase#"PAGE"
	aFrmObj[1].Show
ENDIF

RETURN THIS.ClassToForm(aFrmObj[1],,,toObject)

ENDPROC
PROCEDURE addtoproject
LPARAMETERS cFileName,cProjName,cClass,lIsForm

LOCAL oAction,cNewForm,oClassDrop,nAction,aTmp,cSaveFile
cSaveFile = cFileName
nAction = 1

IF PARAMETERS()=0 OR VARTYPE(m.cFileName)#"C" OR !FILE(m.cFileName)
	RETURN
ENDIF

IF VARTYPE(m.cProjName)#"C" OR EMPTY(m.cProjName)
	m.cProjName = _VFP.ActiveProject.Name
ENDIF

IF !EMPTY(m.cClass) AND UPPER(JUSTEXT(m.cFileName)) = "VCX"
	oAction = Create('custom')
	oAction.AddProperty("lIsForm",m.lIsForm)
	oClassDrop = NEWOBJECT("classdrop",THIS.ClassLibrary,'',oAction)
	IF VARTYPE(oClassDrop) #"O"
		MESSAGEBOX(ERR_NOGLRYDLOG_LOC)
		RETURN .F.
	ENDIF
	oClassDrop.Show
	nAction = oAction.nGetAction 
	DO CASE
	CASE nAction = 2
		oAction.AddProperty("cNewClass","")
		oAction.AddProperty("cFromClass",m.cClass)
		oAction.AddProperty("cFromClassLib",m.cFileName)
		oAction.AddProperty("cSaveClassLib",m.cFileName)
		oClassDrop = NEWOBJECT("newclass",THIS.ClassLibrary,'',oAction)
		IF VARTYPE(oClassDrop) #"O"
			MESSAGEBOX(ERR_NOGLRYDLOG_LOC)
			RETURN .F.
		ENDIF
		oClassDrop.Show
		IF EMPTY(oAction.cNewClass)
			RETURN .F.
		ENDIF
		CREATE CLASS (oAction.cNewClass) OF (oAction.cSaveClassLib) AS;
			(oAction.cFromClass) FROM (oAction.cFromClassLib) NOWAIT
		KEYBOARD "{ENTER}"
		RELEASE WINDOW WIN_VCX_DESIGN_LOC+oAction.cSaveClassLib+"("+oAction.cNewClass+")"
		cFileName = oAction.cSaveClassLib
	CASE nAction = 3
		cNewForm = PUTFILE(C_SELECTFORM_LOC,'',"SCX")
		IF EMPTY(m.cNewForm)
			RETURN .F.
		ENDIF
		cNewForm = FORCEEXT(m.cNewForm,"SCX")
		CREATE FORM (m.cNewForm)  AS (m.cClass) FROM (m.cFileName) NOWAIT
		DIMENSION aTmp[1]
		ASELOBJ(aTmp,1)
		aTmp[1].Left = aTmp[1].Left+1
		* Need to close file here since file cannot be open to add to SCC
		KEYBOARD "{ENTER}"
		RELEASE WINDOW WIN_SCX_DESIGN_LOC+m.cNewForm
		cFileName = m.cNewForm
	ENDCASE
ENDIF

IF FILE(m.cFileName)
	_VFP.Projects[m.cProjName].Files.Add(m.cFileName)
	IF UPPER(cSaveFile)#UPPER(cFileName)
		_VFP.Projects[m.cProjName].Files.Add(m.cSaveFile)
	ENDIF
	IF nAction = 1
		ACTIVATE WINDOW (WIN_PJX_DESIGN_LOC+" "+JUSTSTEM(m.cProjName))
	ENDIF
	
	DO CASE
	CASE nAction = 2
		MODIFY CLASS (oAction.cNewClass) OF (m.cFileName) NOWAIT
	CASE nAction = 3
		MODIFY FORM (m.cFileName) NOWAIT
	ENDCASE
ENDIF

ENDPROC
PROCEDURE getwindowstack
LPARAMETERS aWinStack
LOCAL nTotalWindows, i
IF PARAMETERS() = 0
	RETURN 0
ENDIF

nTotalWindows = WCHILD("SCREEN")
DIMENSION aTmpArray[m.nTotalWindows]
DIMENSION aWinStack[m.nTotalWindows]

FOR i = 0 TO nTotalWindows - 1
	aTmpArray[m.i+1] = WCHILD("SCREEN",m.i)
ENDFOR
FOR i = nTotalWindows TO 1 STEP -1
	aWinStack[m.nTotalWindows+1-m.i] = aTmpArray[m.i]
ENDFOR
RETURN m.nTotalWindows

ENDPROC
PROCEDURE getactivex
LPARAMETER aControls,lAllControls,cActiveXFile,cTypeLibFile,oTlib,oTypeInfo
LOCAL oReg,i,cOptPath,nPos,nTotDone,cVFPKey,cExtn,oTForm,lnPos
LOCAL aCLSIDs,aKeys,aProgID,aControlName,aServerName,cScanKey,iCount,lcServerName
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_KEY1 + _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
oReg = othis.oHost.GetObject("RegObj")
IF VARTYPE(oReg)#"O"
	RETURN .F.
ENDIF

WAIT WINDOW NOWAIT MSG_ADDACTIVEX1_LOC

*Try to read typelib if there is one.
IF FILE(m.cActiveXFile)
	DO CASE
	CASE FILE(FORCEEXT(m.cActiveXFile,"TLB"))
		cTypelibFile = FORCEEXT(m.cActiveXFile,"TLB")
	CASE FILE(FORCEEXT(m.cActiveXFile,"OLB"))
		cTypelibFile = FORCEEXT(m.cActiveXFile,"OLB")
	OTHERWISE
		cTypeLibFile = m.cActiveXFile
	ENDCASE

	oTLib = CREATEOBJECT("tli.tliapplication")
	IF VARTYPE(oTLib)#"O"
		WAIT CLEAR
		RETURN .F.
	ENDIF

	oTypeInfo = oTLib.TypeLibInfoFromFile(cTypeLibFile)
	IF VARTYPE(oTypeInfo)#"O"
		WAIT CLEAR
		RETURN .F.
	ENDIF

	FOR iCount = 1 TO oTypeInfo.CoClasses.Count
		IF BITTEST(oTypeInfo.CoClasses(m.iCount).AttributeMask, IIF(UPPER(JUSTEXT(m.cActiveXFile))="OCX",5,1))
			IF !EMPTY(aCLSIDs[1])
				DIMENSION aCLSIDs[ALEN(aCLSIDs)+1]
			ENDIF
			aCLSIDs[ALEN(aCLSIDs)] = oTypeInfo.CoClasses(m.iCount).GUID
		ENDIF
	ENDFOR
ENDIF

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

FOR i = 1 TO ALEN(aCLSIDs)
	nTotDone = ROUND(m.i/ALEN(aCLSIDs)*100,0)
	IF m.nTotDone%5 = 0
		WAIT WINDOW NOWAIT MSG_ADDACTIVEX5_LOC+ALLTRIM(STR(m.nTotDone))+MSG_ADDACTIVEX3_LOC
	ENDIF
	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
			
			aControls[ALEN(aControls,1),1] = aControlName[2]
			aControls[ALEN(aControls,1),2] = aProgID[2]
			aControls[ALEN(aControls,1),3] = aServerName[2]
		ENDIF
	ENDIF
ENDFOR
WAIT CLEAR

ENDPROC
PROCEDURE getversion
LPARAMETER cFileName
IF PARAMETERS() < 1 OR !FILE(m.cFileName)
	RETURN .F.
ENDIF

LOCAL aVerArray,cVerString,nResult
DIMENSION aVerArray[1]
cVerString = ""
nResult = aGetFileVersion(aVerArray,m.cFileName)

IF nResult=0
	MESSAGEBOX(FILEVER_NOVERSION_LOC,MSG_FILEVERSION_LOC+m.cFileName)
	RETURN
ENDIF

IF NOT EMPTY(aVerArray(1))
	cVerString =  FILEVER_COMMENT_LOC + ALLT(aVerArray(1))
ENDIF
IF NOT EMPTY(aVerArray(2))
	cVerString = m.cVerString+CRLF+FILEVER_COMPANY_LOC+ ALLT(aVerArray(2))
ENDIF
IF NOT EMPTY(aVerArray(3))
	cVerString =  m.cVerString+CRLF+FILEVER_FILEDESC_LOC+ ALLT(aVerArray(3))
ENDIF
IF NOT EMPTY(aVerArray(4))
	cVerString = m.cVerString+CRLF+FILEVER_FILEVER_LOC+ ALLT(aVerArray(4))
ENDIF
IF NOT EMPTY(aVerArray(5))
	cVerString = m.cVerString+CRLF+FILEVER_INTERNAL_LOC+ ALLT(aVerArray(5))
ENDIF
IF NOT EMPTY(aVerArray(6))
	cVerString = m.cVerString+CRLF+FILEVER_COPYRIGHT_LOC+ ALLT(aVerArray(6))
ENDIF
IF NOT EMPTY(aVerArray(7))
	cVerString = m.cVerString+CRLF+FILEVER_TRADMARK_LOC+ ALLT(aVerArray(7))
ENDIF
IF NOT EMPTY(aVerArray(8))
	cVerString = m.cVerString+CRLF+FILEVER_FILENAME_LOC+ ALLT(aVerArray(8))
ENDIF
IF NOT EMPTY(aVerArray(9))
	cVerString = m.cVerString+CRLF+FILEVER_PRIVATE_LOC+ ALLT(aVerArray(9))
ENDIF
IF NOT EMPTY(aVerArray(10))
	cVerString = m.cVerString+CRLF+FILEVER_PRODUCTNAME_LOC+ ALLT(aVerArray(10))
ENDIF
IF NOT EMPTY(aVerArray(11))
	cVerString = m.cVerString+CRLF+FILEVER_PRODUCTVER_LOC+ ALLT(aVerArray(11))
ENDIF
IF NOT EMPTY(aVerArray(12))
	cVerString = m.cVerString+CRLF+FILEVER_SPECIAL_LOC+ ALLT(aVerArray(12))
ENDIF
IF NOT EMPTY(aVerArray(14))
	cVerString = m.cVerString+CRLF+FILEVER_LANGUAGE_LOC+ ALLT(aVerArray(14))
ENDIF
IF NOT EMPTY(aVerArray(13))	&&OLESelfRegister
	cVerString = m.cVerString+CRLF+ALLT(aVerArray(13))
ENDIF

IF EMPTY(m.cVerString) OR TYPE("aVerArray[1]")="L"
	cVerString = FILEVER_NOVERSION_LOC
ENDIF

MESSAGEBOX(m.cVerString,MSG_FILEVERSION_LOC+m.cFileName)

ENDPROC
PROCEDURE getwindowtypes
LOCAL nTotWin,cSaveExact,nWinFlags,aVFPWindows
DIMENSION aVFPWindows[1]

nTotWin = THIS.GetWindowStack(@aVFPWindows)
nWinFlags = 0
IF m.nTotWin # 0
	cSaveExact = SET("EXACT")
	SET EXACT OFF
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_PJX_DESIGN_LOC)=0,0,WIN_PJX_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_SCX_DESIGN_LOC)=0,0,WIN_SCX_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_VCX_DESIGN_LOC)=0,0,WIN_VCX_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_FRX_DESIGN_LOC)=0,0,WIN_FRX_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_MNX1_DESIGN_LOC)=0,0,WIN_MNX1_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_MNX2_DESIGN_LOC)=0,0,WIN_MNX2_DESIGN_FLAG)
	nWinFlags = nWinFlags + IIF(ASCAN(aVFPWindows,WIN_DBC_DESIGN_LOC)=0,0,WIN_DBC_DESIGN_FLAG)
	SET EXACT &cSaveExact
ENDIF
RETURN nWinFlags

ENDPROC
PROCEDURE addprojectmenu
LPARAMETER oProjMenu 
LOCAL lHasPJX,cPJXName
lHasPJX = _VFP.Projects.Count>0
IF m.lHasPJX
	cPJXName= LOWER(_VFP.ActiveProject.Name)
	oProjMenu.AddMenuBar(m.cPJXName,"oTHIS.AddToProject(["+m.cPJXName+"])",,,,,.T.)
	FOR i = 1 TO _VFP.Projects.Count
		cPJXName= LOWER(_VFP.Projects[m.i].Name)
		IF LOWER(_VFP.ActiveProject.Name) == m.cPJXName
			LOOP
		ENDIF
		oProjMenu.AddMenuBar(m.cPJXName,"oTHIS.AddToProject(["+m.cPJXName+"])")
	ENDFOR
ELSE
	oProjMenu = ""
ENDIF
RETURN m.lHasPJX


ENDPROC
PROCEDURE addformmenu
LPARAMETER oFormMenu
LOCAL lHasForm,cSCXName,i,aFrmObj
lHasForm = .F.

DIMENSION aFrmObj[1]
IF ASELOBJ(aFrmObj,1)#0
	cSCXName = LOWER(SYS(1271,aFrmObj[1]))
	cObjBase =  UPPER(aFrmObj[1].BaseClass)
	IF LOWER(JUSTEXT(m.cSCXName))=="vcx" AND INLIST(m.cObjBase,"FORM","PAGE","TOOLBAR")
		oFormMenu.AddMenuBar(JUSTFNAME(m.cSCXName)+" ("+LOWER(aFrmObj[1].Name)+")","oTHIS.AddToForm(["+m.cSCXName+"])")
		lHasForm = .T.
	ENDIF
ENDIF

DIMENSION aVFPWindows[1]
nTotWin = THIS.GetWindowStack(@aVFPWindows)
FOR i = 1 TO nTotWin 
	IF ATC(WIN_SCX_DESIGN_LOC,aVFPWindows[m.i])#0
		lHasForm = .T.
		cSCXName = LOWER(SUBSTRC(aVFPWindows[m.i],LEN(WIN_SCX_DESIGN_LOC)+2))
		oFormMenu.AddMenuBar(m.cSCXName,"oTHIS.AddToForm(["+m.cSCXName+"])")
	ENDIF
ENDFOR
IF !m.lHasForm
	oFormMenu = ""
ENDIF
RETURN m.lHasForm


IF m.lHasForm
	cSCXName = LOWER(_VFP.ActiveProject.Name)
	oFormMenu .AddMenuBar(m.cSCXName,"oTHIS.AddToForm(["+m.cSCXName+"])",,,,,.T.)
	FOR i = 1 TO _VFP.Projects.Count
		cSCXName = LOWER(_VFP.Projects[m.i].Name)
		IF LOWER(_VFP.ActiveProject.Name) == m.cSCXName
			LOOP
		ENDIF
	ENDFOR
ELSE
	oFormMenu = ""
ENDIF

ENDPROC
PROCEDURE checkitem
LPARAMETER oItem,lCheckClass

LOCAL lcFileName,lcClass,lcGetFile,laGetClass,lnClasses,i
DIMENSION laGetClass[1]

lcFileName = oItem.cFileName
IF lCheckClass
	IF UPPER(JUSTEXT(lcFileName)) = "VCX"
		lcClass = oItem.cClass
	ELSE
		lCheckClass=.F.
	ENDIF
ENDIF

IF !FILE(lcFileName)
	lcGetFile = oItem.oHost.LocateFile(lcFileName)
	DO CASE
	CASE ISNULL(lcGetFile) OR EMPTY(lcGetFile)	&&cancelled
		RETURN .F.
	CASE lcGetFile == lcFileName				&&ignored
		RETURN .F.
	CASE !FILE(lcGetFile)						&& bad file entered
		RETURN .F.
	ENDCASE
	oItem.cFileName = lcGetFile
	oItem.WriteProperties(.T.,.T.)
ENDIF

IF lCheckClass
	IF !FILE(lcFileName)
		RETURN .F.
	ENDIF
	lnClasses = AVCXCLASSES(laGetClass,lcFileName)
	FOR i = 1 TO lnClasses
		IF UPPER(laGetClass[m.i,1]) == UPPER(lcClass)
			RETURN
		ENDIF
	ENDFOR
	DIMENSION laGetClass[1]
	IF !AGETCLASS(laGetClass,lcFileName) OR !FILE(laGetClass[1])
		RETURN .F.
	ENDIF
	oItem.cFileName = laGetClass[1]
	oItem.cClass = laGetClass[2]
	oItem.WriteProperties(.T.,.T.)
ENDIF

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord, toObject

LOCAL m.cWindow,lInScreen,cExt

IF VARTYPE(oSource)#"O" OR VARTYPE(toObject)#"O" OR;
	NOT DODEFAULT(oSource, nXCoord, nYCoord)
		RETURN .F.
ENDIF

lInScreen = UPPER(oSource.Name)=VFP_SCREEN AND UPPER(oSource.BaseClass) == "FORM"
cExt = UPPER(JUSTEXT(TRANS(toObject.cFileName)))

DO CASE
CASE m.lInScreen AND !toObject.oHost.lDragDropToDesktop
	RETURN .F.
CASE m.lInScreen AND UPPER(toObject.cClass)=OLECONTROL_CLASS
	RETURN .F.
CASE m.lInScreen AND INLIST(m.cExt,"DBF")
	RETURN .F.
CASE m.lInScreen AND INLIST(m.cExt,"PJX","SCX","FRX","LBX","MNX","PRG","QPR","MPR","H","LOG","TXT")
	IF toObject.oHost.lRunFileDefault
		THIS.Run(toObject)
	ELSE
		THIS.Modify(toObject)
	ENDIF
CASE UPPER(oSource.BaseClass)="PROJECT"
	IF  UPPER(JUSTEXT(toObject.cFileName))="VCX" AND !EMPTY(toObject.cClass)
		THIS.AddToProject(toObject.cFileName,oSource.Name,toObject.cClass,UPPER(toObject.cBaseClass)=="FORM")
	ELSE
		THIS.AddToProject(toObject.cFileName,oSource.Name)
	ENDIF
OTHERWISE
	RETURN THIS.ClassToForm(oSource,nXCoord,nYCoord,toObject)
ENDCASE

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine

ENDPROC
PROCEDURE run
LPARAMETERS toObject
LOCAL cExt,lRunTimer,cCmd
IF NOT DODEFAULT() OR !FILE(toObject.cFileName)
	RETURN .F.
ENDIF
cExt = UPPER(JUSTEXT(toObject.cFileName))
cCmd = toObject.cFileName
lRunTimer = .F.
IF TYPE("toObject.lRunTimer") = "L"
	lRunTimer = toObject.lRunTimer
ENDIF

DO CASE
CASE cExt=="SCX"
	IF lRunTimer &&use for modal forms with ActX controls
		THIS.oHost.RunCodeTimer([DO FORM "&cCmd"])
	ELSE
		DO FORM (toObject.cFileName)
	ENDIF
CASE cExt=="PJX"
	MODIFY PROJECT (toObject.cFileName) NOWAIT
CASE INLIST(cExt,"FRX","LBX")
	REPORT FORM (toObject.cFileName) PREVIEW
CASE cExt=="MNX"
	MODIFY MENU (toObject.cFileName) NOWAIT
CASE INLIST(cExt,"PRG","MPR","QPR")		
	IF lRunTimer 
		THIS.oHost.RunCodeTimer([DO "&cCmd"])
	ELSE
		DO (toObject.cFileName)
	ENDIF
CASE INLIST(cExt,"H","TXT","LOG")
	MODIFY FILE (toObject.cFileName) NOWAIT
ENDCASE

ENDPROC
PROCEDURE modify
LPARAMETERS toObject
LOCAL cExt, lcMethod

IF NOT DODEFAULT() OR !FILE(toObject.cFileName) OR !toObject.lModify
	RETURN .F.
ENDIF

cExt = UPPER(JUSTEXT(toObject.cFileName))

DO CASE
CASE cExt=="SCX"
	lcMethod = ALLTRIM(toObject.cMethod)
	IF EMPTY(m.lcMethod)
		MODIFY FORM (toObject.cFileName) NOWAIT
	ELSE
		MODIFY FORM (toObject.cFileName) METHOD &lcMethod NOWAIT
	ENDIF
CASE cExt=="PJX"
	MODIFY PROJECT (toObject.cFileName) NOWAIT
CASE INLIST(cExt,"FRX","LBX")
	MODIFY REPORT (toObject.cFileName) NOWAIT
CASE cExt=="MNX"
	MODIFY MENU (toObject.cFileName) NOWAIT
CASE INLIST(cExt,"PRG","MPR","QPR")		
	MODIFY COMMAND (toObject.cFileName) NOWAIT
CASE INLIST(cExt,"H","TXT","LOG")
	MODIFY FILE (toObject.cFileName) NOWAIT
ENDCASE

ENDPROC
>Y�� @>@>G�%,7=aU8�U�������2%�C�
�C�
����O�C�
����C��N�	B���������T���1��J�C�
�@�(��� %�C�
����L��
�	��
�
H������
��checkbox����T���chk����
��combobox���T���cbo�� ��
��
commandbutton��3�T���cmd����
��commandgroup��b�T���cmg����
��	container����T���ctr����
��control����T���ctl����
��custom����T���cst����
��editbox���T���edt����
��form��2�T���frm����
��formset��\�T���fst����
��grid����T���grd����
��image����T���img����
��label����T���lbl����
��line����T���lin����
��listbox��$�T���lst����
��optionbutton��S�T���opt����
��optiongroup����T���opg��"��
��oleboundcontrol����T���olb����
��
olecontrol����T���ole����
��	pageframe���T���pgf����
��shape��4�T���shp����
��	separator��`�T���sep����
��spinner����T���spn����
��textbox����T���txt����
��timer����T���tmr����
��toolbar���T���tbr����%�C�
����C��:�T���C�
�����)+�C�oSource.�
��
�b�U����T�
��CCC�
�g�Z����B��
��
���UOSOURCE
CCLASSNAME	CDATANAME
LSHORTNAMENINCCNEWNAME	�������������	�
�	����
�����v�T���
�� T��CC������6����%�C�
������B���T��C��
��
���
H������C�
�f�
OLECONTROL��>�0%�C�toObject.cProgIDb�C�	C������B�-���&��C�
��
olecontrol�������C�.VCX�
�����y���C�
��
��
�����2�����C�
��
������+IF TYPE("oSource.&cNewObjName")#"O"���B���&oSourceObj = oSource.&cNewObjName.

�����)�:T��CC�
����N��
��C�����D6��:T��CC�
����N��
��C�����D6��%�C�f�IMAGE����T�������4%�C�
.cFileNameb�U�CC����f�VCX	����T�������%�C�.Visibleb�L���T��a�����C�����C%�����-C��builder��h�C��builderx��h	������C��	����I%�C�aDropObjs[2].ShowWindowb�U�CC��	�
ShowWindow��h	���������	�������:��������	B����UOSOURCENXCOORDNYCOORDTOOBJECTCSAVELIBCNEWOBJNAME
CFORMCLASSCFORMLIB
OSOURCEOBJ	ADROPOBJSCCLASSCFORMCLASSLIBRARY	CFILENAMETHIS
GENOBJNAMECPROGID	ADDOBJECT	NEWOBJECTLEFTWIDTHTOPHEIGHT	BASECLASSPICTUREVISIBLESETFOCUSOHOSTLFFCBUILDERLOCKACTIVATEv��������%�C����O��2�B���8%�C�
��
�C�
����C	�CC�
���f�VCX	����%t,��FORM DESIGNER -� �
����
�����%�C����`�
����B���T��CC���f��*%�C�
��FORM�PAGE�TOOLBAR�
��*�R,:��No forms open...��B���%��
��PAGE��U���������B�CC���������UTOOBJECT	CFORMNAMEAFRMOBJCOBJBASE	BASECLASSSHOWTHISCLASSTOFORM��������������	�
T�	����
T�����-%�C��C�
����C�	C�
�0
��y�B��"%�C�
����C�C�
������T�
���C�
����'%�C�
��
�CC�
���f�VCX	����T��C�custom�N����C�lIsForm�
�����&T��C�	classdrop�
������%�C����O����W��C�KOne of the gallery's components is in use. Operation could not be performed�x��B�-���
����T������
H��������������C�	cNewClass����� ��C�
cFromClass�
�����#��C�
cFromClassLib�
�����#��C�
cSaveClassLib�
�����%T��C�newclass�
������%�C����O���W��C�KOne of the gallery's components is in use. Operation could not be performed�x��B�-���
����%�C�����'�B�-���-O��������Q��������:�\��{ENTER}��<,�CLASS DESIGNER -�T�������������/cNewForm = PUTFILE("Select &form",'',"SCX")
%�C�
������B�-���T��C�
��SCX��� &��
��:Q��
����
���
�������C����`��!T������C������\��{ENTER}��<,�FORM DESIGNER -�T���
�����%�C�
�0������C���
������
���%�C�	fC�f�����C���
������
�	���%�����D�*t,��PROJECT MANAGER -� C�
������
H�U��������~�/O������
��:��������/&��
��:���U	CFILENAME	CPROJNAMECCLASSLISFORMOACTIONCNEWFORM
OCLASSDROPNACTIONATMP	CSAVEFILE
ACTIVEPROJECTNAMEADDPROPERTYTHISCLASSLIBRARYSHOW
NGETACTION	CNEWCLASS
CSAVECLASSLIB
CFROMCLASS
CFROMCLASSLIBLEFTPROJECTSFILESADD��������%�C���+�	B�����T��C�SCREEN������
������
��������(�������'T���
����C�SCREEN�
�����������(�����������&T���
���
���C�
������B��
���U	AWINSTACK
NTOTALWINDOWSI	ATMPARRAY���������'�����	�
���
��#����������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���(���T��C�RegObj�����%�C����O����B�-���5R,:��*Reading Registry for ActiveX Components...��%�C�
�0����
H�8����CC�
��TLB��0��j�T��C�
��TLB����CC�
��OLB��0����T��C�
��OLB���2���T���
����"T��C�tli.tliapplication�N��%�C����O����R�B�-���T��C�����%�C����O��4�R�B�-��������(��������<%�CC�
���� CCC�
���f�OCX����6����%�CC���
������C�����#T��C���C�
����!������%�CC�����5�&%�C��
��
�a��"���1�R�B�-���������(�C�����T�
�C�
�C���d�T��%�C�
�
�G�����NR,:��+Searching Registry for available classes...CC�
�
Z��
% complete���
�����������������������������J���(�����-%�C��
�C�
���a��"�����
H�u�����
��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����%�����9�&T�����CCC�����굛���%�CC��0
����/%�C�aServerName[4]b�C�
CC��0	����T�����C�������.����,%�C�
���CCC��f��CC�
�f��������C��C�
����"��*��C��C�
���\ProgID��"��%�CC����
��X���C���������#T��C�������C����#T��C�������C����#T��C�������C��������R�U#	ACONTROLSLALLCONTROLSCACTIVEXFILECTYPELIBFILEOTLIB	OTYPEINFOOREGICOPTPATHNPOSNTOTDONECVFPKEYCEXTNOTFORMLNPOSACLSIDSAKEYSAPROGIDACONTROLNAMEASERVERNAMECSCANKEYICOUNTLCSERVERNAMEVERSIONCHKEYCACTIVEXKEYOTHISOHOST	GETOBJECTTYPELIBINFOFROMFILE	COCLASSESCOUNT
ATTRIBUTEMASKGUIDENUMOPTIONS����%�C�
�	C�
�0
��*�B�-��������
�����
T�����T��C���
���%�������K��C�No version information found.�Version information for: �
��x��B��%�CC���
���!T���
Comments: CC������%�CC���
��V�7T���
�C�
 C�
 �Company Name: CC������%�CC���
����;T���
�C�
 C�
 �File Description: CC������%�CC���
����7T���
�C�
 C�
 �File Version: CC������%�CC���
��H�8T���
�C�
 C�
 �Internal Name: CC������%�CC���
����:T���
�C�
 C�
 �Legal Copyright: CC������%�CC���
����;T���
�C�
 C�
 �Legal Trademarks: CC������%�CC���
��A�<T���
�C�
 C�
 �Original Filename: CC������%�CC�	��
����8T���
�C�
 C�
 �Private Build: CC�	�����%�CC�
��
����7T���
�C�
 C�
 �Product Name: CC�
�����%�CC���
��2�:T���
�C�
 C�
 �Product Version: CC������%�CC���
����8T���
�C�
 C�
 �Special Build: CC������%�CC���
����3T���
�C�
 C�
 �
Language: CC������%�CC�
��
��
�%T���
�C�
 C�
 CC�
�����+%�C�
���C�aVerArray[1]b�L��c�*T���No version information found.���0��C�
��Version information for: �
��x��U	CFILENAME	AVERARRAY
CVERSTRINGNRESULT4������
�����T��C�����
T�����%��
����$�T��C�EXACTv��G�;T���CC��PROJECT MANAGER -������6��9T���CC��FORM DESIGNER -������6��:T���CC��CLASS DESIGNER -������6��;T���CC��REPORT DESIGNER -������6��9T���CC��MENU DESIGNER -������6��=T���CC��SHORTCUT DESIGNER -������ 6��=T���CC��DATABASE DESIGNER -������@6��SET EXACT &cSaveExact
�	B����UNTOTWIN
CSAVEEXACT	NWINFLAGSAVFPWINDOWSTHISGETWINDOWSTACK@�������T���C�����%��
����T��C�C��@��;��C�
��oTHIS.AddToProject([�
��])����a���������(��C�����T��CC�
��C��@��%�C�C��@�
�����.��6��C�
��oTHIS.AddToProject([�
��])�������.�
T������B��
���U		OPROJMENULHASPJXCPJXNAMEPROJECTSCOUNT
ACTIVEPROJECTNAME
ADDMENUBARI����������T��-��
�����%�C����`����T��CC��C��]@��T��CC���f��>%�CC�
���@�vcx� C�
��FORM�PAGE�TOOLBAR�	���M��CC�
���� (CC���@�)�oTHIS.AddToForm([�
��])����T��a����
�	����T�
�C�	���������(��
����,%�C�FORM DESIGNER -C�
��	������T��a��1T��CCC�
��	C�FORM DESIGNER ->��@��3��C�
��oTHIS.AddToForm([�
��])�������%��
�
���
T������B��
���%��
�����T��C�C�
�@��8��C�
��oTHIS.AddToForm([�
��])����a���������(��C������T��CC�
��C��@��%�C�C�
�@�
�����.�������
T������U	OFORMMENULHASFORMCSCXNAMEIAFRMOBJCOBJBASE	BASECLASS
ADDMENUBARNAMEAVFPWINDOWSNTOTWINTHISGETWINDOWSTACK
ACTIVEPROJECTPROJECTSCOUNT7������������
�����T������
%������%�CC���f�VCX��y�T����	�����T��-����%�C�0
��:�T��C���
���
H�����C���C������B�-��������B�-���C�0
���B�-���T��������Caa�����
%����0�%�C�0
��b�B�-���T��C�����������(������%�CC�
���fC�f����B����
�����$%�C�����
�CC��0
����B�-���T���C����T��	�C������Caa�����U
OITEMLCHECKCLASS
LCFILENAMELCCLASS	LCGETFILE
LAGETCLASS	LNCLASSESI	CFILENAMECCLASSOHOST
LOCATEFILEWRITEPROPERTIES���������
����8%�C����O�C����O�C����
��c�B�-���0T��C��f�SCREEN�C��f�FORM	��T��CCC��	_��f��
H�������
����
�
	����B�-��)��
��C��f�
OLECONTROL	���B�-�� ��
��C�
��DBF�	��6�B�-��Z��
��HC�
��PJX�SCX�FRX�LBX�MNX�PRG�QPR�MPR�H�LOG�TXT�	����%���
�
������C����������C�������C��f�PROJECT��k�)%�CC��	��f�VCX�
C���
	��F�/��C��	����C��f�FORM�����g���C��	�������2���B�C���������UOSOURCENXCOORDNYCOORDTOOBJECTCWINDOW	LINSCREENCEXTNAME	BASECLASS	CFILENAMEOHOSTLDRAGDROPTODESKTOPCCLASSLRUNFILEDEFAULTTHISRUNMODIFYADDTOPROJECT
CBASECLASSCLASSTOFORM�����UNERRORCMETHODNLINE1��������%�C�
�
C��0
��8�B�-���T��CC����f��T������T��-��&%�C�toObject.lRunTimerb�L����T�������
H���*����SCX���
%�����.THIS.oHost.RunCodeTimer([DO FORM "&cCmd"])
�����������PJX��?�/����:��C��FRX�LBX���i�?���������MNX����/����:�!�C��PRG�MPR�QPR�����
%������)THIS.oHost.RunCodeTimer([DO "&cCmd"])
���
�������C��H�TXT�LOG���*�/����:��UTOOBJECTCEXT	LRUNTIMERCCMD	CFILENAME��������&%�C�
�
C��0
���
��?�B�-���T��CC����f��
H�e������SCX����T��C�����%�C�
������/&����:����<MODIFY FORM (toObject.cFileName) METHOD &lcMethod NOWAIT
����PJX���/����:��C��FRX�LBX���@�/3����:����MNX��c�/����:�!�C��PRG�MPR�QPR�����/�����:��C��H�TXT�LOG�����/����:��UTOOBJECTCEXTLCMETHOD	CFILENAMELMODIFYCMETHOD
genobjname,��classtoform��	addtoform6��addtoproject���getwindowstack���
getactivex���
getversion��getwindowtypes�$��addprojectmenuI'��addformmenu�(��	checkitemv,��	dragdrop26/��Error�2��run�2��modify)5��11(�A��R��������q�q��q���!��������AArQA��A31����AqA���qAa����A�qAb����ADA��A�B4��1AA�3��RqA�QA��qAb��qArA�31����AA"AAra�aQqqA���11QQqqA�!qA���qA��q�AA�Q�A�A���AA3q��Ab���qA�aA�3�q1qr�Ar�AA��A�1�QqAR�������A"QQqARQQqA��AAA1AAA2aQqAA����A�111���a�a��AAa1AA�C�aA�aAB�q�BAAA���r�A211AAAQ3q�qA���q�AABAAqAA�AAqAA�AA�AA�AA�AA�AAqAA�AA�AA1AAQA��A31�R�1Aa��������A�3q�a�A����AAaA��A�4q1����a���AA�Qq��1AA�A��A����AAA��A3�������AA���qqqA�A�qAQq�AAA�AqAAA�A31�qAq��q�qq�1�A�����A��A3�3q��qAQ�aA�A����AA���A�����A��A3q�bqAR�A!���AA���A����A28HZ`Xz�����������3,,UT,4��A4�7���7�9
�:�>��>�BK�BCG|#_G�G�%�GK�G+K!N�)@>$�PROCEDURE addtoform
LPARAMETERS cSCXName
LOCAL oActivex
oActivex = THIS.oShared.AddToForm(this,m.cSCXName)
IF VARTYPE(m.oActiveX) = "O" AND ATC(oActiveX.BaseClass,"olecontrol")#0
	oActiveX.Width = this.nCtrlWidth
	oActiveX.Height = this.nCtrlHeight
ENDIF

ENDPROC
PROCEDURE addtosystem
LOCAL cWinSysDir, cTargetDir, cTargetFile, cRegSvr, i, lWriteProps
LOCAL aCopyFiles,nArrLen,cAssocFile,lnErrorCode

IF !FILE(THIS.cFileName) AND !FILE(THIS.cRemoteFile)
	MESSAGEBOX(ERR_NOACTXFILE_LOC)
	RETURN .F.
ENDIF
DIMENSION aCopyFiles[1,3]
cWinSysDir = GETENV("windir")+IIF(ATC("NT",OS())#0 OR VAL(OS(3))>=5,WINSYS_NT,WINSYS_W95)
cTargetFile = THIS.cFileName
lWriteProps = .F.
lCopyFile = .T.

*Copy file and associated files to proper directory if 
*not installed locally. Prompt user with default for
*Windows system directory. This assumes that cFileName is
*remote file name vs having cRemoteFile set properly.

DO CASE
CASE FILE(THIS.cRemoteFile) AND FILE(THIS.cFileName) AND ;
	UPPER(THIS.cRemoteFile)#UPPER(THIS.cFileName)
	* Both Remote and Local files exist
	IF MESSAGEBOX(MSG_REMOTEUPDATE_LOC,MSG_YESNO) # MSG_YES
		RETURN .F.
	ENDIF
CASE FILE(THIS.cRemoteFile) AND !FILE(THIS.cFileName)
	* Remote exists, Local doesn't
	IF EMPTY(JUSTDRIVE(THIS.cFileName))
		cTargetDir = GETDIR(m.cWinSysDir, MSG_GETCONTROL_LOC)
		IF EMPTY(m.cTargetDir)
			RETURN .F.
		ENDIF
		cTargetFile = m.cTargetDir+justfname(THIS.cFileName)
	ELSE
		IF MESSAGEBOX(MSG_REMOTEUPDATE_LOC,MSG_YESNO) # MSG_YES
			RETURN .F.	
		ENDIF
	ENDIF
OTHERWISE
	lCopyFile = .F.
ENDCASE

aCopyFiles[1,1] = THIS.cRemoteFile
aCopyFiles[1,2] = m.cTargetFile
aCopyFiles[1,3] = .T.

*Do actual file copy here
IF m.lCopyFile
	* Get list of Associated files to copy
	FOR m.i = 1 TO ALEN(THIS.aExtraFiles,1)
		IF TYPE("THIS.aExtraFiles[m.i,1]") = "C" AND FILE(THIS.aExtraFiles[m.i,1])
			nArrLen = ALEN(aCopyFiles,1)+1
			DIMENSION aCopyFiles[m.nArrLen,3]
			aCopyFiles[m.nArrLen,1] = THIS.aExtraFiles[m.i,1]
			aCopyFiles[m.nArrLen,2] = ADDBS(JUSTPATH(m.cTargetFile)) + JUSTFNAME(THIS.aExtraFiles[m.i,1])
			aCopyFiles[m.nArrLen,3] = IIF(TYPE("THIS.aExtraFiles[m.i,2]")="L",THIS.aExtraFiles[m.i,2],.T.)
		ENDIF
	ENDFOR
	FOR m.i = 1 TO ALEN(aCopyFiles,1)
		COPY FILE (aCopyFiles[m.i,1]) TO (aCopyFiles[m.i,2])
		IF !FILE(aCopyFiles[m.i,1])
			MESSAGEBOX(ERR_BADCOPY_LOC)
			RETURN .F.
		ENDIF
	ENDFOR
ENDIF

*Register files even if file already local
*User may have unregistered it.
FOR m.i = 1 TO ALEN(aCopyFiles,1)
	IF aCopyFiles[m.i,3] 
		THIS.RegFile(aCopyFiles[m.i,2])
	ENDIF
ENDFOR

*Need to update filenames if necessary where cFileName is
*somehow set to remote file name.
IF UPPER(THIS.cFileName)#UPPER(m.cTargetFile)
	THIS.cRemoteFile = THIS.cFileName 
	THIS.cFileName = m.cTargetFile
	m.lWriteProps = .T.
ENDIF

* Check for class if not yet associated
* note: Class may already exist so skip writing it
lnErrorCode = THIS.GetProgID() 
IF lnErrorCode=ERRCODE_GOODINSTALL
	m.lWriteProps = .T.
ENDIF

IF m.lWriteProps
	THIS.WriteProperties(.T.,.T.)
ENDIF

IF lnErrorCode#ERRCODE_FAILINSTALL
	MESSAGEBOX(MSG_GOODINSTALL_LOC)
ENDIF
ENDPROC
PROCEDURE isserver
IF EMPTY(THIS.cFileName)
	RETURN 0
ENDIF

DO CASE
CASE UPPER(justext(this.cFileName)) = INPROCSRV_EXTN	&&In-Proc DLL
	RETURN ACTXDLLSVR
CASE UPPER(justext(this.cFileName)) = LOCALSRV_EXTN		&&Local Server EXE
	RETURN ACTXEXESVR
OTHERWISE		&& Control
	RETURN ACTXCONTROL
ENDCASE

ENDPROC
PROCEDURE viewtypelib
#DEFINE NOOBJBROW_LOC	"Could not locate Object Browser. Check this setting in the Options dialog."
LOCAL cTypeLib
cTypeLib= FORCEEXT(THIS.cFileName,TYPELIB_EXTN)

IF !FILE(m.cTypeLib)
	cTypeLib= FORCEEXT(THIS.cFileName,TYPELIB2_EXTN)
	IF !FILE(m.cTypeLib)
		cTypeLib = THIS.cFileName
	ENDIF
	IF !FILE(m.cTypeLib)
		RETURN
	ENDIF
ENDIF

IF VARTYPE(_OOBJECTBROWSER)#"O"
	DO (_OBJECTBROWSER)
ENDIF
IF VARTYPE(_OOBJECTBROWSER)="O"
	_OOBJECTBROWSER.Show
	_OOBJECTBROWSER.LoadTypelib(m.cTypeLib)
ELSE 
	MESSAGEBOX(NOOBJBROW_LOC)
ENDIF

ENDPROC
PROCEDURE regremote
LOCAL cVBRFIle,cCliReg

cVBRFile = FORCEEXT(THIS.cFileName,REMOTEREG_EXTN)
cCliReg = (HOME()+CLIREG_FILE)

IF !FILE(m.cCliReg)
	MESSAGEBOX(MSG_NOCLIREG32_LOC)
	RETURN .F.
ENDIF

IF EMPTY(m.cVBRFile) OR !FILE(m.cVBRFile)
	MESSAGEBOX(MSG_NOVBRFILE_LOC)
	RETURN .F.
ENDIF

RUN /N &cCliReg. "&cVBRFile." -NOLOGO

ENDPROC
PROCEDURE getversion
RETURN THIS.oShared.GetVersion(this.cFileName)

ENDPROC
PROCEDURE nctrlheight_access
IF VARTYPE(THIS.nCtrlHeight)="N" AND THIS.nCtrlHeight>0
	RETURN THIS.nCtrlHeight
ELSE
	RETURN DEFHEIGHT
ENDIF

ENDPROC
PROCEDURE nctrlwidth_access
IF VARTYPE(THIS.nctrlwidth)="N" AND THIS.nctrlwidth>0
	RETURN THIS.nctrlwidth
ELSE
	RETURN DEFWIDTH
ENDIF

ENDPROC
PROCEDURE regfile
*Register files even if file already local
*User may have unregistered it.
LPARAMETER cReGFile

LOCAL cRegSvr,cWinSysDir
cWinSysDir = GETENV("windir")+IIF(ATC("NT",OS())#0 OR VAL(OS(3))>=5,WINSYS_NT,WINSYS_W95)

IF UPPER(JUSTEXT(m.cReGFile)) = "EXE"
	RUN /N &cReGFile. /RegServer
ELSE
	* Check if REGSRV32 installed
	cRegSvr = m.cWinSysDir+REGSVR_FILE
	IF FILE(m.cRegSvr)
		m.cRegSvr = m.cRegSvr+" -s"	&&add silent switch
		RUN /N &cRegSvr. "&cReGFile."
	ELSE
		MESSAGEBOX(MSG_NOREGSVR32_LOC)
		RETURN .F.
	ENDIF
ENDIF

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()

ENDPROC
PROCEDURE getprogid
LPARAMETER tlReset

LOCAL lReset
lReset = IIF(VARTYPE(tlReset)#"L",.F.,tlReset)
IF lReset
	THIS.cProgID = ""
ENDIF

* Check for class if not yet associated
IF !EMPTY(THIS.cProgId)
	RETURN ERRCODE_CLASSEXISTS
ENDIF

LOCAL lcFileName
PRIVATE aGetControls
DIMENSION aGetControls[1,2]
STORE "" TO aGetControls
lcFileName = THIS.FULLPATH(THIS.cFileName)
IF !THIS.oShared.GetActivex(@aGetControls,.T.,lcFileName)
	RETURN ERRCODE_FAILINSTALL
ENDIF

IF !EMPTY(aGetControls[1])
	THIS.cProgID = aGetControls[1,2]
	IF ALEN(aGetControls,1)#1
		oClass = NewObject(ITEMPICKER_CLASS,HOME()+VFPGLRY_VCX)
		oClass.oActiveX = THIS
		oClass.SetList(@aGetControls)
		oClass.Show
	ELSE
		IF lReset
			MESSAGEBOX(MSG_ONECLASSREG_LOC+THIS.cProgID)
		ENDIF	
	ENDIF
ELSE
	MESSAGEBOX(MSG_NOCLASSREG_LOC)
	RETURN ERRCODE_FAILINSTALL
ENDIF

IF lReset
	THIS.WriteProperties(.T.,.T.)
ENDIF
RETURN ERRCODE_GOODINSTALL
ENDPROC
PROCEDURE modify
LOCAL nErr
IF NOT DODEFAULT() OR NOT THIS.lModify OR EMPTY(this.cSourceProject)
	RETURN .F.
ENDIF

IF UPPER(JUSTEXT(THIS.cSourceProject)) = PROJECT_EXTN
	MODIFY PROJECT (THIS.cSourceProject)
ELSE
	nErr = this.oHost.ShellExecute(THIS.cSourceProject)
	RETURN m.nErr>31
ENDIF

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject

LOCAL cActXType,lAddForm, cExtn

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

LOCAL lHasForm

cActXType = THIS.IsServer()
lAddForm = m.lHasForm AND !EMPTY(THIS.cProgID) AND (m.cActXType=ACTXCONTROL OR UPPER(THIS.cClass)#OLECONTROL_CLASS)
cExtn = UPPER(JUSTEXT(THIS.cFileName))

* Add to form
IF m.cActXType=ACTXCONTROL OR (!EMPTY(THIS.cClass) AND;
	 !EMPTY(THIS.cFormClassLibrary))
	oFormMenu = THIS.NewMenu()
	lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
	this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)
ENDIF

* Modify ActiveX Control from source (e.g., VB Project)
this.AddMenuBar(MENU_MODIFY_LOC,"oTHIS.Modify()",,,,EMPTY(THIS.cSourceProject))

this.AddMenuSeparator()

* Install on my machine
this.AddMenuBar(MENU_SYSTEM_LOC,"oTHIS.AddToSystem()",,,,EMPTY(THIS.cFileName))

* Change Registered Class
this.AddMenuBar(MENU_NEWCLSID_LOC,"oTHIS.GetProgID(.T.)",,,,EMPTY(THIS.cFileName))

* Version Information
this.AddMenuBar(MENU_VERSION_LOC,"oTHIS.GetVersion()",,,,EMPTY(THIS.cFileName))

* View Type Library information
this.AddMenuBar(MENU_TYPELIB_LOC,"oTHIS.ViewTypeLib()")

IF m.cActXType#ACTXCONTROL
	* Register remote
	* disabled for VFP8 since CLIREG32 no longer ships
	* this.AddMenuBar(MENU_REGREMOTE_LOC,"oTHIS.RegRemote()",,,,m.cExtn=INPROCSRV_EXTN)
ENDIF

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
LOCAL oActiveX
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
oActiveX=THIS.oShared.DragDrop2(oSource, nXCoord, nYCoord, THIS)
IF VARTYPE(oActiveX)="O" AND ATC(oActiveX.BaseClass,"olecontrol")#0
	oActiveX.Width = this.nCtrlWidth
	oActiveX.Height = this.nCtrlHeight
ENDIF

ENDPROC
PROCEDURE Init
LOCAL i
FOR i = 1 TO ALEN(THIS.aExtraFiles,1)
	STORE "" TO THIS.aExtraFiles[m.i,1]
	STORE .T. TO THIS.aExtraFiles[m.i,2]
ENDFOR
DoDefault()

ENDPROC
PROCEDURE Destroy
THIS.oShared=null

ENDPROC
PROCEDURE refreshpicture
LOCAL cExt
cExt = UPPER(JUSTEXT(THIS.cFileName))
DO CASE
CASE !EMPTY(THIS.cPicture) AND;
 !INLIST(LOWER(JUSTFNAME(THIS.cPicture)),ICO_ACTXEXE,ICO_ACTXDLL,ICO_ACTXOCX)
CASE m.cExt = "EXE"
	THIS.cPicture = ICONFOLDER+ICO_ACTXEXE
CASE m.cExt = "DLL"
	THIS.cPicture = ICONFOLDER+ICO_ACTXDLL
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_ACTXOCX
ENDCASE
THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
�PROCEDURE shellroutine
LPARAMETERS cShell
LOCAL nErr
IF VARTYPE(m.cShell) #"C"
	RETURN .F.
ENDIF
nErr = this.oHost.ShellExecute(THIS.cFileName,,m.cShell,this.cParams)
RETURN m.nErr>31

ENDPROC
PROCEDURE getshellmenuitems
LOCAL aShellOpts,lQView,i,lBold
DIMENSION aShellOpts[1]
aShellOpts = ""
lQView = .F.

IF !THIS.getshellinfo(@aShellOpts,@lQView)
	RETURN .F.
ENDIF

FOR i = 1 TO ALEN(aShellOpts,1)
	this.AddMenuBar(aShellOpts[m.i,2],"oTHIS.ShellRoutine('"+aShellOpts[m.i,1]+"')",,,,,m.i=1)
ENDFOR

* Add Quick View menu
IF m.lQView
	this.AddMenuBar(MENU_QVIEW_LOC,"oTHIS.QuickView()")
ENDIF

ENDPROC
PROCEDURE getdefaultshell
LOCAL aShellOpts,lQView,cDefault,i
DIMENSION aShellOpts[1]
aShellOpts = ""
cDefault = ""
lQView = .F.

IF THIS.getshellinfo(@aShellOpts,@lQView,@cDefault) AND;
	VARTYPE(m.cDefault)="C" AND !EMPTY(m.cDefault)
	RETURN m.cDefault
ENDIF

RETURN ""

ENDPROC
PROCEDURE getshellinfo
LPARAMETERS aShellOptions, lHasQuickView, cDefault

LOCAL cOptPath,oReg,aShellVerbs,aShellDefault,aShellCaptions
LOCAL cExtnKey,cAppKey,cOptPath,i,cExtn,nError,cShell2,nPos

DIMENSION aShellVerbs[1]
DIMENSION aShellDefault[1,2]
DIMENSION aShellCaptions[1]

STORE "" TO aShellVerbs,aShellDefault
cExtnKey = ""
cAppKey = ""
cExtn = JUSTEXT(this.cFileName)

IF EMPTY(m.cExtn)
	RETURN .F.
ENDIF

oReg = this.oHost.GetObject(OBJ_REGISTRY)
IF ISNULL(oReg)
	RETURN .F.
ENDIF

* Setup defaults
DIMENSION aShellOptions[1,2]
STORE "" TO aShellOptions

nError = oReg.GetAppPath(m.cExtn,@cExtnKey,@cAppkey)
IF nError #0
	RETURN
ENDIF

cOptPath = ALLTRIM(m.cExtnKey) + SHELL_KEY

nError = oReg.EnumOptions(@aShellVerbs,m.cOptPath,"",.T.)
IF m.nError #0
	RETURN
ENDIF

* Get Shell default
DIMENSION aShellDefault[1,2]
nError = oReg.EnumOptions(@aShellDefault,m.cOptPath,"")

IF TYPE("aShellDefault[1,2]")="C" AND !EMPTY(aShellDefault[1,2])
	* Set Shell default as first item
	cShellDefault = ALLTRIM(aShellDefault[1,2])
ELSE
	cShellDefault = SHELLDEFAULT
ENDIF
nPos = 0
FOR i = 1 TO ALEN(aShellVerbs)
	IF UPPER(ALLTRIM(aShellVerbs[m.i])) == UPPER(m.cShellDefault)
		cShellDefault = aShellVerbs[m.i]
		nPos = m.i 
	ENDIF
ENDFOR

IF nPos#0
	ADEL(aShellVerbs,m.nPos)
	AINS(aShellVerbs,1)
	aShellVerbs[1] = m.cShellDefault		
ENDIF

* Search for Registry provided menu captions
FOR i = 1 TO ALEN(aShellVerbs)
	*Check for Printto and loop
	IF ATC(SHELLPRINTTO,aShellVerbs[m.i])#0
		LOOP
	ENDIF
	
	IF !EMPTY(aShellOptions[1])
		DIMENSION aShellOptions[ALEN(aShellOptions,1)+1,2]
	ENDIF
	STORE aShellVerbs[m.i] TO aShellOptions[ALEN(aShellOptions,1),1]
	
	* Check if Caption provided
	DIMENSION aShellCaptions[1]
	nError = oReg.EnumOptions(@aShellCaptions,m.cOptPath+aShellVerbs[m.i],"")
	IF nError=0 AND TYPE("aShellCaptions[1,2]")="C" AND ;
		!EMPTY(aShellCaptions[1,2]) AND ATC(BINARYTYPE,aShellCaptions[1,2])=0 AND;
		TYPE("aShellCaptions[1,1]")="C" AND ATC("MuiVerb",aShellCaptions[1,1])=0	
			STORE STRTRAN(aShellCaptions[1,2],"&","\<") TO aShellOptions[ALEN(aShellOptions,1),2]
	ELSE
		cShell2 = aShellVerbs[m.i]
		DO CASE
		CASE ATC(m.cShell2,SHELLDEFAULT)#0
			cShell2 = MENU_OPEN_LOC
		CASE ATC(m.cShell2,SHELLPRINT)#0
			cShell2 = MENU_PRINT_LOC
		CASE ATC(m.cShell2,SHELLNEW)#0
			cShell2 = MENU_NEW_LOC
		CASE ATC(m.cShell2,SHELLSHOW)#0
			cShell2 = MENU_SHOW_LOC
		OTHERWISE
			cShell2=PROPER(m.cShell2)
		ENDCASE
		STORE m.cShell2 TO aShellOptions[ALEN(aShellOptions,1),2]
	ENDIF
ENDFOR

IF EMPTY(aShellOptions[1,1])
	* special handling for Open With...
	*	aShellOptions[1,1] = SHELLDEFAULT
	*	aShellOptions[1,2] = MENU_OPENWITH_LOC
ENDIF

* Check to make sure all captions have hotkeys
FOR i = 1 TO ALEN(aShellOptions,1)
	IF ATC("\<",aShellOptions[m.i,2])=0
		aShellOptions[m.i,2] = "\<"+aShellOptions[m.i,2]
	ENDIF
ENDFOR

* Check if there is a QuickView association
lHasQuickView = oReg.IsKey(QVIEWPATH+m.cExtn)

cDefault = m.cShellDefault
ENDPROC
PROCEDURE addtoproject
LPARAMETER cPJXName
THIS.oShared.AddToProject(this.cFileName,m.cPJXName)

ENDPROC
PROCEDURE oshared_access
IF VARTYPE(THIS.oShared) # "O"
	THIS.oShared = THIS.oHost.GetObject(OBJ_SHARED)
ENDIF
RETURN THIS.oShared

ENDPROC
PROCEDURE addtoform
LPARAMETER cSCXName
THIS.oShared.AddToForm(THIS,m.cSCXName)

ENDPROC
PROCEDURE cfilename_assign
LPARAMETERS vNewVal
THIS.cfilename = m.vNewVal
THIS.RefreshPicture()
ENDPROC
PROCEDURE refreshpicture
LOCAL lcExtn
lcExtn= UPPER(JUSTEXT(THIS.cFileName))

DO CASE
CASE lcExtn="DOC"
	THIS.cPicture = ICONFOLDER+ICO_MSWORD
CASE lcExtn="XLS"
	THIS.cPicture = ICONFOLDER+ICO_MSEXCEL
CASE lcExtn="PPT"
	THIS.cPicture = ICONFOLDER+ICO_MSPOWERPNT
CASE INLIST(lcExtn,"MSG","OFT")
	THIS.cPicture = ICONFOLDER+ICO_MSOUTLOOK
CASE INLIST(lcExtn,"CHM","HLP")
	THIS.cPicture = ICONFOLDER+ICO_HELP
CASE !EMPTY(THIS.oParent.cFolderPicture)
	RETURN
OTHERWISE
	THIS.cPicture = ICONFOLDER+ICO_FILE
ENDCASE	

THIS.cPicture = THIS.FullPath(THIS.cPicture)

ENDPROC
PROCEDURE dragdrop2
LPARAMETERS oSource, nXCoord, nYCoord
IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
THIS.oShared.DragDrop2(oSource,nXCoord,nYCoord,THIS)

ENDPROC
PROCEDURE run
IF NOT DODEFAULT() 
	RETURN .F.
ENDIF
this.ShellRoutine(this.getdefaultshell())

ENDPROC
PROCEDURE dblclick
IF NOT DODEFAULT() OR !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF
RETURN this.Run()

ENDPROC
PROCEDURE setmenu
LPARAMETERS toObject
LOCAL oProjMenu, lHasForm

IF NOT DODEFAULT(toObject)
	RETURN .F.
ENDIF

IF !THIS.oShared.CheckItem(THIS)
	RETURN .F.
ENDIF

this.getshellmenuitems()
this.AddMenuSeparator

oProjMenu = THIS.NewMenu()
THIS.oShared.AddProjectMenu(@oProjMenu)
this.AddMenuBar(MENU_ADDPROJECT_LOC,oProjMenu,,,,_VFP.PROJECTS.COUNT=0)

IF VARTYPE(THIS.cClass) = "C" AND !EMPTY(THIS.cClass)
	this.AddMenuSeparator
	oFormMenu = THIS.NewMenu()
	lHasForm = THIS.oShared.AddFormMenu(@oFormMenu)
	this.AddMenuBar(MENU_ADDFORM_LOC,oFormMenu,,,,!lHasForm)
ENDIF

ENDPROC
PROCEDURE quickview
LOCAL oReg, cQView, cFile, nErr
cQView = ""

oReg = this.oHost.GetObject(OBJ_REGISTRY)
IF ISNULL(oReg)
	RETURN .F.
ENDIF

nErr = oREg.GetRegKey("",@cQView,QVIEWEXEPATH)
IF ATC("%SystemRoot%",m.cQView)>0
	m.cQView = GETENV("SYSTEMROOT")+ STRTRAN(m.cQView,"%SystemRoot%")
ENDIF
IF nErr#0 OR !FILE(m.cQView)
	RETURN .F.
ENDIF

RUN /n &cQView. "&cFile"

ENDPROC
PROCEDURE Destroy
THIS.oShared = null

ENDPROC