home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual Foxpro 6.0 (Ent. Edition) / Vf6ent Extractor.EXE / TOOLS / XSOURCE / XSOURCE.ZIP / vfpsource / Browser / browser.PRG < prev    next >
Encoding:
Text File  |  1998-05-01  |  179.6 KB  |  6,810 lines

  1. * BROWSER.PRG - Class Browser.
  2. *
  3. * Copyright (c) 1995-1998 Microsoft Corp.
  4. * 1 Microsoft Way
  5. * Redmond, WA 98052
  6. *
  7. * Description:
  8. * Class Browser for VCX/SCX files.
  9. *
  10.  
  11. #INCLUDE "browser.h"
  12.  
  13. PARAMETERS tcFileName,tcDefaultClass,tlListBox,tcClassType,tnWindowState,tlGallery,tlNoShow
  14. LOCAL oLastBrowser,lcLastSetTalk
  15. PRIVATE lcProgramName
  16.  
  17. lcLastSetTalk=SET("TALK")
  18. SET TALK OFF
  19. SYS(2333,0)
  20. oLastBrowser=.NULL.
  21. IF TYPE("_oBrowser")=="O" AND NOT ISNULL(_oBrowser)
  22.     oLastBrowser=_oBrowser
  23. ENDIF
  24. RELEASE _oBrowser
  25. PUBLIC _oBrowser
  26. _oBrowser=.NULL.
  27. lcProgramName=LOWER(SYS(16))
  28. IF TYPE("tcFileName")=="N" AND tcFileName=0
  29.     IF lcLastSetTalk=="ON"
  30.         SET TALK ON
  31.     ELSE
  32.         SET TALK OFF
  33.     ENDIF
  34.     RETURN
  35. ENDIF
  36. IF tlListBox AND tlGallery
  37.     MESSAGEBOX(M_LISTBOX_MODE_ERROR_LOC+".",48,M_COMPONENT_GALLERY_LOC)
  38.     IF lcLastSetTalk=="ON"
  39.         SET TALK ON
  40.     ELSE
  41.         SET TALK OFF
  42.     ENDIF
  43.     RETURN
  44. ENDIF
  45. tlBrowser=(NOT tlGallery)
  46. IF tlNoShow
  47.     DO FORM (FULLPATH("browser",lcProgramName)) ;
  48.             WITH (tcFileName),(tcDefaultClass),(tlListBox),(tcClassType), ;
  49.             (tnWindowState),(tlGallery) NAME _oBrowser NOSHOW
  50.     IF VARTYPE(_oBrowser)=="O"
  51.         _oBrowser.Activate
  52.     ENDIF
  53. ELSE
  54.     DO FORM (FULLPATH("browser",lcProgramName)) ;
  55.             WITH (tcFileName),(tcDefaultClass),(tlListBox),(tcClassType), ;
  56.             (tnWindowState),(tlGallery) NAME _oBrowser
  57. ENDIF
  58. IF TYPE("_oBrowser")#"O" OR ISNULL(_oBrowser)
  59.     _oBrowser=oLastBrowser
  60. ENDIF
  61. oLastBrowser=.NULL.
  62. IF lcLastSetTalk=="ON"
  63.     SET TALK ON
  64. ELSE
  65.     SET TALK OFF
  66. ENDIF
  67. RETURN
  68.  
  69.  
  70.  
  71. *-- Dummy lines for adding files to project.
  72. DO c:\dev\browser\RunCode.prg
  73. DO c:\dev\browser\VFPScrpt.prg
  74.  
  75. DO activdoc.ico
  76. DO addclslb.bmp
  77. DO addclslb.msk
  78. DO addsbcls.bmp
  79. DO addsbcls.msk
  80. DO addins.bmp
  81. DO addins.msk
  82. DO apilibra.ico
  83. DO apps.ico
  84. DO back.bmp
  85. DO back.msk
  86. DO browser.bmp
  87. DO browser.ico
  88. DO browser.msk
  89. DO catalog.ico
  90. DO catalog2.ico
  91. DO checkbx.ico
  92. DO cfldr.ico
  93. DO cfldr2.ico
  94. DO classlib.ico
  95. DO clibrary.ico
  96. DO cleanup.bmp
  97. DO cleanup.msk
  98. DO cmdgroup.ico
  99. DO code.ico
  100. DO combo.ico
  101. DO cofldr.ico
  102. DO cofldr2.ico
  103. DO containr.ico
  104. DO control.ico
  105. DO custom.ico
  106. DO data.ico
  107. DO database.ico
  108. DO datagrid.ico
  109. DO detlview.bmp
  110. DO dfldr.ico
  111. DO dfldr2.ico
  112. DO docs.ico
  113. DO dofldr.ico
  114. DO dofldr2.ico
  115. DO editbox.ico
  116. DO explorer.ico
  117. DO export.bmp
  118. DO export.msk
  119. DO find.bmp
  120. DO find.msk
  121. DO ffldr.ico
  122. DO ffldr2.ico
  123. DO fofldr.ico
  124. DO fofldr2.ico
  125. DO folder.ico
  126. DO folder2.ico
  127. DO c:\dev\browser\forms.ico
  128. DO frm.ico
  129. DO forward.bmp
  130. DO forward.msk
  131. DO gallery.bmp
  132. DO gallery.ico
  133. DO gallery.msk
  134. DO help.bmp
  135. DO help.msk
  136. DO hyprlink.ico
  137. DO image.ico
  138. DO instance.ico
  139. DO item.ico
  140. DO labels.ico
  141. DO lbl.ico
  142. DO leaf.bmp
  143. DO lgicview.bmp
  144. DO line.ico
  145. DO listbox.ico
  146. DO listview.bmp
  147. DO menus.ico
  148. DO method.ico
  149. DO methodc.ico
  150. DO methodh.ico
  151. DO oclosed.bmp
  152. DO ole.ico
  153. DO olebound.ico
  154. DO oopen.bmp
  155. DO open.bmp
  156. DO open.msk
  157. DO openfldr.ico
  158. DO openfld2.ico
  159. DO openctlg.ico
  160. DO openctl2.ico
  161. DO optionb.ico
  162. DO optiong.ico
  163. DO options.bmp
  164. DO options.msk
  165. DO othrfile.ico
  166. DO pagefrm.ico
  167. DO pclsbrw.bmp
  168. DO pclsbrw.msk
  169. DO pfldr.ico
  170. DO pfldr2.ico
  171. DO pofldr.ico
  172. DO pofldr2.ico
  173. DO programs.ico
  174. DO projhook.ico
  175. DO prop.ico
  176. DO propc.ico
  177. DO proph.ico
  178. DO pushb.ico
  179. DO queries.ico
  180. DO redefine.bmp
  181. DO redefine.msk
  182. DO refresh.bmp
  183. DO refresh.msk
  184. DO rename.bmp
  185. DO rename.msk
  186. DO reports.ico
  187. DO sep.ico
  188. DO shape.ico
  189. DO smicview.bmp
  190. DO spinner.ico
  191. DO stop.bmp
  192. DO stop.msk
  193. DO table.ico
  194. DO text.ico
  195. DO textbox.ico
  196. DO timer.ico
  197. DO toolbar.ico
  198. DO toolbox.ico
  199. DO uplevel.bmp
  200. DO uplevel.msk
  201. DO web_doc.ico
  202. DO web_file.ico
  203. DO web_site.ico
  204. SET PROCEDURE TO formset.ico
  205. SET PROCEDURE TO formpg.ico
  206. DO control.cur
  207. DO dragcopy.cur
  208. DO nodrop.cur
  209. DO dragmove.cur
  210. DO dragit.cur
  211. DO control.crm
  212. DO dragcopy.crm
  213. DO nodrop.crm
  214. DO dragmove.crm
  215. RETURN
  216.  
  217.  
  218.  
  219. FUNCTION brwRefreshTypeLib(toBrowser)
  220. LOCAL oMembers,lnTypeInfo,lnTypeInfoCount,lnTypeLib,lnMemberID,lnMemberType,lcInterface
  221. LOCAL lcMember,lcLastMember,lnParamCount,lcParamStr,lnCount,lnCount2,lnCount3,lnMemberCount
  222. LOCAL lcMemberName,lcParentKey,lcKey,lcText,lcDesc,llLastError
  223. LOCAL lcHelpFile,lnHelpID,lnLastHelpID,lnLastHelpID2
  224. LOCAL laTypeLib[16],laParameters[32],laParams[32],laParentKey[1],laKey[1],laText[1],laDesc[1]
  225.  
  226. IF NOT toBrowser.lBrowser
  227.     toBrowser.vResult=.F.
  228.     RETURN toBrowser.vResult
  229. ENDIF
  230. IF toBrowser.AddInMethod("REFRESHTYPELIB")
  231.     RETURN
  232. ENDIF
  233. SET MESSAGE TO M_REFRESH_TYPE_LIB_LIST_LOC+" ..."
  234. IF toBrowser.lOutlineOCX
  235.     oMembers=toBrowser.oleMembers
  236.     oMembers.parent.ClearNodes(oMembers)
  237. ELSE
  238.     oMembers=toBrowser.lstMembers
  239.     oMembers.Clear
  240. ENDIF
  241. toBrowser.Draw
  242. IF oMembers.parent.lVCXSCXMode
  243.     RETURN
  244. ENDIF
  245. WITH toBrowser
  246.     DIMENSION .aMemberList[1,3]
  247.     .aMemberList=""
  248.     .nMemberCount=0
  249.     .nMemberListIndex=-1
  250.     DIMENSION .aInstances[1]
  251.     .aInstances=""
  252.     .nInstances=0
  253.     .nTimeStamp=-1
  254. ENDWITH
  255. lnTypeLib=oMembers.parent.oleFoxTLib.TLLoadTypeLib(oMembers.parent.cFileName)
  256. IF lnTypeLib<=0
  257.     toBrowser.vResult=.F.
  258.     RETURN toBrowser.vResult
  259. ENDIF
  260. lnTypeInfoCount=oMembers.parent.oleFoxTLib.TLGetTypeInfoCount(lnTypeLib)
  261. IF lnTypeInfoCount<=0
  262.     oMembers.parent.oleFoxTLib.TLRelease(lnTypeLib)
  263.     toBrowser.vResult=.F.
  264.     RETURN toBrowser.vResult
  265. ENDIF
  266. DIMENSION laTypeLib[16]
  267. laTypeLib=""
  268. oMembers.parent.oleFoxTLib.TLGetDocumentation(lnTypeLib,"laTypeLib",-1,0)
  269. IF ALEN(laTypeLib)=0 OR TYPE("laTypeLib[1]")#"C"
  270.     oMembers.parent.oleFoxTLib.TLRelease(lnTypeLib)
  271.     RETURN
  272. ENDIF
  273. lcMemberName=ALLTRIM(laTypeLib[1])
  274. IF EMPTY(lcMemberName)
  275.     oMembers.parent.oleFoxTLib.TLRelease(lnTypeLib)
  276.     toBrowser.vResult=.F.
  277.     RETURN toBrowser.vResult
  278. ENDIF
  279. lcDesc=ALLTRIM(laTypeLib[2])
  280. IF EMPTY(lcDesc)
  281.     lcDesc=ALLTRIM(lcMemberName)+" "+M_TYPELIB_LOC
  282. ENDIF
  283. lcHelpFile=laTypeLib[3]
  284. lcHelpFile=IIF(EMPTY(lcHelpFile),"",LOWER(ALLTRIM(lcHelpFile)))
  285. lnHelpID=laTypeLib[4]
  286. lnHelpID=IIF(EMPTY(lnHelpID),0,lnHelpID)
  287. lnLastHelpID=lnHelpID
  288. lnLastHelpID2=lnHelpID
  289. IF oMembers.parent.lOutlineOCX
  290.     laParentKey[1]=""
  291. ELSE
  292.     laParentKey[1]=0
  293. ENDIF
  294. IF oMembers.parent.lOutlineOCX
  295.     oNode=oMembers.object.Nodes.Add(,4,lcMemberName,lcMemberName)
  296.     IF oMembers.parent.lAutoExpand AND TYPE("oNode")=="O" AND NOT ISNULL(oNode)
  297.         oNode.Expanded=.T.
  298.         oNode=.NULL.
  299.     ENDIF
  300. ELSE
  301.     oMembers.AddItem(lcMemberName)
  302. ENDIF
  303. WITH toBrowser
  304.     .nMemberCount=.nMemberCount+1
  305.     DIMENSION .aMemberList[.nMemberCount,3]
  306.     .aMemberList[.nMemberCount,1]=ALLTRIM(lcMemberName)
  307.     .aMemberList[.nMemberCount,2]=lcHelpFile+","+ALLTRIM(STR(lnHelpID))
  308.     .aMemberList[.nMemberCount,3]=lcDesc
  309. ENDWITH
  310. lnMemberCount=0
  311. FOR lnCount = 1 TO lnTypeInfoCount
  312.     IF toBrowser.lRelease
  313.         toBrowser.vResult=.F.
  314.         RETURN toBrowser.vResult
  315.     ENDIF
  316.     DIMENSION laTypeLib[16]
  317.     laTypeLib=""
  318.     oMembers.parent.oleFoxTLib.TLGetDocumentation(lnTypeLib,"laTypeLib",lnCount-1,0)
  319.     lcInterface=ALLTRIM(laTypeLib[1])
  320.     IF EMPTY(lcInterface)
  321.         LOOP
  322.     ENDIF
  323.     SET MESSAGE TO M_REFRESH_TYPE_LIB_LIST_LOC+" ("+lcInterface+") ..."
  324.     lcDesc=ALLTRIM(laTypeLib[2])
  325.     lcHelpFile=laTypeLib[3]
  326.     lcHelpFile=IIF(EMPTY(lcHelpFile),"",LOWER(ALLTRIM(lcHelpFile)))
  327.     lnHelpID=laTypeLib[4]
  328.     IF EMPTY(lnHelpID)
  329.         lnHelpID=lnLastHelpID
  330.     ELSE
  331.         lnLastHelpID=lnHelpID
  332.     ENDIF
  333.     lnLastHelpID2=lnLastHelpID
  334.     lnMemberCount=lnMemberCount+1
  335.     DIMENSION laParentKey[lnMemberCount],laKey[lnMemberCount]
  336.     DIMENSION laText[lnMemberCount],laDesc[lnMemberCount]
  337.     IF oMembers.parent.lOutlineOCX
  338.         laParentKey[lnMemberCount]=lcMemberName
  339.     ELSE
  340.         laParentKey[lnMemberCount]=1
  341.     ENDIF
  342.     laKey[lnMemberCount]=lcInterface
  343.     laText[lnMemberCount]=lcInterface
  344.     laDesc[lnMemberCount]=lcDesc
  345.     lnTypeInfo=oMembers.parent.oleFoxTLib.TLGetTypeInfo(lnTypeLib,lnCount-1)
  346.     IF lnTypeInfo<=0
  347.         LOOP
  348.     ENDIF
  349.     IF oMembers.parent.oleFoxTLib.TLGetTypeAttr(lnTypeInfo,"laTypeLib")=0
  350.         oMembers.parent.oleFoxTLib.TIRelease(lnTypeInfo)
  351.         LOOP
  352.     ENDIF
  353.     lcLastMember=""
  354.     FOR lnCount2 = 1 to laTypeLib[9]
  355.         IF toBrowser.lRelease
  356.             oMembers.parent.oleFoxTLib.TIRelease(lnTypeInfo)
  357.             toBrowser.vResult=.F.
  358.             RETURN toBrowser.vResult
  359.         ENDIF
  360.         DIMENSION laTypeLib[16]
  361.         laTypeLib=""
  362.         oMembers.parent.oleFoxTLib.tiGetFuncDesc(lnTypeInfo,"laTypeLib",lnCount2-1,"laParameters")
  363.         lnMemberID=laTypeLib[1]
  364.         lnMemberType=laTypeLib[3]
  365.         oMembers.parent.oleFoxTLib.TLGetDocumentation(lnTypeInfo,"laTypeLib",lnMemberID,1)
  366.         lcMember=ALLTRIM(laTypeLib[1])
  367.         IF EMPTY(lcMember) OR lcMember==lcLastMember OR INLIST(UPPER(lcMember)+" ","RELEASE ", ;
  368.                 "INVOKE ","QUERYINTERFACE ","ADDREF ","GETTYPEINFOCOUNT ","GETTYPEINFO ", ;
  369.                 "GETIDSOFNAMES ")
  370.             LOOP
  371.         ENDIF
  372.         lcDesc=ALLTRIM(laTypeLib[2])
  373.         lcHelpFile=laTypeLib[3]
  374.         lcHelpFile=IIF(EMPTY(lcHelpFile),"",LOWER(ALLTRIM(lcHelpFile)))
  375.         lnHelpID=laTypeLib[4]
  376.         IF EMPTY(lnHelpID)
  377.             lnHelpID=lnLastHelpID2
  378.         ELSE
  379.             lnLastHelpID2=lnHelpID
  380.         ENDIF
  381.         lcLastMember=lcMember
  382.         lcParamStr=""
  383.         lnParamCount=oMembers.parent.oleFoxTLib.tiGetNames(lnTypeInfo,"laParams",lnMemberID)
  384.         IF lnParamCount>=1
  385.             FOR lnCount3 = 2 TO lnParamCount
  386.                 IF lnCount3>2
  387.                     lcParamStr=lcParamStr+", "
  388.                 ENDIF
  389.                 lcParamStr=lcParamStr+laParams[lnCount3]+" "+M_AS_LOC+" "+ ;
  390.                         brwGetDataType(laParameters[lnCount3])
  391.             ENDFOR
  392.             IF lnParamCount>=2
  393.                 lcParamStr="("+lcParamStr+")"
  394.             ENDIF
  395.             IF VARTYPE(lnMemberType)#"N" OR lnMemberType=1
  396.                 lcParamStr=M_METHOD_LOC+" "+lcParamStr
  397.             ELSE
  398.                 lcParamStr=M_PROPERTY_LOC+" "+ALLTRIM(laParams[1]+" "+lcParamStr)+" "+ ;
  399.                         M_AS_LOC+" "+brwGetDataType(laParameters[1])
  400.             ENDIF
  401.         ENDIF
  402.         IF NOT EMPTY(lcParamStr)
  403.             lcDesc=lcParamStr+CR+CR+lcDesc
  404.         ENDIF
  405.         DO WHILE LEFT(lcDesc,1)==CR
  406.             lcDesc=ALLTRIM(SUBSTR(lcDesc,2))
  407.         ENDDO
  408.         DO WHILE RIGHT(lcDesc,1)==CR
  409.             lcDesc=TRIM(LEFT(lcDesc,LEN(lcDesc)-1))
  410.         ENDDO
  411.         lnMemberCount=lnMemberCount+1
  412.         DIMENSION laParentKey[lnMemberCount],laKey[lnMemberCount]
  413.         DIMENSION laText[lnMemberCount],laDesc[lnMemberCount]
  414.         IF oMembers.parent.lOutlineOCX
  415.             laParentKey[lnMemberCount]=lcInterface
  416.         ELSE
  417.             laParentKey[lnMemberCount]=2
  418.         ENDIF
  419.         laKey[lnMemberCount]=lcInterface+"_"+lcMember+"_"+ALLTRIM(STR(lnCount2,4))+SYS(2015)
  420.         laText[lnMemberCount]=lcMember
  421.         laDesc[lnMemberCount]=lcDesc
  422.     ENDFOR
  423.     oMembers.parent.oleFoxTLib.TIRelease(lnTypeInfo)
  424. ENDFOR
  425. SET MESSAGE TO M_REFRESH_TYPE_LIB_LIST_LOC+" ..."
  426. oMembers.parent.oleFoxTLib.TLRelease(lnTypeLib)
  427. FOR lnCount = 1 TO lnMemberCount
  428.     IF toBrowser.lRelease
  429.         toBrowser.vResult=.F.
  430.         RETURN toBrowser.vResult
  431.     ENDIF
  432.     lcParentKey=laParentKey[lnCount]
  433.     lcKey=laKey[lnCount]
  434.     lcText=laText[lnCount]
  435.     lcDesc=laDesc[lnCount]
  436.     IF oMembers.parent.lOutlineOCX
  437.         oNode=oMembers.object.Nodes.Add(lcParentKey,4,lcKey,lcText,,)
  438.     ELSE
  439.         oMembers.AddItem(SPACE(5*lcParentKey)+lcText)
  440.     ENDIF
  441.     oNode=.NULL.
  442.     WITH toBrowser
  443.         .nMemberCount=.nMemberCount+1
  444.         DIMENSION .aMemberList[.nMemberCount,3]
  445.         .aMemberList[.nMemberCount,1]=ALLTRIM(lcText)
  446.         .aMemberList[.nMemberCount,2]=lcHelpFile+","+ALLTRIM(STR(lnHelpID))
  447.         .aMemberList[.nMemberCount,3]=lcDesc
  448.     ENDWITH
  449. ENDFOR
  450. oMembers.parent.oleFoxTLib.TLRelease(lnTypeLib)
  451. ENDFUNC
  452.  
  453.  
  454.  
  455. FUNCTION brwGetDataType(lnType)
  456. DO CASE
  457.     CASE TYPE("lnType")#"N"
  458.         RETURN "UNKNOWN"
  459.     CASE lnType=1
  460.         RETURN "VT_NULL"
  461.     CASE lnType=2
  462.         RETURN "INTEGER"
  463.     CASE lnType=3
  464.         RETURN "INTEGER"
  465.     CASE lnType=4
  466.         RETURN "VT_R4"
  467.     CASE lnType=5
  468.         RETURN "VT_R8"
  469.     CASE lnType=6
  470.         RETURN "VT_CY"
  471.     CASE lnType=7
  472.         RETURN "DATE"
  473.     CASE lnType=8
  474.         RETURN "STRING"
  475.     CASE lnType=9
  476.         RETURN "VT_DISPATCH"
  477.     CASE lnType=10
  478.         RETURN "VT_ERROR"
  479.     CASE lnType=11
  480.         RETURN "BOOLEAN"
  481.     CASE lnType=12
  482.         RETURN "VARIANT"
  483.     CASE lnType=13
  484.         RETURN "VT_UNKNOWN"
  485.     CASE lnType=16
  486.         RETURN "VT_I1"
  487.     CASE lnType=17
  488.         RETURN "VT_UI1"
  489.     CASE lnType=18
  490.         RETURN "VT_UI2"
  491.     CASE lnType=19
  492.         RETURN "VT_UI4"
  493.     CASE lnType=20
  494.         RETURN "VT_I8"
  495.     CASE lnType=21
  496.         RETURN "VT_UI8"
  497.     CASE lnType=22
  498.         RETURN "VT_INT"
  499.     CASE lnType=23
  500.         RETURN "VT_UINT"
  501.     CASE lnType=24
  502.         RETURN "VT_VOID"
  503.     CASE lnType=25
  504.         RETURN "VT_HRESULT"
  505.     CASE lnType=26
  506.         RETURN "VT_PTR"
  507.     CASE lnType=27
  508.         RETURN "VT_SAFEARRAY"
  509.     CASE lnType=28
  510.         RETURN "VT_CARRAY"
  511.     CASE lnType=29
  512.         RETURN "VT_USERDEFINED"
  513.     CASE lnType=30
  514.         RETURN "VT_LPSTR"
  515.     CASE lnType=31
  516.         RETURN "VT_LPWSTR"
  517.     CASE lnType=64
  518.         RETURN "VT_FILETIME"
  519.     CASE lnType=65
  520.         RETURN "VT_BLOB"
  521.     CASE lnType=66
  522.         RETURN "VT_STREAM"
  523.     CASE lnType=67
  524.         RETURN "VT_STORAGE"
  525.     CASE lnType=68
  526.         RETURN "VT_STREAMED_OBJECT"
  527.     CASE lnType=69
  528.         RETURN "VT_STORED_OBJECT"
  529.     CASE lnType=70
  530.         RETURN "VT_BLOB_OBJECT"
  531.     CASE lnType=71
  532.         RETURN "VT_CF"
  533.     CASE lnType=72
  534.         RETURN "VT_CLSOD"
  535. ENDCASE
  536. RETURN "UNKNOWN"    
  537. ENDFUNC
  538.  
  539.  
  540.  
  541. FUNCTION brwDisplayFileMenu(toBrowser,tlAddFile)
  542. LOCAL lnMenuCount,lnBar,lcFileName,lcAlias,lcDesc
  543. LOCAL laMenu[1],laFiles[1]
  544.  
  545. IF toBrowser.lRelease
  546.     toBrowser.vResult=.F.
  547.     RETURN toBrowser.vResult
  548. ENDIF
  549. SET DATASESSION TO (toBrowser.DataSessionID)
  550. lcAlias=LOWER(SYS(2015))
  551. IF USED(lcAlias)
  552.     USE IN (lcAlias)
  553. ENDIF
  554. IF toBrowser.lBrowser
  555.     SELECT Name,Desc FROM browser ;
  556.             WHERE NOT DELETED() AND NOT Global AND ;
  557.                     UPPER(ALLTRIM(Platform))==toBrowser.cPlatform AND ;
  558.                     NOT LOWER(RIGHT(Name,4))==".dbf" AND ;
  559.                     UPPER(ALLTRIM(Type))=="PREFW" AND ;
  560.                     UPPER(ALLTRIM(ID))=="FORMINFO" AND NOT EMPTY(Name) ;
  561.             ORDER BY Updated DESC ;
  562.             INTO CURSOR (lcAlias)
  563. ELSE
  564.     SELECT Name,Desc FROM browser ;
  565.             WHERE NOT DELETED() AND NOT Global AND ;
  566.                     UPPER(ALLTRIM(Platform))==toBrowser.cPlatform AND ;
  567.                     LOWER(RIGHT(Name,4))==".dbf" AND ;
  568.                     UPPER(ALLTRIM(Type))=="PREFW" AND ;
  569.                     UPPER(ALLTRIM(ID))=="FORMINFO" AND NOT EMPTY(Name) ;
  570.             ORDER BY Updated DESC ;
  571.             INTO CURSOR (lcAlias)
  572. ENDIF
  573. lnMenuCount=0
  574. SCAN REST
  575.     IF ":"$Name OR "\\"$Name
  576.         lcFileName=LOWER(ALLTRIM(Name))
  577.     ELSE
  578.         lcFileName=LOWER(FULLPATH(ALLTRIM(Name)))
  579.     ENDIF
  580.     IF toBrowser.lBrowser
  581.         IF tlAddFile AND ASCAN(toBrowser.aFiles,lcFileName)>0
  582.             LOOP
  583.         ENDIF
  584.     ENDIF
  585.     lcDesc=ALLTRIM(MLINE(Desc,1))
  586.     IF EMPTY(lcDesc)
  587.         lcDesc=lcFileName
  588.     ENDIF
  589.     IF LEN(lcDesc)>48
  590.         lcDesc=ALLTRIM(LEFT(lcDesc,45))+"..."
  591.     ENDIF
  592.     lnMenuCount=lnMenuCount+1
  593.     DIMENSION laMenu[lnMenuCount],laFiles[lnMenuCount]
  594.     laMenu[lnMenuCount]=lcDesc
  595.     laFiles[lnMenuCount]=lcFileName
  596.     IF lnMenuCount>=toBrowser.nHistoryMaxLength
  597.         EXIT
  598.     ENDIF
  599. ENDSCAN
  600. USE
  601. SELECT 0
  602. SET MESSAGE TO
  603. IF lnMenuCount=0
  604.     RETURN
  605. ENDIF
  606. toBrowser.lModalDialog=.T.
  607. toBrowser.ShowMenu(@laMenu)
  608. lnBar=BAR()
  609. toBrowser.DeactivateMenu
  610. toBrowser.lModalDialog=.F.
  611. IF lnBar=0
  612.     RETURN
  613. ENDIF
  614. lcFileName=laFiles[lnBar]
  615. IF tlAddFile
  616.     toBrowser.AddFile(lcFileName)
  617. ELSE
  618.     IF toBrowser.lBrowser
  619.         toBrowser.OpenFile(lcFileName)
  620.     ELSE
  621.         toBrowser.OpenFile(lcFileName,toBrowser.lAddFileDefault)
  622.     ENDIF
  623. ENDIF
  624. ENDFUNC
  625.  
  626.  
  627.  
  628. FUNCTION brwDisplayHistoryMenu(toBrowser)
  629. LOCAL lnBar,lcPrompt,lcItem,lcFileName,lcMember,llBrowser,llFound
  630. LOCAL lnAtPos,lcAlias,lnCount,lcCount
  631. LOCAL laMenu[1]
  632.  
  633. IF toBrowser.lRelease OR toBrowser.nHistoryCount<1
  634.     toBrowser.vResult=.F.
  635.     RETURN toBrowser.vResult
  636. ENDIF
  637. SET DATASESSION TO (toBrowser.DataSessionID)
  638. FOR lnCount= 1 TO toBrowser.nHistoryCount
  639.     IF lnCount>toBrowser.nHistoryMaxLength
  640.         EXIT
  641.     ENDIF
  642.     lcItem=toBrowser.aHistory[lnCount,1]
  643.     DIMENSION laMenu[lnCount]
  644.     laMenu[lnCount]=toBrowser.aHistory[lnCount,1]
  645. ENDFOR
  646. SET MESSAGE TO
  647. toBrowser.lModalDialog=.T.
  648. toBrowser.ShowMenu(@laMenu)
  649. lnBar=BAR()
  650. toBrowser.DeactivateMenu
  651. toBrowser.lModalDialog=.F.
  652. IF lnBar=0
  653.     RETURN
  654. ENDIF
  655. lcItem=toBrowser.aHistory[lnBar,2]
  656. lcFileName=toBrowser.aHistory[lnBar,3]
  657. llBrowser=toBrowser.aHistory[lnBar,4]
  658. IF toBrowser.lBrowser#llBrowser
  659.     toBrowser.SwitchBrowser
  660. ENDIF
  661. llFound=.T.
  662. IF llBrowser
  663.     IF NOT EMPTY(lcFileName) AND FILE(lcFileName) AND ASCAN(toBrowser.aFiles,lcFileName)=0
  664.         llFound=toBrowser.AddFile(lcFileName)
  665.     ENDIF
  666.     IF llFound
  667.         lnAtPos=AT("::",lcItem)
  668.         IF lnAtPos=0
  669.             lcMember=""
  670.         ELSE
  671.             lcMember=ALLTRIM(SUBSTR(lcItem,lnAtPos+2))
  672.             lcItem=ALLTRIM(LEFT(lcItem,lnAtPos-1))
  673.         ENDIF
  674.         llFound=toBrowser.SeekClass(lcItem)
  675.         IF llFound AND NOT EMPTY(lcMember)
  676.             llFound=toBrowser.SeekMember(lcMember)
  677.         ENDIF
  678.     ENDIF
  679. ELSE
  680.     IF NOT EMPTY(lcFileName) AND FILE(lcFileName)
  681.         llFound=.F.
  682.         FOR lnCount = 1 TO 256
  683.             lcCount=ALLTRIM(STR(lnCount))
  684.             lcAlias="catalog"+lcCount
  685.             IF USED(lcAlias) AND LOWER(DBF(lcAlias))==lcFileName
  686.                 llFound=.T.
  687.                 EXIT
  688.             ENDIF
  689.         ENDFOR
  690.         IF NOT llFound
  691.             llFound=toBrowser.AddFile(lcFileName)
  692.         ENDIF
  693.     ENDIF
  694.     IF llFound
  695.         llFound=toBrowser.SelectItem(lcItem)
  696.     ENDIF
  697. ENDIF
  698. IF llFound
  699.     DOEVENTS
  700. ELSE
  701.     WITH toBrowser
  702.         ADEL(.aHistory,lnBar)
  703.         .nHistoryCount=.nHistoryCount-1
  704.         DIMENSION .aHistory[.nHistoryCount,4]
  705.     ENDWITH
  706.     WAIT CLEAR
  707.     WAIT WINDOW M_MATCH_NOT_FOUND_LOC NOWAIT
  708. ENDIF
  709. toBrowser.vResult=llFound
  710. RETURN toBrowser.vResult
  711. ENDFUNC
  712.  
  713.  
  714.  
  715. FUNCTION brwDisplayMenu(toBrowser,tnMenuMode)
  716. LOCAL lnMenuMode,lnMenuCount,lnMenuEndCount,lnMenuOffset,lnBar,lcMarker
  717. LOCAL lcText,lcMemberType,lcMember,oRenameForm,lcToMember,lcFileName,lnLastSelect
  718. LOCAL lcMethods,lcProperties,lcProtected,lcReserved3,lnAtPos,lnCount,lnAddPos
  719. LOCAL llArray,llProtected,llHidden,llMatch,lnASCII
  720. LOCAL laMenu[1]
  721.  
  722. IF toBrowser.lRelease
  723.     toBrowser.vResult=.F.
  724.     RETURN toBrowser.vResult
  725. ENDIF
  726. toBrowser.DeactivateMenu
  727. lnMenuMode=IIF(TYPE("tnMenuMode")=="N",tnMenuMode,0)
  728. lnMenuEndCount=5
  729. lnMenuOffset=0
  730. DO CASE
  731.     CASE NOT toBrowser.lBrowser
  732.         lnMenuMode=3
  733.         lnMenuCount=10+lnMenuEndCount
  734.         lnMenuOffset=5
  735.     CASE lnMenuMode=1
  736.         lnMenuCount=15+lnMenuEndCount
  737.     CASE lnMenuMode=2
  738.         lnMenuCount=11+lnMenuEndCount
  739.     OTHERWISE
  740.         lnMenuMode=0
  741.         lnMenuCount=15+lnMenuEndCount
  742. ENDCASE
  743. DIMENSION laMenu[lnMenuCount]
  744. laMenu=""
  745. lcMarker="^"
  746. laMenu[1]="\<Descriptions"
  747. IF toBrowser.lDescriptions
  748.     laMenu[1]=lcMarker+laMenu[1]
  749. ENDIF
  750. laMenu[2]="\<Always on Top"
  751. IF toBrowser.AlwaysOnTop
  752.     laMenu[2]=lcMarker+laMenu[2]
  753. ENDIF
  754. laMenu[3]="A\<uto Expand"
  755. IF toBrowser.lAutoExpand
  756.     laMenu[3]=lcMarker+laMenu[3]
  757. ENDIF
  758. laMenu[4]="Parent Class Tool\<bar"
  759. IF toBrowser.lParentClassBrowser
  760.     laMenu[4]=lcMarker+laMenu[4]
  761. ENDIF
  762. laMenu[5]="\<Restore Defaults"
  763. IF lnMenuMode<3
  764.     laMenu[6]="\-"
  765.     laMenu[7]="Hi\<erarchical"
  766.     IF toBrowser.nDisplayMode=1
  767.         laMenu[7]=lcMarker+laMenu[7]
  768.     ENDIF
  769.     laMenu[8]="\<Protected"
  770.     IF toBrowser.lProtectedFilter
  771.         laMenu[8]=lcMarker+laMenu[8]
  772.     ENDIF
  773.     laMenu[9]="Hidde\<n"
  774.     IF toBrowser.lHiddenFilter
  775.         laMenu[9]=lcMarker+laMenu[9]
  776.     ENDIF
  777.     laMenu[10]="Emp\<ty"
  778.     IF toBrowser.lEmptyFilter
  779.         laMenu[10]=lcMarker+laMenu[10]
  780.     ENDIF
  781. ENDIF
  782. DO CASE
  783.     CASE lnMenuMode=0 OR lnMenuMode=3
  784.         laMenu[11-lnMenuOffset]="\-"
  785.         laMenu[12-lnMenuOffset]="F\<ont..."
  786.         IF (toBrowser.lBrowser AND toBrowser.lVCXSCXMode) OR ;
  787.                 (NOT toBrowser.lBrowser AND toBrowser.nFolderCount>0)
  788.             laMenu[13-lnMenuOffset]="E\<xport..."
  789.         ELSE
  790.             laMenu[13-lnMenuOffset]="\Export..."
  791.         ENDIF
  792.         laMenu[14-lnMenuOffset]="Add-\<ins..."
  793.     CASE lnMenuMode=1
  794.         laMenu[11]="\-"
  795.         IF NOT toBrowser.lSCXMode
  796.             laMenu[12]="M\<odify"
  797.         ELSE
  798.             laMenu[12]="\Modify"
  799.         ENDIF
  800.         IF NOT toBrowser.lReadOnly AND NOT toBrowser.lSCXMode
  801.             laMenu[13]="\<Container Icon..."
  802.         ELSE
  803.             laMenu[13]="\Container Icon..."
  804.         ENDIF
  805.         IF NOT toBrowser.lReadOnly AND NOT toBrowser.lSCXMode
  806.             laMenu[14]="Remo\<ve"
  807.         ELSE
  808.             laMenu[14]="\Remove"
  809.         ENDIF
  810.         IF NOT "."$toBrowser.cClass
  811.             lnMenuCount=lnMenuCount+4
  812.             DIMENSION laMenu[lnMenuCount]
  813.             IF NOT toBrowser.lReadOnly AND NOT toBrowser.lSCXMode
  814.                 laMenu[15]="Rena\<me..."
  815.             ELSE
  816.                 laMenu[15]="\Rename..."
  817.             ENDIF
  818.             IF NOT toBrowser.lReadOnly
  819.                 laMenu[16]="Redef\<ine..."
  820.             ELSE
  821.                 laMenu[16]="\Redefine..."
  822.             ENDIF
  823.             IF NOT EMPTY(toBrowser.aClassList[toBrowser.nClassListIndex+1,5]) AND ;
  824.                     NOT toBrowser.aClassList[toBrowser.nClassListIndex+1,5]== ;
  825.                     toBrowser.aClassList[toBrowser.nClassListIndex+1,8]
  826.                 laMenu[lnMenuCount-lnMenuEndCount-2]="\<Select ParentClass"
  827.             ELSE
  828.                 laMenu[lnMenuCount-lnMenuEndCount-2]="\Select ParentClass"
  829.             ENDIF
  830.             IF NOT toBrowser.lReadOnly AND NOT toBrowser.lSCXMode
  831.                 laMenu[lnMenuCount-lnMenuEndCount-1]="O\<LE Public"
  832.             ELSE
  833.                 laMenu[lnMenuCount-lnMenuEndCount-1]="\OLE Public"
  834.             ENDIF
  835.             IF toBrowser.aClassList[toBrowser.nClassListIndex+1,9]
  836.                 laMenu[lnMenuCount-lnMenuEndCount-1]=lcMarker+ ;
  837.                         laMenu[lnMenuCount-lnMenuEndCount-1]
  838.             ENDIF
  839.         ENDIF
  840.     CASE lnMenuMode=2
  841.         WITH toBrowser
  842.             lcMember=.aMemberList[.nMemberListIndex,1]
  843.             lcMemberType=.aMemberList[.nMemberListIndex,2]
  844.         ENDWITH
  845.         DO CASE
  846.             CASE lcMemberType=="o"
  847.                 lnMenuCount=lnMenuCount+2
  848.                 DIMENSION laMenu[lnMenuCount]
  849.                 laMenu[11]="\-"
  850.                 IF EMPTY(toBrowser.cLastValue) OR NOT ","$toBrowser.cLastValue
  851.                     laMenu[12]="\Select Class"
  852.                 ELSE
  853.                     laMenu[12]="\<Select Class"
  854.                 ENDIF
  855.             CASE lcMemberType=="m" OR lcMemberType=="p"
  856.                 lnMenuCount=lnMenuCount+3
  857.                 DIMENSION laMenu[lnMenuCount]
  858.                 laMenu[11]="\-"
  859.                 IF lcMemberType=="m"
  860.                     laMenu[12]="M\<odify"
  861.                 ELSE
  862.                     laMenu[12]="Vie\<w"
  863.                 ENDIF
  864.                 IF NOT toBrowser.lReadOnly AND NOT toBrowser.lSCXMode
  865.                     laMenu[13]="Rena\<me..."
  866.                 ELSE
  867.                     laMenu[13]="\Rename..."
  868.                 ENDIF
  869.         ENDCASE
  870. ENDCASE
  871. laMenu[lnMenuCount-5]="\-"
  872. laMenu[lnMenuCount-4]="New \<Window"
  873. IF toBrowser.lBrowser
  874.     laMenu[lnMenuCount-3]="New \<Component Gallery"
  875. ELSE
  876.     laMenu[lnMenuCount-3]="New \<Class Browser"
  877. ENDIF
  878. laMenu[lnMenuCount-2]="Re\<fresh                      F5"
  879. laMenu[lnMenuCount-1]="\-"
  880. laMenu[lnMenuCount]="\<Help..."
  881. toBrowser.lModalDialog=.T.
  882. toBrowser.ShowMenu(@laMenu)
  883. lnBar=BAR()
  884. toBrowser.DeactivateMenu
  885. toBrowser.lModalDialog=.F.
  886. IF lnBar=0
  887.     RETURN
  888. ENDIF
  889. IF lnMenuMode=3 AND (lnBar+lnMenuOffset)>=12
  890.     lnBar=lnBar+lnMenuOffset
  891.     lnMenuCount=lnMenuCount+lnMenuOffset
  892. ENDIF
  893. DO CASE
  894.     CASE lnBar=lnMenuCount
  895.         IF lnMenuMode=2 AND NOT toBrowser.lVCXSCXMode AND toBrowser.nMemberListIndex>=1
  896.             toBrowser.nMouseButton=1
  897.             IF toBrowser.lOutlineOCX
  898.                 toBrowser.oleMembers.DblClick
  899.             ELSE
  900.                 toBrowser.lstMembers.DblClick
  901.             ENDIF
  902.         ELSE
  903.             toBrowser.Help
  904.         ENDIF
  905.     CASE lnBar=(lnMenuCount-2)
  906.         toBrowser.RefreshBrowser
  907.     CASE lnBar=(lnMenuCount-3)
  908.         toBrowser.StartNewWindow(toBrowser.lBrowser)
  909.     CASE lnBar=(lnMenuCount-4)
  910.         toBrowser.StartNewWindow(NOT toBrowser.lBrowser)
  911.     CASE lnBar=1
  912.         toBrowser.lDescriptions=(NOT toBrowser.lDescriptions)
  913.         toBrowser.RefreshDescriptions
  914.         toBrowser.SavePreferences
  915.     CASE lnBar=2
  916.         toBrowser.AlwaysOnTop=(NOT toBrowser.AlwaysOnTop)
  917.         toBrowser.SavePreferences
  918.     CASE lnBar=3
  919.         toBrowser.lAutoExpand=(NOT toBrowser.lAutoExpand)
  920.         toBrowser.RefreshBrowser
  921.         toBrowser.SavePreferences
  922.     CASE lnBar=4
  923.         toBrowser.lParentClassBrowser=(NOT toBrowser.lParentClassBrowser)
  924.         toBrowser.RefreshParentClassBrowser
  925.         toBrowser.SavePreferences
  926.     CASE lnBar=5
  927.         toBrowser.ResetDefaults
  928.     CASE lnBar=7
  929.         toBrowser.DisplayMode(IIF(toBrowser.nDisplayMode=1,2,1))
  930.         toBrowser.SavePreferences
  931.     CASE lnBar=8
  932.         toBrowser.lProtectedFilter=(NOT toBrowser.lProtectedFilter)
  933.         toBrowser.RefreshMembers
  934.         toBrowser.SavePreferences
  935.     CASE lnBar=9
  936.         toBrowser.lHiddenFilter=(NOT toBrowser.lHiddenFilter)
  937.         toBrowser.RefreshMembers
  938.         toBrowser.SavePreferences
  939.     CASE lnBar=10
  940.         toBrowser.lEmptyFilter=(NOT toBrowser.lEmptyFilter)
  941.         toBrowser.RefreshMembers
  942.         toBrowser.SavePreferences
  943.     CASE lnBar=12
  944.         DO CASE
  945.             CASE lnMenuMode=0 OR lnMenuMode=3
  946.                 toBrowser.SetFont
  947.             CASE lnMenuMode=1
  948.                 toBrowser.ModifyClass
  949.             CASE lnMenuMode=2
  950.                 DO CASE
  951.                     CASE lcMemberType=="o"
  952.                         toBrowser.nMouseButton=1
  953.                         IF toBrowser.lOutlineOCX
  954.                             toBrowser.oleMembers.DblClick
  955.                         ELSE
  956.                             toBrowser.lstMembers.DblClick
  957.                         ENDIF
  958.                     CASE lcMemberType=="p"
  959.                         toBrowser.ViewProperty(lcMember)
  960.                     CASE lcMemberType=="m"
  961.                         toBrowser.ModifyClass(lcMember)
  962.                 ENDCASE
  963.         ENDCASE
  964.     CASE lnBar=13
  965.         DO CASE
  966.             CASE lnMenuMode=0 OR lnMenuMode=3
  967.                 IF toBrowser.lBrowser
  968.                      toBrowser.ExportClass(.T.,"")
  969.                  ELSE
  970.                      toBrowser.ExportView
  971.                  ENDIF
  972.             CASE lnMenuMode=1
  973.                 toBrowser.cmdClassIcon.RightClick
  974.             CASE lnMenuMode=2
  975.                 DO CASE
  976.                     CASE lcMemberType=="m" OR lcMemberType=="p"
  977.                         llArray=.F.
  978.                         llProtected=.F.
  979.                         llHidden=.F.
  980.                         IF lcMemberType=="p"
  981.                             lnAtPos=AT("[",lcMember)
  982.                             IF lnAtPos>0
  983.                                 llArray=.T.
  984.                                 lcMember=LEFT(lcMember,lnAtPos-1)
  985.                             ENDIF
  986.                         ENDIF
  987.                         toBrowser.ClearClass
  988.                         lcToMember=""
  989.                         toBrowser.lModalDialog=.T.
  990.                         DO FORM brwrenam NAME oRenameForm ;
  991.                                 WITH toBrowser,(lcMember),(lcMember) TO lcToMember
  992.                         SET DATASESSION TO toBrowser.DataSessionID
  993.                         IF ISNULL(lcToMember) OR EMPTY(lcToMember)
  994.                             RETURN
  995.                         ENDIF
  996.                         lcToMember=LOWER(ALLTRIM(lcToMember))
  997.                         IF lcMember==lcToMember
  998.                             RETURN
  999.                         ENDIF
  1000.                         lnLastSelect=SELECT()
  1001.                         toBrowser.RefreshRecNo
  1002.                         SELECT (toBrowser.cAlias)
  1003.                         lcReserved3=STRTRAN(STRTRAN(STRTRAN(Reserved3,CR_LF,CR), ;
  1004.                                 CR+CR,CR),CR,CR_LF)
  1005.                         IF NOT RIGHT(lcReserved3,2)==CR_LF
  1006.                             lcReserved3=lcReserved3+CR_LF
  1007.                         ENDIF
  1008.                         lcProtected=STRTRAN(STRTRAN(STRTRAN(Protected,CR_LF,CR), ;
  1009.                                 CR+CR,CR),CR,CR_LF)
  1010.                         IF NOT RIGHT(lcProtected,2)==CR_LF
  1011.                             lcProtected=lcProtected+CR_LF
  1012.                         ENDIF
  1013.                         IF BETWEEN(LEFT(lcToMember,1),"0","9") OR ;
  1014.                                 NOT lcToMember==CHRTRAN(lcToMember, ;
  1015.                                 ' /\,-=:;{}[]!@#$%^&*.<>()+|'+CHR(34)+CHR(39),"")
  1016.                             toBrowser.MsgBox(M_MEMBER_LOC+" "+M_NAME_LOC+[ "]+ ;
  1017.                                     lcToMember+[" ]+M_IS_INVALID_LOC+[.],16)
  1018.                             SELECT (lnLastSelect)
  1019.                             toBrowser.vResult=.F.
  1020.                             RETURN toBrowser.vResult
  1021.                         ENDIF
  1022.                         llMatch=PEMSTATUS(toBrowser.cBaseClass,lcToMember,5)
  1023.                         IF NOT llMatch
  1024.                             FOR lnCount = 1 TO 3
  1025.                                 DO CASE
  1026.                                     CASE lnCount=1
  1027.                                         lnAtPos=ATC(CR_LF+"*"+lcToMember,CR_LF+lcReserved3)
  1028.                                         lnAddPos=1
  1029.                                     CASE lnCount=2
  1030.                                         lnAtPos=ATC(CR_LF+"^"+lcToMember,CR_LF+lcReserved3)
  1031.                                         lnAddPos=1
  1032.                                     OTHERWISE
  1033.                                         lnAtPos=ATC(CR_LF+lcToMember,CR_LF+lcReserved3)
  1034.                                         lnAddPos=0
  1035.                                 ENDCASE
  1036.                                 IF lnAtPos=0
  1037.                                     LOOP
  1038.                                 ENDIF
  1039.                                 lnASCII=ASC(SUBSTR(lcReserved3,lnAtPos+lnAddPos+ ;
  1040.                                         LEN(lcToMember),1))
  1041.                                 IF lnASCII=0 OR lnASCII=32 OR lnASCII=13 OR ;
  1042.                                         lnASCII=10 OR lnASCII=91
  1043.                                     llMatch=.T.
  1044.                                     EXIT
  1045.                                 ENDIF
  1046.                             ENDFOR
  1047.                         ENDIF
  1048.                         IF NOT llMatch
  1049.                             SKIP
  1050.                             SCAN REST FOR LOWER(Parent)==toBrowser.cClass ;
  1051.                                     WHILE NOT EMPTY(Parent)
  1052.                                 IF LOWER(ObjName)==lcToMember
  1053.                                     llMatch=.T.
  1054.                                     EXIT
  1055.                                 ENDIF
  1056.                             ENDSCAN
  1057.                             toBrowser.RefreshRecNo
  1058.                         ENDIF
  1059.                         IF llMatch
  1060.                             toBrowser.MsgBox(M_MEMBER_LOC+" "+M_NAME_LOC+[ "]+ ;
  1061.                                     lcToMember+[" ]+M_ALREADY_IN_USE_LOC+[.],16)
  1062.                             SELECT (lnLastSelect)
  1063.                             toBrowser.vResult=.F.
  1064.                             RETURN toBrowser.vResult
  1065.                         ENDIF
  1066.                         llMatch=.F.
  1067.                         lnCount=0
  1068.                         DO WHILE .T.
  1069.                             lnCount=lnCount+1
  1070.                             DO CASE
  1071.                                 CASE lcMemberType=="m"
  1072.                                     lnAtPos=ATC(CR_LF+"*"+lcMember,CR_LF+lcReserved3,lnCount)
  1073.                                     lnAddPos=1
  1074.                                 CASE llArray
  1075.                                     lnAtPos=ATC(CR_LF+"^"+lcMember,CR_LF+lcReserved3,lnCount)
  1076.                                     lnAddPos=1
  1077.                                 OTHERWISE
  1078.                                     lnAtPos=ATC(CR_LF+lcMember,CR_LF+lcReserved3,lnCount)
  1079.                                     lnAddPos=0
  1080.                             ENDCASE
  1081.                             IF lnAtPos=0
  1082.                                 EXIT
  1083.                             ENDIF
  1084.                             lnASCII=ASC(SUBSTR(lcReserved3,lnAtPos+lnAddPos+LEN(lcMember),1))
  1085.                             IF lnASCII=0 OR lnASCII=32 OR lnASCII=13 OR lnASCII=10 OR lnASCII=91
  1086.                                 llMatch=.T.
  1087.                                 EXIT
  1088.                             ENDIF
  1089.                         ENDDO
  1090.                         IF NOT llMatch
  1091.                             SELECT (lnLastSelect)
  1092.                             toBrowser.vResult=.F.
  1093.                             RETURN toBrowser.vResult
  1094.                         ENDIF
  1095.                         lcReserved3=LEFT(lcReserved3,lnAtPos-1+lnAddPos)+ ;
  1096.                                 lcToMember+SUBSTR(lcReserved3, ;
  1097.                                 lnAtPos+LEN(lcMember)+lnAddPos)
  1098.                         REPLACE Reserved3 WITH lcReserved3
  1099.                         IF NOT Reserved3==lcReserved3
  1100.                             SELECT (lnLastSelect)
  1101.                             toBrowser.RefreshMembers
  1102.                             RETURN
  1103.                         ENDIF
  1104.                         lnAtPos=ATC(CR_LF+lcMember+CR_LF,CR_LF+lcProtected)
  1105.                         IF lnAtPos>0
  1106.                             llProtected=.T.
  1107.                         ELSE
  1108.                             lnAtPos=ATC(CR_LF+lcMember+"^"+CR_LF,CR_LF+lcProtected)
  1109.                             IF lnAtPos>0
  1110.                                 llHidden=.T.
  1111.                             ENDIF
  1112.                         ENDIF
  1113.                         IF lnAtPos>0
  1114.                             lcProtected=LEFT(lcProtected,lnAtPos-1)+ ;
  1115.                                     lcToMember+SUBSTR(lcProtected,lnAtPos+LEN(lcMember))
  1116.                             REPLACE Protected WITH lcProtected
  1117.                         ENDIF
  1118.                         IF lcMemberType=="m"
  1119.                             lcMethods=Methods
  1120.                             llMatch=.F.
  1121.                             lnCount=0
  1122.                             DO WHILE .T.
  1123.                                 lnCount=lnCount+1
  1124.                                 lnAtPos=ATC(CR_LF+"PROCEDURE "+lcMember,CR_LF+lcMethods,lnCount)
  1125.                                 IF lnAtPos=0
  1126.                                     EXIT
  1127.                                 ENDIF
  1128.                                 IF SUBSTR(lcMethods,lnAtPos+LEN(lcMember)+10,1)=CR
  1129.                                     llMatch=.T.
  1130.                                     EXIT
  1131.                                 ENDIF
  1132.                             ENDDO
  1133.                             IF NOT llMatch
  1134.                                 SELECT (lnLastSelect)
  1135.                                 toBrowser.RefreshMembers(lcToMember)
  1136.                                 RETURN
  1137.                             ENDIF
  1138.                             lcMethods=LEFT(lcMethods,lnAtPos+9)+lcToMember+ ;
  1139.                                     SUBSTR(lcMethods,lnAtPos+LEN(lcMember)+10)
  1140.                             REPLACE Methods WITH lcMethods
  1141.                             IF NOT Methods==lcMethods
  1142.                                 SELECT (lnLastSelect)
  1143.                                 toBrowser.RefreshMembers(lcToMember)
  1144.                                 RETURN
  1145.                             ENDIF
  1146.                             COMPILE FORM (toBrowser.cFileName)
  1147.                         ELSE
  1148.                             IF llArray OR lnAddPos>0
  1149.                                 SELECT (lnLastSelect)
  1150.                                 toBrowser.RefreshMembers(lcToMember)
  1151.                                 RETURN
  1152.                             ENDIF
  1153.                             lcProperties=STRTRAN(STRTRAN(STRTRAN(Properties,CR_LF,CR), ;
  1154.                                     CR+CR,CR),CR,CR_LF)
  1155.                             IF NOT RIGHT(lcProperties,2)==CR_LF
  1156.                                 lcProperties=lcProperties+CR_LF
  1157.                             ENDIF
  1158.                             llMatch=.F.
  1159.                             lnCount=0
  1160.                             DO WHILE .T.
  1161.                                 lnCount=lnCount+1
  1162.                                 lnAtPos=ATC(CR_LF+lcMember,CR_LF+lcProperties,lnCount)
  1163.                                 IF lnAtPos=0
  1164.                                     EXIT
  1165.                                 ENDIF
  1166.                                 IF SUBSTR(lcProperties,lnAtPos+LEN(lcMember),2)==" ="
  1167.                                     llMatch=.T.
  1168.                                     EXIT
  1169.                                 ENDIF
  1170.                             ENDDO
  1171.                             IF NOT llMatch
  1172.                                 SELECT (lnLastSelect)
  1173.                                 toBrowser.RefreshMembers(lcToMember)
  1174.                                 RETURN
  1175.                             ENDIF
  1176.                             lcProperties=LEFT(lcProperties,lnAtPos-1)+lcToMember+ ;
  1177.                                     SUBSTR(lcProperties,lnAtPos+LEN(lcMember))
  1178.                             REPLACE Properties WITH lcProperties
  1179.                         ENDIF
  1180.                         SELECT (lnLastSelect)
  1181.                         toBrowser.RefreshMembers(lcToMember)
  1182.                 ENDCASE
  1183.         ENDCASE
  1184.     CASE lnBar=14
  1185.         DO CASE
  1186.             CASE lnMenuMode=0 OR lnMenuMode=3
  1187.                 toBrowser.AddInMenu
  1188.             CASE lnMenuMode=1
  1189.                 toBrowser.RemoveClass(.T.)
  1190.         ENDCASE
  1191.     CASE lnBar=15
  1192.         DO CASE
  1193.             CASE lnMenuMode=1
  1194.                 toBrowser.RenameClass
  1195.         ENDCASE
  1196.     CASE lnBar=16
  1197.         DO CASE
  1198.             CASE lnMenuMode=1
  1199.                 toBrowser.RedefineClass
  1200.         ENDCASE
  1201.     CASE lnBar=(lnMenuCount-lnMenuEndCount-2)
  1202.         DO CASE
  1203.             CASE lnMenuMode=1
  1204.                 toBrowser.SeekParentClass
  1205.         ENDCASE
  1206.     CASE lnBar=(lnMenuCount-lnMenuEndCount-1)
  1207.         DO CASE
  1208.             CASE lnMenuMode=1
  1209.                 SET MESSAGE TO M_UPDATING_OLEPUBLIC_LOC+" ..."
  1210.                 SELECT (toBrowser.cAlias)
  1211.                 LOCATE FOR UPPER(ALLTRIM(Platform))=="COMMENT" AND ;
  1212.                         LOWER(ALLTRIM(ObjName))==toBrowser.cClass
  1213.                 IF NOT EOF()
  1214.                     IF toBrowser.aClassList[toBrowser.nClassListIndex+1,9]
  1215.                         REPLACE Reserved2 WITH ""
  1216.                     ELSE
  1217.                         REPLACE Reserved2 WITH "OLEPublic"
  1218.                     ENDIF
  1219.                     toBrowser.RefreshBrowser
  1220.                 ENDIF
  1221.                 SELECT 0
  1222.                 SET MESSAGE TO
  1223.         ENDCASE
  1224.     OTHERWISE
  1225.         RETURN
  1226. ENDCASE
  1227. ENDFUNC
  1228.  
  1229.  
  1230.  
  1231. FUNCTION brwRefreshCaption(toBrowser)
  1232. LOCAL lcCaption,lcMember,lcHistoryItem
  1233.  
  1234. IF toBrowser.lRelease
  1235.     toBrowser.vResult=.F.
  1236.     RETURN toBrowser.vResult
  1237. ENDIF
  1238. lcCaption=""
  1239. DO CASE
  1240.     CASE toBrowser.lBrowser AND toBrowser.nClassListIndex<0
  1241.         lcCaption=T_CLASS_BROWSER_LOC
  1242.     CASE NOT toBrowser.lBrowser AND toBrowser.nFolderCount<1
  1243.         lcCaption=T_COMPONENT_GALLERY_LOC
  1244.     CASE toBrowser.lBrowser
  1245.         WITH toBrowser
  1246.             lcHistoryItem=.cClass
  1247.             IF NOT EMPTY(.cFileName)
  1248.                 lcCaption=JUSTFNAME(.cFileName)
  1249.             ENDIF
  1250.             IF .nMemberListIndex>=1
  1251.                 lcMember=.aMemberList[.nMemberListIndex,1]
  1252.                 lcHistoryItem=lcHistoryItem+"::"+lcMember
  1253.                 IF .lFileMode
  1254.                     lcCaption=lcCaption+" ("+lcMember+")"
  1255.                 ELSE
  1256.                     lcCaption=lcCaption+" ("+.cClass
  1257.                     IF NOT EMPTY(lcMember)
  1258.                         lcCaption=lcCaption+"::"+lcMember
  1259.                     ENDIF
  1260.                     lcCaption=lcCaption+")"
  1261.                 ENDIF
  1262.             ELSE
  1263.                 IF .lFileMode
  1264.                     lcCaption=lcCaption+" ("+.cFileName+")"
  1265.                 ELSE
  1266.                     lcCaption=lcCaption+" ("+.cClass+")"
  1267.                 ENDIF
  1268.             ENDIF
  1269.             lcCaption=lcCaption+" - "+T_CLASS_BROWSER_LOC
  1270.             IF .lReadOnly
  1271.                 lcCaption=lcCaption+" ["+M_READ_ONLY_LOC+"]"
  1272.             ENDIF
  1273.             .AddHistoryItem(lcHistoryItem,lcHistoryItem,.cFileName)
  1274.         ENDWITH
  1275.     OTHERWISE
  1276.         WITH toBrowser
  1277.             IF NOT ISNULL(.oCatalogSource)
  1278.                 lcCaption=.oCatalogSource.cText
  1279.                 IF NOT ISNULL(.oFolderSource) AND NOT .oItemSource.cID==.oCatalogSource.cID
  1280.                     lcCaption=lcCaption+" ("+ALLTRIM(.oFolderSource.cText)
  1281.                     IF NOT ISNULL(.oItemSource) AND NOT .oItemSource.cID==.oFolderSource.cID
  1282.                         lcCaption=lcCaption+"::"+ALLTRIM(.oItemSource.cText)
  1283.                     ENDIF
  1284.                     lcCaption=lcCaption+")"
  1285.                 ENDIF
  1286.             ENDIF
  1287.             .AddHistoryItem(.oItem.cText,.oItem.cID,IIF(.nViewType=1,.oItem.cCatalog,""))
  1288.         ENDWITH
  1289.         lcCaption=lcCaption+" - "+T_COMPONENT_GALLERY_LOC
  1290. ENDCASE
  1291. IF toBrowser.Caption==lcCaption
  1292.     toBrowser.vResult=.F.
  1293.     RETURN toBrowser.vResult
  1294. ENDIF
  1295. toBrowser.Caption=lcCaption
  1296. IF toBrowser.AddInMethod("REFRESHCAPTION")
  1297.     RETURN
  1298. ENDIF
  1299. ENDFUNC
  1300.  
  1301.  
  1302.  
  1303. FUNCTION brwOpenCatalog(toBrowser,tcFileDesc,tlAddMode)
  1304.  
  1305. toBrowser.vResult=toBrowser.OpenFile(tcFileDesc,tlAddMode)
  1306. RETURN toBrowser.vResult
  1307. ENDFUNC
  1308.  
  1309.  
  1310.  
  1311. FUNCTION brwOpenFile(toBrowser,tcFileName,tlAddMode,tlIgnoreRefresh)
  1312. LOCAL lcFileName,lcFileName2,llAddMode,lcFilter,lcClass,lcName,lnFileNo
  1313. LOCAL llRefreshClassList,lnCount,lcCount,lcAlias,lcAlias2,lcKeywordsDBF
  1314. LOCAL lnFileCount,lnFileOpenCount,oOpenCatalogForm,llIgnoreErrors
  1315. LOCAL lcSelectFileName,oFolder,oFolder2
  1316. LOCAL laFiles[1],laFilesOpen[1]
  1317.  
  1318. IF toBrowser.lRelease
  1319.     toBrowser.vResult=.F.
  1320.     RETURN toBrowser.vResult
  1321. ENDIF
  1322. SET DATASESSION TO toBrowser.DataSessionID
  1323. llAddMode=tlAddMode
  1324. llRefreshClassList=.F.
  1325. IF toBrowser.lInitialized
  1326.     toBrowser.SavePreferences(,NOT toBrowser.lBrowser)
  1327.     SELECT browser
  1328.     REPLACE FormCount WITH MAX(FormCount-1,0)
  1329.     SELECT 0
  1330. ENDIF
  1331. DO WHILE .T.
  1332.     IF EMPTY(tcFileName) OR TYPE("tcFileName")#"C"
  1333.         SELECT 0
  1334.         SET MESSAGE TO
  1335.         IF toBrowser.lBrowser
  1336.             lcFileName=toBrowser.GetFile()
  1337.         ELSE
  1338.             toBrowser.lModalDialog=.T.
  1339.             DO FORM cgopncat NAME oOpenCatalogForm ;
  1340.                     WITH toBrowser TO lcFileName
  1341.             SET DATASESSION TO toBrowser.DataSessionID
  1342.             IF LEFT(lcFileName,1)=="+"
  1343.                 lcFileName=LOWER(ALLTRIM(SUBSTR(lcFileName,2)))
  1344.                 llAddMode=.T.
  1345.             ENDIF
  1346.         ENDIF
  1347.     ELSE
  1348.         lcFileName=LOWER(ALLTRIM(tcFileName))
  1349.         IF EMPTY(JUSTEXT(lcFileName))
  1350.             lcFileName=FORCEEXT(lcFileName,IIF(toBrowser.lBrowser,"vcx","dbf"))
  1351.         ENDIF
  1352.     ENDIF
  1353.     IF EMPTY(lcFileName)
  1354.         toBrowser.vResult=.F.
  1355.         RETURN toBrowser.vResult
  1356.     ENDIF
  1357.     lcSelectFileName=lcFileName
  1358.     IF NOT toBrowser.lBrowser
  1359.         IF EMPTY(JUSTEXT(lcFileName))
  1360.             lcFileName=FORCEEXT(lcFileName,"dbf")
  1361.         ENDIF
  1362.         IF NOT ":"$lcFileName AND NOT "\\"$lcFileName
  1363.             lcFileName=LOWER(FULLPATH(lcFileName))
  1364.         ENDIF
  1365.         IF NOT FILE(lcFileName)
  1366.             lcFileName=LOWER(FORCEPATH(lcFileName,toBrowser.cProgramPath+"gallery\"))
  1367.             IF NOT FILE(lcFileName)
  1368.                 toBrowser.cCatalog=""
  1369.                 SELECT 0
  1370.                 SET MESSAGE TO
  1371.                 toBrowser.MsgBox(M_FILE_LOC+[ "]+lcFileName+[" ]+M_DOES_NOT_EXIST_LOC+[.],16)
  1372.                 toBrowser.vResult=.F.
  1373.                 RETURN toBrowser.vResult
  1374.             ENDIF
  1375.         ENDIF
  1376.         IF llAddMode
  1377.             lcAlias2="catalog"
  1378.             FOR lnCount = 1 TO 256
  1379.                 lcCount=ALLTRIM(STR(lnCount))
  1380.                 lcAlias=lcAlias2+lcCount
  1381.                 IF NOT USED(lcAlias)
  1382.                     EXIT
  1383.                 ENDIF
  1384.                 IF LOWER(DBF(lcAlias))==lcFileName
  1385.                     SELECT 0
  1386.                     RETURN
  1387.                 ENDIF
  1388.             ENDFOR
  1389.         ENDIF
  1390.         toBrowser.CloseViews(.T.)
  1391.         lcAlias2="catalog"
  1392.         FOR lnCount = 1 TO 256
  1393.             lcCount=ALLTRIM(STR(lnCount))
  1394.             lcAlias=lcAlias2+lcCount
  1395.             IF NOT USED(lcAlias)
  1396.                 EXIT
  1397.             ENDIF
  1398.             IF NOT llAddMode
  1399.                 USE IN (lcAlias)
  1400.             ENDIF
  1401.         ENDFOR
  1402.         IF NOT llAddMode
  1403.             lnFileCount=0
  1404.             laFiles=""
  1405.             lnFileOpenCount=0
  1406.             laFilesOpen=""
  1407.             SELECT browser
  1408.             SCAN ALL FOR Global AND;
  1409.                     UPPER(ALLTRIM(Platform))==toBrowser.cPlatform AND ;
  1410.                     UPPER(ALLTRIM(Type))=="PREFW" AND ;
  1411.                     UPPER(ALLTRIM(ID))=="FORMINFO" AND NOT EMPTY(Name)
  1412.                 lcName=LOWER(ALLTRIM(MLINE(Name,1)))
  1413.                 IF NOT (".dbf"$lcName)
  1414.                     LOOP
  1415.                 ENDIF
  1416.                 IF NOT FILE(lcName)
  1417.                     DELETE
  1418.                     LOOP
  1419.                 ENDIF
  1420.                 lnFileCount=lnFileCount+1
  1421.                 DIMENSION laFiles[lnFileCount]
  1422.                 laFiles[lnFileCount]=IIF(Default," ","_")+TTOC(Updated)+lcName
  1423.             ENDSCAN
  1424.             SELECT 0
  1425.             FOR lnCount = 1 TO lnFileCount
  1426.                 lcName=SUBSTR(laFiles[lnCount],22)
  1427.                 IF lcName==lcFileName OR (lnFileOpenCount>0 AND ASCAN(laFilesOpen,lcName)>0)
  1428.                     LOOP
  1429.                 ENDIF
  1430.                 lnFileOpenCount=lnFileOpenCount+1
  1431.                 DIMENSION laFilesOpen[lnFileOpenCount]
  1432.                 laFilesOpen[lnFileOpenCount]=lcName
  1433.                 IF toBrowser.AddFile(lcName,.T.)
  1434.                     llAddMode=.T.
  1435.                 ENDIF
  1436.             ENDFOR
  1437.             SELECT 0
  1438.         ENDIF
  1439.         SET MESSAGE TO M_OPENING_FILE_LOC+[ "]+lcFileName+[" ...]
  1440.         IF toBrowser.lInitialized AND NOT llAddMode
  1441.             toBrowser.CloseViews(.T.)
  1442.             toBrowser.ClearBrowser
  1443.         ENDIF
  1444.         lcAlias2="catalog"
  1445.         lnCount=1
  1446.         DO WHILE .T.
  1447.             lcCount=ALLTRIM(STR(lnCount))
  1448.             lnCount=lnCount+1
  1449.             lcAlias=lcAlias2+lcCount
  1450.             IF NOT USED(lcAlias)
  1451.                 EXIT
  1452.             ENDIF
  1453.         ENDDO
  1454.         IF NOT llAddMode
  1455.             lcCount="1"
  1456.             lcAlias=lcAlias2+lcCount
  1457.         ENDIF
  1458.         IF EMPTY(toBrowser.cGallery)
  1459.             toBrowser.cGallery=lcAlias
  1460.         ENDIF
  1461.         IF USED(lcAlias)
  1462.             USE IN (lcAlias)
  1463.         ENDIF
  1464.         SELECT 0
  1465.         llIgnoreErrors=toBrowser.lIgnoreErrors
  1466.         toBrowser.lIgnoreErrors=.T.
  1467.         SELECT 0
  1468.         USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
  1469.         IF USED()
  1470.             PACK MEMO
  1471.         ENDIF
  1472.         USE (lcFileName) AGAIN SHARED ALIAS (lcAlias)
  1473.         toBrowser.lIgnoreErrors=llIgnoreErrors
  1474.         IF NOT USED()
  1475.             toBrowser.MsgBox(M_UNABLE_TO_OPEN_LOC+[ "]+lcFileName+[".],16)
  1476.             toBrowser.cCatalog=""
  1477.             SELECT 0
  1478.             SET MESSAGE TO
  1479.             toBrowser.vResult=.F.
  1480.             RETURN toBrowser.vResult
  1481.         ENDIF
  1482.         toBrowser.cCatalog=lcFileName
  1483.         IF NOT toBrowser.VersionCheck(.T.)
  1484.             IF USED(lcAlias)
  1485.                 USE IN (lcAlias)
  1486.             ENDIF
  1487.             toBrowser.cCatalog=""
  1488.             SELECT 0
  1489.             SET MESSAGE TO
  1490.             toBrowser.vResult=.F.
  1491.             RETURN toBrowser.vResult
  1492.         ENDIF
  1493.         SET FILTER TO NOT DELETED()
  1494.         LOCATE
  1495.         IF EMPTY(toBrowser.cDefaultCatalog)
  1496.             toBrowser.cDefaultCatalog=lcFileName
  1497.             toBrowser.cDefaultCatalogPath=IIF(EMPTY(lcFileName),"",JUSTPATH(lcFileName)+"\")
  1498.         ENDIF
  1499.         REPLACE ALL SrcAlias WITH LOWER(ALIAS()), SrcRecNo WITH RECNO()
  1500.         WITH toBrowser
  1501.             .cGallery=lcAlias
  1502.             lcAlias2="view_default"
  1503.             .ClearProperties
  1504.             IF USED("catalog1")
  1505.                 SELECT catalog1
  1506.                 lcFileName=LOWER(DBF())
  1507.                 .RefreshPrefRecNo
  1508.             ENDIF
  1509.         ENDWITH
  1510.         IF NOT USED("keywords")
  1511.             lcKeywordsDBF=toBrowser.cDefaultCatalogPath+"keywords.dbf"
  1512.             SELECT 0
  1513.             IF NOT FILE(lcKeywordsDBF)
  1514.                 CREATE TABLE (lcKeywordsDBF) (Keyword C(30))
  1515.             ENDIF
  1516.             USE (lcKeywordsDBF) AGAIN SHARED ALIAS keywords
  1517.             LOCATE
  1518.             SELECT 0
  1519.         ENDIF
  1520.         toBrowser.RefreshPrefRecNo
  1521.         SELECT browser
  1522.         REPLACE FormCount WITH FormCount+1
  1523.         SELECT 0
  1524.         WITH toBrowser
  1525.             IF .lInitialized AND NOT tlIgnoreRefresh
  1526.                 .RefreshBrowser
  1527.                 oFolder=.NULL.
  1528.                 IF NOT EMPTY(lcSelectFileName)
  1529.                     FOR lnCount = 1 TO .nFolderCount
  1530.                         oFolder2=.aFolderList[lnCount]
  1531.                         IF ISNULL(oFolder2) OR NOT oFolder2.lFolder
  1532.                             LOOP
  1533.                         ENDIF
  1534.                         WITH oFolder2
  1535.                             IF LOWER(ALLTRIM(.cCatalog))==lcSelectFileName
  1536.                                 oFolder=oFolder2
  1537.                                 IF oFolder.lDeleted
  1538.                                     oFolder=.NULL.
  1539.                                 ENDIF
  1540.                                 EXIT
  1541.                             ENDIF
  1542.                         ENDWITH
  1543.                     ENDFOR
  1544.                     oFolder2=.NULL.
  1545.                     IF NOT ISNULL(oFolder)
  1546.                         .SelectFolder(oFolder)
  1547.                     ENDIF
  1548.                 ENDIF
  1549.                 SET MESSAGE TO
  1550.             ENDIF
  1551.         ENDWITH
  1552.         RETURN
  1553.     ENDIF
  1554.     IF EMPTY(lcFileName)
  1555.         toBrowser.vResult=.F.
  1556.         RETURN toBrowser.vResult
  1557.     ENDIF
  1558.     IF lcFileName==toBrowser.cFileName AND toBrowser.nFileCount=1
  1559.         toBrowser.SeekClass("("+lcFileName+")")
  1560.         RETURN
  1561.     ENDIF
  1562.     IF FILE(lcFileName) OR toBrowser.NewFile(lcFileName)
  1563.         EXIT
  1564.     ENDIF
  1565.     IF NOT ":"$lcFileName AND NOT "\\"$lcFileName
  1566.         lcFileName=LOWER(FULLPATH(lcFileName))
  1567.     ENDIF
  1568.     IF NOT FILE(lcFileName)
  1569.         SELECT 0
  1570.         SET MESSAGE TO
  1571.         toBrowser.MsgBox(M_FILE_LOC+[ "]+lcFileName+[" ]+M_DOES_NOT_EXIST_LOC+[.],16)
  1572.         toBrowser.cFileName=""
  1573.         toBrowser.vResult=.F.
  1574.         RETURN toBrowser.vResult
  1575.     ENDIF
  1576. ENDDO
  1577. IF RIGHT(lcFileName,4)==".pjx"
  1578.     IF USED("_tempproject")
  1579.         USE IN _tempproject
  1580.     ENDIF
  1581.     USE (lcFileName) AGAIN SHARED ALIAS _tempproject
  1582.     IF NOT USED()
  1583.         toBrowser.cFileName=""
  1584.         toBrowser.MsgBox(M_UNABLE_TO_OPEN_LOC+[ "]+lcFileName+[".],16)
  1585.         SELECT 0
  1586.         SET MESSAGE TO
  1587.         toBrowser.vResult=.F.
  1588.         RETURN toBrowser.vResult
  1589.     ENDIF
  1590.     SET FILTER TO NOT DELETED()
  1591.     LOCATE
  1592.     SCAN ALL FOR Type=="V" OR Type=="K"
  1593.         llRefreshClassList=.T.
  1594.         lcFileName2=LOWER(ALLTRIM(STRTRAN(MLINE(Name,1),CHR(0),"")))
  1595.         IF NOT ":"$lcFileName2 AND NOT "\\"$lcFileName2
  1596.             lcFileName2=LOWER(FULLPATH(lcFileName2,lcFileName))
  1597.         ENDIF
  1598.         IF llAddMode
  1599.             toBrowser.AddFile(lcFileName2,.T.)
  1600.         ELSE
  1601.             toBrowser.OpenFile(lcFileName2,.T.,.T.)
  1602.             llAddMode=.T.
  1603.         ENDIF
  1604.     ENDSCAN
  1605.     USE
  1606.     IF toBrowser.lInitialized AND llRefreshClassList
  1607.         toBrowser.RefreshPrefRecNo
  1608.         SELECT browser
  1609.         REPLACE FormCount WITH FormCount+1
  1610.         toBrowser.RefreshBrowser
  1611.     ENDIF
  1612.     SELECT 0
  1613.     IF toBrowser.lInitialized 
  1614.         SET MESSAGE TO
  1615.     ENDIF
  1616.     RETURN
  1617. ENDIF
  1618. SET MESSAGE TO M_OPENING_FILE_LOC+[ "]+lcFileName+[" ...]
  1619. WITH toBrowser
  1620.     FOR lnFileNo = 1 TO .nFileCount
  1621.         lcFileName2=.aFiles[lnFileNo]
  1622.         IF EMPTY(lcFileName2)
  1623.             LOOP
  1624.         ENDIF
  1625.         lcAlias="metadata"+ALLTRIM(STR(ASCAN(.aFiles,lcFileName2)))
  1626.         IF USED(lcAlias)
  1627.             USE IN (lcAlias)
  1628.         ENDIF
  1629.     ENDFOR
  1630.     IF NOT EMPTY(.cAlias) AND USED(.cAlias)
  1631.         USE IN (.cAlias)
  1632.     ENDIF
  1633.     IF .lInitialized
  1634.         .ClearBrowser
  1635.     ENDIF
  1636.     .nFileCount=1
  1637.     DIMENSION .aFiles[1]
  1638.     .aFiles[1]=lcFileName
  1639.     .cAlias="metadata1"
  1640.     lcClass=.cClass
  1641.     SELECT 0
  1642.     .cFileName=lcFileName
  1643.     .cFileNamePath=IIF(EMPTY(lcFileName),"",JUSTPATH(lcFileName)+"\")
  1644.     .nClassTimeStamp=0
  1645.     .cClass=""
  1646.     .lFileMode=.T.
  1647.     .RefreshFileAttrib
  1648.     .lSCXMode=(RIGHT(.cFileName,4)==".scx")
  1649.     .lVCXSCXMode=(.lSCXMode OR RIGHT(.cFileName,4)==".vcx")
  1650. ENDWITH
  1651. IF toBrowser.lVCXSCXMode
  1652.     USE (toBrowser.cFileName) AGAIN SHARED ALIAS (toBrowser.cAlias)
  1653.     IF NOT USED()
  1654.         toBrowser.MsgBox(M_UNABLE_TO_OPEN_LOC+[ "]+toBrowser.cFileName+[".],16)
  1655.         toBrowser.cFileName=""
  1656.         SELECT 0
  1657.         SET MESSAGE TO
  1658.         toBrowser.vResult=.F.
  1659.         RETURN toBrowser.vResult
  1660.     ENDIF
  1661.     IF NOT toBrowser.VersionCheck(.T.)
  1662.         toBrowser.cFileName=""
  1663.         IF USED(toBrowser.cAlias)
  1664.             USE IN (toBrowser.cAlias)
  1665.         ENDIF
  1666.         SELECT 0
  1667.         SET MESSAGE TO
  1668.         toBrowser.vResult=.F.
  1669.         RETURN toBrowser.vResult
  1670.     ENDIF
  1671.     CURSORSETPROP("Buffering",1)
  1672.     lcFilter=toBrowser.cFilter
  1673.     SET FILTER TO &lcFilter
  1674.     LOCATE
  1675. ENDIF
  1676. toBrowser.RefreshPrefRecNo
  1677. SELECT browser
  1678. REPLACE FormCount WITH FormCount+1
  1679. SELECT 0
  1680. IF toBrowser.lInitialized AND NOT tlIgnoreRefresh
  1681.     toBrowser.cClass="("+toBrowser.cFileName+")"
  1682.     toBrowser.RefreshBrowser
  1683.     SET MESSAGE TO
  1684. ENDIF
  1685. ENDFUNC
  1686.  
  1687.  
  1688.  
  1689. FUNCTION brwAddFile(toBrowser,tcFileName,tlIgnoreRefresh)
  1690. LOCAL lcFileName,lcFilter,lcLastFileName,lcLastAlias
  1691. LOCAL lnFileCount,lnCount,llMatch,lnFileNo
  1692.  
  1693. IF toBrowser.lRelease
  1694.     toBrowser.vResult=.F.
  1695.     RETURN toBrowser.vResult
  1696. ENDIF
  1697. SET DATASESSION TO toBrowser.DataSessionID
  1698. IF NOT toBrowser.lBrowser
  1699.     RETURN toBrowser.OpenFile(tcFileName,.T.,tlIgnoreRefresh)
  1700. ENDIF
  1701. IF EMPTY(tcFileName)
  1702.     SELECT 0
  1703.     SET MESSAGE TO
  1704.     lcFileName=toBrowser.GetFile()
  1705. ELSE
  1706.     lcFileName=tcFileName
  1707. ENDIF
  1708. IF EMPTY(lcFileName)
  1709.     toBrowser.vResult=.F.
  1710.     RETURN toBrowser.vResult
  1711. ENDIF
  1712. lcFileName=ALLTRIM(lcFileName)
  1713. IF EMPTY(JUSTEXT(lcFileName))
  1714.     lcFileName=FORCEEXT(lcFileName,"vcx")
  1715. ENDIF
  1716. IF NOT ":"$lcFileName AND NOT "\\"$lcFileName
  1717.     lcFileName=LOWER(FULLPATH(lcFileName))
  1718. ENDIF
  1719. IF NOT FILE(lcFileName) AND NOT toBrowser.NewFile(lcFileName)
  1720.     SELECT 0
  1721.     SET MESSAGE TO
  1722.     toBrowser.MsgBox(M_FILE_LOC+[ "]+LOWER(FULLPATH(lcFileName,toBrowser.cProgramPath))+ ;
  1723.             [" ]+M_DOES_NOT_EXIST_LOC+[.],16)
  1724.     toBrowser.vResult=.F.
  1725.     RETURN toBrowser.vResult
  1726. ENDIF
  1727. IF ASCAN(toBrowser.aFiles,lcFileName)>0
  1728.     toBrowser.SeekClass("("+lcFileName+")")
  1729.     RETURN
  1730. ENDIF
  1731. IF RIGHT(lcFileName,4)==".pjx"
  1732.     toBrowser.OpenFile(lcFileName,.T.)
  1733.     RETURN
  1734. ENDIF
  1735. SET MESSAGE TO M_ADDING_FILE_LOC+[ "]+lcFileName+[" ...]
  1736. lnFileCount=toBrowser.nFileCount
  1737. lcLastFileName=toBrowser.cFileName
  1738. lcLastAlias=toBrowser.cAlias
  1739. FOR lnCount = 1 TO lnFileCount
  1740.     IF EMPTY(toBrowser.aFiles[lnCount])
  1741.         lnFileNo=lnCount
  1742.         llMatch=.T.
  1743.         EXIT
  1744.     ENDIF
  1745. ENDFOR
  1746. WITH toBrowser
  1747.     IF NOT llMatch
  1748.         .nFileCount=.nFileCount+1
  1749.         DIMENSION .aFiles[.nFileCount]
  1750.         lnFileNo=.nFileCount
  1751.     ENDIF
  1752.     .aFiles[lnFileNo]=lcFileName
  1753.     .cAlias="metadata"+ALLTRIM(STR(lnFileNo))
  1754.     IF NOT EMPTY(.cAlias) AND USED(.cAlias)
  1755.         USE IN (.cAlias)
  1756.     ENDIF
  1757.     SELECT 0
  1758.     .cFileName=lcFileName
  1759.     .cFileNamePath=IIF(EMPTY(lcFileName),"",JUSTPATH(lcFileName)+"\")
  1760.     .RefreshFileAttrib
  1761.     .lSCXMode=(RIGHT(lcFileName,4)==".scx")
  1762.     .lVCXSCXMode=(.lSCXMode OR RIGHT(lcFileName,4)==".vcx")
  1763. ENDWITH
  1764. IF toBrowser.lVCXSCXMode
  1765.     USE (toBrowser.cFileName) AGAIN SHARED ALIAS (toBrowser.cAlias)
  1766.     IF NOT USED()
  1767.         WITH toBrowser
  1768.             .nFileCount=lnFileCount
  1769.             DIMENSION .aFiles[lnFileCount]
  1770.             .cFileName=lcLastFileName
  1771.             .cFileNamePath=IIF(EMPTY(lcLastFileName),"",JUSTPATH(lcLastFileName)+"\")
  1772.             .cAlias=lcLastAlias
  1773.             .RefreshFileAttrib
  1774.             .lSCXMode=(RIGHT(lcFileName,4)==".scx")
  1775.             .lVCXSCXMode=(.lSCXMode OR RIGHT(lcFileName,4)==".vcx")
  1776.         ENDWITH
  1777.         toBrowser.vResult=.F.
  1778.         RETURN toBrowser.vResult
  1779.     ENDIF
  1780.     IF NOT toBrowser.VersionCheck(.T.)
  1781.         WITH toBrowser
  1782.             .nFileCount=lnFileCount
  1783.             DIMENSION .aFiles[lnFileCount]
  1784.             .cFileName=lcLastFileName
  1785.             .cFileNamePath=IIF(EMPTY(lcLastFileName),"",JUSTPATH(lcLastFileName)+"\")
  1786.             .cAlias=lcLastAlias
  1787.             .RefreshFileAttrib
  1788.             .lSCXMode=(RIGHT(.cFileName,4)==".scx")
  1789.             .lVCXSCXMode=(.lSCXMode OR RIGHT(.cFileName,4)==".vcx")
  1790.         ENDWITH
  1791.         toBrowser.vResult=.F.
  1792.         RETURN toBrowser.vResult
  1793.     ENDIF
  1794.     CURSORSETPROP("Buffering",1)
  1795.     lcFilter=toBrowser.cFilter
  1796.     SET FILTER TO &lcFilter
  1797.     LOCATE
  1798. ELSE
  1799.     toBrowser.cClass="("+lcFileName+")"
  1800. ENDIF
  1801. IF NOT tlIgnoreRefresh
  1802.     IF toBrowser.lBrowser
  1803.         toBrowser.cClass="("+lcFileName+")"
  1804.     ENDIF
  1805.     toBrowser.RefreshBrowser
  1806. ENDIF
  1807. toBrowser.RefreshPrefRecNo
  1808. SELECT browser
  1809. REPLACE FormCount WITH FormCount+1
  1810. SELECT 0
  1811. IF toBrowser.lInitialized 
  1812.     SET MESSAGE TO
  1813. ENDIF
  1814. ENDFUNC
  1815.  
  1816.  
  1817.  
  1818. FUNCTION brwRefreshFolderList(toBrowser)
  1819. LOCAL oItem,lcCatalog,lnCount,llActive,lcClassLibrary,llLockScreen
  1820.  
  1821. IF toBrowser.lRelease OR toBrowser.lBrowser
  1822.     toBrowser.vResult=.F.
  1823.     RETURN toBrowser.vResult
  1824. ENDIF
  1825. SET DATASESSION TO toBrowser.DataSessionID
  1826. SELECT 0
  1827. SET MESSAGE TO M_REFRESH_FOLDER_LIST_LOC+" ("+toBrowser.cViewType+") ..."
  1828. WITH toBrowser
  1829.     IF USED(.cGallery)
  1830.         .cCatalog=LOWER(DBF(.cGallery))
  1831.     ENDIF
  1832.     lcCatalog=.cCatalog
  1833.     IF .lInitialized
  1834.         .ClearNodes(.oleFolderList)
  1835.         .nFolderCount=0
  1836.         .RefreshCaption
  1837.         .RefreshItemList
  1838.     ENDIF
  1839. ENDWITH
  1840. IF EMPTY(lcCatalog)
  1841.     SELECT 0
  1842.     SET MESSAGE TO
  1843.     toBrowser.vResult=.F.
  1844.     RETURN toBrowser.vResult
  1845. ENDIF
  1846. lcCatalog=toBrowser.cCatalog
  1847. IF EMPTY(lcCatalog)
  1848.     SELECT 0
  1849.     SET MESSAGE TO
  1850.     toBrowser.vResult=.F.
  1851.     RETURN toBrowser.vResult
  1852. ENDIF
  1853. SET MESSAGE TO M_REFRESH_FOLDER_LIST_LOC+" ("+toBrowser.cViewType+") ..."
  1854. lcClassLibrary=LOWER(ALLTRIM(toBrowser.cDefaultCatalogClassLibrary))
  1855. IF EMPTY(lcClassLibrary)
  1856.     toBrowser.cCatalog=""
  1857.     SELECT 0
  1858.     toBrowser.vResult=.F.
  1859.     RETURN toBrowser.vResult
  1860. ENDIF
  1861. IF NOT FILE(lcClassLibrary)
  1862.     lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,toBrowser.cProgramPath+"gallery\"))
  1863.     IF NOT FILE(lcClassLibrary)
  1864.         toBrowser.cCatalog=""
  1865.         IF USED(toBrowser.cGallery)
  1866.             USE IN (toBrowser.cGallery)
  1867.         ENDIF
  1868.         SELECT 0
  1869.         SET MESSAGE TO
  1870.         toBrowser.MsgBox(M_FILE_LOC+[ "]+lcClassLibrary+[" ]+M_DOES_NOT_EXIST_LOC+[.],16)
  1871.         toBrowser.vResult=.F.
  1872.         RETURN toBrowser.vResult
  1873.     ENDIF
  1874.     toBrowser.cDefaultCatalogClassLibrary=lcClassLibrary
  1875. ENDIF
  1876. WITH toBrowser
  1877.     .lError=.F.
  1878.     llActive=.lActive
  1879.     .lActive=.T.
  1880.     llLockScreen=.LockScreen
  1881.     .LockScreen=.T.
  1882.     IF NOT .lRefreshBrowserMode
  1883.         .oleFolderList.Top=.oleFolderList.Top+9999
  1884.         .oleFolderList.Enabled=.F.
  1885.         .oleFolderList.Visible=.F.
  1886.     ENDIF
  1887.     .RefreshObjects
  1888. ENDWITH
  1889. IF toBrowser.lRelease
  1890.     SELECT 0
  1891.     SET MESSAGE TO
  1892.     toBrowser.vResult=.F.
  1893.     RETURN toBrowser.vResult
  1894. ENDIF
  1895. IF TYPE("toBrowser.oleFolderList.object.Nodes[1].Selected")#"L"
  1896.     toBrowser.nFolderCount=0
  1897. ENDIF
  1898. IF toBrowser.nFolderListIndex<1 AND toBrowser.nFolderCount>0
  1899.     WITH toBrowser
  1900.         .nFolderListIndex=1
  1901.         .nLastFolderListIndex=-1
  1902.         .oleFolderList.object.Nodes[1].Selected=.T.
  1903.         .oCatalogSource=.aFolderList[1]
  1904.         .oCatalog=.oCatalogSource.oLink
  1905.         .oFolderSource=.oCatalogSource
  1906.         .oFolder=.oCatalog
  1907.         .oItemSource=.oFolderSource
  1908.         .oItem=.oFolder
  1909.         .cCatalog=.oItem.cSourceCatalog
  1910.     ENDWITH
  1911. ENDIF
  1912. WITH toBrowser
  1913.     .lError=.F.
  1914.     IF NOT .lRefreshBrowserMode
  1915.         .oleFolderList.Enabled=.T.
  1916.         .oleFolderList.Visible=.T.
  1917.         .oleFolderList.Top=.oleFolderList.Top-9999
  1918.     ENDIF
  1919.     .lActive=llActive
  1920.     .LockScreen=llLockScreen
  1921. ENDWITH
  1922. SELECT 0
  1923. IF NOT toBrowser.lRefreshBrowserMode
  1924.     SET MESSAGE TO
  1925. ENDIF
  1926. ENDFUNC
  1927.  
  1928.  
  1929.  
  1930. FUNCTION brwRefreshObjects(toBrowser,toFolder)
  1931. PRIVATE oTHIS
  1932. LOCAL llRefreshFolders,oNode,lcText,lcClass,lcItemClass,lcClassLibrary,lcItemType
  1933. LOCAL oParent,oFolder,oItem,lcItem,oObject,oView,lcCatalog,lcLastCatalog,lcCatalogPath
  1934. LOCAL lnType,lnIndex,lnImageIndex,lcKey,lcAlias,lcAlias2,lcDBF,lcID,lcID2,lcPicture
  1935. LOCAL lcFolderID,llIgnoreErrors,lnCount,lcCount,lnCount2,lnAtPos,lnAtPos2,llVisible
  1936. LOCAL lnViewType,lcViewType,lcViews,lcViewItem,lcViewAlias,lcViewCatalog,lcSourceAlias
  1937. LOCAL lnCatalogRecNo,lcCatalogID,lcProperties,lcLabel,lcProperty,lcWidth,lcValidExpr
  1938. LOCAL lcDesc,lcClassLib,lcItemClass,lcItemTypes,llReadOnly,llViewMode,llMenuItem
  1939. LOCAL lcGetFileExt,lcRowSource,lcScript,lnFolderCount,llMatch,oRecord
  1940. LOCAL lcMemLine,lnRecNo,llMaxFolderCountErrorMsg,lcType,lcLink
  1941. LOCAL laFolderID[1],laFolderText[1]
  1942.  
  1943. IF toBrowser.lRelease OR toBrowser.lBrowser
  1944.     toBrowser.vResult=.F.
  1945.     RETURN toBrowser.vResult
  1946. ENDIF
  1947. SET DATASESSION TO toBrowser.DataSessionID
  1948. llMaxFolderCountErrorMsg=.F.
  1949. lcCatalog=""
  1950. lcLastCatalog=" "
  1951. lnCatalogRecNo=0
  1952. lcCatalogID=""
  1953. oTHIS=.NULL.
  1954. oParent=.NULL.
  1955. oFolder=.NULL.
  1956. oNode=.NULL.
  1957. oItem=.NULL.
  1958. oRecord=.NULL.
  1959. oView=.NULL.
  1960. llRefreshFolders=(TYPE("toFolder")#"O" OR ISNULL(toFolder))
  1961. IF llRefreshFolders
  1962.     IF toBrowser.nFolderCount>0
  1963.         toBrowser.vResult=.F.
  1964.         RETURN toBrowser.vResult
  1965.     ENDIF
  1966.     lcFolderID=""
  1967.     lcViewCatalog=""
  1968. ELSE
  1969.     oFolder=toFolder
  1970.     toFolder=.NULL.
  1971.     oFolder.nItemCount=0
  1972.     IF toBrowser.nFolderCount<=0 
  1973.         toBrowser.vResult=.F.
  1974.         RETURN toBrowser.vResult
  1975.     ENDIF
  1976.     lcFolderID=oFolder.cID
  1977.     oParent=oFolder
  1978.     DO WHILE NOT oParent.cID==oParent.oFolder.cID
  1979.         oParent=oParent.oFolder
  1980.     ENDDO
  1981.     lcViewCatalog=LOWER(oParent.cCatalog)
  1982.     oParent=.NULL.
  1983. ENDIF
  1984. lcClassLibrary=toBrowser.cClassLibrary
  1985. IF NOT brwSetClassLibrary(toBrowser,toBrowser.cDefaultCatalogClassLibrary)
  1986.     toBrowser.vResult=.F.
  1987.     RETURN toBrowser.vResult
  1988. ENDIF
  1989. IF EMPTY(toBrowser.cGallery)
  1990.     toBrowser.cGallery="view_default"
  1991. ENDIF
  1992. lnViewType=toBrowser.nViewType
  1993. lcViewType=LOWER(ALLTRIM(toBrowser.cViewType))
  1994. IF llRefreshFolders
  1995.     lcAlias="view_default"
  1996.     IF USED(lcAlias)
  1997.         SELECT (lcAlias)
  1998.         ZAP
  1999.     ELSE
  2000.         toBrowser.CreateCatalog(lcAlias)
  2001.         IF NOT USED(lcAlias)
  2002.             toBrowser.vResult=.F.
  2003.             RETURN toBrowser.vResult
  2004.         ENDIF
  2005.     ENDIF
  2006.     SELECT (lcAlias)
  2007.     SET ORDER TO
  2008.     LOCATE
  2009.     lcAlias2="catalog"
  2010.     FOR lnCount = 1 TO 256
  2011.         lcCount=ALLTRIM(STR(lnCount))
  2012.         lcViewAlias=lcAlias2+lcCount
  2013.         IF NOT USED(lcViewAlias)
  2014.             LOOP
  2015.         ENDIF
  2016.         SELECT (lcAlias)
  2017.         APPEND FROM (DBF(lcViewAlias)) FOR NOT DELETED()
  2018.     ENDFOR
  2019.     INDEX ON UPPER(Type) TAG Type
  2020. ENDIF
  2021. lcAlias=LOWER(toBrowser.cGallery)
  2022. llViewMode=(llRefreshFolders AND lnViewType>1 AND LEFT(lcAlias,5)=="view_")
  2023. oView=toBrowser.oView
  2024. toBrowser.oView=.NULL.
  2025. IF llViewMode AND VARTYPE(oView)=="O" AND toBrowser.RefreshView(oView)=0
  2026.     oView.Release
  2027.     toBrowser.vResult=.F.
  2028.     RETURN toBrowser.vResult
  2029. ENDIF
  2030. IF llViewMode AND ISNULL(oView)
  2031.     SELECT (lcAlias)
  2032.     ZAP
  2033.     lnFolderCount=0
  2034.     DIMENSION laFolderID[1],laFolderText[1]
  2035.     laFolderID=""
  2036.     laFolderText=""
  2037.     lcCatalog=LOWER(SYS(2015))
  2038.     oNode=toBrowser.CreateNode(lcAlias,"FOLDER")
  2039.     WITH oNode
  2040.         .cID=lcCatalog
  2041.         .cText=toBrowser.cViewType
  2042.         .WriteProperties
  2043.     ENDWITH
  2044.     SELECT view_default
  2045.     SCAN ALL
  2046.         lcType=UPPER(ALLTRIM(Type))
  2047.         IF lcType=="OBJECT"
  2048.             oRecord=.NULL.
  2049.             SCATTER MEMO NAME oRecord
  2050.             SELECT (lcAlias)
  2051.             APPEND BLANK
  2052.             GATHER MEMO NAME oRecord
  2053.             oRecord=.NULL.
  2054.             SELECT view_default
  2055.             LOOP
  2056.         ENDIF
  2057.         IF lcType=="VIEW"
  2058.             oRecord=.NULL.
  2059.             SCATTER MEMO NAME oRecord
  2060.             SELECT (lcAlias)
  2061.             APPEND BLANK
  2062.             oRecord.Parent=lcCatalog
  2063.             GATHER MEMO NAME oRecord
  2064.             oRecord=.NULL.
  2065.             SELECT view_default
  2066.             LOOP
  2067.         ENDIF
  2068.         IF EMPTY(Views) OR NOT lcType=="ITEM"
  2069.             LOOP
  2070.         ENDIF
  2071.         lcViews=ALLTRIM(Views)
  2072.         lcID=LOWER(SYS(2015))
  2073.         _mline=0
  2074.         FOR lnCount = 1 TO MEMLINES(lcViews)
  2075.             lcMemLine=ALLTRIM(MLINE(lcViews,1,_mline))
  2076.             IF EMPTY(lcMemLine)
  2077.                 LOOP
  2078.             ENDIF
  2079.             lnAtPos=AT("=",lcMemLine)
  2080.             IF lnAtPos=0
  2081.                 LOOP
  2082.             ENDIF
  2083.             lcViewAlias=PROPER(ALLTRIM(LEFT(lcMemLine,lnAtPos-1)))
  2084.             IF EMPTY(lcViewAlias)
  2085.                 LOOP
  2086.             ENDIF
  2087.             lcViewAlias="view_"+STRTRAN(lcViewAlias," ","_")
  2088.             IF NOT LOWER(lcViewAlias)==lcAlias
  2089.                 LOOP
  2090.             ENDIF
  2091.             lcViewItem=ALLTRIM(SUBSTR(lcMemLine,lnAtPos+1))
  2092.             oRecord=.NULL.
  2093.             SCATTER MEMO NAME oRecord
  2094.             lcParent=LOWER(ALLTRIM(oRecord.Parent))
  2095.             IF EMPTY(lcViewItem)
  2096.                 oRecord.Parent=lcCatalog
  2097.             ELSE
  2098.                 lnIndex=ASCAN(laFolderText,LOWER(lcViewItem)+" ")
  2099.                 IF lnIndex=0
  2100.                     IF VARTYPE(oNode)=="O"
  2101.                         oNode.Release
  2102.                     ENDIF
  2103.                     oNode=toBrowser.CreateNode(lcAlias,"FOLDER")
  2104.                     WITH oNode
  2105.                         .cParent=lcCatalog
  2106.                         .cText=lcViewItem
  2107.                         .WriteProperties
  2108.                         lnFolderCount=lnFolderCount+1
  2109.                         DIMENSION laFolderID[lnFolderCount],laFolderText[lnFolderCount]
  2110.                         laFolderID[lnFolderCount]=.cID
  2111.                         laFolderText[lnFolderCount]=LOWER(lcViewItem)+" "
  2112.                         oRecord.Parent=.cID
  2113.                     ENDWITH
  2114.                     IF VARTYPE(oNode)=="O"
  2115.                         oNode.Release
  2116.                     ENDIF
  2117.                     oNode=.NULL.
  2118.                 ELSE
  2119.                     oRecord.Parent=laFolderID[lnIndex]
  2120.                 ENDIF
  2121.             ENDIF
  2122.             lnRecNo=RECNO()
  2123.             DO WHILE NOT EMPTY(lcParent)
  2124.                 LOCATE FOR LOWER(ALLTRIM(ID))==lcParent
  2125.                 IF EOF()
  2126.                     EXIT
  2127.                 ENDIF
  2128.                 lcParent=LOWER(ALLTRIM(Parent))
  2129.                 WITH oRecord
  2130.                     IF EMPTY(.ClassLib) AND NOT EMPTY(ClassLib)
  2131.                         .ClassLib=ClassLib
  2132.                     ENDIF
  2133.                     IF EMPTY(.ItemClass) AND NOT EMPTY(ItemClass)
  2134.                         .ItemClass=ItemClass
  2135.                     ENDIF
  2136.                     IF lcType=="ITEM" AND EMPTY(.ClassName) AND NOT EMPTY(ItemClass)
  2137.                         .ClassName=ItemClass
  2138.                     ENDIF
  2139.                     IF EMPTY(.ItemTpDesc) AND NOT EMPTY(ItemTpDesc)
  2140.                         .ItemTpDesc=ItemTpDesc
  2141.                     ENDIF
  2142.                     IF EMPTY(.Picture) AND NOT EMPTY(Picture)
  2143.                         .Picture=Picture
  2144.                     ENDIF
  2145.                 ENDWITH
  2146.             ENDDO
  2147.             lcID=LOWER(ALLTRIM(oRecord.ID))
  2148.             GO lnRecNo
  2149.             SELECT (lcAlias)
  2150.             LOCATE FOR LOWER(ALLTRIM(ID))==lcID
  2151.             IF EOF()
  2152.                 APPEND BLANK
  2153.                 GATHER MEMO NAME oRecord
  2154.             ENDIF
  2155.             oRecord=.NULL.
  2156.         ENDFOR
  2157.     ENDSCAN
  2158.     IF VARTYPE(oNode)=="O"
  2159.         oNode.Release
  2160.     ENDIF
  2161.     oNode=.NULL.
  2162. ENDIF
  2163. IF VARTYPE(oView)=="O"
  2164.     oView.Release
  2165.     oView=.NULL.
  2166. ENDIF
  2167. SELECT 0
  2168. IF llRefreshFolders AND lnViewType=1
  2169.     IF USED("itemtypes")
  2170.         SELECT itemtypes
  2171.         ZAP
  2172.     ELSE
  2173.         CREATE CURSOR itemtypes (Class C(64), Text C(32), Label C(32), Property C(64), ;
  2174.                 Width N(4), ValidExpr M, Visible L, MenuItem L, ReadOnly L, Desc M, ClassLib M, ;
  2175.                 ItemClass M, ItemTypes M, GetFileExt M, RowSource M, Script M)
  2176.         SELECT itemtypes
  2177.         INDEX ON Class TAG Class FOR NOT MenuItem
  2178.         INDEX ON UPPER(Text) TAG Text FOR MenuItem UNIQUE ADDITIVE
  2179.         SET ORDER TO Class
  2180.         LOCATE
  2181.     ENDIF
  2182.     SELECT 0
  2183. ENDIF
  2184. SELECT (lcAlias)
  2185. IF llRefreshFolders
  2186.     LOCATE
  2187. ELSE
  2188.     SEEK "FOLDER "
  2189. ENDIF
  2190. SCAN REST
  2191.     lnRecNo=RECNO()
  2192.     lcType=UPPER(ALLTRIM(Type))
  2193.     IF llRefreshFolders
  2194.         IF lcType=="CLASS"
  2195.             IF lnViewType#1
  2196.                 LOOP
  2197.             ENDIF
  2198.             lcID=LOWER(ALLTRIM(ID))
  2199.             lcText=ALLTRIM(Text)
  2200.             lcDesc=ALLTRIM(Desc)
  2201.             lcClassLib=ALLTRIM(ClassLib)
  2202.             lcClass=LOWER(ALLTRIM(ClassName))
  2203.             lcItemClass=ALLTRIM(ItemClass)
  2204.             IF EMPTY(ItemTpDesc)
  2205.                 lcItemTypes=""
  2206.             ELSE
  2207.                 lcItemTypes=CR+LOWER(STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(ALLTRIM(ItemTpDesc), ;
  2208.                     CR_LF,CR),LF,CR),";",CR)," ",""),TAB,""))+CR
  2209.             ENDIF
  2210.             IF EMPTY(Views)
  2211.                 lcGetFileExt=""
  2212.             ELSE
  2213.                 lcGetFileExt=LOWER(STRTRAN(STRTRAN(STRTRAN(ALLTRIM(Views), ;
  2214.                         CR_LF,";"),LF,";"),CR,";"))
  2215.             ENDIF
  2216.             lcScript=ALLTRIM(Script)
  2217.             lcProperties=ALLTRIM(Properties)
  2218.             lcProperty=ALLTRIM(TypeDesc)
  2219.             llMenuItem=.T.
  2220.             llVisible=.F.
  2221.             IF NOT EMPTY(lcText)
  2222.                 IF LEFT(lcText,1)=="!"
  2223.                     lcText=ALLTRIM(SUBSTR(lcText,2))
  2224.                 ELSE
  2225.                     llVisible=.T.
  2226.                 ENDIF
  2227.             ENDIF
  2228.             INSERT INTO itemtypes (Class, Text, Property, Visible, MenuItem, Desc, ClassLib, ;
  2229.                             ItemClass, ItemTypes, GetFileExt, Script) ;
  2230.                     VALUES (lcClass, lcText, lcProperty, llVisible, llMenuItem, lcDesc, ;
  2231.                             lcClassLib, lcItemClass, lcItemTypes, lcGetFileExt, lcScript)
  2232.             SELECT itemtypes
  2233.             _mline=0
  2234.             FOR lnCount = 1 TO MEMLINES(lcProperties)
  2235.                 lcLabel=""
  2236.                 lcProperty=""
  2237.                 lcWidth=""
  2238.                 lcValidExpr=""
  2239.                 lcGetFileExt=""
  2240.                 lcLabel=ALLTRIM(MLINE(lcProperties,1,_mline))
  2241.                 lnAtPos=AT(":=",lcLabel)
  2242.                 IF lnAtPos>0
  2243.                     lcValidExpr=ALLTRIM(SUBSTR(lcLabel,lnAtPos+2))
  2244.                     lcLabel=ALLTRIM(LEFT(lcLabel,lnAtPos-1))
  2245.                 ENDIF
  2246.                 lnAtPos=AT("{",lcLabel)
  2247.                 IF lnAtPos>0
  2248.                     lnAtPos2=AT("}",lcLabel)
  2249.                     IF lnAtPos2>lnAtPos
  2250.                         lcGetFileExt=SUBSTR(lcLabel,lnAtPos+1,lnAtPos2-lnAtPos-1)
  2251.                         IF EMPTY(lcGetFileExt)
  2252.                             lcGetFileExt="*"
  2253.                         ELSE
  2254.                             lcGetFileExt=LOWER(ALLTRIM(lcGetFileExt))
  2255.                         ENDIF
  2256.                         lcLabel=LEFT(lcLabel,lnAtPos-1)+SUBSTR(lcLabel,lnAtPos2+1)
  2257.                     ENDIF
  2258.                 ENDIF
  2259.                 lnAtPos=AT(",",lcLabel)
  2260.                 IF lnAtPos=0
  2261.                     LOOP
  2262.                 ENDIF
  2263.                 lcProperty=ALLTRIM(SUBSTR(lcLabel,lnAtPos+1))
  2264.                 lcLabel=ALLTRIM(LEFT(lcLabel,lnAtPos-1))
  2265.                 lnAtPos=AT("[",lcProperty)
  2266.                 lnAtPos2=AT("]",lcProperty)
  2267.                 IF lnAtPos=0 OR lnAtPos2=0 OR lnAtPos>lnAtPos2
  2268.                     lcRowSource=""
  2269.                 ELSE
  2270.                     lcRowSource=ALLTRIM(SUBSTR(lcProperty,lnAtPos+1,lnAtPos2-lnAtPos-1))
  2271.                     lcProperty=ALLTRIM(LEFT(lcProperty,lnAtPos-1))+ ;
  2272.                             ALLTRIM(SUBSTR(lcProperty,lnAtPos2+1))
  2273.                 ENDIF
  2274.                 lcWidth="50"
  2275.                 lnAtPos=AT(",",lcProperty)
  2276.                 IF lnAtPos>0
  2277.                     lnAtPos2=AT("]",lcProperty)
  2278.                     IF lnAtPos2=0
  2279.                         lnAtPos2=AT(")",lcProperty)
  2280.                     ENDIF
  2281.                     IF BETWEEN(lnAtPos,1,lnAtPos2)
  2282.                         lnAtPos=AT(",",lcProperty,2)
  2283.                     ENDIF
  2284.                 ENDIF
  2285.                 IF lnAtPos>0
  2286.                     lcWidth=ALLTRIM(SUBSTR(lcProperty,lnAtPos+1))
  2287.                     lcProperty=ALLTRIM(LEFT(lcProperty,lnAtPos-1))
  2288.                 ENDIF
  2289.                 llReadOnly=.F.
  2290.                 llVisible=.F.
  2291.                 IF NOT EMPTY(lcLabel)
  2292.                     IF LEFT(lcLabel,1)=="!"
  2293.                         lcLabel=ALLTRIM(SUBSTR(lcLabel,2))
  2294.                     ELSE
  2295.                         llVisible=.T.
  2296.                         IF LEFT(lcLabel,1)=="*"
  2297.                             lcLabel=ALLTRIM(SUBSTR(lcLabel,2))
  2298.                             llReadOnly=.T.
  2299.                         ENDIF
  2300.                     ENDIF
  2301.                 ENDIF
  2302.                 INSERT INTO itemtypes (Class, Label, Property, Width, ValidExpr, Visible, ;
  2303.                                 ReadOnly, ItemTypes, GetFileExt, RowSource) ;
  2304.                         VALUES (lcClass, lcLabel, lcProperty, EVALUATE(lcWidth), ;
  2305.                                 lcValidExpr, llVisible, llReadOnly, lcItemTypes, ;
  2306.                                 lcGetFileExt, lcRowSource)
  2307.             ENDFOR
  2308.             SELECT browser
  2309.             LOOP
  2310.         ENDIF
  2311.         IF lnViewType=1 AND lnCatalogRecNo>0 AND NOT EMPTY(Views) AND lcType=="ITEM"
  2312.             lcViews=ALLTRIM(Views)
  2313.             _mline=0
  2314.             FOR lnCount = 1 TO MEMLINES(lcViews)
  2315.                 lcMemLine=ALLTRIM(MLINE(lcViews,1,_mline))
  2316.                 IF EMPTY(lcMemLine)
  2317.                     LOOP
  2318.                 ENDIF
  2319.                 lnAtPos=AT("=",lcMemLine)
  2320.                 IF lnAtPos=0
  2321.                     LOOP
  2322.                 ENDIF
  2323.                 lcViewAlias=PROPER(ALLTRIM(LEFT(lcMemLine,lnAtPos-1)))
  2324.                 IF EMPTY(lcViewAlias)
  2325.                     LOOP
  2326.                 ENDIF
  2327.                 lcViewAlias="view_"+STRTRAN(lcViewAlias," ","_")
  2328.                 IF USED(lcViewAlias)
  2329.                     LOOP
  2330.                 ENDIF
  2331.                 lcViewAlias=toBrowser.CreateView(lcViewAlias)
  2332.             ENDFOR
  2333.             oRecord=.NULL.
  2334.         ENDIF
  2335.     ENDIF
  2336.     DO CASE
  2337.         CASE lcType=="FOLDER"
  2338.             IF llRefreshFolders
  2339.                 IF toBrowser.nFolderCount>toBrowser.nMaxFolderCount
  2340.                     IF NOT llMaxFolderCountErrorMsg
  2341.                         llMaxFolderCountErrorMsg=.T.
  2342.                         toBrowser.MsgBox(M_FOLDERS_PAST_LIMIT_LOC+" "+ ;
  2343.                                 TRANSFORM(toBrowser.nMaxFolderCount)+"."+CR+CR+ ;
  2344.                                 M_FOLDERS_NOT_VISIBLE_LOC+".",16)
  2345.                     ENDIF
  2346.                     LOOP
  2347.                 ENDIF
  2348.                 lnType=IIF(EMPTY(Parent),1,2)
  2349.             ELSE
  2350.                 IF EMPTY(Parent)
  2351.                     LOOP
  2352.                 ENDIF
  2353.                 lnType=4
  2354.             ENDIF
  2355.         CASE lcType=="ITEM"
  2356.             IF llRefreshFolders
  2357.                 LOOP
  2358.             ENDIF
  2359.             IF EMPTY(Parent)
  2360.                 LOOP
  2361.             ENDIF
  2362.             lnType=5
  2363.         CASE NOT llRefreshFolders
  2364.             EXIT
  2365.         CASE lcType=="OBJECT"
  2366.             lnType=3
  2367.         CASE lcType=="VIEW"
  2368.             IF EMPTY(Parent)
  2369.                 REPLACE Parent WITH lcCatalogID
  2370.             ENDIF
  2371.             lnType=6
  2372.         OTHERWISE
  2373.             LOOP
  2374.     ENDCASE
  2375.     IF toBrowser.lRelease
  2376.         SELECT 0
  2377.         toBrowser.vResult=.F.
  2378.         RETURN toBrowser.vResult
  2379.     ENDIF
  2380.     lcID=LOWER(ALLTRIM(ID))
  2381.     lcSourceAlias=LOWER(ALLTRIM(SrcAlias))
  2382.     IF EMPTY(lcID)
  2383.         lcSourceAlias=LOWER(ALIAS())
  2384.         lcDBF=IIF(USED(lcSourceAlias),LOWER(DBF(lcSourceAlias)),"")
  2385.     ELSE
  2386.         DO CASE
  2387.             CASE EMPTY(lcSourceAlias)
  2388.                 lcSourceAlias=LOWER(ALIAS())
  2389.             CASE NOT USED(lcSourceAlias)
  2390.                 LOOP
  2391.         ENDCASE
  2392.         IF lnViewType=1 OR lnType=1
  2393.             lcDBF=IIF(USED(lcSourceAlias),LOWER(DBF(lcSourceAlias)),"")
  2394.         ELSE
  2395.             IF EMPTY(lcViewCatalog)
  2396.                 LOOP
  2397.             ENDIF
  2398.             lcDBF=lcViewCatalog
  2399.         ENDIF
  2400.     ENDIF
  2401.     lcID2=STRTRAN(JUSTSTEM(lcDBF)," ","_")
  2402.     lcCatalog=IIF(USED(lcSourceAlias),LOWER(DBF(lcSourceAlias)),"")
  2403.     IF lnType=1 AND lnViewType=1
  2404.         IF lcCatalog==lcLastCatalog
  2405.             LOOP
  2406.         ENDIF
  2407.         lcLastCatalog=lcCatalog
  2408.     ENDIF
  2409.     lcCatalogPath=IIF(EMPTY(lcDBF),"",JUSTPATH(lcDBF)+"\")
  2410.     toBrowser.oNodeObject.cCatalogPath=lcCatalogPath
  2411.     oParent=.NULL.
  2412.     IF NOT EMPTY(lcID)
  2413.         lcID=lcID2+"!"+lcID
  2414.     ENDIF
  2415.     IF INLIST(lnType,1,3)
  2416.         lcParent=""
  2417.     ELSE
  2418.         lcParent=LOWER(ALLTRIM(Parent))
  2419.         IF NOT EMPTY(lcParent) AND NOT "!"$lcParent
  2420.             lcParent=lcID2+"!"+lcParent
  2421.         ENDIF
  2422.     ENDIF
  2423.     lcLink=LOWER(ALLTRIM(Link))
  2424.     IF NOT EMPTY(lcLink) AND NOT "!"$lcLink
  2425.         lcLink=lcID2+"!"+lcLink
  2426.     ENDIF
  2427.     IF llRefreshFolders
  2428.         IF NOT EMPTY(lcParent)
  2429.             FOR lnType2 = 1 TO toBrowser.nFolderCount
  2430.                 IF toBrowser.aFolderList[lnType2].cID==lcParent
  2431.                     oParent=toBrowser.aFolderList[lnType2]
  2432.                     EXIT
  2433.                 ENDIF
  2434.             ENDFOR
  2435.             IF ISNULL(oParent)
  2436.                 LOOP
  2437.             ENDIF
  2438.         ENDIF
  2439.     ELSE
  2440.         IF NOT lcParent==lcFolderID
  2441.             LOOP
  2442.         ENDIF
  2443.         oParent=oFolder
  2444.     ENDIF
  2445.     lcText=ALLTRIM(MLINE(Text,1))
  2446.     IF EMPTY(lcText)
  2447.         lcText=ALLTRIM(MLINE(ID,1))
  2448.     ENDIF
  2449.     lcKey=lcID
  2450.     IF lnType=1
  2451.         brwReleaseClassLibraries(toBrowser)
  2452.         IF NOT brwSetClassLibrary(toBrowser,toBrowser.cDefaultCatalogClassLibrary)
  2453.             toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2454.                     M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2455.             toBrowser.vResult=.F.
  2456.             RETURN toBrowser.vResult
  2457.         ENDIF
  2458.     ENDIF
  2459.     lcClassLibrary=toBrowser.oNodeObject.FullPath(LOWER(ALLTRIM(MLINE(ClassLib,1))))
  2460.     IF NOT EMPTY(lcClassLibrary) AND NOT EMPTY(lcCatalogPath) AND ;
  2461.             EMPTY(SYS(2000,lcClassLibrary))
  2462.         lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,lcCatalogPath))
  2463.     ENDIF
  2464.     IF NOT EMPTY(lcID) AND NOT EMPTY(lcClassLibrary) AND ;
  2465.             NOT brwSetClassLibrary(toBrowser,lcClassLibrary)
  2466.         toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2467.                 M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2468.         oParent=.NULL.
  2469.         oItem=.NULL.
  2470.         LOOP
  2471.     ENDIF
  2472.     lcClass=LOWER(ALLTRIM(MLINE(ClassName,1)))
  2473.     IF EMPTY(lcID)
  2474.         lcProperties=STRTRAN(ALLTRIM(Properties),";",CR)
  2475.         lcItem=lcText+CR+ ;
  2476.                 ALLTRIM(Picture)+CR+ ;
  2477.                 lcClass+CR+ ;
  2478.                 lcClassLibrary+CR+ ;
  2479.                 ALLTRIM(FileName)+CR+ ;
  2480.                 ALLTRIM(Class)+CR+ ;
  2481.                 CHR(0)+lcProperties
  2482.         toBrowser.nItemCount=toBrowser.nItemCount+1
  2483.         lnIndex=toBrowser.nItemCount
  2484.         DIMENSION toBrowser.aItemList[lnIndex]
  2485.         oFolder.nItemCount=oFolder.nItemCount+1
  2486.         IF oFolder.nItemCount=1
  2487.             oFolder.nItemIndex=lnIndex
  2488.         ENDIF
  2489.         DIMENSION oFolder.aItemIndexes[oFolder.nItemCount]
  2490.         oFolder.aItemIndexes[oFolder.nItemCount]=lnIndex
  2491.         toBrowser.aItemList[lnIndex]=lcItem
  2492.         LOOP
  2493.     ENDIF
  2494.     IF EMPTY(lcClass)
  2495.         DO CASE
  2496.             CASE lnType=1
  2497.                 IF lnCatalogRecNo=0
  2498.                     lcViewCatalog=lcCatalog
  2499.                 ENDIF
  2500.                 lnCatalogRecNo=RECNO()
  2501.                 lcCatalogID=lcID
  2502.                 lcClass=toBrowser.cFolderClass
  2503.             CASE lnType=2
  2504.                 lcClass=oParent.Class
  2505.                 IF NOT brwSetClassLibrary(toBrowser,oParent.ClassLibrary)
  2506.                     toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2507.                             M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2508.                     oParent=.NULL.
  2509.                     oItem=.NULL.
  2510.                     LOOP
  2511.                 ENDIF
  2512.             CASE lnType=3
  2513.                 IF NOT ISNULL(oParent) AND NOT EMPTY(oParent.cItemClass)
  2514.                     lcClass=oParent.cItemClass
  2515.                     IF NOT brwSetClassLibrary(toBrowser,oParent.cItemClassLibrary)
  2516.                         toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2517.                                 M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2518.                         oParent=.NULL.
  2519.                         oItem=.NULL.
  2520.                         LOOP
  2521.                     ENDIF
  2522.                 ELSE
  2523.                     lcClass=toBrowser.cObjectClass
  2524.                 ENDIF
  2525.             CASE lnType=4
  2526.                 lcClass=oParent.Class
  2527.                 IF NOT brwSetClassLibrary(toBrowser,oParent.ClassLibrary)
  2528.                     toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2529.                             M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2530.                     oParent=.NULL.
  2531.                     oItem=.NULL.
  2532.                     LOOP
  2533.                 ENDIF
  2534.             CASE lnType=5
  2535.                 IF NOT ISNULL(oParent) AND NOT EMPTY(oParent.cItemClass)
  2536.                     lcClass=oParent.cItemClass
  2537.                     IF NOT brwSetClassLibrary(toBrowser,oParent.cItemClassLibrary)
  2538.                         toBrowser.MsgBox(M_NODE_LOC+" ("+IIF(EMPTY(lcText),lcID,lcText)+") "+ ;
  2539.                                 M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2540.                         oParent=.NULL.
  2541.                         oItem=.NULL.
  2542.                         LOOP
  2543.                     ENDIF
  2544.                 ELSE
  2545.                     lcClass=toBrowser.cItemClass
  2546.                 ENDIF
  2547.             CASE lnType=6
  2548.                 lcClass=toBrowser.cViewClass
  2549.         ENDCASE
  2550.     ENDIF
  2551.     IF EMPTY(lcClass)
  2552.         oParent=.NULL.
  2553.         oItem=.NULL.
  2554.         LOOP
  2555.     ENDIF
  2556.     oItem=CREATEOBJECT(lcClass)
  2557.     GO lnRecNo
  2558.     IF VARTYPE(oItem)#"O"
  2559.         oParent=.NULL.
  2560.         oItem=.NULL.
  2561.         LOOP
  2562.     ENDIF
  2563.     IF NOT oItem.Visible OR oItem.lDeleted
  2564.         oParent=.NULL.
  2565.         oItem.Release
  2566.         oItem=.NULL.
  2567.         LOOP
  2568.     ENDIF
  2569.     oTHIS=oItem
  2570.     oRecord=.NULL.
  2571.     SCATTER MEMO NAME oRecord
  2572.     WITH oItem
  2573.         .oHost=toBrowser
  2574.         .oRecord=oRecord
  2575.         IF NOT ISNULL(oParent)
  2576.             .oParent=oParent
  2577.             IF .oParent.lDynamic
  2578.                 .lDynamic=.T.
  2579.             ENDIF
  2580.             IF lnType=4
  2581.                 oParent=toBrowser.GetFolder(lcID2+"!"+ALLTRIM(ID),.T.)
  2582.                 IF ISNULL(oParent)
  2583.                     .oFolder=oItem
  2584.                 ELSE
  2585.                     .oFolder=oParent
  2586.                 ENDIF
  2587.             ELSE
  2588.                 .oFolder=oParent
  2589.             ENDIF
  2590.         ELSE
  2591.             .oParent=oItem
  2592.             .oFolder=oItem
  2593.             IF .oParent.lDynamic
  2594.                 .lDynamic=.T.
  2595.             ENDIF
  2596.         ENDIF
  2597.         oParent=.NULL.
  2598.         IF lnType=2 AND .oParent.nIndex=0
  2599.             oTHIS=.NULL.
  2600.             oParent=.NULL.
  2601.             oItem.Release
  2602.             oItem=.NULL.
  2603.             LOOP
  2604.         ENDIF
  2605.         SET DATASESSION TO toBrowser.DataSessionID
  2606.         SELECT (toBrowser.cGallery)
  2607.         DO CASE
  2608.             CASE lnType=1
  2609.                 .lCatalog=.T.
  2610.                 .lFolder=.T.
  2611.             CASE lnType=2
  2612.                 .lFolder=.T.
  2613.             CASE lnType=3
  2614.                 .lObject=.T.
  2615.             CASE lnType=4
  2616.                 .lFolderItem=.T.
  2617.             CASE lnType=6
  2618.                 .lView=.T.
  2619.         ENDCASE
  2620.         .cType=lcType
  2621.         .cID=lcID
  2622.         .cID2=lcID2
  2623.         .cParent=lcParent
  2624.         IF NOT EMPTY(lcLink)
  2625.             .cLink=lcLink
  2626.         ENDIF
  2627.         .oLink=oItem
  2628.         .oAction=oItem
  2629.         .oShortCutMenu=.oHost.oShortCutMenu
  2630.         .oShortCutMenu.oHost=oItem
  2631.         .cCatalog=lcCatalog
  2632.         .cCatalogPath=lcCatalogPath
  2633.         .cAlias=lcAlias
  2634.         .cSourceAlias=lcSourceAlias
  2635.         .cSourceCatalog=lcCatalog
  2636.         .cSourceCatalogPath=lcCatalogPath
  2637.         .nSourceRecNo=SrcRecNo
  2638.         .nRecNo=RECNO()
  2639.         IF EMPTY(.cViews)
  2640.             .cViews=ALLTRIM(Views)
  2641.         ENDIF
  2642.         IF lnType=3
  2643.             lcItemClass=LOWER(ALLTRIM(MLINE(ItemClass,1)))
  2644.             IF NOT EMPTY(lcItemClass)
  2645.                 oObject=CREATEOBJECT(lcItemClass)
  2646.                 SET DATASESSION TO toBrowser.DataSessionID
  2647.                 SELECT (toBrowser.cGallery)
  2648.                 IF TYPE("oObject")#"O" OR ISNULL(oObject)
  2649.                     oObject=.NULL.
  2650.                     toBrowser.MsgBox(M_CLASS_LOC+" ("+lcItemClass+") "+ ;
  2651.                             M_COULD_NOT_BE_CREATED_LOC+[.],16)
  2652.                 ELSE
  2653.                     oItem.oObject=oObject
  2654.                     oObject=.NULL.
  2655.                 ENDIF
  2656.             ENDIF
  2657.         ENDIF
  2658.         IF NOT EMPTY(Properties)
  2659.             .cProperties=ALLTRIM(Properties)
  2660.         ENDIF
  2661.         IF NOT EMPTY(Script)
  2662.             .cScript=ALLTRIM(Script)
  2663.         ENDIF
  2664.         IF NOT EMPTY(ClassLib)
  2665.             .cClassLib=MLINE(ClassLib,1)
  2666.         ENDIF
  2667.         .cClassLib=LOWER(.FullPath(.cClassLib))
  2668.         IF NOT EMPTY(ClassName)
  2669.             .cClassName=ALLTRIM(MLINE(ClassName,1))
  2670.         ENDIF
  2671.         IF NOT EMPTY(ItemTpDesc)
  2672.             .cItemTpDesc=ALLTRIM(ItemTpDesc)
  2673.         ENDIF
  2674.         IF NOT EMPTY(Keywords)
  2675.             .cKeywords=ALLTRIM(Keywords)
  2676.         ENDIF
  2677.         .tUpdated=Updated
  2678.         IF NOT EMPTY(Comment)
  2679.             .cComment=ALLTRIM(Comment)
  2680.         ENDIF
  2681.         IF NOT EMPTY(User)
  2682.             .cUser=ALLTRIM(User)
  2683.         ENDIF
  2684.         .SetProperties(.cProperties)
  2685.         IF toBrowser.lRelease
  2686.             GO lnRecNo
  2687.             oTHIS=.NULL.
  2688.             oParent=.NULL.
  2689.             oItem.Release
  2690.             oItem=.NULL.
  2691.             LOOP
  2692.         ENDIF
  2693.         GO .nRecNo
  2694.         SET DATASESSION TO toBrowser.DataSessionID
  2695.         SELECT (toBrowser.cGallery)
  2696.         IF NOT .Visible OR .lDeleted
  2697.             GO lnRecNo
  2698.             oTHIS=.NULL.
  2699.             oParent=.NULL.
  2700.             oItem.Release
  2701.             oItem=.NULL.
  2702.             LOOP
  2703.         ENDIF
  2704.         GO .nRecNo
  2705.         SET DATASESSION TO toBrowser.DataSessionID
  2706.         SELECT (toBrowser.cGallery)
  2707.         IF NOT .Visible OR .lDeleted
  2708.             oTHIS=.NULL.
  2709.             oParent=.NULL.
  2710.             oItem.Release
  2711.             oItem=.NULL.
  2712.             LOOP
  2713.         ENDIF
  2714.         IF NOT EMPTY(lcText)
  2715.             .cText=lcText
  2716.         ENDIF
  2717.         IF NOT EMPTY(Desc)
  2718.             .cDesc=ALLTRIM(Desc)
  2719.         ENDIF
  2720.         IF EMPTY(.cDesc)
  2721.             .cDesc=lcText
  2722.         ENDIF
  2723.         IF NOT EMPTY(TypeDesc)
  2724.             .cTypeDesc=ALLTRIM(TypeDesc)
  2725.         ENDIF
  2726.         IF EMPTY(.cTypeDesc) AND lnType#5
  2727.             .cTypeDesc=.oParent.cTypeDesc
  2728.         ENDIF
  2729.         IF NOT EMPTY(FileName)
  2730.             .cFileName=MLINE(FileName,1)
  2731.         ENDIF
  2732.         .cFileName=LOWER(.FullPath(.cFileName))
  2733.         IF NOT EMPTY(Class)
  2734.             .cClass=LOWER(ALLTRIM(MLINE(Class,1)))
  2735.         ENDIF
  2736.         IF NOT EMPTY(Picture)
  2737.             .cPicture=MLINE(Picture,1)
  2738.         ENDIF
  2739.         IF .lDynamic AND "\dev\browser\"$.cPicture
  2740.             .cPicture=LOWER(brwImagePictureFile(toBrowser,JUSTFNAME(.cPicture)))
  2741.         ELSE
  2742.             .cPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cPicture)))
  2743.         ENDIF
  2744.         IF NOT EMPTY(FolderPict)
  2745.             .cFolderPicture=MLINE(FolderPict,1)
  2746.         ENDIF
  2747.         IF .lDynamic AND "\dev\browser\"$.cFolderPicture
  2748.             .cFolderPicture=LOWER(brwImagePictureFile(toBrowser,JUSTFNAME(.cFolderPicture)))
  2749.         ELSE
  2750.             .cFolderPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cFolderPicture)))
  2751.         ENDIF
  2752.         IF NOT INLIST(lnType,3,5,6)
  2753.             IF NOT EMPTY(ItemClass)
  2754.                 .cItemClass=LOWER(ALLTRIM(MLINE(ItemClass,1)))
  2755.             ENDIF
  2756.             IF NOT EMPTY(.cItemClass)
  2757.                 .cItemClass=.cItemClass
  2758.                 IF EMPTY(.cItemClassLibrary)
  2759.                     .cItemClassLibrary=lcClassLibrary
  2760.                 ENDIF
  2761.             ELSE
  2762.                 IF NOT ISNULL(.oParent) AND NOT EMPTY(.oParent.cItemClass)
  2763.                     .cItemClass=.oParent.cItemClass
  2764.                     IF EMPTY(.cItemClassLibrary)
  2765.                         .cItemClassLibrary=.oParent.cItemClassLibrary
  2766.                     ENDIF
  2767.                 ENDIF
  2768.             ENDIF
  2769.             IF NOT EMPTY(ItemTpDesc)
  2770.                 .cItemTypeDesc=LOWER(ALLTRIM(ItemTpDesc))
  2771.             ENDIF
  2772.         ENDIF
  2773.         .cItemType=ALLTRIM(.cItemType)
  2774.         IF NOT .InitProperties()
  2775.             oTHIS=.NULL.
  2776.             oParent=.NULL.
  2777.             oItem.Release
  2778.             oItem=.NULL.
  2779.             LOOP
  2780.         ENDIF
  2781.         oNode=.NULL.
  2782.         DO CASE
  2783.             CASE lnType=1
  2784.                 lcPicture="catalog.ico"
  2785.                 oNode=toBrowser.oleFolderList.object.Nodes.Add(,4,lcKey,lcText)
  2786.                 IF ISNULL(oNode)
  2787.                     toBrowser.MsgBox(M_CATALOG_LOC+" ("+.cID+") "+ ;
  2788.                             M_COULD_NOT_BE_CREATED_LOC+".",16)
  2789.                     oTHIS=.NULL.
  2790.                     oParent=.NULL.
  2791.                     oItem.Release
  2792.                     oItem=.NULL.
  2793.                     LOOP
  2794.                 ENDIF
  2795.                 .nNodeIndex=oNode.Index
  2796.                 IF toBrowser.lAutoExpand
  2797.                     oNode.Expanded=.T.
  2798.                 ENDIF
  2799.             CASE lnType=2
  2800.                 IF .lWebView
  2801.                     lcPicture=toBrowser.GetWebIcon(.cFileName)
  2802.                 ELSE
  2803.                     lcPicture="folder.ico"
  2804.                 ENDIF
  2805.                 oNode=toBrowser.oleFolderList.object.Nodes.Add(lcParent, ;
  2806.                         4,lcKey,lcText,,)
  2807.                 IF ISNULL(oNode)
  2808.                     toBrowser.MsgBox(M_FOLDER_LOC+" ("+.cID+") "+ ;
  2809.                             M_COULD_NOT_BE_CREATED_LOC+".",16)
  2810.                     oTHIS=.NULL.
  2811.                     oParent=.NULL.
  2812.                     oItem.Release
  2813.                     oItem=.NULL.
  2814.                     LOOP
  2815.                 ENDIF
  2816.                 .nNodeIndex=oNode.Index
  2817.             CASE lnType=4
  2818.                 DO CASE
  2819.                     CASE NOT EMPTY(.cPicture)
  2820.                         lcPicture=.cPicture
  2821.                     CASE .lFolderItem AND EMPTY(.cPicture) AND ;
  2822.                             NOT EMPTY(.oFolder.cFolderPicture)
  2823.                         lcPicture=.oFolder.cFolderPicture
  2824.                     CASE .lWebView
  2825.                         lcPicture=toBrowser.GetWebIcon(.cFileName)
  2826.                         lcPicture="folder.ico"
  2827.                 ENDCASE
  2828.                 IF .lFolderItem
  2829.                     .cPicture=lcPicture
  2830.                     .cFolderPicture=lcPicture
  2831.                 ELSE
  2832.                     .cPicture=lcPicture
  2833.                 ENDIF
  2834.             CASE lnType=6
  2835.                 IF EMPTY(.cText)
  2836.                     LOOP
  2837.                 ENDIF
  2838.                 .cViewAlias=toBrowser.CreateView("view_"+LOWER(.cText))
  2839.         ENDCASE
  2840.         IF NOT ISNULL(oNode)
  2841.             llIgnoreErrors=toBrowser.lIgnoreErrors
  2842.             toBrowser.lIgnoreErrors=.T.
  2843.             IF .lFolderItem AND NOT EMPTY(.cPicture)
  2844.                 oNode.Image=lcPicture
  2845.             ELSE
  2846.                 IF NOT EMPTY(.cFolderPicture)
  2847.                     lnImageIndex=toBrowser.GetImageIndex(.T.,.cFolderPicture)
  2848.                     IF lnImageIndex=0
  2849.                         .cFolderPicture=lcPicture
  2850.                     ENDIF
  2851.                 ELSE
  2852.                     IF NOT .oFolder.lFolder AND NOT EMPTY(.oFolder.cFolderPicture)
  2853.                         .cFolderPicture=.oFolder.cFolderPicture
  2854.                     ELSE
  2855.                         .cFolderPicture=lcPicture
  2856.                     ENDIF
  2857.                 ENDIF
  2858.                 oNode.Image=.cFolderPicture
  2859.             ENDIF
  2860.             toBrowser.lIgnoreErrors=llIgnoreErrors
  2861.         ENDIF
  2862.         IF EMPTY(.cToolTipText)
  2863.             lcItemType=PROPER(IIF(EMPTY(.cItemType),.cType,.cItemType))
  2864.             IF lnType=1
  2865.                 .cToolTipText=.cText+" ("+lcItemType+"):"+"  "+lcCatalog
  2866.             ELSE
  2867.                 .cToolTipText=.cText+" ("+lcItemType+")"
  2868.             ENDIF
  2869.         ENDIF
  2870.         IF EMPTY(.cStatusBarText)
  2871.             .cStatusBarText=.cToolTipText
  2872.         ENDIF
  2873.     ENDWITH
  2874.     oNode=.NULL.
  2875.     IF lnType=4 OR lnType=5
  2876.         IF oItem.oParent.nIndex<1
  2877.             oTHIS=.NULL.
  2878.             oParent=.NULL.
  2879.             oItem.Release
  2880.             oItem=.NULL.
  2881.             LOOP
  2882.         ENDIF
  2883.         llMatch=.F.
  2884.         FOR lnCount = 1 TO toBrowser.nItemCount
  2885.             IF VARTYPE(toBrowser.aItemList[lnCount])#"O"
  2886.                 LOOP
  2887.             ENDIF
  2888.             WITH toBrowser.aItemList[lnCount]
  2889.                 IF NOT .cID==oItem.cID
  2890.                     LOOP
  2891.                 ENDIF
  2892.                 llMatch=.T.
  2893.                 lnIndex=lnCount
  2894.                 .oObject=.NULL.
  2895.                 .oSource=.NULL.
  2896.                 .oTarget=.NULL.
  2897.                 .oControl=.NULL.
  2898.                 .oHost=.NULL.
  2899.                 .oAction=.NULL.
  2900.                 .oShortCutMenu=.NULL.
  2901.                 .oLink=.NULL.
  2902.                 .oFolder=.NULL.
  2903.                 .oParent=.NULL.
  2904.                 toBrowser.aItemList[lnCount]=.NULL.
  2905.                 EXIT
  2906.             ENDWITH
  2907.         ENDFOR
  2908.         IF NOT llMatch
  2909.             toBrowser.nItemCount=toBrowser.nItemCount+1
  2910.             lnIndex=toBrowser.nItemCount
  2911.             DIMENSION toBrowser.aItemList[lnIndex]
  2912.         ENDIF
  2913.         oFolder.nItemCount=oFolder.nItemCount+1
  2914.         IF oFolder.nItemCount=1
  2915.             oFolder.nItemIndex=lnIndex
  2916.         ENDIF
  2917.         DIMENSION oFolder.aItemIndexes[oFolder.nItemCount]
  2918.         oFolder.aItemIndexes[oFolder.nItemCount]=lnIndex
  2919.         oItem.nIndex=lnIndex
  2920.         oItem.nItemIndex=oFolder.nItemCount
  2921.         oItem.oControl=toBrowser.oleItems
  2922.         toBrowser.aItemList[lnIndex]=oItem
  2923.     ELSE
  2924.         toBrowser.nFolderCount=toBrowser.nFolderCount+1
  2925.         DIMENSION toBrowser.aFolderList[toBrowser.nFolderCount]
  2926.         oItem.nIndex=toBrowser.nFolderCount
  2927.         oItem.oControl=toBrowser.oleFolderList
  2928.         toBrowser.aFolderList[toBrowser.nFolderCount]=oItem
  2929.     ENDIF
  2930.     oTHIS=.NULL.
  2931.     oParent=.NULL.
  2932.     oItem=.NULL.
  2933. ENDSCAN
  2934. oNode=.NULL.
  2935. oTHIS=.NULL.
  2936. oParent=.NULL.
  2937. oItem=.NULL.
  2938. oFolder=.NULL.
  2939. toBrowser.RefreshLinks(llRefreshFolders)
  2940. brwReleaseClassLibraries(toBrowser)
  2941. SELECT 0
  2942. ENDFUNC
  2943.  
  2944.  
  2945.  
  2946. FUNCTION brwRefreshItemList(toBrowser)
  2947. LOCAL oNode,oParent,oFolder,oItem,lcItem,lnItemCount
  2948. LOCAL lcPicture,lcCatalog,lcID,lcText,lcClassName,lcClassLibrary
  2949. LOCAL lcObjName,llLockScreen,lcItemType,lcURL,lcFileName,lcFileExt
  2950. LOCAL lnImageIndex,lnIndex,lnLastIndex,lnCount,lnFileItemCount
  2951. LOCAL lcItemTypes,lcProperties,lnAtPos,lnLastSelect,llIgnoreErrors
  2952. LOCAL laFileItems[1,2]
  2953.  
  2954. IF toBrowser.lRelease OR toBrowser.lBrowser
  2955.     toBrowser.vResult=.F.
  2956.     RETURN toBrowser.vResult
  2957. ENDIF
  2958. SET DATASESSION TO toBrowser.DataSessionID
  2959. IF NOT USED(toBrowser.cGallery)
  2960.     toBrowser.vResult=.F.
  2961.     RETURN toBrowser.vResult
  2962. ENDIF
  2963. lnFileItemCount=0
  2964. WITH toBrowser
  2965.     .oItem=.NULL.
  2966.     .oItemSource=.NULL.
  2967.     .nItemListIndex=-1
  2968.     .imgClassIcon.Visible=.F.
  2969.     .cmdClassIcon.Visible=.F.
  2970.     .edtItemDesc.Value=""
  2971.     IF .nFolderCount<=0
  2972.         .oFolder=.NULL.
  2973.         .oFolderSource=.NULL.
  2974.         .oCatalog=.NULL.
  2975.         .oCatalogSource=.NULL.
  2976.         .nFolderListIndex=-1
  2977.         .nLastFolderListIndex=-1
  2978.         RETURN
  2979.     ENDIF
  2980.     lnLastIndex=.nLastFolderListIndex
  2981.     IF lnLastIndex>0
  2982.         lcPicture=.oleFolderList.object.Nodes[lnLastIndex].Image
  2983.         DO CASE
  2984.             CASE lcPicture=="openctlg.ico"
  2985.                 lcPicture="catalog.ico"
  2986.             CASE lcPicture=="openfldr.ico"
  2987.                 lcPicture="folder.ico"
  2988.             CASE lcPicture=="cofldr.ico"
  2989.                 lcPicture="cfldr.ico"
  2990.             CASE lcPicture=="dofldr.ico"
  2991.                 lcPicture="dfldr.ico"
  2992.             CASE lcPicture=="fofldr.ico"
  2993.                 lcPicture="ffldr.ico"
  2994.             CASE lcPicture=="pofldr.ico"
  2995.                 lcPicture="pfldr.ico"
  2996.             OTHERWISE
  2997.                 lcPicture=""
  2998.         ENDCASE
  2999.         IF NOT EMPTY(lcPicture)
  3000.             .oleFolderList.object.Nodes[lnLastIndex].Image=lcPicture
  3001.         ENDIF
  3002.     ENDIF
  3003. ENDWITH
  3004. IF toBrowser.nFolderListIndex<1
  3005.     WITH toBrowser
  3006.         .nFolderListIndex=1
  3007.         .nLastFolderListIndex=-1
  3008.         .oleFolderList.object.Nodes[1].Selected=.T.
  3009.         .oCatalogSource=.aFolderList[1]
  3010.         .oCatalog=.oCatalogSource.oLink
  3011.         .oFolderSource=oCatalogSource
  3012.         .oFolder=.oCatalog
  3013.         .oItemSource=.oFolderSource
  3014.         .oItem=.oFolder
  3015.         .cCatalog=.oItem.cSourceCatalog
  3016.     ENDWITH
  3017. ENDIF
  3018. WITH toBrowser
  3019.     .nFolderListIndex=.oleFolderList.object.SelectedItem.Index
  3020.     oFolder=.aFolderList[.nFolderListIndex]
  3021.     .oFolderSource=oFolder
  3022.     oFolder=oFolder.oLink
  3023.     .oFolder=oFolder
  3024.     IF oFolder.lWebView
  3025.         SET MESSAGE TO M_REFRESH_WEB_VIEW_LOC+" ..."
  3026.     ELSE
  3027.         SET MESSAGE TO M_REFRESH_ITEM_LIST_LOC+" ..."
  3028.     ENDIF
  3029.     lnItemCount=oFolder.nItemCount
  3030.     IF lnItemCount<=0 OR .nItemListIndex<1
  3031.         .oItemSource=.oFolderSource
  3032.         .oItem=.oFolder
  3033.         .cCatalog=.oItem.cSourceCatalog
  3034.     ENDIF
  3035.     oParent=.oFolderSource
  3036.     DO WHILE NOT oParent.cID==oParent.oFolder.cID
  3037.         oParent=oParent.oFolder
  3038.     ENDDO
  3039.     .oCatalogSource=oParent
  3040.     .oCatalog=oParent.oLink
  3041.     lnIndex=oFolder.nIndex
  3042.     IF lnIndex>0
  3043.         lcPicture=.oleFolderList.object.Nodes[lnIndex].Image
  3044.         DO CASE
  3045.             CASE lcPicture=="catalog.ico"
  3046.                 lcPicture="openctlg.ico"
  3047.             CASE lcPicture=="folder.ico"
  3048.                 lcPicture="openfldr.ico"
  3049.             CASE lcPicture=="cfldr.ico"
  3050.                 lcPicture="cofldr.ico"
  3051.             CASE lcPicture=="dfldr.ico"
  3052.                 lcPicture="dofldr.ico"
  3053.             CASE lcPicture=="ffldr.ico"
  3054.                 lcPicture="fofldr.ico"
  3055.             CASE lcPicture=="pfldr.ico"
  3056.                 lcPicture="pofldr.ico"
  3057.             OTHERWISE
  3058.                 lcPicture=""
  3059.         ENDCASE
  3060.         IF NOT EMPTY(lcPicture)
  3061.             .oleFolderList.object.Nodes[lnIndex].Image=lcPicture
  3062.         ENDIF
  3063.     ENDIF
  3064.     .oleItems.object.ListItems.Clear
  3065.     IF oFolder.lWebView AND NOT .lWebBrowser
  3066.         .SetWebBrowser
  3067.     ENDIF
  3068.     IF .lWebBrowser
  3069.         .oleItems.Visible=.F.
  3070.         .oleWebBrowser.Visible=.F.
  3071.         .lWebView=oFolder.lWebView
  3072.     ELSE
  3073.         .lWebView=.F.
  3074.     ENDIF
  3075.     IF NOT .lRefreshBrowserMode
  3076.         .SetBusyState(.T.)
  3077.         .oleItems.Visible=.F.
  3078.         .oleItems.Top=.oleItems.Top+9999
  3079.     ENDIF
  3080.     llLockScreen=.LockScreen
  3081.     .Draw
  3082.     .LockScreen=.T.
  3083. ENDWITH
  3084. IF oFolder.nItemCount=-1
  3085.     toBrowser.RefreshObjects(oFolder)
  3086. ENDIF
  3087. FOR lnCount = 1 TO IIF(toBrowser.lWebView,0,oFolder.nItemCount)
  3088.     IF toBrowser.lRelease
  3089.         SELECT 0
  3090.         SET MESSAGE TO
  3091.         toBrowser.vResult=.F.
  3092.         RETURN toBrowser.vResult
  3093.     ENDIF
  3094.     lnIndex=oFolder.aItemIndexes[lnCount]
  3095.     oItem=toBrowser.aItemList[lnIndex]
  3096.     lcPicture=""
  3097.     DO CASE
  3098.         CASE VARTYPE(oItem)=="O"
  3099.             IF NOT oItem.Visible OR oItem.lDeleted
  3100.                 oItem=.NULL.
  3101.                 LOOP
  3102.             ENDIF
  3103.             lcPicture=oItem.cPicture
  3104.             IF oItem.lFolderItem
  3105.                 lcPicture=oItem.cFolderPicture
  3106.                 lcItemType="Folder"
  3107.             ELSE
  3108.                 lcItemType=oItem.cItemType
  3109.                 IF EMPTY(lcItemType)
  3110.                     oParent=oItem
  3111.                     DO WHILE NOT oParent.cID==oParent.oFolder.oLink.cID
  3112.                         oParent=oParent.oFolder.oLink
  3113.                         IF NOT EMPTY(oParent.cItemType)
  3114.                             lcItemType=oParent.cItemType
  3115.                             EXIT
  3116.                         ENDIF
  3117.                     ENDDO
  3118.                     oParent=.NULL.
  3119.                     IF EMPTY(lcItemType)
  3120.                         lcItemType="Item"
  3121.                     ENDIF
  3122.                 ENDIF
  3123.             ENDIF
  3124.             IF oItem.cType=="ITEM"
  3125.                 lcPicture=oItem.cPicture
  3126.                 IF EMPTY(lcPicture) AND NOT oItem.lFolderItem
  3127.                     oParent=oItem
  3128.                     DO WHILE NOT oParent.cID==oParent.oFolder.oLink.cID
  3129.                         oParent=oParent.oFolder.oLink
  3130.                         IF oParent.lCatalog
  3131.                             EXIT
  3132.                         ENDIF
  3133.                         IF NOT EMPTY(oParent.cPicture)
  3134.                             lcPicture=oParent.cPicture
  3135.                             EXIT
  3136.                         ENDIF
  3137.                     ENDDO
  3138.                     oParent=.NULL.
  3139.                 ENDIF
  3140.             ENDIF
  3141.             lcCatalog=oItem.cCatalog
  3142.             lcID=oItem.cID
  3143.             lcText=oItem.cText
  3144.         CASE VARTYPE(oItem)=="C"
  3145.             lcItem=oItem
  3146.             lcClassName=LOWER(MLINE(lcItem,3))
  3147.             IF EMPTY(lcClassName)
  3148.                 lcClassName=LOWER(oFolder.cItemClass)
  3149.                 IF EMPTY(lcClassName)
  3150.                     LOOP
  3151.                 ENDIF
  3152.             ENDIF
  3153.             lcClassLibrary=LOWER(MLINE(lcItem,4))
  3154.             lcFileName=LOWER(MLINE(lcItem,5))
  3155.             lcFileExt=JUSTEXT(lcFileName)
  3156.             IF NOT EMPTY(lcFileExt)
  3157.                 lnAtPos=ASCAN(laFileItems,lcFileExt)
  3158.                 IF lnAtPos>0
  3159.                     lcClassName=laFileItems[lnAtPos+1]
  3160.                 ELSE
  3161.                     lnLastSelect=SELECT()
  3162.                     SELECT itemtypes
  3163.                     SET ORDER TO Class
  3164.                     SEEK lcClassName
  3165.                     IF NOT EOF()
  3166.                         lcItemTypes=ALLTRIM(ItemTypes)
  3167.                         lnAtPos=ATC(CR+lcFileExt+"=",lcItemTypes)
  3168.                         IF lnAtPos>0
  3169.                             lcClassName=LOWER(MLINE(SUBSTR(lcItemTypes,lnAtPos+LEN(lcFileExt)+2),1))
  3170.                             lnFileItemCount=lnFileItemCount+1
  3171.                             DIMENSION laFileItems[lnFileItemCount,2]
  3172.                             laFileItems[lnFileItemCount,1]=lcFileExt
  3173.                             laFileItems[lnFileItemCount,2]=lcClassName
  3174.                         ENDIF
  3175.                     ENDIF
  3176.                 ENDIF
  3177.                 SELECT (lnLastSelect)
  3178.             ENDIF
  3179.             lcObjName="o"+lcClassName
  3180.             WITH toBrowser.oNodes
  3181.                 IF TYPE("toBrowser.oNodes."+lcObjName)#"O"
  3182.                     .NewObject(lcObjName,lcClassName,lcClassLibrary)
  3183.                     IF TYPE("toBrowser.oNodes."+lcObjName)#"O"
  3184.                         LOOP
  3185.                     ENDIF
  3186.                 ENDIF
  3187.                 oItem=.&lcObjName
  3188.             ENDWITH
  3189.             IF VARTYPE(oItem)#"O"
  3190.                 LOOP
  3191.             ENDIF
  3192.             oItem.oParent=oParent
  3193.             oItem.oFolder=oFolder
  3194.             lnAtPos=AT(CHR(0),lcItem)
  3195.             lcProperties=IIF(lnAtPos>0,SUBSTR(lcItem,lnAtPos+1),"")
  3196.             oItem.SetProperties(lcProperties)
  3197.             lcItemType=oItem.cItemType
  3198.             lcID=LOWER(SYS(2015))
  3199.             lcText=MLINE(lcItem,1)
  3200.             lcPicture=LOWER(MLINE(lcItem,2))
  3201.             IF EMPTY(lcPicture)
  3202.                 lcPicture=oItem.cPicture
  3203.             ENDIF
  3204.             IF NOT EMPTY(lcPicture) AND EMPTY(JUSTFNAME(lcPicture))
  3205.                 lcPicture=oItem.cPicture
  3206.             ENDIF
  3207.             IF EMPTY(lcPicture)
  3208.                 IF NOT EMPTY(oItem.cPicture)
  3209.                     lcPicture=LOWER(FULLPATH(oItem.cPicture,lcClassLibrary))
  3210.                 ENDIF
  3211.                 IF EMPTY(lcPicture)
  3212.                     oParent=oFolder
  3213.                     DO WHILE NOT oParent.cID==oParent.oFolder.oLink.cID
  3214.                         IF NOT EMPTY(oParent.cPicture)
  3215.                             lcPicture=oParent.cPicture
  3216.                             EXIT
  3217.                         ENDIF
  3218.                         oParent=oParent.oFolder.oLink
  3219.                         IF oParent.lCatalog
  3220.                             EXIT
  3221.                         ENDIF
  3222.                     ENDDO
  3223.                 ENDIF
  3224.                 IF NOT EMPTY(lcPicture)
  3225.                     lcItem=STRTRAN(lcItem,CR+CR,CR+lcPicture+CR,1,1)
  3226.                     toBrowser.aItemList[lnIndex]=lcItem
  3227.                 ENDIF
  3228.             ENDIF
  3229.             IF EMPTY(lcPicture)
  3230.                 IF TYPE([GETPEM(lcClassName,"cPicture")])=="U"
  3231.                     NEWOBJECT(lcClassName,lcClassLibrary)
  3232.                 ENDIF
  3233.                 IF TYPE([GETPEM(lcClassName,"cPicture")])=="C"
  3234.                     lcPicture=GETPEM(lcClassName,"cPicture")
  3235.                 ENDIF
  3236.             ENDIF
  3237.             IF NOT EMPTY(lcPicture) AND NOT ":"$lcPicture AND NOT "\\"$lcPicture
  3238.                 lcPicture=toBrowser.cDefaultCatalogPath+lcPicture
  3239.             ENDIF
  3240.             oItem.cPicture=lcPicture
  3241.             lcCatalog=oFolder.cCatalog
  3242.         OTHERWISE
  3243.             LOOP
  3244.     ENDCASE
  3245.     oNode=toBrowser.oleItems.object.ListItems.Add(,lcCatalog+"_"+lcID,lcText)
  3246.     IF ISNULL(oNode)
  3247.         toBrowser.MsgBox(M_ITEM_LOC+" ("+lcID+") "+M_COULD_NOT_BE_CREATED_LOC+".",16)
  3248.         oItem=.NULL.
  3249.         LOOP
  3250.     ENDIF
  3251.     llIgnoreErrors=toBrowser.lIgnoreErrors
  3252.     toBrowser.lIgnoreErrors=.T.
  3253.     lnImageIndex=IIF(EMPTY(lcPicture),0,toBrowser.GetImageIndex(,lcPicture))
  3254.     IF lnImageIndex=0
  3255.         lcPicture="item.ico"
  3256.         IF VARTYPE(oItem)=="O"
  3257.             oItem.nNodeIndex=oNode.Index
  3258.             IF oItem.cType=="FOLDER" OR oItem.lFolderItem
  3259.                 DO CASE
  3260.                     CASE oItem.lCatalog
  3261.                         lcPicture="catalog.ico"
  3262.                     CASE oItem.lWebView
  3263.                         lcPicture=toBrowser.GetWebIcon(oItem.cFileName)
  3264.                     OTHERWISE
  3265.                         lcPicture="folder.ico"
  3266.                 ENDCASE
  3267.             ENDIF
  3268.             IF NOT oItem.Enabled
  3269.                 oNode.Ghosted=.T.
  3270.             ENDIF
  3271.         ENDIF
  3272.         lnImageIndex=toBrowser.GetImageIndex(,lcPicture)
  3273.     ENDIF
  3274.     oNode.Icon=lnImageIndex
  3275.     oNode.SmallIcon=lnImageIndex
  3276.     oNode.SubItems[1]=lcItemType
  3277.     oItem.nNodeIndex=oNode.Index
  3278.     toBrowser.lIgnoreErrors=llIgnoreErrors
  3279.     oItem=.NULL.
  3280. ENDFOR
  3281. WITH toBrowser
  3282.     .RefreshItem
  3283.     IF .oleItems.object.View#.nImageView
  3284.         .oleItems.object.View=.nImageView
  3285.     ENDIF
  3286.     IF .lWebView
  3287.         .oleWebBrowser.Navigate(.cBlankHTMLFile)
  3288.         DOEVENTS
  3289.         IF NOT EMPTY(oFolder.cFileName)
  3290.             .oleWebBrowser.Navigate(ALLTRIM(oFolder.cFileName))
  3291.         ENDIF
  3292.         .Draw
  3293.         DOEVENTS
  3294.         .oleWebBrowser.Visible=.T.
  3295.     ENDIF
  3296.     IF NOT .lRefreshBrowserMode
  3297.         .oleItems.Visible=(NOT .lWebView)
  3298.         .oleItems.Top=.oleItems.Top-9999
  3299.         .SetBusyState(.F.)
  3300.     ENDIF
  3301.     .RefreshButtons
  3302.     .LockScreen=llLockScreen
  3303. ENDWITH
  3304. oFolder=.NULL.
  3305. SELECT 0
  3306. IF NOT toBrowser.lRefreshBrowserMode
  3307.     SET MESSAGE TO
  3308. ENDIF
  3309. ENDFUNC
  3310.  
  3311.  
  3312.  
  3313. FUNCTION brwRefreshItem(toBrowser)
  3314. LOCAL oFolder,oItem,lcItem,lcID,lcText,lcPicture,lcFileName,lcClass
  3315. LOCAL lnItemIndex,lcVarType,lnIndex,lnCount,lcClassName,lcClassLibrary
  3316. LOCAL lcItemTypes,lcFileExt,lcProperties,lnAtPos,lnLastSelect
  3317.  
  3318. IF toBrowser.lRelease OR toBrowser.lBrowser
  3319.     toBrowser.vResult=.F.
  3320.     RETURN toBrowser.vResult
  3321. ENDIF
  3322. WITH toBrowser
  3323.     .oItem=.NULL.
  3324.     .oItemSource=.NULL.
  3325.     oItem=.NULL.
  3326.     oFolder=.oFolder
  3327. ENDWITH
  3328. SET DATASESSION TO toBrowser.DataSessionID
  3329. IF NOT USED(toBrowser.cGallery)
  3330.     toBrowser.vResult=.F.
  3331.     RETURN toBrowser.vResult
  3332. ENDIF
  3333. IF NOT ISNULL(oFolder)
  3334.     lnIndex=toBrowser.nItemListIndex
  3335.     IF lnIndex>0
  3336.         FOR lnCount = 1 TO oFolder.nItemCount
  3337.             lnItemIndex=oFolder.aItemIndexes[lnCount]
  3338.             oItem=toBrowser.aItemList[lnItemIndex]
  3339.             IF lnItemIndex>oFolder.aItemIndexes[lnIndex]
  3340.                 EXIT
  3341.             ENDIF
  3342.             IF VARTYPE(oItem)=="O" AND (NOT oItem.Visible OR oItem.lDeleted)
  3343.                 lnIndex=lnIndex+1
  3344.             ENDIF
  3345.         ENDFOR
  3346.     ELSE
  3347.         IF TYPE("toBrowser.oleItems.SelectedItem.Selected")=="L" AND ;
  3348.                 toBrowser.oleItems.SelectedItem.Selected
  3349.             toBrowser.oleItems.SelectedItem.Selected=.F.
  3350.         ENDIF
  3351.     ENDIF
  3352.     WITH toBrowser
  3353.         IF ISNULL(oItem)
  3354.             oItem=toBrowser.oFolderSource
  3355.         ELSE
  3356.             oItem=.aItemList[oFolder.aItemIndexes[lnIndex]]
  3357.         ENDIF
  3358.         lcVarType=VARTYPE(oItem)
  3359.         IF lcVarType=="C"
  3360.             lcItem=oItem
  3361.             oItem=.NULL.
  3362.             lcClassName=LOWER(MLINE(lcItem,3))
  3363.             IF EMPTY(lcClassName)
  3364.                 lcClassName=.cItemClass
  3365.             ENDIF
  3366.             lcClassLibrary=LOWER(MLINE(lcItem,4))
  3367.             IF EMPTY(lcClassLibrary)
  3368.                 lcClassLibrary=.cDefaultCatalogClassLibrary
  3369.             ENDIF
  3370.             lcText=MLINE(lcItem,1)
  3371.             lcPicture=MLINE(lcItem,2)
  3372.             IF NOT EMPTY(lcPicture) AND NOT ":"$lcPicture AND NOT "\\"$lcPicture
  3373.                 lcPicture=toBrowser.cDefaultCatalogPath+lcPicture
  3374.             ENDIF
  3375.             lcFileName=MLINE(lcItem,5)
  3376.             lcClass=MLINE(lcItem,6)
  3377.             lnAtPos=AT(CHR(0),lcItem)
  3378.             lcProperties=IIF(lnAtPos>0,SUBSTR(lcItem,lnAtPos+1),"")
  3379.             lcFileExt=JUSTEXT(lcFileName)
  3380.             IF NOT EMPTY(lcFileExt)
  3381.                 lnLastSelect=SELECT()
  3382.                 SELECT itemtypes
  3383.                 SET ORDER TO Class
  3384.                 SEEK lcClassName
  3385.                 IF NOT EOF()
  3386.                     lcItemTypes=ALLTRIM(ItemTypes)
  3387.                     lnAtPos=ATC(CR+lcFileExt+"=",lcItemTypes)
  3388.                     IF lnAtPos>0
  3389.                         lcClassName=LOWER(MLINE(SUBSTR(lcItemTypes,lnAtPos+LEN(lcFileExt)+2),1))
  3390.                     ENDIF
  3391.                 ENDIF
  3392.                 SELECT (lnLastSelect)
  3393.             ENDIF
  3394.             oItem=NEWOBJECT(lcClassName,lcClassLibrary)
  3395.             IF VARTYPE(oItem)=="O"
  3396.                 WITH oItem
  3397.                     .oHost=toBrowser
  3398.                     .cID2=STRTRAN(JUSTSTEM(oFolder.cCatalog)," ","_")
  3399.                     .cID=.cID2+"!"+LOWER(SYS(2015))
  3400.                     .oParent=oFolder
  3401.                     .oFolder=oFolder
  3402.                     .cParent=oFolder.cID
  3403.                     IF .oParent.lDynamic
  3404.                         .lDynamic=.T.
  3405.                     ENDIF
  3406.                     .cProperties=lcProperties
  3407.                     IF NOT EMPTY(lcText)
  3408.                         .cText=lcText
  3409.                     ENDIF
  3410.                     IF EMPTY(lcPicture)
  3411.                         lcPicture=.cPicture
  3412.                     ENDIF
  3413.                     IF NOT EMPTY(lcPicture) AND NOT ":"$lcPicture AND NOT "\\"$lcPicture
  3414.                         lcPicture=toBrowser.cDefaultCatalogPath+lcPicture
  3415.                     ENDIF
  3416.                     .cPicture=lcPicture
  3417.                     .RefreshPicture
  3418.                     IF NOT EMPTY(lcFileName)
  3419.                         .cFileName=lcFileName
  3420.                     ENDIF
  3421.                     IF NOT EMPTY(lcClass)
  3422.                         .cClass=lcClass
  3423.                     ENDIF
  3424.                     IF NOT EMPTY(lcClassName)
  3425.                         .cClassName=lcClassName
  3426.                     ENDIF
  3427.                     IF NOT EMPTY(lcClassLibrary)
  3428.                         .cClassLib=lcClassLibrary
  3429.                     ENDIF
  3430.                     .oParent=oFolder
  3431.                     .cParent=.oParent.cID
  3432.                     IF .oParent.lDynamic
  3433.                         .lDynamic=.T.
  3434.                     ENDIF
  3435.                     .oLink=oItem
  3436.                     .oAction=oItem
  3437.                     .oShortCutMenu=.oHost.oShortCutMenu
  3438.                     .oShortCutMenu.oHost=oItem
  3439.                     .cCatalog=oFolder.cCatalog
  3440.                     .cCatalogPath=oFolder.cCatalogPath
  3441.                     .cAlias=oFolder.cAlias
  3442.                     .cSourceAlias=oFolder.cSourceAlias
  3443.                     .cSourceCatalog=oFolder.cSourceCatalog
  3444.                     .cSourceCatalogPath=oFolder.cSourceCatalogPath
  3445.                     .nSourceRecNo=-1
  3446.                     .nRecNo=-1
  3447.                     .SetProperties(.cProperties)
  3448.                     .cItemType=ALLTRIM(.cItemType)
  3449.                     .InitProperties
  3450.                     IF EMPTY(.cDesc)
  3451.                         .cDesc=.cText
  3452.                     ENDIF
  3453.                 ENDWITH
  3454.             ENDIF
  3455.         ENDIF
  3456.         .oItemSource=oItem
  3457.         .oItem=.oItemSource.oLink
  3458.         .cCatalog=.oItem.cSourceCatalog
  3459.     ENDWITH
  3460. ENDIF
  3461. IF USED(oItem.cAlias) AND BETWEEN(oItem.nRecNo,1,RECCOUNT(oItem.cAlias))
  3462.     GO oItem.nRecNo IN (oItem.cAlias)
  3463. ENDIF
  3464. oItem=.NULL.
  3465. oFolder=.NULL.
  3466. WITH toBrowser
  3467.     IF NOT .lRefreshBrowserMode
  3468.         .RefreshCaption
  3469.     ENDIF
  3470.     .cmdClassIcon.Refresh
  3471.     .edtItemDesc.Refresh
  3472. ENDWITH
  3473. ENDFUNC
  3474.  
  3475.  
  3476.  
  3477. FUNCTION brwRefreshLinks(toBrowser,tlRefreshFolders)
  3478. LOCAL oFolder,oItem,oItem2,oLink,lcLink,lcType,lcID,lnCount,lnCount2
  3479.  
  3480. IF toBrowser.lBrowser
  3481.     toBrowser.vResult=.F.
  3482.     RETURN toBrowser.vResult
  3483. ENDIF
  3484. IF tlRefreshFolders
  3485.     FOR lnCount = 1 TO toBrowser.nFolderCount
  3486.         oFolder=toBrowser.aFolderList[lnCount]
  3487.         IF ISNULL(oFolder)
  3488.             LOOP
  3489.         ENDIF
  3490.         lcLink=oFolder.cLink
  3491.         oFolder.oLink=oFolder
  3492.         IF EMPTY(lcLink)
  3493.             LOOP
  3494.         ENDIF
  3495.         lcType=oFolder.cType
  3496.         oLink=.NULL.
  3497.         FOR lnCount2 = 1 TO toBrowser.nFolderCount
  3498.             IF toBrowser.aFolderList[lnCount2].cID==lcLink
  3499.                 oLink=toBrowser.aFolderList[lnCount2].oLink
  3500.                 EXIT
  3501.             ENDIF
  3502.         ENDFOR
  3503.         IF NOT ISNULL(oLink)
  3504.             oFolder.oLink=oLink
  3505.             oLink=.NULL.
  3506.         ENDIF
  3507.     ENDFOR
  3508. ELSE
  3509.     FOR lnCount = 1 TO toBrowser.nItemCount
  3510.         oItem=toBrowser.aItemList[lnCount]
  3511.         IF VARTYPE(oItem)#"O" OR NOT oItem.Visible OR oItem.lDeleted
  3512.             LOOP
  3513.         ENDIF
  3514.         oItem.oLink=oItem
  3515.         lcLink=oItem.cLink
  3516.         IF EMPTY(lcLink)
  3517.             LOOP
  3518.         ENDIF
  3519.         lcType=oItem.cType
  3520.         lcID=oItem.cID
  3521.         oLink=.NULL.
  3522.         FOR lnCount2 = 1 TO toBrowser.nItemCount
  3523.             oItem2=toBrowser.aItemList[lnCount2]
  3524.             IF VARTYPE(oItem2)#"O"
  3525.                 LOOP
  3526.             ENDIF
  3527.             IF oItem2.cID==lcLink
  3528.                 oLink=oItem2.oLink
  3529.                 EXIT
  3530.             ENDIF
  3531.         ENDFOR
  3532.         IF ISNULL(oLink)
  3533.             oLink=toBrowser.GetItem(lcLink)
  3534.         ENDIF
  3535.         IF NOT ISNULL(oLink)
  3536.             oItem.oLink=oLink.oLink
  3537.             oLink=.NULL.
  3538.         ENDIF
  3539.     ENDFOR
  3540. ENDIF
  3541. oItem=.NULL.
  3542. oFolder=.NULL.
  3543. ENDFUNC
  3544.  
  3545.  
  3546.  
  3547. FUNCTION brwClearProperties(toBrowser,tlItemsOnly)
  3548. LOCAL lcAlias,lcClass,lnClassCount,llRefreshBrowserMode,llBrowser,llBrowserUsed
  3549. LOCAL lnCount,lcFileName,lnFileNo,oItem
  3550. LOCAL laClasses[1]
  3551.  
  3552. _screen._oCGClipBoard.ReleaseObjects
  3553. WITH toBrowser
  3554.     llRefreshBrowserMode=.lRefreshBrowserMode
  3555.     .lRefreshBrowserMode=.T.
  3556.     llBrowser=.lBrowser
  3557.     llBrowserUsed=USED("browser")
  3558.     IF .lRelease
  3559.         IF VARTYPE(.oView)=="O"
  3560.             .oView.Release
  3561.         ENDIF
  3562.         .oView=.NULL.
  3563.     ENDIF
  3564. ENDWITH
  3565. IF toBrowser.lBrowser OR toBrowser.lRelease
  3566.     toBrowser.lBrowser=.T.
  3567.     IF toBrowser.lRelease AND llBrowserUsed
  3568.         FOR lnCount = 1 TO toBrowser.nFileCount
  3569.             toBrowser.cFileName=toBrowser.aFiles[lnCount]
  3570.             IF NOT EMPTY(toBrowser.cFileName)
  3571.                 toBrowser.RefreshRecNo
  3572.                 SELECT browser
  3573.                 REPLACE FormCount WITH MAX(FormCount-1,0)
  3574.                 SELECT 0
  3575.             ENDIF
  3576.         ENDFOR
  3577.     ENDIF
  3578.     WITH toBrowser
  3579.         FOR lnFileNo = 1 TO .nFileCount
  3580.             lcFileName=.aFiles[lnFileNo]
  3581.             IF EMPTY(lcFileName)
  3582.                 LOOP
  3583.             ENDIF
  3584.             lcAlias="metadata"+ALLTRIM(STR(ASCAN(.aFiles,lcFileName)))
  3585.             IF USED(lcAlias)
  3586.                 USE IN (lcAlias)
  3587.             ENDIF
  3588.         ENDFOR
  3589.         IF NOT EMPTY(.cAlias) AND USED(.cAlias)
  3590.             USE IN (.cAlias)
  3591.         ENDIF
  3592.         DIMENSION .aFiles[1]
  3593.         .aFiles=.F.
  3594.         .nFileCount=1
  3595.         .cFileName=""
  3596.         .cFileNamePath=""
  3597.         .lFileMode=.T.
  3598.         .lVCXSCXMode=.F.
  3599.         .lSCXMode=.F.
  3600.         .cAlias=""
  3601.         .nClassCount=0
  3602.         .nClassListIndex=-1
  3603.         .nMemberListIndex=-1
  3604.         .nClassTimeStamp=0
  3605.         .cClass=""
  3606.         .cParentClass=""
  3607.         .cClassLibrary=""
  3608.         .cBaseClass=""
  3609.         .lBrowser=llBrowser
  3610.     ENDWITH
  3611.     IF toBrowser.lRelease
  3612.         IF toBrowser.nFolderCount>0
  3613.             oItem=toBrowser.GetFolder("VFPGlry!VFPCats")
  3614.             IF VARTYPE(oItem)=="O" AND oItem.lCatalog
  3615.                 oItem.oHost=toBrowser
  3616.                 oItem.Cleanup(.T.)
  3617.                 oItem.Release
  3618.                 oItem=.NULL.
  3619.             ENDIF
  3620.         ENDIF
  3621.     ELSE
  3622.         IF toBrowser.lInitialized
  3623.             toBrowser.SavePreferences
  3624.         ENDIF
  3625.         toBrowser.lRefreshBrowserMode=llRefreshBrowserMode
  3626.         RETURN
  3627.     ENDIF
  3628. ENDIF
  3629. IF NOT tlItemsOnly
  3630.     WITH toBrowser
  3631.         IF NOT .lSwitchViewMode
  3632.             IF VARTYPE(.oView)=="O"
  3633.                 .oView.Release
  3634.             ENDIF
  3635.             .oView=.NULL.
  3636.             .CloseViews(.T.)
  3637.             .cboViewType.ListIndex=1
  3638.             DO WHILE .cboViewType.ListCount>1
  3639.                 .cboViewType.RemoveItem(2)
  3640.             ENDDO
  3641.             .cGallery="view_default"
  3642.             .CreateCatalog(.cGallery)
  3643.             .cCatalog=IIF(USED("catalog1"),LOWER(DBF("catalog1")),"")
  3644.         ENDIF
  3645.         .lBrowser=.F.
  3646.         .oItem=.NULL.
  3647.         .oItemSource=.NULL.
  3648.         .oFolder=.NULL.
  3649.         .oFolderSource=.NULL.
  3650.         .oCatalog=.NULL.
  3651.         .oCatalogSource=.NULL.
  3652.         IF .lRelease AND llBrowserUsed AND NOT EMPTY(.cCatalog)
  3653.             toBrowser.RefreshPrefRecNo
  3654.             SELECT browser
  3655.             REPLACE FormCount WITH MAX(FormCount-1,0)
  3656.             SELECT 0
  3657.         ENDIF
  3658.     ENDWITH
  3659. ENDIF
  3660. brwReleaseClassLibraries(toBrowser)
  3661. lnClassCount=0
  3662. FOR lnCount = toBrowser.nItemCount TO 1 STEP -1
  3663.     oItem=toBrowser.aItemList[lnCount]
  3664.     IF VARTYPE(oItem)#"O"
  3665.         LOOP
  3666.     ENDIF
  3667.     lcClass=LOWER(oItem.Class)+" "
  3668.     IF ASCAN(laClasses,lcClass)=0
  3669.         lnClassCount=lnClassCount+1
  3670.         DIMENSION laClasses[lnClassCount]
  3671.         laClasses[lnClassCount]=lcClass
  3672.     ENDIF
  3673.     oItem.Release
  3674.     oItem=.NULL.
  3675. ENDFOR
  3676. IF NOT tlItemsOnly
  3677.     FOR lnCount = toBrowser.nFolderCount TO 1 STEP -1
  3678.         oItem=toBrowser.aFolderList[lnCount]
  3679.         IF VARTYPE(oItem)#"O"
  3680.             LOOP
  3681.         ENDIF
  3682.         lcClass=LOWER(oItem.Class)+" "
  3683.         IF ASCAN(laClasses,lcClass)=0
  3684.             lnClassCount=lnClassCount+1
  3685.             DIMENSION laClasses[lnClassCount]
  3686.             laClasses[lnClassCount]=lcClass
  3687.         ENDIF
  3688.         oItem.Release
  3689.         oItem=.NULL.
  3690.     ENDFOR
  3691.     WITH toBrowser
  3692.         IF .lWebView
  3693.             .SetWebBrowser
  3694.         ENDIF
  3695.         .lWebView=.F.
  3696.         DIMENSION .aFolderList[1]
  3697.         .aFolderList=.NULL.
  3698.         .nFolderCount=0
  3699.         .nFolderListIndex=-1
  3700.         .nLastFolderListIndex=-1
  3701.     ENDWITH
  3702. ENDIF
  3703. WITH toBrowser
  3704.     DIMENSION .aItemList[1]
  3705.     .aItemList=.NULL.
  3706.     .nItemCount=0
  3707. ENDWITH
  3708. FOR lnCount = 1 TO lnClassCount
  3709.     lcClass=ALLTRIM(laClasses[lnCount])
  3710.     CLEAR CLASS (lcClass)
  3711. ENDFOR
  3712. IF NOT tlItemsOnly
  3713.     CLEAR CLASS (toBrowser.cFolderClass)
  3714.     CLEAR CLASS (toBrowser.cItemClass)
  3715.     CLEAR CLASS (toBrowser.cObjectClass)
  3716.     CLEAR CLASS (toBrowser.cViewClass)
  3717.     CLEAR CLASS (toBrowser.cNodeClass)
  3718. ENDIF
  3719. toBrowser.lBrowser=llBrowser
  3720. toBrowser.lRefreshBrowserMode=llRefreshBrowserMode
  3721. ENDFUNC
  3722.  
  3723.  
  3724.  
  3725. FUNCTION brwClearBrowser(toBrowser,tlSaveProperties)
  3726. LOCAL llLockScreen
  3727.  
  3728. llLockScreen=toBrowser.LockScreen
  3729. toBrowser.Lockscreen=.T.
  3730. IF NOT tlSaveProperties
  3731.     toBrowser.ClearProperties
  3732. ENDIF
  3733. WAIT CLEAR
  3734. WITH toBrowser
  3735.     .RefreshButtons
  3736.     .imgClassIcon.Visible=.F.
  3737.     .cmdClassIcon.Visible=.F.
  3738. ENDWITH
  3739. IF toBrowser.lBrowser
  3740.     WITH toBrowser
  3741.         .edtClassDesc.Value=""
  3742.         .edtClassDesc.ReadOnly=.T.
  3743.         .edtClassDesc.ScrollBars=0
  3744.         .edtMemberDesc.Value=""
  3745.         .edtMemberDesc.ReadOnly=.T.
  3746.         .edtMemberDesc.ScrollBars=0
  3747.         IF .lOutlineOCX
  3748.             .ClearNodes(.oleClassList)
  3749.             .ClearNodes(.oleMembers)
  3750.         ELSE
  3751.             .lstClassList.Clear
  3752.             .lstMembers.Clear
  3753.         ENDIF
  3754.     ENDWITH
  3755. ELSE
  3756.     WITH toBrowser
  3757.         .edtItemDesc.Value=""
  3758.         .edtItemDesc.ReadOnly=.T.
  3759.         .edtItemDesc.ScrollBars=0
  3760.         .ClearNodes(.oleFolderList)
  3761.         .oleItems.object.ListItems.Clear
  3762.     ENDWITH
  3763. ENDIF
  3764. WITH toBrowser
  3765.     .RefreshCaption
  3766.     .LockScreen=.F.
  3767.     .Draw
  3768.     .LockScreen=llLockScreen
  3769. ENDWITH
  3770. ENDFUNC
  3771.  
  3772.  
  3773.  
  3774. FUNCTION brwRefreshBrowser(toBrowser)
  3775. LOCAL lcMember,llLockScreen,lcFolderID,lcItemID,llRefreshItemList
  3776.  
  3777. IF toBrowser.lRelease OR toBrowser.lRefreshBrowserMode
  3778.     toBrowser.vResult=.F.
  3779.     RETURN toBrowser.vResult
  3780. ENDIF
  3781. WITH toBrowser
  3782.     IF NOT .lOutlineOCX
  3783.         .lBrowser=.T.
  3784.         .lLastBrowser=.T.
  3785.     ENDIF
  3786.     IF .lBrowser#.lLastBrowser
  3787.         .lRefreshBrowserMode=.F.
  3788.         .SwitchBrowser
  3789.     ENDIF
  3790.     .lRefreshBrowserMode=.T.
  3791.     IF .lOutlineOCX
  3792.         IF .lBrowser
  3793.             .oleClassList.Top=.oleClassList.Top+9999
  3794.             .oleClassList.Enabled=.F.
  3795.             .oleClassList.Visible=.F.
  3796.             .oleMembers.Enabled=.F.
  3797.             .oleMembers.Visible=.F.
  3798.             .oleMembers.Top=.oleMembers.Top+9999
  3799.         ELSE
  3800.             .oleFolderList.Top=.oleFolderList.Top+9999
  3801.             .oleFolderList.Enabled=.F.
  3802.             .oleFolderList.Visible=.F.
  3803.             .oleItems.Visible=.F.
  3804.             .oleItems.Top=.oleItems.Top+9999
  3805.             IF .lWebBrowser
  3806.                 .oleWebBrowser.Visible=.F.
  3807.                 .oleWebBrowser.Top=.oleWebBrowser.Top+9999
  3808.             ENDIF
  3809.         ENDIF
  3810.     ELSE
  3811.         .lstClassList.Top=.lstClassList.Top+9999
  3812.         .lstMembers.Top=.lstMembers.Top+9999
  3813.     ENDIF
  3814.     llLockScreen=.LockScreen
  3815.     .LockScreen=.T.
  3816. ENDWITH
  3817. IF toBrowser.lInitialized
  3818.     SET MESSAGE TO M_REFRESHING_LOC+[ ]+ ;
  3819.             IIF(toBrowser.lBrowser,M_CLASS_BROWSER_LOC,M_COMPONENT_GALLERY_LOC)+" ..."
  3820.     toBrowser.SetBusyState(.T.)
  3821. ENDIF
  3822. IF toBrowser.lBrowser
  3823.     WITH toBrowser
  3824.         lcMember=IIF(.nMemberListIndex>0,.aMemberList[.nMemberListIndex,1],"")
  3825.         .ClearBrowser(.T.)
  3826.         .RefreshClassList(.cClass)
  3827.         .RefreshMembers(lcMember)
  3828.     ENDWITH
  3829. ELSE
  3830.     WITH toBrowser
  3831.         IF ISNULL(.oItemSource)
  3832.             lcFolderID=""
  3833.             lcItemID=""
  3834.         ELSE
  3835.             lcFolderID=.oFolderSource.cID
  3836.             lcItemID=.oItemSource.cID
  3837.         ENDIF
  3838.         .ClearBrowser
  3839.         .RefreshFolderList
  3840.         llRefreshItemList=.F.
  3841.         IF EMPTY(lcFolderID)
  3842.             .RefreshItemList
  3843.             llRefreshItemList=.T.
  3844.         ELSE
  3845.             IF NOT .SelectFolder(lcFolderID)
  3846.                 .RefreshItemList
  3847.                 llRefreshItemList=.T.
  3848.             ENDIF
  3849.             IF NOT EMPTY(lcItemID) AND NOT .SelectItem(lcItemID) AND ;
  3850.                     NOT llRefreshItemList
  3851.                 .RefreshItemList
  3852.             ENDIF
  3853.         ENDIF
  3854.     ENDWITH
  3855. ENDIF
  3856. WITH toBrowser
  3857.     IF .lInitialized
  3858.         .SavePreferences
  3859.     ENDIF
  3860.     IF .lOutlineOCX
  3861.         IF .lBrowser
  3862.             .oleClassList.Top=.oleClassList.Top-9999
  3863.             .oleClassList.Enabled=.T.
  3864.             .oleClassList.Visible=.T.
  3865.             .oleMembers.Enabled=.T.
  3866.             .oleMembers.Visible=.T.
  3867.             .oleMembers.Top=.oleMembers.Top-9999
  3868.         ELSE
  3869.             .oleFolderList.Top=.oleFolderList.Top-9999
  3870.             .oleFolderList.Enabled=.T.
  3871.             .oleFolderList.Visible=.T.
  3872.             .oleItems.Visible=(NOT .lWebView)
  3873.             .oleItems.Top=.oleItems.Top-9999
  3874.             IF .lWebBrowser
  3875.                 .oleWebBrowser.Top=.oleWebBrowser.Top-9999
  3876.                 .oleWebBrowser.Visible=.lWebView
  3877.             ENDIF
  3878.         ENDIF
  3879.     ELSE
  3880.         .lstClassList.Top=.lstClassList.Top-9999
  3881.         .lstMembers.Top=.lstMembers.Top-9999
  3882.     ENDIF
  3883.     .SetBusyState(.F.)
  3884.     .LockScreen=llLockScreen
  3885.     .lRefreshBrowserMode=.F.
  3886.     .RefreshCaption
  3887. ENDWITH
  3888. SELECT 0
  3889. SET MESSAGE TO
  3890. ENDFUNC
  3891.  
  3892.  
  3893.  
  3894. FUNCTION brwSwitchBrowser(toBrowser)
  3895. LOCAL llBrowser,llGallery,llLockScreen,oColumnHeader
  3896.  
  3897. IF toBrowser.lRelease OR NOT toBrowser.lOutlineOCX
  3898.     toBrowser.vResult=.F.
  3899.     RETURN toBrowser.vResult
  3900. ENDIF
  3901. SET DATASESSION TO toBrowser.DataSessionID
  3902. llGallery=toBrowser.lBrowser
  3903. llBrowser=(NOT llGallery)
  3904. IF toBrowser.lInitialized
  3905.     toBrowser.SavePreferences
  3906. ENDIF
  3907. toBrowser.lBrowser=llBrowser
  3908. toBrowser.lLastBrowser=llBrowser
  3909. IF toBrowser.lInitialized
  3910.     SET MESSAGE TO M_SWITCHING_TO_LOC+ ;
  3911.             IIF(llBrowser,M_CLASS_BROWSER_LOC,M_COMPONENT_GALLERY_LOC)+" ..."
  3912. ENDIF
  3913. WITH toBrowser
  3914.     llLockScreen=.Lockscreen
  3915.     .LockScreen=.T.
  3916.     .cboClassType.Visible=llBrowser
  3917.     .cboViewType.Visible=llGallery
  3918.     .cmdAdd.Visible=llBrowser
  3919.     .cmdExport.Visible=llBrowser
  3920.     .cmdFind.Left=.cmdExport.Left+IIF(llBrowser,24,0)
  3921.     .cmdSubclass.Visible=llBrowser
  3922.     .cmdRename.Visible=llBrowser
  3923.     .cmdRedefine.Visible=llBrowser
  3924.     .cmdCleanup.Visible=llBrowser
  3925.     .cmdUpOneLevel.Visible=llGallery
  3926.     .cmdOptions.Visible=llGallery
  3927.     .RefreshButtons
  3928.     .edtClassDesc.Visible=(llBrowser AND .lDescriptions)
  3929.     .edtMemberDesc.Visible=(llBrowser AND .lDescriptions)
  3930.     .edtItemDesc.Visible=(llGallery AND .lDescriptions)
  3931. ENDWITH
  3932. IF toBrowser.lInitialized
  3933.     toBrowser.RefreshDescriptions
  3934.     toBrowser.cmdOpen.Refresh
  3935. ENDIF
  3936. IF llGallery AND toBrowser.oleItems.object.ColumnHeaders.Count<=1
  3937.     WITH toBrowser
  3938.         .oleItems.object.ColumnHeaders.Clear
  3939.         oColumnHeader=.oleItems.object.ColumnHeaders.Add(,"_object","Object",96)
  3940.         oColumnHeader=.oleItems.object.ColumnHeaders.Add(,"_type","Type",64)
  3941.         oColumnHeader=.NULL.
  3942.     ENDWITH
  3943. ENDIF
  3944. WITH toBrowser
  3945.     IF .lInitialized
  3946.         .SavePreferences
  3947.     ENDIF
  3948.     .cmdClassIcon.Refresh
  3949.     .Lockscreen=llLockScreen
  3950.     .oleClassList.Visible=llBrowser
  3951.     .oleMembers.Visible=llBrowser
  3952.     .oleFolderList.Visible=llGallery
  3953.     .oleItems.Visible=(NOT llBrowser AND NOT .lWebView)
  3954.     .Icon="c:\dev\browser\"+IIF(llBrowser,"browser.ico","gallery.ico")
  3955.     .RefreshCaption
  3956.     WITH .cmdBrowser
  3957.         .Picture=IIF(llBrowser,"c:\dev\browser\gallery.bmp","c:\dev\browser\browser.bmp")
  3958.         .Refresh
  3959.     ENDWITH
  3960.     IF NOT .lRelease AND .lActive
  3961.         .cmdOpen.SetFocus
  3962.     ENDIF
  3963.     IF llBrowser
  3964.         .HelpContextID=95825501
  3965.         .cmdBrowser.HelpContextID=0
  3966.         .cmdOpen.HelpContextID=0
  3967.         .cmdFind.HelpContextID=0
  3968.         .txtClassList3D.Height=.oleClassList.Height
  3969.         .txtClassList3D.Width=.oleClassList.Width
  3970.         .txtMembers3D.Height=.oleMembers.Height
  3971.         .txtMembers3D.Left=.oleMembers.Left
  3972.         .txtMembers3D.Width=.oleMembers.Width
  3973.         .shpSplitterH.Top=.edtClassDesc.Top-4
  3974.     ELSE
  3975.         .HelpContextID=189582651
  3976.         .cmdBrowser.HelpContextID=189582650
  3977.         .cmdOpen.HelpContextID=189582650
  3978.         .cmdFind.HelpContextID=189582650
  3979.         .txtClassList3D.Height=.oleFolderList.Height
  3980.         .txtClassList3D.Width=.oleFolderList.Width
  3981.         .txtMembers3D.Height=.oleItems.Height-2
  3982.         .txtMembers3D.Left=.oleItems.Left
  3983.         .txtMembers3D.Width=.oleItems.Width
  3984.         .shpSplitterH.Top=.edtItemDesc.Top-4
  3985.     ENDIF
  3986.     .shpSplitterV.Left=.txtMembers3D.Left-4
  3987. ENDWITH
  3988. IF llGallery AND toBrowser.lInitialized AND EMPTY(toBrowser.cCatalog)
  3989.     toBrowser.RefreshBrowser
  3990. ENDIF
  3991. IF toBrowser.lWebBrowser
  3992.     toBrowser.oleWebBrowser.Visible=(NOT llBrowser AND toBrowser.lWebView)
  3993. ENDIF
  3994. ENDFUNC
  3995.  
  3996.  
  3997.  
  3998. FUNCTION brwRefreshItemDesc(toBrowser)
  3999. LOCAL oItem,oParent,lcTypeDesc,lcDesc,lcStatusBarText
  4000.  
  4001. IF toBrowser.lRelease OR toBrowser.lBrowser
  4002.     toBrowser.vResult=.F.
  4003.     RETURN toBrowser.vResult
  4004. ENDIF
  4005. IF toBrowser.nFolderCount<1 OR toBrowser.lBrowser
  4006.     WITH toBrowser.edtItemDesc
  4007.         .SelLength=0
  4008.         .SelStart=0
  4009.         .ReadOnly=.T.
  4010.         .MaxLength=0
  4011.         .StatusBarText=""
  4012.         .Value=""
  4013.         .ScrollBars=0
  4014.     ENDWITH
  4015.     RETURN
  4016. ENDIF
  4017. lcTypeDesc=""
  4018. IF toBrowser.nItemListIndex>0
  4019.     oItem=toBrowser.oItem
  4020.     DO CASE
  4021.         CASE VARTYPE(oItem)=="O"
  4022.             lcTypeDesc=oItem.cTypeDesc
  4023.             IF EMPTY(lcTypeDesc)
  4024.                 oParent=oItem
  4025.                 DO WHILE NOT oParent.cID==oParent.oFolder.oLink.cID
  4026.                     oParent=oParent.oFolder.oLink
  4027.                     IF NOT EMPTY(oParent.cItemTypeDesc)
  4028.                         lcTypeDesc=oParent.cItemTypeDesc
  4029.                         EXIT
  4030.                     ENDIF
  4031.                 ENDDO
  4032.                 oParent=.NULL.
  4033.             ENDIF
  4034.     ENDCASE
  4035. ELSE
  4036.     oItem=toBrowser.oFolder
  4037.     DO CASE
  4038.         CASE VARTYPE(oItem)=="O"
  4039.             lcTypeDesc=oItem.cTypeDesc
  4040.             IF EMPTY(lcTypeDesc) AND VARTYPE(oItem)=="O"
  4041.                 oParent=oItem
  4042.                 DO WHILE NOT oParent.cID==oParent.oFolder.oLink.cID
  4043.                     oParent=oParent.oFolder.oLink
  4044.                     IF NOT EMPTY(oParent.cTypeDesc)
  4045.                         lcTypeDesc=oParent.cTypeDesc
  4046.                         EXIT
  4047.                     ENDIF
  4048.                 ENDDO
  4049.                 oParent=.NULL.
  4050.             ENDIF
  4051.     ENDCASE
  4052. ENDIF
  4053. lcDesc=""
  4054. IF VARTYPE(oItem)=="O"
  4055.     lcDesc=oItem.cDesc
  4056. ENDIF
  4057. DO WHILE LEFT(lcDesc,1)==CR OR LEFT(lcDesc,1)==LF
  4058.     lcDesc=ALLTRIM(SUBSTR(lcDesc,2))
  4059. ENDDO
  4060. DO WHILE RIGHT(lcDesc,1)==CR OR RIGHT(lcDesc,1)==LF
  4061.     lcDesc=TRIM(LEFT(lcDesc,LEN(lcDesc)-1))
  4062. ENDDO
  4063. IF VARTYPE(oItem)=="O" AND oItem.lFolder AND NOT oItem.cFolderType=="web"
  4064.     IF NOT EMPTY(lcDesc)
  4065.         lcDesc=lcDesc+CR
  4066.     ENDIF
  4067.     lcDesc=lcDesc+TRANSFORM(MAX(oItem.nItemCount,0))+" "+M_ITEMS_LOC
  4068. ENDIF
  4069. IF NOT EMPTY(lcTypeDesc)
  4070.     DO WHILE LEFT(lcTypeDesc,1)==CR OR LEFT(lcTypeDesc,1)==LF
  4071.         lcTypeDesc=ALLTRIM(SUBSTR(lcTypeDesc,2))
  4072.     ENDDO
  4073.     DO WHILE RIGHT(lcTypeDesc,1)==CR OR RIGHT(lcTypeDesc,1)==LF
  4074.         lcTypeDesc=TRIM(LEFT(lcTypeDesc,LEN(lcTypeDesc)-1))
  4075.     ENDDO
  4076.     IF EMPTY(lcDesc)
  4077.         lcDesc=lcTypeDesc
  4078.     ELSE
  4079.         lcDesc=lcDesc+CR+CR+lcTypeDesc
  4080.     ENDIF
  4081. ENDIF
  4082. WITH toBrowser.edtItemDesc
  4083.     .SelLength=0
  4084.     .SelStart=0
  4085.     .ReadOnly=.T.
  4086.     .MaxLength=0
  4087.     .StatusBarText=M_ITEM_LOC+" ("+.Class+") "+M_DESCRIPTION_LOC
  4088.     .Value=lcDesc
  4089.     .ScrollBars=IIF(EMPTY(lcDesc),0,2)
  4090. ENDWITH
  4091. oItem=.NULL.
  4092. ENDFUNC 
  4093.  
  4094.  
  4095.  
  4096. FUNCTION brwStartNewWindow(toBrowser,tlGallery)
  4097. LOCAL llGallery,lcFileName,lcFileName2,lcDefaultClass,llListBox,lcClassType
  4098. LOCAL lnCount,lcCount,lnWindowState,lcAlias,lcAlias2,lcFolderID,lcItemID
  4099.  
  4100. WITH toBrowser
  4101.     .SavePreferences
  4102.     IF tlGallery
  4103.         lcFileName=""
  4104.         lcAlias2="catalog"
  4105.         FOR lnCount = 1 TO 256
  4106.             lcCount=ALLTRIM(STR(lnCount))
  4107.             lcAlias=lcAlias2+lcCount
  4108.             IF NOT USED(lcAlias)
  4109.                 EXIT
  4110.             ENDIF
  4111.             lcFileName2=LOWER(DBF(lcAlias))
  4112.             IF lnCount>1
  4113.                 lcFileName=lcFileName+","
  4114.             ENDIF
  4115.             lcFileName=lcFileName+lcFileName2
  4116.         ENDFOR
  4117.         lcFolderID=IIF(ISNULL(.oFolderSource),"",.oFolderSource.cID)
  4118.         lcItemID=IIF(ISNULL(.oItemSource),"",.oItemSource.cID)
  4119.         lcDefaultClass=lcItemID
  4120.         llListBox=.F.
  4121.         lcClassType=.cViewType
  4122.     ELSE
  4123.         lcFileName=.cFileName
  4124.         FOR lnCount = 1 TO .nFileCount
  4125.             lcFileName2=.aFiles[lnCount]
  4126.             IF EMPTY(lcFileName2) OR lcFileName2==.cFileName
  4127.                 LOOP
  4128.             ENDIF
  4129.             IF lnCount>1
  4130.                 lcFileName=lcFileName+","
  4131.             ENDIF
  4132.             lcFileName=lcFileName+lcFileName2
  4133.         ENDFOR
  4134.         lcFolderID=""
  4135.         lcItemID=""
  4136.         lcDefaultClass=IIF(.nMemberListIndex>0,.aMemberList[.nMemberListIndex,1],"")
  4137.         lcDefaultClass=IIF(EMPTY(lcDefaultClass),.cClass,.cClass+"."+lcDefaultClass)
  4138.         llListBox=(NOT .lOutlineOCX)
  4139.         lcClassType=.cClassType
  4140.     ENDIF
  4141.     lnWindowState=.WindowState
  4142.     DO (.cProgramName) WITH (lcFileName),(lcDefaultClass),(llListBox),(lcClassType), ;
  4143.             (lnWindowState),(tlGallery)
  4144.     IF _oBrowser=toBrowser
  4145.         RETURN .F.
  4146.     ENDIF
  4147.     WITH _oBrowser
  4148.         IF NOT EMPTY(lcFolderID)
  4149.             .SelectFolder(lcFolderID,.T.)
  4150.         ENDIF
  4151.         IF NOT EMPTY(lcItemID)
  4152.             .SelectItem(lcItemID,.T.)
  4153.         ENDIF
  4154.     ENDWITH
  4155. ENDWITH
  4156. ENDFUNC 
  4157.  
  4158.  
  4159.  
  4160. FUNCTION brwSetClassLibrary(toBrowser,tcClassLibraryList)
  4161. LOCAL lcClassLibraryList,lcClassLibrary,lcClassLibraryAlias,lnClassLibraryCount,lnMemLine
  4162.  
  4163. IF EMPTY(tcClassLibraryList)
  4164.     RETURN
  4165. ENDIF
  4166. lcClassLibraryList=LOWER(ALLTRIM(STRTRAN(STRTRAN(tcClassLibraryList,",",CR),LF,CR)))
  4167. _mline=0
  4168. FOR lnMemLine = 1 TO MEMLINES(lcClassLibraryList)
  4169.     lcClassLibrary=LOWER(ALLTRIM(MLINE(lcClassLibraryList,1,_mline)))
  4170.     IF EMPTY(lcClassLibrary) OR LEFT(lcClassLibrary,1)=="*"
  4171.         LOOP
  4172.     ENDIF
  4173.     IF EMPTY(JUSTEXT(lcClassLibrary))
  4174.         lcClassLibrary=FORCEEXT(lcClassLibrary,"vcx")
  4175.     ENDIF
  4176.     IF (NOT ":"$lcClassLibrary AND NOT "\\"$lcClassLibrary)
  4177.         lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,toBrowser.cDefaultCatalogPath))
  4178.     ENDIF
  4179.     IF EMPTY(SYS(2000,lcClassLibrary))
  4180.         toBrowser.MsgBox(M_FILE_LOC+[ "]+lcClassLibrary+[" ]+ ;
  4181.                 M_DOES_NOT_EXIST_LOC+[.],16)
  4182.         SET DATASESSION TO toBrowser.DataSessionID
  4183.         toBrowser.vResult=.F.
  4184.         RETURN toBrowser.vResult
  4185.     ENDIF
  4186.     IF toBrowser.nClassLibraryCount>0 AND ASCAN(toBrowser.aClassLibrary,lcClassLibrary)>0
  4187.         RETURN
  4188.     ENDIF
  4189.     lcClassLibraryAlias=LOWER(SYS(2015))
  4190.     toBrowser.nClassLibraryCount=toBrowser.nClassLibraryCount+1
  4191.     lnClassLibraryCount=toBrowser.nClassLibraryCount
  4192.     DIMENSION toBrowser.aClassLibrary[lnClassLibraryCount,2]
  4193.     toBrowser.aClassLibrary[lnClassLibraryCount,1]=lcClassLibrary
  4194.     toBrowser.aClassLibrary[lnClassLibraryCount,2]=lcClassLibraryAlias
  4195.     IF RIGHT(lcClassLibrary,4)==".prg"
  4196.         SET PROCEDURE TO (lcClassLibrary) ADDITIVE
  4197.     ELSE
  4198.         SET CLASSLIB TO (lcClassLibrary) ALIAS (lcClassLibraryAlias) ADDITIVE
  4199.     ENDIF
  4200. ENDFOR
  4201. ENDFUNC
  4202.  
  4203.  
  4204.  
  4205. FUNCTION brwReleaseClassLibraries(toBrowser)
  4206. LOCAL lcClassLibrary,lcClassLibraryAlias,lcSetClassLib,lnCount
  4207.  
  4208. FOR lnCount = 1 TO toBrowser.nClassLibraryCount
  4209.     lcClassLibrary=toBrowser.aClassLibrary[lnCount,1]
  4210.     lcClassLibraryAlias=toBrowser.aClassLibrary[lnCount,2]
  4211.     IF RIGHT(lcClassLibrary,4)==".prg"
  4212.         IF ATC(lcClassLibrary,SET("PROCEDURE"))>0
  4213.             RELEASE PROCEDURE (lcClassLibrary)
  4214.         ENDIF
  4215.     ELSE
  4216.         lcSetClassLib=SET("CLASSLIB")
  4217.         IF ATC(lcClassLibrary,lcSetClassLib)>0 AND ;
  4218.                 ATC(" ALIAS "+lcClassLibraryAlias+",",lcSetClassLib+",")>0
  4219.             RELEASE CLASSLIB ALIAS (lcClassLibraryAlias)
  4220.         ENDIF
  4221.     ENDIF
  4222. ENDFOR
  4223. toBrowser.nClassLibraryCount=0
  4224. DIMENSION toBrowser.aClassLibrary[1,2]
  4225. toBrowser.aClassLibrary=""
  4226. ENDFUNC
  4227.  
  4228.  
  4229.  
  4230. FUNCTION brwCopy(toBrowser,toObject,tlCut)
  4231. LOCAL oObject
  4232.  
  4233. toBrowser.ClearClipBoard
  4234. oObject=IIF(VARTYPE(toObject)#"O",toBrowser.oItemSource,toObject)
  4235. IF TYPE("oObject")#"O" OR ISNULL(oObject)
  4236.     toBrowser.vResult=.F.
  4237.     RETURN toBrowser.vResult
  4238. ENDIF
  4239. WITH _screen._oCGClipBoard
  4240.     .cHostName=toBrowser.Name
  4241.     .oItem=oObject
  4242.     .lCut=tlCut
  4243. ENDWITH
  4244. ENDFUNC
  4245.  
  4246.  
  4247.  
  4248. FUNCTION brwPaste(toBrowser,toTarget,tlLink,tlNoRefresh)
  4249. LOCAL oTarget,oItem,oItem2,oLastItem,oRecord,oNode,llCut,lcAppendText,lcID,lnCount,lcHost
  4250.  
  4251. oTarget=IIF(TYPE("toTarget")#"O" OR ISNULL(toTarget),toBrowser.oFolder,toTarget)
  4252. WITH _screen._oCGClipBoard
  4253.     oItem=.oItem
  4254.     IF VARTYPE(oItem)#"O" OR oItem=oTarget OR VARTYPE(oItem.oRecord)#"O"
  4255.         toBrowser.vResult=.F.
  4256.         RETURN toBrowser.vResult
  4257.     ENDIF
  4258.     oRecord=oItem.oRecord
  4259.     llCut=.lCut
  4260.     IF VARTYPE(oItem.oHost)#"O"
  4261.         oItem.oHost=toBrowser
  4262.     ENDIF
  4263.     lcHost=oItem.oHost.Name
  4264.     IF llCut
  4265.         IF tlLink
  4266.             toBrowser.vResult=.F.
  4267.             RETURN toBrowser.vResult
  4268.         ENDIF
  4269.         .lCut=.F.
  4270.         .oItem.Remove(.F.,.T.)
  4271.         .oItem.oHost.ClearClipBoard
  4272.     ENDIF
  4273.     oLastItem=.oItem
  4274. ENDWITH
  4275. oNode=toBrowser.CreateNode(oTarget.cAlias,oRecord)
  4276. IF ISNULL(oNode)
  4277.     toBrowser.vResult=.F.
  4278.     RETURN toBrowser.vResult
  4279. ENDIF
  4280. lcID=LOWER(SYS(2015))
  4281. WITH oNode
  4282.     lcAppendText=""
  4283.     .cID=lcID
  4284.     .cType=oItem.cType
  4285.     IF NOT llCut
  4286.         IF tlLink
  4287.             .cLink=oItem.cID
  4288.             lcAppendText="Link to "
  4289.         ELSE
  4290.             lcAppendText="Copy of "
  4291.         ENDIF
  4292.     ENDIF
  4293.     IF tlLink
  4294.         .cProperties=""
  4295.     ENDIF
  4296.     IF NOT EMPTY(lcAppendText)
  4297.         .cText=lcAppendText+oItem.cText
  4298.     ENDIF
  4299.     .cParent=oTarget.cID
  4300.     .oParent=oTarget
  4301.     IF .oParent.lDynamic
  4302.         .lDynamic=.T.
  4303.     ENDIF
  4304.     .cFolderPicture=oItem.cFolderPicture
  4305.     .cPicture=oItem.cPicture
  4306.     .cClassLib=oItem.ClassLibrary
  4307.     .cClassName=oItem.Class
  4308.     .cCatalog=oTarget.cCatalog
  4309.     .cAlias=oTarget.cAlias
  4310.     .cSourceCatalog=oTarget.cSourceCatalog
  4311.     .cSourceCatalogPath=oTarget.cSourceCatalogPath
  4312.     .cSourceAlias=oTarget.cSourceAlias
  4313.     .nSourceRecNo=0
  4314.     .cID2=STRTRAN(JUSTSTEM(.cCatalog)," ","_")
  4315.     .cID=.cID2+"!"+.cID
  4316.     .nIndex=0
  4317.     .WriteProperties(.T.,.T.)
  4318. ENDWITH
  4319. IF oItem.lFolder AND NOT tlLink AND NOT ISNULL(oLastItem)
  4320.     FOR lnCount = 1 TO oItem.nItemCount
  4321.         EXIT
  4322.         oItem2=toBrowser.aItemList[oItem.aItemIndexes[lnCount]]
  4323.         IF VARTYPE(oItem2)#"O"
  4324.             LOOP
  4325.         ENDIF
  4326.         _screen._oCGClipBoard.oItem=oItem2
  4327.         toBrowser.Paste(oNode,tlLink,.T.)
  4328.     ENDFOR
  4329. ENDIF
  4330. IF NOT tlNoRefresh
  4331.     oNode.Refresh(.T.)
  4332.     toBrowser.SelectItem(lcID,.T.)
  4333. ENDIF
  4334. IF NOT ISNULL(oLastItem)
  4335.     IF toBrowser.Name==lcHost
  4336.         lcID=oLastItem.cID
  4337.         oItem=IIF(oLastItem.lFolder,toBrowser.GetFolder(lcID),toBrowser.GetItem(lcID))
  4338.     ELSE
  4339.         oItem=oLastItem
  4340.     ENDIF
  4341.     _screen._oCGClipBoard.oItem=oItem
  4342. ENDIF
  4343. IF VARTYPE(oNode)=="O"
  4344.     oNode.Release
  4345. ENDIF
  4346. ENDFUNC
  4347.  
  4348.  
  4349.  
  4350. FUNCTION brwCreateLink(toBrowser,toObject)
  4351. LOCAL oObject,oItem,oRecord,llCut
  4352.  
  4353. oObject=IIF(VARTYPE(toObject)#"O",toBrowser.oItem,toObject)
  4354. IF VARTYPE(oObject)#"O" OR oObject.lCatalog
  4355.     toBrowser.vResult=.F.
  4356.     RETURN toBrowser.vResult
  4357. ENDIF
  4358. WITH _screen._oCGClipBoard
  4359.     oItem=.oItem
  4360.     llCut=.lCut
  4361.     .oItem=toObject
  4362.     .lCut=.F.
  4363.     IF NOT toBrowser.Copy(oObject) OR NOT toBrowser.Paste(oObject.oFolder,.T.)
  4364.         toBrowser.vResult=.F.
  4365.         RETURN toBrowser.vResult
  4366.     ENDIF
  4367.     .oItem=oItem
  4368.     .lCut=llCut
  4369. ENDWITH
  4370. ENDFUNC
  4371.  
  4372.  
  4373.  
  4374. FUNCTION brwGetRecordObject(toBrowser,toNode)
  4375. LOCAL oNode,oRecord,lcAlias,lnRecNo,lnLastSelect
  4376.  
  4377. oNode=IIF(VARTYPE(toNode)#"O",toBrowser.oItemSource,toNode)
  4378. IF TYPE("oNode")#"O" OR ISNULL(oNode)
  4379.     toBrowser.vResult=.NULL.
  4380.     RETURN .NULL.
  4381. ENDIF
  4382. lcAlias=oNode.cAlias
  4383. IF EMPTY(lcAlias) OR NOT USED(lcAlias)
  4384.     toBrowser.vResult=.NULL.
  4385.     RETURN .NULL.
  4386. ENDIF
  4387. lnLastSelect=SELECT()
  4388. SELECT (lcAlias)
  4389. lnRecNo=IIF(EOF() OR RECNO()>RECCOUNT(),0,RECNO())
  4390. GO oNode.nRecNo
  4391. oRecord=.NULL.
  4392. SCATTER MEMO NAME oRecord
  4393. IF SELECT()=lnLastSelect
  4394.     GO lnRecNo
  4395. ELSE
  4396.     SELECT (lnLastSelect)
  4397. ENDIF
  4398. toBrowser.vResult=oRecord
  4399. RETURN oRecord
  4400. ENDFUNC
  4401.  
  4402.  
  4403.  
  4404. FUNCTION brwCheckGalleryTableStructure(toBrowser)
  4405. LOCAL lcCatalog,lcCatalogPath,lcAlias,lcTempTable,lcStructureTable
  4406.  
  4407. IF TYPE("ID")#"C" OR TYPE("Properties")#"M" OR TYPE("Script")#"M"
  4408.     toBrowser.vResult=.F.
  4409.     RETURN toBrowser.vResult
  4410. ENDIF
  4411. lcCatalog=LOWER(DBF())
  4412. lcCatalogPath=IIF(EMPTY(lcCatalog),"",JUSTPATH(lcCatalog)+"\")
  4413. lcAlias=LOWER(ALIAS())
  4414. DO WHILE NOT toBrowser.lRelease AND TYPE("FileName")#"M"
  4415.     USE (lcCatalog) EXCLUSIVE ALIAS (lcAlias)
  4416.     IF NOT USED()
  4417.         toBrowser.cCatalog=""
  4418.         IF USED(lcAlias)
  4419.             USE IN (lcAlias)
  4420.         ENDIF
  4421.         SELECT 0
  4422.         SET MESSAGE TO
  4423.         toBrowser.MsgBox(M_FILE_LOC+[ "]+lcCatalog+[" ]+M_COULD_NOT_OPENED_EXCL_LOC,16)
  4424.         toBrowser.vResult=.F.
  4425.         RETURN toBrowser.vResult
  4426.     ENDIF
  4427.     SET FILTER TO NOT DELETED()
  4428.     LOCATE
  4429.     lcTempTable=LOWER(FULLPATH("_1"+SYS(2015),lcCatalogPath))
  4430.     lcStructureTable=LOWER(FULLPATH("_2"+SYS(2015),lcCatalogPath))
  4431.     USE (lcCatalog) EXCLUSIVE ALIAS _TempTable
  4432.     COPY TO (lcTempTable)
  4433.     COPY TO (lcStructureTable) STRUCTURE EXTENDED
  4434.     USE
  4435.     USE (lcStructureTable) EXCLUSIVE ALIAS _TempTable
  4436.     SET FILTER TO NOT DELETED()
  4437.     LOCATE
  4438.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="PARENT"
  4439.     IF NOT EOF() AND NOT Field_Type=="M"
  4440.         REPLACE Field_Type WITH "M", Field_Len WITH 4
  4441.     ENDIF
  4442.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="LINK"
  4443.     IF NOT EOF() AND NOT Field_Type=="M"
  4444.         REPLACE Field_Type WITH "M", Field_Len WITH 4
  4445.     ENDIF
  4446.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="TYPEDESC"
  4447.     IF EOF()
  4448.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="DESC"
  4449.         INSERT BLANK BEFORE
  4450.         REPLACE Field_Name WITH "TYPEDESC", Field_Type WITH "M", Field_Len WITH 4
  4451.     ENDIF
  4452.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="FILENAME"
  4453.     IF EOF()
  4454.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="PROPERTIES"
  4455.         INSERT BLANK
  4456.         REPLACE Field_Name WITH "FILENAME", Field_Type WITH "M", Field_Len WITH 4
  4457.     ENDIF
  4458.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="CLASS"
  4459.     IF EOF()
  4460.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="SCRIPT"
  4461.         INSERT BLANK BEFORE
  4462.         REPLACE Field_Name WITH "CLASS", Field_Type WITH "M", Field_Len WITH 4
  4463.     ENDIF
  4464.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="PICTURE"
  4465.     IF EOF()
  4466.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="SCRIPT"
  4467.         INSERT BLANK BEFORE
  4468.         REPLACE Field_Name WITH "PICTURE", Field_Type WITH "M", Field_Len WITH 4
  4469.     ENDIF
  4470.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="FOLDERPICT"
  4471.     IF EOF()
  4472.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="SCRIPT"
  4473.         INSERT BLANK BEFORE
  4474.         REPLACE Field_Name WITH "FOLDERPICT", Field_Type WITH "M", Field_Len WITH 4
  4475.     ENDIF
  4476.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="ITEMTPDESC"
  4477.     IF EOF()
  4478.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="UPDATED"
  4479.         INSERT BLANK BEFORE
  4480.         REPLACE Field_Name WITH "ITEMTPDESC", Field_Type WITH "M", Field_Len WITH 4
  4481.     ENDIF
  4482.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="VIEWS"
  4483.     IF EOF()
  4484.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="UPDATED"
  4485.         INSERT BLANK BEFORE
  4486.         REPLACE Field_Name WITH "VIEWS", Field_Type WITH "M", Field_Len WITH 4
  4487.     ENDIF
  4488.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="KEYWORDS"
  4489.     IF EOF()
  4490.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="VIEWS"
  4491.         INSERT BLANK
  4492.         REPLACE Field_Name WITH "KEYWORDS", Field_Type WITH "M", Field_Len WITH 4
  4493.     ENDIF
  4494.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="SRCALIAS"
  4495.     IF EOF()
  4496.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="UPDATED"
  4497.         INSERT BLANK BEFORE
  4498.         REPLACE Field_Name WITH "SRCALIAS", Field_Type WITH "M", Field_Len WITH 4
  4499.     ENDIF
  4500.     LOCATE FOR UPPER(ALLTRIM(Field_Name))=="SRCRECNO"
  4501.     IF EOF()
  4502.         LOCATE FOR UPPER(ALLTRIM(FIELD_NAME))=="UPDATED"
  4503.         INSERT BLANK BEFORE
  4504.         REPLACE Field_Name WITH "SRCRECNO", Field_Type WITH "N", Field_Len WITH 6
  4505.     ENDIF
  4506.     USE
  4507.     CREATE (lcCatalog) FROM (lcStructureTable)
  4508.     USE (lcCatalog) EXCLUSIVE ALIAS (lcAlias)
  4509.     ZAP
  4510.     APPEND FROM (lcTempTable)
  4511.     REPLACE ALL Parent WITH ALLTRIM(Parent), Link WITH ALLTRIM(Link)
  4512.     brwReMapCatalogProperties(toBrowser)
  4513.     USE
  4514.     ERASE (lcTempTable+".dbf")
  4515.     ERASE (lcTempTable+".fpt")
  4516.     ERASE (lcStructureTable+".dbf")
  4517.     ERASE (lcStructureTable+".fpt")
  4518.     SELECT 0
  4519.     USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  4520.     SET FILTER TO NOT DELETED()
  4521.     LOCATE
  4522. ENDDO
  4523. ENDFUNC
  4524.  
  4525.  
  4526.  
  4527. FUNCTION brwReMapCatalogProperties(toBrowser)
  4528. LOCAL lcProperties,lcNewProperties,lcProperty,lnProperty
  4529. LOCAL lnMemLine,lcMemLine,lnCount,lnAtPos,lcValue
  4530. LOCAL laProperites[4]
  4531.  
  4532. laProperites[1]="cfilename"
  4533. laProperites[2]="cclass"
  4534. laProperites[3]="cpicture"
  4535. laProperites[4]="cfolderpicture"
  4536. SCAN ALL FOR NOT EMPTY(Properties)
  4537.     IF toBrowser.lRelease
  4538.         RETURN .F.
  4539.     ENDIF
  4540.     lcProperties=Properties
  4541.     lcProperties=STRTRAN(STRTRAN(lcProperties,CR+CR,CR),CR_LF+CR_LF,CR_LF)
  4542.     DO WHILE LEFT(lcProperties,1)==CR OR LEFT(lcProperties,1)==LF
  4543.         lcProperties=ALLTRIM(SUBSTR(lcProperties,2))
  4544.     ENDDO
  4545.     DO WHILE RIGHT(lcProperties,1)==CR OR RIGHT(lcProperties,1)==LF
  4546.         lcProperties=TRIM(LEFT(lcProperties,LEN(lcProperties)-1))
  4547.     ENDDO
  4548.     lcNewProperties=lcProperties
  4549.     FOR lnMemLine = 1 TO MEMLINES(lcProperties)
  4550.         lcMemLine=MLINE(lcProperties,lnMemLine)
  4551.         lnAtPos=AT("=",lcMemLine)
  4552.         IF lnAtPos=0
  4553.             LOOP
  4554.         ENDIF
  4555.         lcProperty=LOWER(ALLTRIM(LEFT(lcMemLine,lnAtPos-1)))
  4556.         IF EMPTY(lcProperty)
  4557.             LOOP
  4558.         ENDIF
  4559.         lnProperty=ASCAN(laProperites,lcProperty)
  4560.         IF lnProperty=0
  4561.             LOOP
  4562.         ENDIF
  4563.         lcValue=ALLTRIM(SUBSTR(lcMemLine,lnAtPos+1))
  4564.         lcNewProperties=STRTRAN(lcNewProperties,lcMemLine,"")
  4565.         lcNewProperties=STRTRAN(STRTRAN(lcNewProperties,CR+CR,CR),CR_LF+CR_LF,CR_LF)
  4566.         DO CASE
  4567.             CASE lnProperty=1
  4568.                 REPLACE FileName WITH lcValue
  4569.             CASE lnProperty=2
  4570.                 REPLACE Class WITH lcValue
  4571.             CASE lnProperty=3
  4572.                 REPLACE Picture WITH lcValue
  4573.             CASE lnProperty=4
  4574.                 REPLACE FolderPict WITH lcValue
  4575.         ENDCASE
  4576.     ENDFOR
  4577.     lcNewProperties=STRTRAN(STRTRAN(lcNewProperties,CR+CR,CR),CR_LF+CR_LF,CR_LF)
  4578.     DO WHILE LEFT(lcNewProperties,1)==CR OR LEFT(lcNewProperties,1)==LF
  4579.         lcNewProperties=ALLTRIM(SUBSTR(lcNewProperties,2))
  4580.     ENDDO
  4581.     DO WHILE RIGHT(lcNewProperties,1)==CR OR RIGHT(lcNewProperties,1)==LF
  4582.         lcNewProperties=TRIM(LEFT(lcNewProperties,LEN(lcNewProperties)-1))
  4583.     ENDDO
  4584.     lcNewProperties=STRTRAN(lcNewProperties,CR_LF,CR)
  4585.     IF NOT Properties==lcNewProperties
  4586.         REPLACE Properties WITH lcNewProperties
  4587.     ENDIF
  4588. ENDSCAN
  4589. ENDFUNC
  4590.  
  4591.  
  4592.  
  4593. FUNCTION brwRefreshView(toBrowser,toView,tcSearchAlias)
  4594. LOCAL oView,lcSearchAlias,oRecord,lcViewAlias,lcCatalog
  4595. LOCAL lcContaining,lcLookIn,lcLookInAlias,lcKeywordList,llItemName,llDescription
  4596. LOCAL llFileName,llClassName,llProperties,lcItemTypes,llMatch,llKeywordMatch
  4597. LOCAL lcText,lcContaining,lcKeyword1,lcKeyword2,lcType,lcParent,oCatalog
  4598. LOCAL lnCount,lnCount2,lnLastSelect,lnLastRecNo,lnRecNolnMatchCount
  4599. DIMENSION laKeywords1[1],laKeywords2[1]
  4600.  
  4601. SET DATASESSION TO (toBrowser.DataSessionID)
  4602. lcSearchAlias=IIF(TYPE("tcSearchAlias")=="C",LOWER(ALLTRIM(tcSearchAlias)),"view_default")
  4603. lcText=toView.cText
  4604. IF VARTYPE(toView)#"O" OR NOT USED(lcSearchAlias) OR ;
  4605.         EMPTY(toView.cID) OR EMPTY(lcText) OR EMPTY(toView.cViewAlias)
  4606.     toBrowser.vResult=0
  4607.     RETURN 0
  4608. ENDIF
  4609. lnLastSelect=SELECT()
  4610. lnLastRecNo=IIF(USED() AND NOT EOF(),RECNO(),0)
  4611. lcViewAlias=LOWER(toView.cViewAlias)
  4612. IF lcViewAlias=="view_default"
  4613.     toBrowser.vResult=IIF(USED(lcViewAlias),RECCOUNT(lcViewAlias),0)
  4614.     RETURN toBrowser.vResult
  4615. ENDIF
  4616. IF EMPTY(lcViewAlias) OR NOT USED(lcViewAlias)
  4617.     IF EMPTY(lcText)
  4618.         toBrowser.vResult=0
  4619.         RETURN 0
  4620.     ENDIF
  4621.     lcViewAlias="view_"+LOWER(STRTRAN(lcText," ","_"))
  4622.     lcViewAlias=toBrowser.CreateView(lcViewAlias)
  4623. ENDIF
  4624. IF NOT USED(lcViewAlias)
  4625.     toBrowser.vResult=0
  4626.     RETURN 0
  4627. ENDIF
  4628. IF lcViewAlias==lcSearchAlias
  4629.     lcSearchAlias="view_default"
  4630. ENDIF
  4631. lnMatchCount=0
  4632. WITH toView
  4633.     lcContaining=LOWER(ALLTRIM(.cContaining))
  4634.     DO CASE
  4635.         CASE EMPTY(lcContaining)
  4636.             lcContaining="*"
  4637.         CASE NOT "*"$lcContaining AND NOT "?"$lcContaining AND NOT "%"$lcContaining
  4638.             lcContaining="%"+lcContaining+"%"
  4639.     ENDCASE
  4640.     lcLookIn=LOWER(ALLTRIM(.cLookIn))
  4641.     lcLookInAlias=LOWER(ALLTRIM(.cLookInAlias))
  4642.     lcKeywordList=.cKeywordList
  4643.     llItemName=.lItemName
  4644.     llDescription=.lDescription
  4645.     llFileName=.lFileName
  4646.     llClassName=.lClassName
  4647.     llProperties=.lProperties
  4648.     lcItemTypes=LOWER(ALLTRIM(.cItemTypes))
  4649. ENDWITH
  4650. DIMENSION laKeywords1[1]
  4651. laKeywords1=""
  4652. IF NOT EMPTY(lcKeywordList)
  4653.     brwKeywordListToArray(lcKeywordList,@laKeywords1)
  4654. ENDIF
  4655. SELECT (lcViewAlias)
  4656. ZAP
  4657. lcCatalog=LOWER(SYS(2015))
  4658. APPEND BLANK
  4659. REPLACE TYPE WITH "FOLDER", ID WITH lcCatalog, Text WITH lcText
  4660. SELECT (lcSearchAlias)
  4661. WITH toBrowser
  4662.     SCAN ALL FOR NOT EMPTY(SrcAlias)
  4663.         lcType=UPPER(ALLTRIM(Type))
  4664.         IF INLIST(lcType,"OBJECT ","VIEW ")
  4665.             oRecord=.NULL.
  4666.             SCATTER MEMO NAME oRecord
  4667.             SELECT (lcViewAlias)
  4668.             APPEND BLANK
  4669.             IF lcType=="VIEW"
  4670.                 oRecord.Parent=lcCatalog
  4671.             ENDIF
  4672.             GATHER MEMO NAME oRecord
  4673.             oRecord=.NULL.
  4674.             SELECT (lcSearchAlias)
  4675.             LOOP
  4676.         ENDIF
  4677.         IF NOT lcType=="ITEM" OR (NOT EMPTY(lcLookInAlias) AND ;
  4678.                 NOT LOWER(SrcAlias)==lcLookInAlias) AND ;
  4679.                 (lcType=="ITEM" OR NOT LOWER(SrcAlias)=="catalog1")
  4680.                 
  4681.             LOOP
  4682.         ENDIF
  4683.         llMatch=(EMPTY(lcContaining) OR lcContaining=="*")
  4684.         IF NOT llMatch
  4685.             llMatch=((llItemName AND .WildCardMatch(lcContaining,Text)) OR ;
  4686.                     (llDescription AND .WildCardMatch(lcContaining,Desc)) OR ;
  4687.                     (llFileName AND .WildCardMatch(lcContaining,FileName)) OR ;
  4688.                     (llClassName AND .WildCardMatch(lcContaining,Class)) OR ;
  4689.                     (llProperties AND .WildCardMatch(lcContaining,Properties)))
  4690.             IF NOT llMatch
  4691.                 LOOP
  4692.             ENDIF
  4693.         ENDIF
  4694.         llKeywordMatch=(EMPTY(Keywords) AND EMPTY(lcKeywordList))
  4695.         IF NOT llKeywordMatch
  4696.             DIMENSION laKeywords2[1]
  4697.             laKeywords2=""
  4698.             brwKeywordListToArray(Keywords,@laKeywords2)
  4699.             FOR lnCount = 1 TO ALEN(laKeywords1)
  4700.                 lcKeyword1=laKeywords1[lnCount]
  4701.                 FOR lnCount2 = 1 TO ALEN(laKeywords2)
  4702.                     lcKeyword2=laKeywords2[lnCount]
  4703.                     IF .WildCardMatch(lcKeyword1,lcKeyword2)
  4704.                         llKeywordMatch=.T.
  4705.                         EXIT
  4706.                     ENDIF
  4707.                 ENDFOR
  4708.                 IF llKeywordMatch
  4709.                     EXIT
  4710.                 ENDIF
  4711.             ENDFOR
  4712.         ENDIF
  4713.         IF NOT llKeywordMatch
  4714.             LOOP
  4715.         ENDIF
  4716.         oRecord=.NULL.
  4717.         SCATTER MEMO NAME oRecord
  4718.         IF EMPTY(ClassName) AND NOT EMPTY(Parent)
  4719.             lnRecNo=RECNO()
  4720.             DO WHILE .T.
  4721.                 lcParent=LOWER(ALLTRIM(Parent))
  4722.                 IF EMPTY(lcParent)
  4723.                     EXIT
  4724.                 ENDIF
  4725.                 LOCATE FOR LOWER(ALLTRIM(ID))==lcParent
  4726.                 IF EOF()
  4727.                     EXIT
  4728.                 ENDIF
  4729.                 IF NOT EMPTY(ItemClass)
  4730.                     oRecord.ClassName=LOWER(ALLTRIM(ItemClass))
  4731.                     IF EMPTY(oRecord.ClassLib) AND NOT EMPTY(ClassLib)
  4732.                         oRecord.ClassLib=LOWER(ALLTRIM(ClassLib))
  4733.                     ENDIF
  4734.                     EXIT
  4735.                 ENDIF
  4736.             ENDDO
  4737.             GO lnRecNo
  4738.         ENDIF
  4739.         SELECT (lcViewAlias)
  4740.         APPEND BLANK
  4741.         oRecord.Parent=lcCatalog
  4742.         GATHER MEMO NAME oRecord
  4743.         oRecord=.NULL.
  4744.         SELECT (lcSearchAlias)
  4745.         lnMatchCount=lnMatchCount+1
  4746.     ENDSCAN
  4747. ENDWITH
  4748. SELECT (lnLastSelect)
  4749. IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  4750.     GO lnLastRecNo
  4751. ENDIF
  4752. toBrowser.vResult=lnMatchCount
  4753. RETURN lnMatchCount
  4754. ENDFUNC
  4755.  
  4756.  
  4757.  
  4758. FUNCTION brwKeywordListToArray(tcKeywordList,taKeywords)
  4759. LOCAL lcKeywordList,lnKeywordCount,lcList,lcKeyword
  4760.  
  4761. lcKeywordList=LOWER(ALLTRIM(CHRTRAN(tcKeywordList,TAB+CR+LF+",;","     ")))
  4762. DIMENSION taKeywords[1]
  4763. taKeywords=""
  4764. lnKeywordCount=0
  4765. IF EMPTY(lcKeywordList)
  4766.     RETURN lnKeywordCount
  4767. ENDIF
  4768. lcList=lcKeywordList
  4769. DO WHILE NOT EMPTY(lcList)
  4770.     lnKeywordCount=lnKeywordCount+1
  4771.     lnAtPos=AT(" ",lcList)
  4772.     IF lnAtPos=0
  4773.         lcKeyword=ALLTRIM(lcList)
  4774.         lcList=""
  4775.     ELSE
  4776.         lcKeyword=ALLTRIM(LEFT(lcList,lnAtPos-1))
  4777.         lcList=ALLTRIM(SUBSTR(lcList,lnAtPos+1))
  4778.     ENDIF
  4779.     IF EMPTY(lcKeyword)
  4780.         LOOP
  4781.     ENDIF
  4782.     DIMENSION taKeywords[lnKeywordCount]
  4783.     taKeywords[lnKeywordCount]=lcKeyword
  4784. ENDDO
  4785. RETURN lnKeywordCount
  4786. ENDFUNC
  4787.  
  4788.  
  4789.  
  4790. FUNCTION brwCreateView(toBrowser,tcAlias,tcFileName)
  4791. LOCAL lcAlias,lcFileName,lcViewName,lcViewItem,oRecord
  4792. LOCAL llMatch,lnCount,lnLastSelect
  4793.  
  4794. lcAlias=IIF(EMPTY(tcAlias),LOWER(SYS(2015)),STRTRAN(LOWER(ALLTRIM(tcAlias))," ","_"))
  4795. lcFileName=IIF(EMPTY(tcFileName),"",ALLTRIM(tcFileName))
  4796. IF lcAlias=="view_" OR lcAlias==toBrowser.cGallery OR ;
  4797.         NOT toBrowser.CreateCatalog(lcAlias,lcFileName)
  4798.     toBrowser.vResult=""
  4799.     RETURN ""
  4800. ENDIF
  4801. lnLastSelect=SELECT()
  4802. SELECT (lcAlias)
  4803. INDEX ON UPPER(Type) TAG Type
  4804. SELECT (lnLastSelect)
  4805. IF NOT LEFT(lcAlias,5)=="view_"
  4806.     toBrowser.vResult=lcAlias
  4807.     RETURN lcAlias
  4808. ENDIF
  4809. lcViewName=STRTRAN(SUBSTR(lcAlias,6),"_"," ")
  4810. llMatch=.F.
  4811. WITH toBrowser.cboViewType
  4812.     FOR lnCount = 1 TO .ListCount
  4813.         lcViewItem=.List[lnCount]
  4814.         IF NOT llMatch AND LOWER(lcViewItem)==LOWER(lcViewName)
  4815.             llMatch=.T.
  4816.             EXIT
  4817.         ENDIF
  4818.     ENDFOR
  4819.     IF NOT llMatch
  4820.         .AddItem(PROPER(lcViewName))
  4821.     ENDIF
  4822. ENDWITH
  4823. toBrowser.vResult=lcAlias
  4824. RETURN lcAlias
  4825. ENDFUNC
  4826.  
  4827.  
  4828.  
  4829. FUNCTION brwCreateCatalog(toBrowser,tcAlias,tcFileName)
  4830. LOCAL lcFileName,lcAlias,lnLastSelect,lnLastRecNo,lcID
  4831. LOCAL laFields[1]
  4832.  
  4833. lcAlias=IIF(EMPTY(tcAlias),"",STRTRAN(LOWER(ALLTRIM(tcAlias))," ","_"))
  4834. lcFileName=IIF(EMPTY(tcFileName),"",ALLTRIM(tcFileName))
  4835. IF (EMPTY(lcAlias) AND EMPTY(lcFileName)) OR NOT USED("catalog1")
  4836.     toBrowser.vResult=.F.
  4837.     RETURN toBrowser.vResult
  4838. ENDIF
  4839. lnLastSelect=SELECT()
  4840. lnLastRecNo=IIF(USED() AND NOT EOF(),RECNO(),0)
  4841. IF NOT EMPTY(lcAlias) AND USED(lcAlias)
  4842.     IF EMPTY(lcFileName)
  4843.         SELECT (lcAlias)
  4844.         ZAP
  4845.         SELECT (lnLastSelect)
  4846.         RETURN
  4847.     ENDIF
  4848.     USE IN (lcAlias)
  4849. ENDIF
  4850. AFIELDS(laFields,"catalog1")
  4851. SELECT 0
  4852. IF EMPTY(lcFileName)
  4853.     CREATE CURSOR (lcAlias) FROM ARRAY laFields
  4854. ELSE
  4855.     CREATE TABLE (lcFileName) FROM ARRAY laFields
  4856.     IF NOT USED()
  4857.         SELECT (lnLastSelect)
  4858.         IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  4859.             GO lnLastRecNo
  4860.         ENDIF
  4861.         toBrowser.vResult=.F.
  4862.         RETURN toBrowser.vResult
  4863.     ENDIF    
  4864.     IF EMPTY(lcAlias)
  4865.         lcID=LOWER(SYS(2015))
  4866.         APPEND BLANK
  4867.         REPLACE Type WITH "FOLDER", ;
  4868.                 ID WITH lcID, ;
  4869.                 Text WITH FORCEEXT(JUSTFNAME(lcFileName),"")
  4870.         SELECT (lnLastSelect)
  4871.         IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  4872.             GO lnLastRecNo
  4873.         ENDIF
  4874.         RETURN
  4875.     ENDIF
  4876.     USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
  4877.     SET FILTER TO NOT DELETED()
  4878.     LOCATE
  4879. ENDIF
  4880. IF NOT USED(lcAlias)
  4881.     SELECT (lnLastSelect)
  4882.     IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  4883.         GO lnLastRecNo
  4884.     ENDIF
  4885.     toBrowser.vResult=.F.
  4886.     RETURN toBrowser.vResult
  4887. ENDIF    
  4888. CURSORSETPROP("Buffering",1)
  4889. SET FILTER TO NOT DELETED()
  4890. LOCATE
  4891. SELECT (lnLastSelect)
  4892. IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  4893.     GO lnLastRecNo
  4894. ENDIF
  4895. ENDFUNC
  4896.  
  4897.  
  4898.  
  4899. FUNCTION brwCreateNode(toBrowser,tvAlias,tvType,tcFileName,tlRefresh,tlNoWriteProperties)
  4900. LOCAL lcAlias,lcType,oRecord,oNode,oFolder,lcClassLibrary,lcClassLibraryAlias,oItem
  4901. LOCAL llCopyNode,lcID,lcScriptCode,lcText,lcText2,lnDuplicateCount,lcClass,lcNewClass
  4902. LOCAL lcItemTypes,lcGetFileExt,lcFileName,lcFileExt,lnRecNo,lnLastRecNo,lnLastSelect
  4903. LOCAL lnCount,lnAtPos,lnMaxCount,llAddFile,lcSourceAlias,lcSourceCatalog
  4904.  
  4905. oFolder=.NULL.
  4906. lnRecNo=0
  4907. llAddFile=.F.
  4908. lcNewClass=""
  4909. lcClass=""
  4910. lcClassLibrary=""
  4911. lcFileName=IIF(EMPTY(tcFileName),"",LOWER(ALLTRIM(tcFileName)))
  4912. DO CASE
  4913.     CASE TYPE("tvAlias")=="C"
  4914.         lcAlias=LOWER(ALLTRIM(tvAlias))
  4915.     CASE TYPE("tvAlias")=="O"
  4916.         lcAlias="itemtypes"
  4917.         IF NOT EMPTY(tvType) AND TYPE("tvType")=="N"
  4918.             lnRecNo=tvType
  4919.         ENDIF
  4920.         DO CASE
  4921.             CASE NOT EMPTY(lcFileName)
  4922.                 llAddFile=.T.
  4923.                 oFolder=tvAlias
  4924.                 lcClass=tvType
  4925.             CASE lnRecNo=0 OR NOT BETWEEN(lnRecNo,1,RECCOUNT("itemtypes"))
  4926.                 lnRecNo=0
  4927.                 oFolder=tvAlias
  4928.                 lcAlias=oFolder.cSourceAlias
  4929.             OTHERWISE
  4930.                 oFolder=tvAlias
  4931.         ENDCASE
  4932.     OTHERWISE
  4933.         lcAlias=""
  4934. ENDCASE
  4935. IF EMPTY(lcAlias) OR TYPE("lcAlias")#"C" OR NOT USED(lcAlias)
  4936.     toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  4937.             M_NODE_LOC+[ ]+M_ERROR_LOC+[ 1],16)
  4938.     toBrowser.vResult=.NULL.
  4939.     RETURN .NULL.
  4940. ENDIF
  4941. lnLastSelect=SELECT()
  4942. lnLastRecNo=IIF(USED() AND NOT EOF(),RECNO(),0)
  4943. IF NOT ISNULL(oFolder)
  4944.     SELECT itemtypes
  4945.     SET ORDER TO
  4946.     IF NOT llAddFile
  4947.         GO lnRecNo
  4948.         lcType=UPPER(ALLTRIM(MLINE(Property,1)))
  4949.         lcClass=LOWER(ALLTRIM(MLINE(Class,1)))
  4950.     ELSE
  4951.         lnRecNo=0
  4952.         IF EMPTY(tvType)
  4953.             toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  4954.                     M_NODE_LOC+[ ]+M_ERROR_LOC+[ 2],16)
  4955.             SELECT (lnLastSelect)
  4956.             toBrowser.vResult=.NULL.
  4957.             RETURN .NULL.
  4958.         ENDIF
  4959.         lcType=ALLTRIM(tvType)
  4960.         DO CASE
  4961.             CASE lcType=="FOLDER"
  4962.                 lcClass=toBrowser.cFolderClass
  4963.             CASE lcType=="ITEM"
  4964.                 lcClass=toBrowser.cItemClass
  4965.             CASE lcType=="OBJECT"
  4966.                 lcClass=toBrowser.cObjectClass
  4967.             CASE lcType=="VIEW"
  4968.                 lcClass=toBrowser.cViewClass
  4969.             CASE lcType=="NODE"
  4970.                 lcClass=toBrowser.cNodeClass
  4971.             OTHERWISE
  4972.                 LOCATE FOR LOWER(ALLTRIM(Class))==LOWER(ALLTRIM(lcType))
  4973.                 IF EOF()
  4974.                     SELECT (lnLastSelect)
  4975.                     toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  4976.                             M_NODE_LOC+[ ]+M_ERROR_LOC+[ 3],16)
  4977.                     toBrowser.vResult=.NULL.
  4978.                     RETURN .NULL.
  4979.                 ENDIF
  4980.                 lnRecNo=RECNO()
  4981.                 lcType=UPPER(ALLTRIM(MLINE(Property,1)))
  4982.                 lcClass=LOWER(ALLTRIM(MLINE(Class,1)))
  4983.         ENDCASE
  4984.     ENDIF
  4985.     IF EMPTY(lcType)
  4986.         SELECT (lnLastSelect)
  4987.         toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  4988.                 M_NODE_LOC+[ ]+M_ERROR_LOC+[ 4],16)
  4989.         toBrowser.vResult=.NULL.
  4990.         RETURN .NULL.
  4991.     ENDIF
  4992.     IF NOT llAddFile
  4993.         lcGetFileExt=LOWER(ALLTRIM(GetFileExt))
  4994.         IF NOT EMPTY(lcGetFileExt)
  4995.             IF ATC("htm",lcGetFileExt)>0
  4996.                 lcFileName=toBrowser.oFolder.GetFileAddress(.T.,lcGetFileExt)
  4997.             ELSE
  4998.                 DO WHILE .T.
  4999.                     lcFileName=toBrowser.GetFile(lcGetFileExt,.T.)
  5000.                     IF EMPTY(lcFileName) OR "/"$lcFileName OR ","$lcFileName OR ;
  5001.                             FILE(lcFileName)
  5002.                         EXIT
  5003.                     ENDIF
  5004.                     MESSAGEBOX(M_FILE_LOC+[ "]+lcFileName+[" ]+M_NOT_FOUND_LOC+[.],16, ;
  5005.                             toBrowser.Caption)
  5006.                 ENDDO
  5007.             ENDIF
  5008.             lnAtPos=AT(",",lcFileName)
  5009.             IF lnAtPos>0
  5010.                 lcNewClass=ALLTRIM(SUBSTR(lcFileName,lnAtPos+1))
  5011.                 lcFileName=ALLTRIM(LEFT(lcFileName,lnAtPos-1))
  5012.             ENDIF
  5013.             IF EMPTY(lcFileName)
  5014.                 SELECT (lnLastSelect)
  5015.                 toBrowser.vResult=.NULL.
  5016.                 RETURN .NULL.
  5017.             ENDIF
  5018.         ENDIF
  5019.     ENDIF
  5020.     lcFileExt=JUSTEXT(lcFileName)
  5021.     IF NOT EMPTY(lcFileExt)
  5022.         lcItemTypes=ALLTRIM(ItemTypes)
  5023.         lnAtPos=ATC(CR+lcFileExt+"=",lcItemTypes)
  5024.         IF lnAtPos>0
  5025.             lcClass=LOWER(MLINE(SUBSTR(lcItemTypes,lnAtPos+LEN(lcFileExt)+2),1))
  5026.         ENDIF
  5027.     ENDIF
  5028.     IF NOT EMPTY(ClassLib)
  5029.         lcClassLibrary=LOWER(ALLTRIM(MLINE(ClassLib,1)))
  5030.         lcClass=lcClassLibrary+","+lcClass
  5031.     ENDIF
  5032.     oNode=toBrowser.CreateNode(oFolder.cSourceAlias,lcClass)
  5033.     IF ISNULL(oNode)
  5034.         SELECT (lnLastSelect)
  5035.         toBrowser.vResult=.NULL.
  5036.         RETURN .NULL.
  5037.     ENDIF
  5038.     lcAlias=tvAlias.cAlias
  5039.     WITH oNode
  5040.         .cAlias=lcAlias
  5041.         .oFolder=oFolder
  5042.         .oParent=.oFolder
  5043.         .cParent=.oParent.cID
  5044.         IF .oParent.lDynamic
  5045.             .lDynamic=.T.
  5046.         ENDIF
  5047.         IF EMPTY(lcFileName)
  5048.             lcText=M_NEW_LOC+" "+CHRTRAN(ALLTRIM(Text),"*~\<>","")
  5049.         ELSE
  5050.             lcText=IIF(NOT EMPTY(lcNewClass),lcNewClass,JUSTFNAME(lcFileName))
  5051.         ENDIF
  5052.         lcClassLibrary=LOWER(.FullPath(lcClassLibrary))
  5053.         lnDuplicateCount=0
  5054.         FOR lnCount = 1 TO toBrowser.nItemCount
  5055.             oItem=toBrowser.aItemList[lnCount]
  5056.             IF VARTYPE(oItem)#"O" OR NOT oItem.cParent==.cParent OR ;
  5057.                     NOT oItem.Visible OR oItem.lDeleted
  5058.                 LOOP
  5059.             ENDIF
  5060.             lcText2=ALLTRIM(LOWER(oItem.cText))
  5061.             lnAtPos=RAT("(",lcText2)
  5062.             IF lnAtPos>0
  5063.                 lnMaxCount=VAL(SUBSTR(lcText2,lnAtPos+1))
  5064.                 lcText2=ALLTRIM(LEFT(lcText2,lnAtPos-1))
  5065.             ELSE
  5066.                 lnMaxCount=0
  5067.             ENDIF
  5068.             IF lcText2==LOWER(lcText)
  5069.                 lnDuplicateCount=MAX(lnDuplicateCount+1,lnMaxCount)
  5070.             ENDIF
  5071.         ENDFOR
  5072.         oItem=.NULL.
  5073.         IF lnDuplicateCount>0
  5074.             lcText=lcText+" ("+ALLTRIM(STR(lnDuplicateCount+1))+")"
  5075.         ENDIF
  5076.         IF EMPTY(.cText)
  5077.             .cText=lcText
  5078.         ENDIF
  5079.         IF NOT EMPTY(Desc)
  5080.             .cDesc=ALLTRIM(Desc)
  5081.         ENDIF
  5082.         IF NOT EMPTY(lcClassLibrary)
  5083.             .cClassLib=lcClassLibrary
  5084.         ENDIF
  5085.         IF NOT EMPTY(ItemClass)
  5086.             .cItemClass=ALLTRIM(MLINE(ItemClass,1))
  5087.         ENDIF
  5088.         IF NOT EMPTY(lcFileName)
  5089.             .cFileName=lcFileName
  5090.         ENDIF
  5091.         IF NOT EMPTY(lcNewClass)
  5092.             .cClass=lcNewClass
  5093.         ENDIF
  5094.         IF NOT EMPTY(.cPicture)
  5095.             .cPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cPicture)))
  5096.         ENDIF
  5097.         IF NOT EMPTY(.cFolderPicture)
  5098.             .cFolderPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cFolderPicture)))
  5099.         ENDIF
  5100.         lcScriptCode=ALLTRIM(Script)
  5101.         SELECT 0
  5102.         .SetProperties(.cProperties)
  5103.         IF NOT EMPTY(lcScriptCode)
  5104.             .RunCode(lcScriptCode)
  5105.         ENDIF
  5106.         IF NOT tlNoWriteProperties
  5107.             .WriteProperties(.T.,.T.)
  5108.         ENDIF
  5109.         IF tlRefresh
  5110.             lcID=.cID
  5111.             toBrowser.RefreshBrowser
  5112.             toBrowser.SelectItem(lcID,.T.)
  5113.         ENDIF
  5114.     ENDWITH
  5115.     SELECT 0
  5116.     toBrowser.vResult=oNode
  5117.     RETURN oNode
  5118. ENDIF
  5119. llCopyNode=.F.
  5120. oRecord=.NULL.
  5121. DO CASE
  5122.     CASE TYPE("tvType")=="C"
  5123.         lcType=UPPER(ALLTRIM(tvType))
  5124.     CASE TYPE("tvType")=="O"
  5125.         oRecord=tvType
  5126.         IF PEMSTATUS(tvType,"ParentClass",5)
  5127.             IF NOT PEMSTATUS(oRecord,"cType",5) OR NOT PEMSTATUS(oRecord,"cAlias",5) OR ;
  5128.                     NOT PEMSTATUS(oRecord,"nRecNo",5) OR NOT USED(oRecord.cAlias) OR ;
  5129.                     oRecord.nRecNo<=0
  5130.                 toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  5131.                         M_NODE_LOC+[ ]+M_ERROR_LOC+[ 5],16)
  5132.                 toBrowser.vResult=.NULL.
  5133.                 RETURN .NULL.
  5134.             ENDIF
  5135.             llCopyNode=.T.
  5136.             oRecord=tvType.oRecord
  5137.             IF ISNULL(oRecord)
  5138.                 toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  5139.                         M_NODE_LOC+[ ]+M_ERROR_LOC+[ 6],16)
  5140.                 toBrowser.vResult=.NULL.
  5141.                 RETURN .NULL.
  5142.             ENDIF
  5143.         ENDIF
  5144.         IF NOT PEMSTATUS(oRecord,"Type",5)
  5145.             toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  5146.                     M_NODE_LOC+[ ]+M_ERROR_LOC+[ 7],16)
  5147.             toBrowser.vResult=.NULL.
  5148.             RETURN .NULL.
  5149.         ENDIF
  5150.         lcType=UPPER(ALLTRIM(oRecord.Type))
  5151.     OTHERWISE
  5152.             toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  5153.                     M_NODE_LOC+[ ]+M_ERROR_LOC+[ 8],16)
  5154.         toBrowser.vResult=.NULL.
  5155.         RETURN .NULL.
  5156. ENDCASE
  5157. IF EMPTY(lcClass)
  5158.     DO CASE
  5159.         CASE lcType=="FOLDER"
  5160.             lcClass=toBrowser.cFolderClass
  5161.         CASE lcType=="ITEM"
  5162.             lcClass=toBrowser.cItemClass
  5163.         CASE lcType=="OBJECT"
  5164.             lcClass=toBrowser.cObjectClass
  5165.         CASE lcType=="VIEW"
  5166.             lcClass=toBrowser.cViewClass
  5167.         CASE lcType=="NODE"
  5168.             lcClass=toBrowser.cNodeClass
  5169.         OTHERWISE
  5170.             lcClass=LOWER(lcType)
  5171.             lcType=""
  5172.             lnAtPos=AT(",",lcClass)
  5173.             IF lnAtPos>0
  5174.                 lcClassLibrary=LOWER(ALLTRIM(MLINE(LEFT(lcClass,lnAtPos-1),1)))
  5175.                 lcClass=LOWER(ALLTRIM(SUBSTR(lcClass,lnAtPos+1)))
  5176.             ENDIF
  5177.             IF EMPTY(lcClass)
  5178.                 lcClass=toBrowser.cItemClass
  5179.             ENDIF
  5180.     ENDCASE
  5181. ENDIF
  5182. lcSourceAlias=lcAlias
  5183. lcSourceCatalog=LOWER(DBF(lcSourceAlias))
  5184. lcID=LOWER(SYS(2015))
  5185. lcClassLibraryAlias=LOWER(SYS(2015))
  5186. IF EMPTY(lcClassLibrary)
  5187.     lcClassLibrary=toBrowser.cDefaultCatalogClassLibrary
  5188. ELSE
  5189.     IF EMPTY(JUSTEXT(lcClassLibrary))
  5190.         lcClassLibrary=FORCEEXT(lcClassLibrary,"vcx")
  5191.     ENDIF
  5192.     lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,toBrowser.cDefaultCatalogPath))
  5193.     IF EMPTY(SYS(2000,lcClassLibrary))
  5194.         lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,JUSTPATH(lcSourceCatalog)))
  5195.     ENDIF
  5196. ENDIF
  5197. oNode=NEWOBJECT(lcClass,lcClassLibrary)
  5198. IF TYPE("oNode")#"O" OR ISNULL(oNode)
  5199.     SELECT (lnLastSelect)
  5200.     IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  5201.         GO lnLastRecNo
  5202.     ENDIF
  5203.     toBrowser.MsgBox(M_NODE_LOC+[ ]+M_COULD_NOT_BE_CREATED_LOC+[.  ]+ ;
  5204.             M_NODE_LOC+[ ]+M_ERROR_LOC+[ 9],16)
  5205.     toBrowser.vResult=.NULL.
  5206.     RETURN .NULL.
  5207. ENDIF
  5208. WITH oNode
  5209.     SELECT (lcAlias)
  5210.     .oHost=toBrowser
  5211.     .oRecord=oRecord
  5212.     IF NOT EMPTY(lcType)
  5213.         .cType=lcType
  5214.     ELSE
  5215.         .cType=IIF(.lFolder,"FOLDER","ITEM")
  5216.         .cClassName=LOWER(.Class)
  5217.         .cClassLib=LOWER(.ClassLibrary)
  5218.     ENDIF
  5219.     .cSourceAlias=lcSourceAlias
  5220.     .cSourceCatalog=lcSourceCatalog
  5221.     .cSourceCatalogPath=IIF(EMPTY(.cSourceCatalog),"",JUSTPATH(.cSourceCatalog)+"\")
  5222.     .oLink=oNode
  5223.     .oAction=oNode
  5224.     .oShortCutMenu=.oHost.oShortCutMenu
  5225.     .oShortCutMenu.oHost=oNode
  5226.     .cAlias=lcAlias
  5227.     IF NOT ISNULL(oRecord)
  5228.         IF llCopyNode
  5229.             WITH oRecord
  5230.                 .ID=lcID
  5231.                 .SrcAlias=tvType.cSourceAlias
  5232.                 .SrcRecNo=0
  5233.                 .Updated={:}
  5234.             ENDWITH
  5235.         ENDIF
  5236.         APPEND BLANK
  5237.         GATHER MEMO NAME oRecord
  5238.         .nRecNo=RECNO()
  5239.         .ReadProperties
  5240.         .SetProperties(.cProperties)
  5241.         IF llCopyNode
  5242.             .cSourceAlias=oRecord.SrcAlias
  5243.             .nSourceRecNo=oRecord.SrcRecNo
  5244.         ELSE
  5245.             .nSourceRecNo=-1
  5246.         ENDIF
  5247.     ENDIF
  5248.     IF EMPTY(.cID)
  5249.         .cID=lcID
  5250.     ENDIF
  5251.     IF EMPTY(.cType)
  5252.         .cType=lcType
  5253.     ENDIF
  5254. ENDWITH
  5255. SELECT (lnLastSelect)
  5256. IF USED() AND BETWEEN(lnLastRecNo,1,RECCOUNT())
  5257.     GO lnLastRecNo
  5258. ENDIF
  5259. IF tlRefresh
  5260.     lcID=oNode.cID
  5261.     toBrowser.RefreshBrowser
  5262.     toBrowser.SelectItem(lcID,.T.)
  5263. ENDIF
  5264. toBrowser.vResult=oNode
  5265. RETURN oNode
  5266. ENDFUNC
  5267.  
  5268.  
  5269.  
  5270. FUNCTION brwReadProperties(toNode)
  5271. LOCAL toBrowser,lnLastSelect
  5272.  
  5273. toBrowser=toNode.oHost
  5274. SET DATASESSION TO (toBrowser.DataSessionID)
  5275. IF toNode.nRecNo<=0 OR EMPTY(toNode.cAlias) OR NOT USED(toNode.cAlias)
  5276.     toNode.vResult=.F.
  5277.     RETURN toBrowser.vResult
  5278. ENDIF
  5279. WITH toNode
  5280.     lnLastSelect=SELECT()
  5281.     SELECT (.cAlias)
  5282.     GO .nRecNo
  5283.     .cType=ALLTRIM(Type)
  5284.     .cID=ALLTRIM(ID)
  5285.     .cParent=ALLTRIM(Parent)
  5286.     .cLink=ALLTRIM(Link)
  5287.     IF NOT EMPTY(Text)
  5288.         .cText=ALLTRIM(Text)
  5289.     ENDIF
  5290.     IF NOT EMPTY(TypeDesc)
  5291.         .cTypeDesc=ALLTRIM(TypeDesc)
  5292.     ENDIF
  5293.     IF NOT EMPTY(Desc)
  5294.         .cDesc=ALLTRIM(Desc)
  5295.     ENDIF
  5296.     IF NOT EMPTY(Properties)
  5297.         .cProperties=ALLTRIM(Properties)
  5298.     ENDIF
  5299.     IF NOT EMPTY(FileName)
  5300.         .cFileName=MLINE(FileName,1)
  5301.     ENDIF
  5302.     IF NOT EMPTY(.cFileName)
  5303.         .cFileName=LOWER(.FullPath(.cFileName))
  5304.     ENDIF
  5305.     IF NOT EMPTY(Class)
  5306.         .cClass=LOWER(ALLTRIM(MLINE(Class,1)))
  5307.     ENDIF
  5308.     IF NOT EMPTY(Picture)
  5309.         .cPicture=MLINE(Picture,1)
  5310.     ENDIF
  5311.     IF NOT EMPTY(.cPicture)
  5312.         .cPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cPicture)))
  5313.     ENDIF
  5314.     IF NOT EMPTY(FolderPict)
  5315.         .cFolderPicture=MLINE(FolderPict,1)
  5316.     ENDIF
  5317.     IF NOT EMPTY(.cFolderPicture)
  5318.         .cFolderPicture=LOWER(brwImagePictureFile(toBrowser,.FullPath(.cFolderPicture)))
  5319.     ENDIF
  5320.     IF NOT EMPTY(Script)
  5321.         .cScript=ALLTRIM(Script)
  5322.     ENDIF
  5323.     IF NOT EMPTY(ClassLib)
  5324.         .cClassLib=MLINE(ClassLib,1)
  5325.     ENDIF
  5326.     IF NOT EMPTY(.cClassLib)
  5327.         .cClassLib=LOWER(.FullPath(.cClassLib))
  5328.     ENDIF
  5329.     IF NOT EMPTY(ClassName)
  5330.         .cClassName=LOWER(ALLTRIM(MLINE(ClassName,1)))
  5331.     ENDIF
  5332.     IF NOT EMPTY(ItemClass)
  5333.         .cItemClass=LOWER(ALLTRIM(MLINE(ItemClass,1)))
  5334.     ENDIF
  5335.     IF NOT EMPTY(ItemTpDesc)
  5336.         .cItemTpDesc=ALLTRIM(ItemTpDesc)
  5337.     ENDIF
  5338.     IF NOT EMPTY(Views)
  5339.         .cViews=ALLTRIM(Views)
  5340.     ENDIF
  5341.     IF NOT EMPTY(Keywords)
  5342.         .cKeywords=ALLTRIM(Keywords)
  5343.     ENDIF
  5344.     .tUpdated=Updated
  5345.     .cComment=ALLTRIM(Comment)
  5346.     .cUser=ALLTRIM(User)
  5347.     .SetProperties(.cProperties)
  5348. ENDWITH
  5349. SELECT (lnLastSelect)
  5350. ENDFUNC
  5351.  
  5352.  
  5353.  
  5354. FUNCTION brwWriteProperties(toNode,tlUpdateSource,tlAutoAdd)
  5355. LOCAL toBrowser,lnLastSelect,lcType,oRecord,lcProperties,oRecord,lcClauses,lcClass
  5356. LOCAL oParent,lcFileName,lcPicture,lcFolderPicture,lcClassLib,lnLastMLine
  5357. LOCAL lnAtPos,lcProperty,lcProperty2,lcValue,lvValue,lvDefaultValue,lcDesc
  5358. LOCAL lcAlias,lcSourceCatalog,lcSourceCatalogPath,lcSourceAlias,lcPictureFile
  5359.  
  5360. toBrowser=toNode.oHost
  5361. SET DATASESSION TO (toBrowser.DataSessionID)
  5362. lcAlias=LOWER(toNode.cAlias)
  5363. IF EMPTY(lcAlias) OR NOT USED(lcAlias)
  5364.     toNode.vResult=.F.
  5365.     RETURN toBrowser.vResult
  5366. ENDIF
  5367. lnLastMLine=_mline
  5368. SET DATASESSION TO toBrowser.DataSessionID
  5369. lnLastSelect=SELECT()
  5370. SELECT (lcAlias)
  5371. WITH toNode
  5372.     lcType=UPPER(ALLTRIM(.cType))
  5373.     lcClass=LOWER(ALLTRIM(.cClassName))
  5374.     IF EMPTY(lcClass)
  5375.         oParent=.oParent
  5376.         IF ISNULL(oParent) AND NOT EMPTY(.cParent)
  5377.             oParent=toBrowser.GetFolder(.cParent,.T.)
  5378.         ENDIF
  5379.         IF NOT ISNULL(oParent)
  5380.             DO WHILE .T.
  5381.                 lcClass=LOWER(ALLTRIM(oParent.cItemClass))
  5382.                 IF NOT EMPTY(lcClass) OR oParent.cID==oParent.oFolder.cID
  5383.                     EXIT
  5384.                 ENDIF
  5385.                 oParent=oParent.oFolder
  5386.             ENDDO
  5387.         ENDIF
  5388.         oParent=.NULL.
  5389.     ENDIF
  5390.     IF EMPTY(lcClass)
  5391.         lcClass=LOWER(ALLTRIM(.Class))
  5392.     ENDIF
  5393.     IF .nRecNo<=0
  5394.         APPEND BLANK
  5395.         .nRecNo=RECNO()
  5396.     ELSE
  5397.         IF NOT BETWEEN(.nRecNo,1,RECCOUNT())
  5398.             SELECT (lnLastSelect)
  5399.             toNode.vResult=.F.
  5400.             RETURN toBrowser.vResult
  5401.         ENDIF
  5402.         GO .nRecNo
  5403.     ENDIF
  5404.     lcProperties=.cProperties
  5405.     IF ATC("lFullPath=",lcProperties)>0
  5406.         brwPropertyStuff(@lcProperties,"lFullPath",IIF(.lFullPath,".T.",".F."), ;
  5407.                 IIF(GETPEM(.Class,"lFullPath"),".T.",".F."),tlAutoAdd)
  5408.     ENDIF
  5409.     IF .lView
  5410.         brwPropertyStuff(@lcProperties,"cContaining",.cContaining, ;
  5411.                     GETPEM(.Class,"cContaining"),.T.)
  5412.         brwPropertyStuff(@lcProperties,"cLookIn",.cLookIn, ;
  5413.                     GETPEM(.Class,"cLookIn"),.T.)
  5414.         brwPropertyStuff(@lcProperties,"cKeywordList",.cKeywordList, ;
  5415.                     GETPEM(.Class,"cKeywordList"),.T.)
  5416.         brwPropertyStuff(@lcProperties,"lItemName",IIF(.lItemName,".T.",".F."), ;
  5417.                 IIF(GETPEM(.Class,"lItemName"),".T.",".F."),.T.)
  5418.         brwPropertyStuff(@lcProperties,"lDescription",IIF(.lDescription,".T.",".F."), ;
  5419.                 IIF(GETPEM(.Class,"lDescription"),".T.",".F."),.T.)
  5420.         brwPropertyStuff(@lcProperties,"lFileName",IIF(.lFileName,".T.",".F."), ;
  5421.                 IIF(GETPEM(.Class,"lFileName"),".T.",".F."),.T.)
  5422.         brwPropertyStuff(@lcProperties,"lClassName",IIF(.lClassName,".T.",".F."), ;
  5423.                 IIF(GETPEM(.Class,"lClassName"),".T.",".F."),.T.)
  5424.         brwPropertyStuff(@lcProperties,"lProperties",IIF(.lProperties,".T.",".F."), ;
  5425.                 IIF(GETPEM(.Class,"lProperties"),".T.",".F."),.T.)
  5426.         brwPropertyStuff(@lcProperties,"cItemTypes",.cItemTypes, ;
  5427.                     GETPEM(.Class,"cItemTypes"),.T.)
  5428.     ENDIF
  5429.     SELECT itemtypes
  5430.     SET ORDER TO Class
  5431.     LOCATE
  5432.     SEEK lcClass
  5433.     IF EOF()
  5434.         LOCATE
  5435.         lcClauses=[ALL FOR ATC("="+lcClass+CR,ItemTypes)>0]
  5436.     ELSE
  5437.         lcClauses=[REST WHILE ALLTRIM(Class)==lcClass]
  5438.     ENDIF
  5439.     SCAN &lcClauses 
  5440.         lcProperty=LOWER(ALLTRIM(Property))
  5441.         lnAtPos=AT("[",lcProperty)
  5442.         IF lnAtPos=0
  5443.             lnAtPos=AT("(",lcProperty)
  5444.             IF lnAtPos>0
  5445.                 lcProperty=STRTRAN(STRTRAN(lcProperty,"(","["),")","]")
  5446.             ENDIF
  5447.         ENDIF
  5448.         lcProperty2=IIF(lnAtPos=0,lcProperty,ALLTRIM(LEFT(lcProperty,lnAtPos-1)))
  5449.         IF EMPTY(lcProperty) OR INLIST(lcProperty+" ","cfilename ","cclass ","cpicture ", ;
  5450.                 "cfolderpicture ","classlib ","classname ","itemclass ","cfoldertype ") OR ;
  5451.                 NOT PEMSTATUS(toNode,lcProperty2,5)
  5452.             LOOP
  5453.         ENDIF
  5454.         lvValue=EVALUATE("toNode."+lcProperty)
  5455.         IF TYPE("lvValue")=="U"
  5456.             LOOP
  5457.         ENDIF
  5458.         IF TYPE("lvValue")#"C"
  5459.             lvValue=TRANSFORM(lvValue)
  5460.         ENDIF
  5461.         lvDefaultValue=IIF(lcProperty==lcProperty2,TRANSFORM(GETPEM(.Class,lcProperty)),"")
  5462.         brwPropertyStuff(@lcProperties,lcProperty,lvValue,lvDefaultValue,.T.)
  5463.     ENDSCAN
  5464.     SELECT (lcAlias)
  5465.     .tUpdated=DATETIME()
  5466.     .cProperties=lcProperties
  5467.     IF tlUpdateSource
  5468.         lnAtPos=AT("!",.cParent)
  5469.         IF lnAtPos>0
  5470.             .cParent=ALLTRIM(SUBSTR(.cParent,lnAtPos+1))
  5471.         ENDIF
  5472.     ENDIF
  5473.     REPLACE Type WITH lcType, ID WITH toBrowser.ValidID(.cID), ;
  5474.                 Link WITH .cLink, Parent WITH .cParent
  5475.     lcSourceCatalog=.cSourceCatalog
  5476.     IF EMPTY(lcSourceCatalog)
  5477.         lcSourceCatalog=LOWER(DBF(lcAlias))
  5478.     ENDIF
  5479.     lcSourceCatalogPath=IIF(EMPTY(lcSourceCatalog),"",JUSTPATH(lcSourceCatalog)+"\")
  5480.     lcSourceAlias=.cSourceAlias
  5481.     lcFileName=ALLTRIM(.cFileName)
  5482.     IF NOT EMPTY(lcFileName)
  5483.         IF "\\"$lcFileName OR SUBSTR(lcFileName,5,1)==":" OR LEFT(lcFileName,4)=="www."
  5484.             IF "\\"$lcFileName AND NOT "."$lcFileName AND NOT RIGHT(lcFileName,1)=="\"
  5485.                 lcFileName=lcFileName+"\"
  5486.             ENDIF
  5487.             lcFileName=LOWER(ALLTRIM(lcFileName))
  5488.         ELSE
  5489.             lcFileName=LOWER(SYS(2014,lcFileName,lcSourceCatalogPath))
  5490.         ENDIF
  5491.     ENDIF
  5492.     lcPicture=brwImagePictureFile(toBrowser,.cPicture,lcSourceCatalogPath)
  5493.     IF NOT EMPTY(.cFolderPicture) AND INLIST(LOWER(JUSTFNAME(.cFolderPicture)), ;
  5494.             "catalog.ico","openctlg.ico","folder.ico","openfldr.ico", ;
  5495.             "web_file.ico","web_site.ico","web_doc.ico","explorer.ico")
  5496.         lcFolderPicture=""
  5497.     ELSE
  5498.         lcFolderPicture=brwImagePictureFile(toBrowser,.cFolderPicture,lcSourceCatalogPath)
  5499.     ENDIF
  5500.     lcClassLib=.cClassLib
  5501.     IF NOT EMPTY(lcClassLib)
  5502.         lcClassLib=LOWER(SYS(2014,lcClassLib,lcSourceCatalogPath))
  5503.     ENDIF
  5504.     IF TYPE(".oRecord")=="O"
  5505.         lcValue=.oRecord.FileName
  5506.         IF LEFT(lcValue,1)=="(" AND RIGHT(lcValue,1)==")"
  5507.             lvValue=EVALUATE(SUBSTR(lcValue,2,LEN(lcValue)-2))
  5508.             IF LOWER(JUSTFNAME(lvValue))==LOWER(JUSTFNAME(lcFileName))
  5509.                 lcFileName=.oRecord.FileName
  5510.             ENDIF
  5511.         ENDIF
  5512.         lcValue=.oRecord.Picture
  5513.         IF LEFT(lcValue,1)=="(" AND RIGHT(lcValue,1)==")"
  5514.             lvValue=EVALUATE(SUBSTR(lcValue,2,LEN(lcValue)-2))
  5515.             IF LOWER(JUSTFNAME(lvValue))==LOWER(JUSTFNAME(lcPicture))
  5516.                 lcPicture=.oRecord.Picture
  5517.             ENDIF
  5518.         ENDIF
  5519.         lcValue=.oRecord.FolderPict
  5520.         IF LEFT(lcValue,1)=="(" AND RIGHT(lcValue,1)==")"
  5521.             lvValue=EVALUATE(SUBSTR(lcValue,2,LEN(lcValue)-2))
  5522.             IF LOWER(JUSTFNAME(lvValue))==LOWER(JUSTFNAME(lcFolderPicture))
  5523.                 lcFolderPicture=.oRecord.FolderPict
  5524.             ENDIF
  5525.         ENDIF
  5526.         lcValue=.oRecord.ClassLib
  5527.         IF LEFT(lcValue,1)=="(" AND RIGHT(lcValue,1)==")"
  5528.             lvValue=EVALUATE(SUBSTR(lcValue,2,LEN(lcValue)-2))
  5529.             IF LOWER(JUSTFNAME(lvValue))==LOWER(JUSTFNAME(lcClassLib))
  5530.                 lcClassLib=.oRecord.ClassLib
  5531.             ENDIF
  5532.         ENDIF
  5533.     ENDIF
  5534.     lcDesc=.cDesc
  5535.     IF lcDesc==.cText OR lcDesc==Text
  5536.         lcDesc=""
  5537.     ENDIF
  5538.     REPLACE Text WITH .cText, TypeDesc WITH .cTypeDesc, Desc WITH lcDesc, ;
  5539.             Class WITH .cClass, Properties WITH lcProperties, Script WITH .cScript, ;
  5540.             ClassName WITH .cClassName, ItemClass WITH .cItemClass, ;
  5541.             ItemTpDesc WITH .cItemTpDesc, Views WITH .cViews, Keywords WITH .cKeywords, ;
  5542.             Comment WITH .cComment, User WITH .cUser, FileName WITH lcFileName, ;
  5543.             Picture WITH lcPicture, FolderPict WITH lcFolderPicture, ;
  5544.             ClassLib WITH lcClassLib, Updated WITH .tUpdated
  5545.     oRecord=.NULL.
  5546.     SCATTER MEMO NAME oRecord
  5547.     .oRecord=oRecord
  5548.     IF tlUpdateSource AND NOT EMPTY(.cSourceAlias) AND USED(.cSourceAlias) AND ;
  5549.             .nSourceRecNo>=0
  5550.         IF LOWER(.cSourceAlias)==lcAlias
  5551.             .nSourceRecNo=RECNO()
  5552.             .cSourceAlias=lcSourceAlias
  5553.             .cSourceCatalog=LOWER(DBF(lcSourceAlias))
  5554.             .cSourceCatalogPath=IIF(EMPTY(.cCatalog),"",JUSTPATH(.cCatalog)+"\")
  5555.             REPLACE SrcAlias WITH .cSourceAlias, SrcRecNo WITH .nSourceRecNo
  5556.         ELSE
  5557.             IF .nSourceRecNo=0
  5558.                 SELECT (.cSourceAlias)
  5559.                 APPEND BLANK
  5560.                 .nSourceRecNo=RECNO()
  5561.                 REPLACE SrcRecNo WITH .nSourceRecNo
  5562.                 SELECT (lcAlias)
  5563.                 REPLACE SrcRecNo WITH .nSourceRecNo
  5564.             ENDIF
  5565.             oRecord=.NULL.
  5566.             SCATTER MEMO NAME oRecord
  5567.             SELECT (.cSourceAlias)
  5568.             GO .nSourceRecNo
  5569.             IF .oHost.nViewType>1 AND NOT EMPTY(ID)
  5570.                 oRecord.ID=ID
  5571.                 oRecord.Parent=Parent
  5572.                 oRecord.Link=Parent
  5573.             ENDIF
  5574.             GATHER MEMO NAME oRecord
  5575.             IF EMPTY(SrcAlias)
  5576.                 .cSourceAlias=lcSourceAlias
  5577.                 .cSourceCatalog=lcSourceCatalog
  5578.                 .cSourceCatalogPath=IIF(EMPTY(.cSourceCatalog),"",JUSTPATH(.cSourceCatalog)+"\")
  5579.                 .nSourceRecNo=RECNO()
  5580.             ENDIF
  5581.             REPLACE SrcAlias WITH .cSourceAlias, SrcRecNo WITH .nSourceRecNo
  5582.             SELECT (lcAlias)
  5583.             REPLACE SrcAlias WITH .cSourceAlias, SrcRecNo WITH .nSourceRecNo
  5584.             oRecord=.NULL.
  5585.         ENDIF
  5586.     ELSE
  5587.         IF EMPTY(SrcAlias)
  5588.             .cSourceAlias=lcSourceAlias
  5589.             .cSourceCatalog=LOWER(DBF(lcSourceAlias))
  5590.             .cSourceCatalogPath=IIF(EMPTY(.cCatalog),"",JUSTPATH(.cCatalog)+"\")
  5591.             REPLACE SrcAlias WITH .cSourceAlias, SrcRecNo WITH .nSourceRecNo
  5592.         ENDIF
  5593.     ENDIF
  5594. ENDWITH
  5595. SELECT (lnLastSelect)
  5596. _mline=lnLastMLine
  5597. ENDFUNC
  5598.  
  5599.  
  5600.  
  5601. FUNCTION brwImagePictureFile(toBrowser,tcFileName,tcCatalogPath)
  5602. LOCAL lcFileName,lcPictureFile
  5603.  
  5604. IF EMPTY(tcFileName)
  5605.     RETURN ""
  5606. ENDIF
  5607. lcFileName=LOWER(ALLTRIM(tcFileName))
  5608. lcPictureFile=JUSTFNAME(lcFileName)
  5609. IF ASCAN(toBrowser.aImageList,lcPictureFile)>0 AND ;
  5610.         ASCAN(toBrowser.aSmallImages,lcPictureFile)>0
  5611.     lcFileName=lcPictureFile
  5612. ELSE
  5613.     IF NOT EMPTY(tcCatalogPath) AND NOT "\\"$lcFileName
  5614.         lcFileName=LOWER(SYS(2014,lcFileName,tcCatalogPath))
  5615.     ENDIF
  5616. ENDIF
  5617. RETURN lcFileName
  5618. ENDFUNC
  5619.  
  5620.  
  5621.  
  5622. FUNCTION brwScaleResize(toBrowser)
  5623. LOCAL lnHeight,lnWidth,lnMaxHeight,lnMaxWidth,llWebBrowserVisible
  5624.  
  5625. WITH toBrowser
  5626.     lnHeight=.Height-.nLastHeight
  5627.     lnWidth=.Width-.nLastWidth
  5628.     lnMaxHeight=toBrowser.Height-2
  5629.     lnMaxWidth=toBrowser.Width-1
  5630.     IF (lnHeight=0 AND lnWidth=0) OR TYPE("toBrowser.cmdOpen")#"O" OR ;
  5631.             (.lOutlineOCX AND TYPE("toBrowser.oleClassList")#"O")
  5632.         .nLastHeight=.Height
  5633.         .nLastWidth=.Width
  5634.         .vResult=.F.
  5635.         RETURN .vResult
  5636.     ENDIF
  5637.     .LockScreen=.T.
  5638.     IF .lInitialized AND NOT .lRefreshBrowserMode
  5639.         IF .lOutlineOCX
  5640.             IF .lBrowser
  5641.                 .oleClassList.Enabled=.F.
  5642.                 .oleClassList.Visible=.F.
  5643.                 .oleMembers.Enabled=.F.
  5644.                 .oleMembers.Visible=.F.
  5645.             ELSE
  5646.                 .oleFolderList.Enabled=.F.
  5647.                 .oleFolderList.Visible=.F.
  5648.                 .oleItems.Visible=.F.
  5649.                 IF .lWebBrowser
  5650.                     llWebBrowserVisible=.oleWebBrowser.Visible
  5651.                     .oleWebBrowser.Stop
  5652.                     .oleWebBrowser.Visible=.F.
  5653.                 ENDIF
  5654.             ENDIF
  5655.         ENDIF
  5656.     ENDIF
  5657.     IF lnHeight#0
  5658.         .txtClassList3D.Height=MAX(.txtClassList3D.Height+lnHeight,0)
  5659.         .txtMembers3D.Height=.txtClassList3D.Height
  5660.         IF .lOutlineOCX
  5661.             .oleClassList.Height=MAX(.oleClassList.Height+lnHeight,0)
  5662.             .oleMembers.Height=.oleClassList.Height
  5663.             .oleFolderList.Height=MAX(.oleFolderList.Height+lnHeight,0)
  5664.             .oleItems.Height=.oleFolderList.Height+2
  5665.             IF .lWebBrowser
  5666.                 .oleWebBrowser.Height=.oleFolderList.Height
  5667.             ENDIF
  5668.             .edtItemDesc.Top=MAX(.edtItemDesc.Top+lnHeight,0)
  5669.             .edtItemDesc.Height=MAX(lnMaxHeight-.edtItemDesc.Top,0)
  5670.         ELSE
  5671.             .lstClassList.Height=.txtClassList3D.Height
  5672.             .lstMembers.Height=.txtMembers3D.Height
  5673.         ENDIF
  5674.         .edtClassDesc.Top=MAX(.edtClassDesc.Top+lnHeight,0)
  5675.         .edtClassDesc.Height=MAX(lnMaxHeight-.edtClassDesc.Top,0)
  5676.         .edtMemberDesc.Top=.edtClassDesc.Top
  5677.         .edtMemberDesc.Height=.edtClassDesc.Height
  5678.         .MinHeight=IIF(.lBrowser,.edtClassDesc.Height,.edtItemDesc.Height)+.nMinHeightOffset
  5679.         IF .lBrowser
  5680.             .shpSplitterV.Height=MAX(lnMaxHeight-.shpSplitterV.Top,0)
  5681.             .shpSplitterH.Top=.edtClassDesc.Top-4
  5682.         ELSE
  5683.             .shpSplitterV.Height=.oleFolderList.Height
  5684.             .shpSplitterH.Top=.edtItemDesc.Top-4
  5685.         ENDIF
  5686.     ENDIF
  5687.     IF lnWidth#0
  5688.         .txtMembers3D.Width=MAX(lnMaxWidth-.txtMembers3D.Left,0)
  5689.         IF .lOutlineOCX
  5690.             .oleMembers.Width=MAX(lnMaxWidth-.oleMembers.Left,0)
  5691.             .oleItems.Width=MAX(lnMaxWidth-.oleItems.Left,0)
  5692.             IF .lWebBrowser
  5693.                 .oleWebBrowser.Width=.oleItems.Width
  5694.             ENDIF
  5695.             .edtMemberDesc.Width=.oleMembers.Width
  5696.             .edtItemDesc.Width=MAX(lnMaxWidth-.edtItemDesc.Left,0)
  5697.             .shpSplitterV.Left=IIF(.lBrowser,.oleMembers.Left,.oleItems.Left)-4
  5698.         ELSE
  5699.             .lstMembers.Width=MAX(lnMaxWidth-.lstMembers.Left,0)
  5700.             .edtMemberDesc.Width=.lstMembers.Width
  5701.             .shpSplitterV.Left=.lstMembers.Left-4
  5702.         ENDIF
  5703.         .shpSplitterH.Width=MAX(lnMaxWidth-.shpSplitterH.Left,0)
  5704.     ENDIF
  5705.     .Cls
  5706.     .LockScreen=.F.
  5707.     IF .lInitialized AND NOT .lRefreshBrowserMode
  5708.         IF .lOutlineOCX
  5709.             .oleClassList.Enabled=.T.
  5710.             .oleClassList.Visible=.lBrowser
  5711.             .oleMembers.Enabled=.T.
  5712.             .oleMembers.Visible=.lBrowser
  5713.             .oleFolderList.Enabled=.T.
  5714.             .oleFolderList.Visible=(NOT .lBrowser)
  5715.             .oleItems.Visible=(NOT .lBrowser AND NOT .lWebView)
  5716.             IF .lWebBrowser
  5717.                 .oleWebBrowser.Visible=llWebBrowserVisible
  5718.             ENDIF
  5719.         ENDIF
  5720.     ENDIF
  5721.     .nLastHeight=.Height
  5722.     .nLastWidth=.Width
  5723.     IF .lInitialized
  5724.         .SavePreferences
  5725.     ENDIF
  5726. ENDWITH
  5727. ENDFUNC
  5728.  
  5729.  
  5730.  
  5731. FUNCTION brwFind(toBrowser,tcFind)
  5732. LOCAL llCancel,oFind2Form,llEditMode,lcViewType,oLastView,lnLastSelect
  5733.  
  5734. IF toBrowser.lBrowser
  5735.     toBrowser.vResult=toBrowser.FindClass(tcFind)
  5736.     RETURN toBrowser.vResult
  5737. ENDIF
  5738. IF toBrowser.AddInMethod("FIND")
  5739.     RETURN
  5740. ENDIF
  5741. IF toBrowser.nFolderCount=0
  5742.     toBrowser.vResult=.F.
  5743.     RETURN toBrowser.vResult
  5744. ENDIF
  5745. SET MESSAGE TO M_LOADING_LOC+" "+M_FIND_LOC+" ..."
  5746. oLastView=toBrowser.oView
  5747. llEditMode=(NOT ISNULL(toBrowser.oView) AND toBrowser.oView.lEditMode)
  5748. lnLastSelect=SELECT()
  5749. toBrowser.lModalDialog=.T.
  5750. DO FORM brwfind2 NAME oFind2Form WITH (toBrowser) TO llCancel
  5751. SET DATASESSION TO toBrowser.DataSessionID
  5752. SELECT (lnLastSelect)
  5753. SET MESSAGE TO
  5754. IF llEditMode
  5755.     RETURN
  5756. ENDIF
  5757. WITH toBrowser
  5758.     IF llCancel OR ISNULL(.oView) OR EMPTY(.oView.cText)
  5759.         .oView=oLastView
  5760.         .vResult=.F.
  5761.         RETURN .vResult
  5762.     ENDIF
  5763.     lcViewType=PROPER(.oView.cText)
  5764.     .nViewType=-1
  5765.     .lSwitchViewMode=.T.
  5766.     .lRefreshBrowserMode=.T.
  5767.     .cboViewType.DisplayValue=lcViewType
  5768.     .lRefreshBrowserMode=.F.
  5769.     .RefreshBrowser
  5770.     .lSwitchViewMode=.F.
  5771.     .oView=.GetView(lcViewType)
  5772. ENDWITH
  5773. ENDFUNC
  5774.  
  5775.  
  5776.  
  5777. FUNCTION brwOptions(toBrowser)
  5778. LOCAL oOptionsForm,oNewCatalogs,llApply,lnLastSelect,lnCount
  5779.  
  5780. IF toBrowser.lBrowser
  5781.     toBrowser.vResult=.F.
  5782.     RETURN toBrowser.vResult
  5783. ENDIF
  5784. IF toBrowser.AddInMethod("OPTIONS")
  5785.     RETURN
  5786. ENDIF
  5787. SET MESSAGE TO M_LOADING_LOC+" "+M_OPTIONS_LOC+" ..."
  5788. lnLastSelect=SELECT()
  5789. oNewCatalogs=CREATEOBJECT("Custom")
  5790. oNewCatalogs.AddProperty("nNewCatalogCount",0)
  5791. oNewCatalogs.AddProperty("aNewCatalogs[1]","")
  5792. toBrowser.lModalDialog=.T.
  5793. DO FORM brwoptns NAME oOptionsForm WITH (toBrowser),(oNewCatalogs) TO llApply
  5794. SET DATASESSION TO toBrowser.DataSessionID
  5795. SELECT (lnLastSelect)
  5796. SET MESSAGE TO
  5797. IF ISNULL(llApply) AND oNewCatalogs.nNewCatalogCount=0
  5798.     RETURN
  5799. ENDIF
  5800. toBrowser.SavePreferences(,.T.)
  5801. IF oNewCatalogs.nNewCatalogCount>0
  5802.     llApply=.T.
  5803.     FOR lnCount = 1 TO oNewCatalogs.nNewCatalogCount
  5804.         toBrowser.AddFile(oNewCatalogs.aNewCatalogs[lnCount],.T.)
  5805.     ENDFOR
  5806. ENDIF
  5807. IF llApply
  5808.     toBrowser.RefreshBrowser
  5809. ENDIF
  5810. ENDFUNC
  5811.  
  5812.  
  5813.  
  5814. FUNCTION brwProperties(toBrowser,tvNode)
  5815. LOCAL oNode,oPropertiesForm,llApply,lnLastSelect
  5816.  
  5817. IF toBrowser.lBrowser
  5818.     toBrowser.vResult=.F.
  5819.     RETURN toBrowser.vResult
  5820. ENDIF
  5821. IF toBrowser.AddInMethod("PROPERTIES")
  5822.     RETURN
  5823. ENDIF
  5824. oNode=IIF(TYPE("tvNode")#"O" OR ISNULL(tvNode),toBrowser.oItemSource,tvNode)
  5825. IF TYPE("oNode")#"O" OR ISNULL(oNode)
  5826.     oNode=.NULL.
  5827.     toBrowser.vResult=.F.
  5828.     RETURN toBrowser.vResult
  5829. ENDIF
  5830. SET MESSAGE TO M_LOADING_LOC+" "+M_PROPERTIES_LOC+" ..."
  5831. lnLastSelect=SELECT()
  5832. toBrowser.lModalDialog=.T.
  5833. DO FORM brwprops NAME oPropertiesForm WITH (toBrowser),(oNode) TO llApply
  5834. SET DATASESSION TO toBrowser.DataSessionID
  5835. SELECT (lnLastSelect)
  5836. SET MESSAGE TO
  5837. IF ISNULL(llApply)
  5838.     RETURN
  5839. ENDIF
  5840. IF llApply
  5841.     oNode.WriteProperties(.T.,.T.)
  5842. ENDIF
  5843. oNode.Refresh
  5844. ENDFUNC
  5845.  
  5846.  
  5847.  
  5848. FUNCTION brwKeywords(toBrowser)
  5849. LOCAL oKeywordsForm,lcKeywords,lnLastSelect
  5850.  
  5851. IF toBrowser.lBrowser
  5852.     toBrowser.vResult=""
  5853.     RETURN toBrowser.vResult
  5854. ENDIF
  5855. IF toBrowser.AddInMethod("KEYWORDS")
  5856.     toBrowser.vResult=""
  5857.     RETURN toBrowser.vResult
  5858. ENDIF
  5859. SET MESSAGE TO M_LOADING_LOC+" "+M_KEYWORDS_LOC+" ..."
  5860. lnLastSelect=SELECT()
  5861. toBrowser.lModalDialog=.T.
  5862. DO FORM brwkywrd NAME oKeywordsForm WITH (toBrowser) TO lcKeywords
  5863. SET DATASESSION TO toBrowser.DataSessionID
  5864. SELECT (lnLastSelect)
  5865. SET MESSAGE TO
  5866. IF ISNULL(lcKeywords) OR EMPTY(lcKeywords)
  5867.     toBrowser.vResult=""
  5868.     RETURN toBrowser.vResult
  5869. ENDIF
  5870. toBrowser.vResult=lcKeywords
  5871. RETURN toBrowser.vResult
  5872. ENDFUNC
  5873.  
  5874.  
  5875.  
  5876. FUNCTION brwGetFileAddress(toBrowser,tlShellExecute,tcFileExt)
  5877. LOCAL oGetAddressForm,lcAddress,lcFileName
  5878.  
  5879. IF toBrowser.AddInMethod("GETADDRESS")
  5880.     toBrowser.vResult=""
  5881.     RETURN toBrowser.vResult
  5882. ENDIF
  5883. lcFileName=LOWER(HOME()+"ffc\openadlg.scx")
  5884. IF NOT FILE(lcFileName)
  5885.     SET MESSAGE TO
  5886.     toBrowser.MsgBox(M_FILE_LOC+[ "]+lcFileName+[" ]+M_DOES_NOT_EXIST_LOC+[.],16)
  5887.     toBrowser.vResult=""
  5888.     RETURN toBrowser.vResult
  5889. ENDIF
  5890. SET MESSAGE TO M_LOADING_LOC+" "+M_ADDRESSES_LOC+" ..."
  5891. toBrowser.lModalDialog=.T.
  5892. DO FORM (lcFileName) NAME oAddressForm WITH (tlShellExecute),(tcFileExt) TO lcAddress
  5893. SET DATASESSION TO toBrowser.DataSessionID
  5894. SET MESSAGE TO
  5895. IF ISNULL(lcAddress)
  5896.     RETURN
  5897. ENDIF
  5898. toBrowser.vResult=lcAddress
  5899. RETURN toBrowser.vResult
  5900. ENDFUNC
  5901.  
  5902.  
  5903.  
  5904. FUNCTION brwHelp(toBrowser)
  5905. LOCAL lcFileName
  5906.  
  5907. IF toBrowser.AddInMethod("HELP")
  5908.     RETURN
  5909. ENDIF
  5910. SET MESSAGE TO M_LOADING_LOC+" "+M_HELP_LOC+" ..."
  5911. HELP ID (toBrowser.HelpContextID) NOWAIT
  5912. SET MESSAGE TO
  5913. ENDFUNC
  5914.  
  5915.  
  5916.  
  5917. FUNCTION brwCleanupCatalog(toNode,tlNoRefresh,tlIgnoreErrors)
  5918. LOCAL toBrowser,lcCatalog,lcAlias,lnRecNo,lcFilter,lnLastSelect,llMatch
  5919. LOCAL lcSortTable,lcSortTable2,lcID,lcParent,lcText,llIgnoreErrors
  5920.  
  5921. toBrowser=toNode.oHost
  5922. IF VARTYPE(toBrowser)#"O"
  5923.     RETURN .F.
  5924. ENDIF
  5925. SET DATASESSION TO (toBrowser.DataSessionID)
  5926. IF NOT toNode.lCatalog
  5927.     toBrowser.vResult=.F.
  5928.     RETURN toBrowser.vResult
  5929. ENDIF
  5930. lcCatalog=toNode.cSourceCatalog
  5931. lcAlias=toNode.cSourceAlias
  5932. IF EMPTY(lcCatalog) OR EMPTY(lcAlias) OR ;
  5933.         NOT LOWER(JUSTEXT(lcCatalog))=="dbf" OR NOT FILE(lcCatalog)
  5934.     toBrowser.vResult=.F.
  5935.     RETURN toBrowser.vResult
  5936. ENDIF
  5937. lnLastSelect=SELECT()
  5938. SELECT (lcAlias)
  5939. lcFilter=SET("FILTER")
  5940. llIgnoreErrors=toBrowser.lIgnoreErrors
  5941. toBrowser.lIgnoreErrors=.T.
  5942. USE (lcCatalog) EXCLUSIVE ALIAS (lcAlias)
  5943. toBrowser.lIgnoreErrors=llIgnoreErrors
  5944. IF NOT USED()
  5945.     USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  5946.     IF NOT EMPTY(lcFilter)
  5947.         SET FILTER TO &lcFilter
  5948.     ENDIF
  5949.     LOCATE
  5950.     SELECT (lnLastSelect)
  5951.     IF NOT tlIgnoreErrors AND NOT toBrowser.lRelease
  5952.         toBrowser.MsgBox(M_UNABLE_TO_OPEN_LOC+[ "]+lcCatalog+[" ]+ ;
  5953.                 M_EXCLUSIVELY_LOC+[.],16)
  5954.     ENDIF
  5955.     toBrowser.vResult=.F.
  5956.     RETURN toBrowser.vResult
  5957. ENDIF
  5958. SCAN ALL FOR NOT EMPTY(Type) AND NOT EMPTY(Parent) AND NOT "!"$Parent
  5959.     lnRecNo=RECNO()
  5960.     lcParent=LOWER(ALLTRIM(Parent))
  5961.     LOCATE FOR LOWER(ALLTRIM(ID))==lcParent OR ;
  5962.             LOWER(ALLTRIM(ID))==LOWER(ALLTRIM(Parent))
  5963.     IF EOF()
  5964.         GO lnRecNo
  5965.         DELETE
  5966.         LOOP
  5967.     ENDIF
  5968.     GO lnRecNo
  5969. ENDSCAN
  5970. IF NOT tlNoRefresh
  5971.     SET MESSAGE TO M_PACKING_FILE_LOC+[ "]+toNode.cCatalog+[" ...]
  5972. ENDIF
  5973. PACK
  5974. IF toNode.cCatalog==toBrowser.cDefaultCatalog OR NOT toNode.lSortOnCleanup
  5975.     USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  5976.     IF NOT EMPTY(lcFilter)
  5977.         SET FILTER TO &lcFilter
  5978.     ENDIF
  5979. ELSE
  5980.     lcSortTable=LOWER(SYS(2023)+"\"+SYS(2015))
  5981.     lcSortTable2=LOWER(SYS(2023)+"\"+SYS(2015))
  5982.     SORT TO (lcSortTable) ON Type
  5983.     USE (lcSortTable) EXCLUSIVE ALIAS (lcAlias)
  5984.     INDEX ON UPPER(Type+Text) TAG Type
  5985.     SET FILTER TO NOT UPPER(ALLTRIM(Type))=="FOLDER" OR ;
  5986.             EMPTY(ID) OR "!"$Parent
  5987.     COPY TO (lcCatalog)
  5988.     DELETE ALL
  5989.     PACK
  5990.     SET FILTER TO NOT DELETED()
  5991.     LOCATE
  5992.     DO WHILE .T.
  5993.         llMatch=.F.
  5994.         SCAN ALL
  5995.             lcText=UPPER(Text)
  5996.             IF EMPTY(lcText)
  5997.                 LOOP
  5998.             ENDIF
  5999.             lnRecNo=RECNO()
  6000.             lcID=LOWER(ALLTRIM(ID))
  6001.             SET ORDER TO
  6002.             LOCATE FOR LOWER(ALLTRIM(Parent))==lcID AND UPPER(Text)<lcText
  6003.             IF NOT EOF()
  6004.                 SCAN ALL FOR LOWER(ALLTRIM(Parent))==lcID
  6005.                     llMatch=.T.
  6006.                     REPLACE Text WITH CHR(255)+Text
  6007.                 ENDSCAN
  6008.             ENDIF
  6009.             SET ORDER TO Type
  6010.             GO lnRecNo
  6011.         ENDSCAN
  6012.         IF NOT llMatch
  6013.             EXIT
  6014.         ENDIF
  6015.     ENDDO
  6016.     COPY TO (lcSortTable2)
  6017.     USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  6018.     APPEND FROM (lcSortTable2)
  6019.     REPLACE ALL Text WITH STRTRAN(Text,CHR(255),"") FOR CHR(255)$Text
  6020.     IF NOT EMPTY(lcFilter)
  6021.         SET FILTER TO &lcFilter
  6022.     ENDIF
  6023.     ERASE (lcSortTable+".dbf")
  6024.     ERASE (lcSortTable+".fpt")
  6025.     ERASE (lcSortTable+".cdx")
  6026.     ERASE (lcSortTable2+".dbf")
  6027.     ERASE (lcSortTable2+".fpt")
  6028.     ERASE (lcSortTable2+".cdx")
  6029. ENDIF
  6030. REPLACE ALL SrcAlias WITH LOWER(ALIAS()), SrcRecNo WITH RECNO()
  6031. LOCATE
  6032. SELECT (lnLastSelect)
  6033. IF NOT tlNoRefresh
  6034.     SET MESSAGE TO
  6035.     toNode.Refresh
  6036. ENDIF
  6037. ENDFUNC
  6038.  
  6039.  
  6040.  
  6041. FUNCTION brwBackupCatalog(toNode,tlRestore,tcFileName)
  6042. LOCAL toBrowser,lcFileName,lcPath,lcCatalog,lcAlias,lcFilter,lnLastSelect
  6043.  
  6044. toBrowser=toNode.oHost
  6045. IF VARTYPE(toBrowser)#"O"
  6046.     RETURN .F.
  6047. ENDIF
  6048. SET DATASESSION TO (toBrowser.DataSessionID)
  6049. IF NOT toNode.lCatalog
  6050.     toBrowser.vResult=.F.
  6051.     RETURN toBrowser.vResult
  6052. ENDIF
  6053. lcCatalog=toNode.cSourceCatalog
  6054. lcAlias=toNode.cSourceAlias
  6055. IF EMPTY(lcCatalog) OR EMPTY(lcAlias) OR ;
  6056.         NOT LOWER(JUSTEXT(lcCatalog))=="dbf" OR NOT FILE(lcCatalog)
  6057.     toBrowser.vResult=.F.
  6058.     RETURN toBrowser.vResult
  6059. ENDIF
  6060. IF EMPTY(tcFileName)
  6061.     lcPath=JUSTPATH(lcCatalog)+"\backup\"
  6062.     lcFileName=lcPath+JUSTFNAME(lcCatalog)
  6063. ELSE
  6064.     lcFileName=LOWER(FULLPATH(ALLTRIM(tcFileName)))
  6065.     lcPath=JUSTPATH(lcFileName)+"\"
  6066. ENDIF
  6067. IF toBrowser.MsgBox(IIF(tlRestore,M_RESTORE_LOC,M_BACKUP_LOC)+ ;
  6068.         [ ]+LOWER(M_CATALOG_LOC)+[ "]+lcFileName+["?],292)#6
  6069.     toBrowser.vResult=.F.
  6070.     RETURN toBrowser.vResult
  6071. ENDIF
  6072. IF NOT FILE(lcFileName)
  6073.     llIgnoreErrors=toBrowser.lIgnoreErrors
  6074.     toBrowser.lIgnoreErrors=.T.
  6075.     MD (lcPath)
  6076.     toBrowser.lIgnoreErrors=llIgnoreErrors
  6077. ENDIF
  6078. IF tlRestore AND NOT FILE(lcFileName)
  6079.     toBrowser.MsgBox(M_FILE_LOC+[ "]+lcFileName+[" ]+M_NOT_FOUND_LOC+[.],16)
  6080.     toBrowser.vResult=.F.
  6081.     RETURN toBrowser.vResult
  6082. ENDIF
  6083. lnLastSelect=SELECT()
  6084. SELECT (lcAlias)
  6085. lcFilter=SET("FILTER")
  6086. SET FILTER TO
  6087. IF NOT tlRestore
  6088.     SET MESSAGE TO M_RESTORING_FILE_LOC+[ "]+toNode.cCatalog+[" ...]
  6089.     COPY TO (lcFileName)
  6090.     IF NOT EMPTY(lcFilter)
  6091.         SET FILTER TO &lcFilter
  6092.     ENDIF
  6093.     LOCATE
  6094.     SELECT (lnLastSelect)
  6095.     SET MESSAGE TO
  6096.     toBrowser.MsgBox(["]+lcFileName+[" ]+M_SUCCESSFULLY_CREATED_LOC+[.])
  6097.     RETURN
  6098. ENDIF
  6099. llIgnoreErrors=toBrowser.lIgnoreErrors
  6100. toBrowser.lIgnoreErrors=.T.
  6101. USE (lcCatalog) EXCLUSIVE ALIAS (lcAlias)
  6102. toBrowser.lIgnoreErrors=llIgnoreErrors
  6103. IF NOT USED()
  6104.     USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  6105.     IF NOT EMPTY(lcFilter)
  6106.         SET FILTER TO &lcFilter
  6107.     ENDIF
  6108.     LOCATE
  6109.     SELECT (lnLastSelect)
  6110.     IF NOT toBrowser.lRelease
  6111.         toBrowser.MsgBox(M_UNABLE_TO_OPEN_LOC+[ "]+lcCatalog+[" ]+ ;
  6112.                 M_EXCLUSIVELY_LOC+[.],16)
  6113.     ENDIF
  6114.     toBrowser.vResult=.F.
  6115.     RETURN toBrowser.vResult
  6116. ENDIF
  6117. SET MESSAGE TO M_BACKING_UP_FILE_LOC+[ "]+toNode.cCatalog+[" ...]
  6118. ZAP
  6119. APPEND FROM (lcFileName)
  6120. USE (lcCatalog) AGAIN SHARED ALIAS (lcAlias)
  6121. IF NOT EMPTY(lcFilter)
  6122.     SET FILTER TO &lcFilter
  6123. ENDIF
  6124. LOCATE
  6125. SELECT (lnLastSelect)
  6126. SET MESSAGE TO
  6127. toNode.Refresh
  6128. ENDFUNC
  6129.  
  6130.  
  6131.  
  6132. FUNCTION brwPropertyStuff(tcProperties,tcProperty,tcValue,tcDefaultValue,tlAutoAdd)
  6133. LOCAL lcProperty,lcValue,lcDefaultValue,lcProperty2,lcOldProperties,lcNewProperties
  6134. LOCAL lcMemLine,lnCount,lnAtPos,llMatch
  6135.  
  6136. IF EMPTY(tcProperty)
  6137.     RETURN .F.
  6138. ENDIF
  6139. lcProperty=ALLTRIM(tcProperty)
  6140. lcValue=IIF(EMPTY(tcValue),"",ALLTRIM(tcValue))
  6141. lcDefaultValue=IIF(EMPTY(tcDefaultValue),"",ALLTRIM(tcDefaultValue))
  6142. lcNewProperties=""
  6143. llMatch=.F.
  6144. _mline=0
  6145. FOR lnCount = 1 TO MEMLINES(tcProperties)
  6146.     lcMemLine=MLINE(tcProperties,1,_mline)
  6147.     IF EMPTY(lcMemLine)
  6148.         LOOP
  6149.     ENDIF
  6150.     lnAtPos=AT("=",lcMemLine)
  6151.     IF lnAtPos>0
  6152.         lcProperty2=ALLTRIM(LEFT(lcMemLine,lnAtPos-1))
  6153.         IF LOWER(lcProperty)==LOWER(lcProperty2)
  6154.             IF llMatch
  6155.                 LOOP
  6156.             ENDIF
  6157.             llMatch=.T.
  6158.             IF EMPTY(lcValue) OR lcValue==lcDefaultValue
  6159.                 LOOP
  6160.             ENDIF
  6161.             lcMemLine=lcProperty2+"="+lcValue
  6162.         ENDIF
  6163.     ENDIF
  6164.     lcNewProperties=lcNewProperties+lcMemLine+CR_LF
  6165. ENDFOR
  6166. IF tlAutoAdd AND NOT llMatch AND NOT EMPTY(lcValue) AND NOT lcValue==lcDefaultValue
  6167.     lcNewProperties=lcNewProperties+lcProperty+"="+lcValue
  6168. ENDIF
  6169. IF RIGHT(lcNewProperties,2)==CR_LF
  6170.     lcNewProperties=ALLTRIM(LEFT(lcNewProperties,LEN(lcNewProperties)-2))
  6171. ENDIF
  6172. tcProperties=lcNewProperties
  6173. RETURN tcProperties
  6174. ENDFUNC
  6175.  
  6176.  
  6177.  
  6178. FUNCTION brwHitTest(toBrowser,oControl,x,y)
  6179. LOCAL oNode,oItem,llFolder,lnXFactor,lnYFactor
  6180.  
  6181. llFolder=(LOWER(oControl.Name)=="olefolderlist")
  6182. lnXFactor=1440/96*(13/FONTMETRIC(1,"MS Sans Serif",8,""))
  6183. lnYFactor=1440/96*(11/FONTMETRIC(7,"MS Sans Serif",8,""))
  6184. oNode=oControl.HitTest(x*lnXFactor,y*lnYFactor)
  6185. IF TYPE("oNode")#"O" OR ISNULL(oNode)
  6186.     oNode=.NULL.
  6187.     IF NOT llFolder
  6188.         oNode=toBrowser.oFolder
  6189.     ENDIF
  6190.     toBrowser.vResult=oNode
  6191.     RETURN oNode
  6192. ENDIF
  6193. oItem=toBrowser.GetItem(oNode)
  6194. toBrowser.vResult=oItem
  6195. RETURN oItem
  6196. ENDFUNC
  6197.  
  6198.  
  6199.  
  6200. FUNCTION brwExportClass(toBrowser,tlShow,tcExportToFile)
  6201. LOCAL lcExportToFile,lcCode,lcInsertCode,lcAppendCode,lcDefineClass,llHTML
  6202. LOCAL lcClass,lcParentClass,lcBaseClass,lcObjectClass,lcObjectBaseClass,lcParent
  6203. LOCAL lcClassLoc,lcProperties,lcAddObject,lcInsertDefineCode,lcAppendDefineCode,llSCXMode
  6204. LOCAL lcFileName,lcFileName2,lnClassCount,lnListIndex,lcFilter,lcViewCodeFileName
  6205. LOCAL llFileMode,lnClassLibCount,laClassLib,lnRecNo,lcCRLF3,lcCRLF4
  6206. LOCAL lcMember,lcMember2,lcMemberDesc,lnMemberCount,laMembers,laMemberDesc
  6207. LOCAL lnProtectedCount,laProtected,lnAtPos,lnElement,lcComment
  6208. LOCAL lcVarName,lcArrayInfo,lcBorder,lnCount,lnStrLen,llHidden,lcMethods,lnLastSelect
  6209.  
  6210. IF NOT toBrowser.lVCXSCXMode 
  6211.     toBrowser.vResult=""
  6212.     RETURN toBrowser.vResult
  6213. ENDIF
  6214. IF toBrowser.AddInMethod("EXPORTCLASS")
  6215.     toBrowser.vResult=""
  6216.     RETURN toBrowser.vResult
  6217. ENDIF
  6218. llHTML=.F.
  6219. DO CASE
  6220.     CASE TYPE("tcExportToFile")#"C"
  6221.         lcExportToFile=""
  6222.     CASE UPPER(ALLTRIM(tcExportToFile))=="HTML"
  6223.         lcExportToFile=""
  6224.         llHTML=.T.
  6225.     CASE NOT EMPTY(tcExportToFile)
  6226.         lcExportToFile=ALLTRIM(tcExportToFile)
  6227.     OTHERWISE
  6228.         lcExportToFile=LOWER(PUTFILE(M_SAVE_LOC,"","prg|txt|htm|html"))
  6229.         IF EMPTY(lcExportToFile)
  6230.             toBrowser.vResult=""
  6231.             RETURN toBrowser.vResult
  6232.         ENDIF
  6233. ENDCASE
  6234. IF NOT EMPTY(lcExportToFile)
  6235.     IF NOT ":"$lcExportToFile AND NOT "\\"$lcExportToFile
  6236.         lcExportToFile=LOWER(FULLPATH(lcExportToFile))
  6237.     ENDIF
  6238.     IF FILE(lcExportToFile)
  6239.         IF tlShow AND toBrowser.MsgBox(lcExportToFile+M_ALREADY_EXISTS_OVER_LOC,35)#6
  6240.             toBrowser.vResult=""
  6241.             RETURN toBrowser.vResult
  6242.         ENDIF
  6243.     ENDIF
  6244.     llHTML=INLIST(LOWER(JUSTEXT(lcExportToFile)),"htm","html")
  6245. ENDIF
  6246. SET MESSAGE TO M_GEN_CLASS_DEF_LOC+[ ...]
  6247. lcCRLF3=REPLICATE(CR_LF,3)
  6248. lcCRLF4=REPLICATE(CR_LF,4)
  6249. lnLastSelect=SELECT()
  6250. toBrowser.SetBusyState(.T.)
  6251. lcBorder=REPLICATE("*",50)
  6252. lcComment="*-- "
  6253. lcCode=""
  6254. lcInsertCode=""
  6255. lcAppendCode=""
  6256. lcInsertDefineCode=""
  6257. lcAppendDefineCode=""
  6258. lcDefineClass=""
  6259. lnClassLibCount=0
  6260. DIMENSION laClassLib[1]
  6261. llFileMode=toBrowser.lFileMode
  6262. lcFileName=toBrowser.cFileName
  6263. llSCXMode=toBrowser.lSCXMode
  6264. lnClassCount=0
  6265. SELECT (toBrowser.cAlias)
  6266. LOCATE
  6267. DO WHILE .T.
  6268.     IF toBrowser.lRelease
  6269.         SELECT (lnLastSelect)
  6270.         toBrowser.vResult=""
  6271.         RETURN toBrowser.vResult
  6272.     ENDIF
  6273.     IF lnClassCount>0
  6274.         IF EOF()
  6275.             EXIT
  6276.         ENDIF
  6277.         SKIP
  6278.     ENDIF
  6279.     lcParent=LOWER(ALLTRIM(Parent))
  6280.     IF lnClassCount<=0 OR EMPTY(lcParent)
  6281.         lnClassCount=lnClassCount+1
  6282.         IF lnClassCount>toBrowser.nClassCount OR ;
  6283.                 (NOT llFileMode AND lnClassCount>=2)
  6284.             EXIT
  6285.         ENDIF
  6286.         IF llFileMode
  6287.             lnListIndex=lnClassCount
  6288.         ELSE
  6289.             lnListIndex=toBrowser.nClassListIndex+1
  6290.         ENDIF
  6291.         lcClass=toBrowser.aClassList[lnListIndex,1]
  6292.         lcFileName2=toBrowser.aClassList[lnListIndex,6]
  6293.         IF "."$lcClass OR NOT lcFileName==lcFileName2
  6294.             LOCATE
  6295.             LOOP
  6296.         ENDIF
  6297.         GO toBrowser.aClassList[lnListIndex,2]
  6298.         lcParent=LOWER(ALLTRIM(Parent))
  6299.         lcParentClass=LOWER(ALLTRIM(Class))
  6300.         SET MESSAGE TO M_GEN_CLASS_DEF_LOC+[ (]+lcClass+[) ...]
  6301.     ELSE
  6302.         lcClass=LOWER(ALLTRIM(ObjName))
  6303.         lcParentClass=LOWER(ALLTRIM(Class))
  6304.         SET MESSAGE TO M_GEN_CLASS_DEF_LOC+[ (]+lcDefineClass+[.]+lcClass+[) ...]
  6305.     ENDIF
  6306.     lcBaseClass=LOWER(ALLTRIM(BaseClass))
  6307.     lcClassLoc=IIF(EMPTY(ClassLoc),"",LOWER(FULLPATH(ALLTRIM(ClassLoc),lcFileName)))
  6308.     IF llHTML
  6309.         lcProperties=brwValidHTMLText(ALLTRIM(Properties))
  6310.         lcMethods=brwValidHTMLText(ALLTRIM(Methods))
  6311.     ELSE
  6312.         lcProperties=ALLTRIM(Properties)
  6313.         lcMethods=ALLTRIM(Methods)
  6314.     ENDIF
  6315.     lnMemberCount=0
  6316.     DIMENSION laMembers[1]
  6317.     DIMENSION laMemberDesc[1]
  6318.     _mline=0
  6319.     FOR lnCount = 1 TO MEMLINE(Reserved3)
  6320.         lcMember=ALLTRIM(MLINE(Reserved3,1,_mline))
  6321.         lcArrayInfo=""
  6322.         IF EMPTY(lcMember)
  6323.             LOOP
  6324.         ENDIF
  6325.         IF LEFT(lcMember,1)=="*"
  6326.             lcMember=ALLTRIM(SUBSTR(lcMember,2))
  6327.             lnAtPos=AT(" ",lcMember)
  6328.             IF lnAtPos=0
  6329.                 lcMemberDesc=""
  6330.                 lcMember=LOWER(lcMember)
  6331.             ELSE
  6332.                 lcMemberDesc=ALLTRIM(SUBSTR(lcMember,lnAtPos+1))
  6333.                 lcMember=LOWER(ALLTRIM(LEFT(lcMember,lnAtPos-1)))
  6334.             ENDIF
  6335.             lnAtPos=ATC(CR_LF+"PROCEDURE "+lcMember+CR_LF,CR_LF+lcMethods+CR_LF)
  6336.             IF NOT EMPTY(lcMethods)
  6337.                 lcMethods=lcMethods+CR_LF
  6338.             ENDIF
  6339.             IF lnAtPos>0
  6340.                 IF EMPTY(lcMemberDesc)
  6341.                     lcMemberDesc=CR_LF+CR_LF
  6342.                 ELSE
  6343.                     lcMemberDesc=toBrowser.IndentText(lcComment+lcMemberDesc)
  6344.                 ENDIF
  6345.                 lcMethods=LEFT(lcMethods,lnAtPos-1)+CR_LF+CR_LF+ ;
  6346.                         MARKER+IIF(llHTML,[<FONT COLOR="GREEN">],[])+ ;
  6347.                         +lcMemberDesc+IIF(llHTML,[<FONT COLOR="BLACK">],[])+CR_LF+ ;
  6348.                         SUBSTR(lcMethods,lnAtPos)
  6349.                 LOOP
  6350.             ENDIF
  6351.             IF NOT EMPTY(lcMethods)
  6352.                 lcMethods=lcMethods+CR_LF
  6353.             ENDIF
  6354.             IF NOT EMPTY(lcMemberDesc)
  6355.                 lcMethods=lcMethods+MARKER+toBrowser.IndentText(lcComment+lcMemberDesc)
  6356.             ENDIF
  6357.             IF NOT EMPTY(lcMethods)
  6358.                 lcMethods=lcMethods+CR_LF
  6359.             ENDIF
  6360.             lcMethods=lcMethods+"PROCEDURE "+lcMember+CR_LF+"ENDPROC"+CR_LF+CR_LF
  6361.             LOOP
  6362.         ENDIF
  6363.         IF LEFT(lcMember,1)=="^"
  6364.             lcMember=STRTRAN(STRTRAN(STRTRAN(ALLTRIM(SUBSTR(lcMember,2)), ;
  6365.                     "(","["),")","]"),",0]","]")
  6366.             lnAtPos=AT("[",lcMember)
  6367.             IF lnAtPos>0
  6368.                 lcArrayInfo=ALLTRIM(SUBSTR(lcMember,lnAtPos))
  6369.                 lcMember=ALLTRIM(LEFT(lcMember,lnAtPos-1))
  6370.             ENDIF
  6371.             IF EMPTY(lcMember)
  6372.                 LOOP
  6373.             ENDIF
  6374.             lnMemberCount=lnMemberCount+1
  6375.             DIMENSION laMembers[lnMemberCount]
  6376.             DIMENSION laMemberDesc[lnMemberCount]
  6377.             laMembers[lnMemberCount]=LOWER(lcMember)+" "
  6378.             lnAtPos=AT(" ",lcArrayInfo)
  6379.             IF lnAtPos=0
  6380.                 laMemberDesc[lnMemberCount]=MARKER+lcArrayInfo
  6381.             ELSE
  6382.                 laMemberDesc[lnMemberCount]=ALLTRIM(SUBSTR(lcArrayInfo,lnAtPos+1))+ ;
  6383.                         MARKER+ALLTRIM(LEFT(lcArrayInfo,lnAtPos-1))
  6384.             ENDIF
  6385.             LOOP
  6386.         ENDIF
  6387.         lnMemberCount=lnMemberCount+1
  6388.         DIMENSION laMembers[lnMemberCount]
  6389.         DIMENSION laMemberDesc[lnMemberCount]
  6390.         lnAtPos=AT(" ",lcMember)
  6391.         IF lnAtPos=0
  6392.             laMembers[lnMemberCount]=LOWER(lcMember)+" "
  6393.             laMemberDesc[lnMemberCount]=""
  6394.         ELSE
  6395.             laMembers[lnMemberCount]=LOWER(ALLTRIM(LEFT(lcMember,lnAtPos-1)))+" "
  6396.             laMemberDesc[lnMemberCount]=ALLTRIM(SUBSTR(lcMember,lnAtPos+1))
  6397.         ENDIF
  6398.     ENDFOR
  6399.     lnProtectedCount=0
  6400.     DIMENSION laProtected[1]
  6401.     _mline=0
  6402.     FOR lnCount = 1 TO MEMLINE(Protected)
  6403.         lcMember=LOWER(ALLTRIM(MLINE(Protected,1,_mline)))
  6404.         IF EMPTY(lcMember)
  6405.             LOOP
  6406.         ENDIF
  6407.         llHidden=("^"$lcMember)
  6408.         lcMember2=ALLTRIM(STRTRAN(lcMember,"^",""))
  6409.         IF ASCAN(laMembers,lcMember2+" ")=0
  6410.             lnStrLen=LEN(lcMethods)
  6411.             lcMethods=STRTRAN(CR_LF+lcMethods,CR_LF+"PROCEDURE "+lcMember2+CR_LF, ;
  6412.                     CR_LF+MARKER+IIF(llHidden,"HIDDEN","PROTECTED")+" PROCEDURE "+lcMember2+CR_LF)
  6413.             IF lnStrLen#LEN(lcMethods)
  6414.                 LOOP
  6415.             ENDIF
  6416.         ENDIF
  6417.         lnProtectedCount=lnProtectedCount+1
  6418.         DIMENSION laProtected[lnProtectedCount]
  6419.         laProtected[lnProtectedCount]=lcMember+" "
  6420.     ENDFOR
  6421.     IF llFileMode AND llSCXMode AND NOT EMPTY(lcClassLoc) AND ;
  6422.             ASCAN(laClassLib,lcClassLoc)=0
  6423.         lnClassLibCount=lnClassLibCount+1
  6424.         DIMENSION laClassLib[lnClassLibCount]
  6425.         laClassLib[lnClassLibCount]=lcClassLoc
  6426.     ENDIF
  6427.     DO CASE
  6428.         CASE EMPTY(lcParent)
  6429.             IF NOT EMPTY(lcDefineClass)
  6430.                 IF NOT EMPTY(lcInsertDefineCode)
  6431.                     lcInsertDefineCode=lcInsertDefineCode+CR_LF+CR_LF
  6432.                 ENDIF
  6433.                 lcCode=lcCode+lcInsertDefineCode+lcAppendDefineCode
  6434.                 DO WHILE RIGHT(lcCode,2)==CR_LF
  6435.                     lcCode=LEFT(lcCode,LEN(lcCode)-2)
  6436.                 ENDDO
  6437.                 lcCode=lcCode+lcCRLF3+ ;
  6438.                         IIF(llHTML,[<FONT COLOR="NAVY">]+CR_LF,[])+"ENDDEFINE"+CR_LF+ ;
  6439.                         +IIF(llHTML,CR_LF+[<FONT COLOR="GREEN">]+CR_LF,[])+"*"+CR_LF+ ;
  6440.                         lcComment+"EndDefine: "+lcDefineClass+CR_LF+lcBorder+ ;
  6441.                         IIF(llHTML,CR_LF+[<FONT COLOR="BLACK">]+CR_LF,[])+CR_LF+CR_LF
  6442.             ENDIF
  6443.             lcInsertDefineCode=""
  6444.             lcAppendDefineCode=""
  6445.             IF NOT EMPTY(lcDefineClass)
  6446.                 lcCode=lcCode+CR_LF+IIF(llHTML,[<HR>],CR_LF+CR_LF)+CR_LF+CR_LF
  6447.             ENDIF
  6448.             lcDefineClass=lcClass
  6449.             IF llHTML
  6450.                 lcCode=lcCode+IIF(llHTML,CR_LF+[<FONT COLOR="GREEN">]+CR_LF,[])
  6451.             ENDIF
  6452.             IF llFileMode AND NOT llSCXMode AND EMPTY(lcCode)
  6453.                 lnRecNo=RECNO()
  6454.                 LOCATE
  6455.                 lcCode=lcCode+lcBorder+CR_LF+ ;
  6456.                         lcComment+"Class Library:  "+lcFileName+CR_LF
  6457.                 IF NOT EMPTY(Reserved7)
  6458.                     lcCode=lcCode+toBrowser.IndentText(lcComment+ALLTRIM(Reserved7))+CR_LF
  6459.                 ENDIF
  6460.                 lcCode=lcCode+lcBorder+lcCRLF3
  6461.                 GO lnRecNo
  6462.             ENDIF
  6463.             lcCode=lcCode+lcBorder+CR_LF+lcComment+PADR(IIF(llSCXMode, ;
  6464.                     PROPER(lcBaseClass)+":","Class:"),14)+ ;
  6465.                     IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcClass+ ;
  6466.                     IIF(llHTML,[<FONT COLOR="GREEN">],[])+" ("+lcFileName+")"+CR_LF+ ;
  6467.                     lcComment+"ParentClass:  "
  6468.             DO CASE
  6469.                 CASE NOT llHTML
  6470.                     lcCode=lcCode+lcParentClass
  6471.                 CASE lcParentClass==lcBaseClass OR NOT toBrowser.lFileMode OR ;
  6472.                         EMPTY(lcClassLoc) OR NOT toBrowser.cFileName==lcClassLoc
  6473.                     lcCode=lcCode+IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcParentClass
  6474.                 OTHERWISE
  6475.                     lcCode=lcCode+IIF(llHTML,[<A HREF="#]+lcParentClass+[">],[])+lcParentClass+ ;
  6476.                             IIF(llHTML,[</A>],[])
  6477.             ENDCASE
  6478.             lcCode=lcCode+IIF(llHTML,[<FONT COLOR="GREEN">],[])+IIF(EMPTY(lcClassLoc),""," ("+lcClassLoc+")")+CR_LF+ ;
  6479.                     lcComment+"BaseClass:    "+IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcBaseClass+ ;
  6480.                     IIF(llHTML,[<FONT COLOR="GREEN">],[])+CR_LF
  6481.             IF NOT EMPTY(OLE2)
  6482.                 lcCode=lcCode+lcComment+MLINE(OLE2,1)+CR_LF
  6483.             ENDIF
  6484.             IF NOT EMPTY(Reserved7)
  6485.                 lcCode=lcCode+lcComment+Reserved7+CR_LF
  6486.             ENDIF
  6487.             lcCode=toBrowser.IndentText(lcCode)
  6488.             IF llSCXMode
  6489.                 lnRecNo=RECNO()
  6490.                 LOCATE
  6491.             ENDIF
  6492.             IF NOT EMPTY(Reserved8)
  6493.                 lcCode=lcCode+"*"+CR_LF+[#INCLUDE ]+CHR(34)+ ;
  6494.                         LOWER(FULLPATH(ALLTRIM(MLINE(Reserved8,1)),lcFileName))+ ;
  6495.                         CHR(34)+CR_LF
  6496.             ENDIF
  6497.             IF llSCXMode
  6498.                 GO lnRecNo
  6499.             ENDIF
  6500.             lcCode=lcCode+"*"+CR_LF+IIF(llHTML,[<FONT COLOR="NAVY">]+CR_LF+ ;
  6501.                     [<A NAME="]+lcClass+[">]+CR_LF,[])+ ;
  6502.                     "DEFINE CLASS "+IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcClass+ ;
  6503.                     IIF(llHTML,[<FONT COLOR="NAVY">],[])+" AS "
  6504.             DO CASE
  6505.                 CASE NOT llHTML
  6506.                     lcCode=lcCode+lcParentClass
  6507.                 CASE lcParentClass==lcBaseClass OR NOT toBrowser.lFileMode OR ;
  6508.                         EMPTY(lcClassLoc) OR NOT toBrowser.cFileName==lcClassLoc
  6509.                     lcCode=lcCode+IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcParentClass
  6510.                 OTHERWISE
  6511.                     lcCode=lcCode+IIF(llHTML,[<A HREF="#]+lcParentClass+[">],[])+lcParentClass+ ;
  6512.                             IIF(llHTML,[</A>],[])
  6513.             ENDCASE
  6514.             IF NOT llSCXMode
  6515.                 lnRecNo=RECNO()
  6516.                 LOCATE FOR UPPER(ALLTRIM(Platform))=="COMMENT" AND ;
  6517.                         LOWER(ALLTRIM(ObjName))==lcClass
  6518.                 IF NOT EOF() AND UPPER(ALLTRIM(MLINE(Reserved2,1)))=="OLEPUBLIC"
  6519.                     lcCode=lcCode+IIF(llHTML,[<FONT COLOR="NAVY">],[])+" OLEPUBLIC"
  6520.                 ENDIF
  6521.                 GO lnRecNo
  6522.             ENDIF
  6523.             lcCode=lcCode+CR_LF+IIF(llHTML,[<FONT COLOR="BLACK">]+CR_LF,[])+CR_LF
  6524.             IF NOT EMPTY(lcProperties)
  6525.                 lcInsertDefineCode=lcInsertDefineCode+CR_LF+ ;
  6526.                         toBrowser.FormatProperties(lcProperties)
  6527.             ENDIF
  6528.             DO WHILE RIGHT(lcInsertDefineCode,2)==CR_LF
  6529.                 lcInsertDefineCode=LEFT(lcInsertDefineCode,LEN(lcInsertDefineCode)-2)
  6530.             ENDDO
  6531.             lcInsertDefineCode=lcInsertDefineCode+CR_LF
  6532.             FOR lnCount = 1 TO lnMemberCount
  6533.                 lcMember=ALLTRIM(laMembers[lnCount])
  6534.                 llHidden=("^"$lcMember)
  6535.                 lcMember2=ALLTRIM(STRTRAN(lcMember,"^",""))
  6536.                 lcMemberDesc=laMemberDesc[lnCount]
  6537.                 lnAtPos=AT(MARKER,lcMemberDesc)
  6538.                 IF lnAtPos=0
  6539.                     lcArrayInfo=""
  6540.                 ELSE
  6541.                     lcArrayInfo=SUBSTR(lcMemberDesc,lnAtPos+1)
  6542.                     lcMemberDesc=LEFT(lcMemberDesc,lnAtPos-1)
  6543.                 ENDIF
  6544.                 IF NOT EMPTY(lcMemberDesc)
  6545.                     lnAtPos=ATC(TAB+lcMember2+" = ",lcInsertDefineCode)
  6546.                     IF lnAtPos=0
  6547.                         lcInsertDefineCode=lcInsertDefineCode+CR_LF+ ;
  6548.                                 IIF(llHTML,[<FONT COLOR="GREEN">],[])+ ;
  6549.                                 toBrowser.IndentText(toBrowser.IndentText(lcComment+ ;
  6550.                                 lcMemberDesc),1)+IIF(llHTML,[<FONT COLOR="BLACK">],[])+CR_LF
  6551.                     ELSE
  6552.                         lcInsertDefineCode=LEFT(lcInsertDefineCode,lnAtPos-1)+ ;
  6553.                                 IIF(llHTML,[<FONT COLOR="GREEN">],[])+ ;
  6554.                                 toBrowser.IndentText(toBrowser.IndentText(lcComment+ ;
  6555.                                 lcMemberDesc),1)+IIF(llHTML,[<FONT COLOR="BLACK">],[])+CR_LF+ ;
  6556.                                 SUBSTR(lcInsertDefineCode,lnAtPos)
  6557.                     ENDIF
  6558.                 ENDIF
  6559.                 lnElement=ASCAN(laProtected,lcMember+" ")
  6560.                 IF lnElement=0
  6561.                     lnElement=ASCAN(laProtected,lcMember+"^ ")
  6562.                     IF lnElement>0
  6563.                         llHidden=.T.
  6564.                     ENDIF
  6565.                 ENDIF
  6566.                 IF lnElement>0
  6567.                     laProtected[lnElement]=""
  6568.                 ENDIF
  6569.                 IF EMPTY(lcArrayInfo)
  6570.                     lnAtPos=ATC(TAB+lcMember2+" ",lcInsertDefineCode)
  6571.                     IF lnElement>0
  6572.                         IF lnAtPos=0
  6573.                             lcInsertDefineCode=lcInsertDefineCode+TAB+ ;
  6574.                                     IIF(llHidden,"HIDDEN ","PROTECTED ")+lcMember2+CR_LF
  6575.                             LOOP
  6576.                         ELSE
  6577.                             lcInsertDefineCode=LEFT(lcInsertDefineCode,lnAtPos-1)+ ;
  6578.                                     TAB+IIF(llHidden,"HIDDEN ","PROTECTED ")+lcMember2+CR_LF+ ;
  6579.                                     SUBSTR(lcInsertDefineCode,lnAtPos)
  6580.                         ENDIF
  6581.                     ENDIF
  6582.                     IF lnAtPos>0
  6583.                         LOOP
  6584.                     ENDIF
  6585.                 ELSE
  6586.                     lcInsertDefineCode=lcInsertDefineCode+TAB+ ;
  6587.                             IIF(lnElement>0,IIF(llHidden,"HIDDEN ","PROTECTED "), ;
  6588.                             "DIMENSION ")+lcMember2+lcArrayInfo+CR_LF
  6589.                 ENDIF
  6590.                 IF EMPTY(lcArrayInfo)
  6591.                     lcInsertDefineCode=lcInsertDefineCode+TAB+lcMember2+" = .F."+CR_LF
  6592.                 ENDIF
  6593.             ENDFOR
  6594.             FOR lnCount = 1 TO lnProtectedCount
  6595.                 lcMember=ALLTRIM(laProtected[lnCount])
  6596.                 IF EMPTY(lcMember)
  6597.                     LOOP
  6598.                 ENDIF
  6599.                 llHidden=("^"$lcMember)
  6600.                 lcMember2=ALLTRIM(STRTRAN(lcMember,"^",""))
  6601.                 lcInsertDefineCode=lcInsertDefineCode+TAB+ ;
  6602.                         IIF(llHidden,"HIDDEN ","PROTECTED ")+lcMember2+CR_LF
  6603.                 laProtected[lnCount]=""
  6604.             ENDFOR
  6605.             IF NOT EMPTY(lcMethods)
  6606.                 lcAppendDefineCode=lcAppendDefineCode+toBrowser.FormatMethods(lcMethods)
  6607.             ENDIF
  6608.         CASE NOT EMPTY(lcClass) AND NOT EMPTY(lcParent)
  6609.             lcObjectClass=IIF(lcParent==lcDefineClass,"",lcParent+".")+lcClass
  6610.             lcObjectBaseClass=LOWER(ALLTRIM(BaseClass))
  6611.             lcAddObject=IIF(llHTML,[<FONT COLOR="NAVY">]+CR_LF,[])+ ;
  6612.                     "ADD OBJECT "+IIF(llHTML,[<FONT COLOR="BLUE">],[])+ ;
  6613.                     lcObjectClass+IIF(llHTML,[<FONT COLOR="NAVY">],[])+" AS "
  6614.             DO CASE
  6615.                 CASE NOT llHTML
  6616.                     lcAddObject=lcAddObject+lcParentClass
  6617.                 CASE lcParentClass==lcObjectBaseClass OR NOT toBrowser.lFileMode OR ;
  6618.                         EMPTY(lcClassLoc) OR NOT toBrowser.cFileName==lcClassLoc
  6619.                     lcAddObject=lcAddObject+IIF(llHTML,[<FONT COLOR="BLUE">],[])+lcParentClass
  6620.                 OTHERWISE
  6621.                     lcAddObject=lcAddObject+IIF(llHTML,[<A HREF="#]+lcParentClass+[">],[])+lcParentClass+ ;
  6622.                             IIF(llHTML,[</A>],[])
  6623.             ENDCASE
  6624.             lcAddObject=lcAddObject+IIF(llHTML,[<FONT COLOR="NAVY">],[])
  6625.             IF UPPER(ALLTRIM(Reserved8))=="NOINIT"
  6626.                 lcAddObject=lcAddObject+" NOINIT"
  6627.             ENDIF
  6628.             IF EMPTY(lcProperties)
  6629.                 lcAddObject=toBrowser.IndentText(lcAddObject)+ ;
  6630.                         IIF(llHTML,[<FONT COLOR="BLACK">],[])
  6631.             ELSE
  6632.                 lcProperties=toBrowser.FormatProperties(lcProperties,.T.)
  6633.                 lcAddObject=lcAddObject+" WITH "+IIF(llHTML,[<FONT COLOR="BLACK">],[])+";"+ ;
  6634.                         CR_LF+toBrowser.IndentText(lcProperties,1)
  6635.             ENDIF
  6636.             lcAddObject=toBrowser.IndentText(lcAddObject)
  6637.             IF NOT EMPTY(lcMethods)
  6638.                 lcMethods=toBrowser.FormatMethods(lcMethods)
  6639.                 lcMethods=STRTRAN(lcMethods,"PROCEDURE ","PROCEDURE "+lcClass+".")
  6640.                 IF NOT EMPTY(lcAppendDefineCode)
  6641.                     lcAppendDefineCode=lcAppendDefineCode+CR_LF
  6642.                 ENDIF
  6643.                 lcAppendDefineCode=lcAppendDefineCode+lcMethods
  6644.             ENDIF
  6645.             lcInsertDefineCode=lcInsertDefineCode+CR_LF+CR_LF+lcAddObject+CR_LF
  6646.     ENDCASE
  6647.     IF NOT EMPTY(lcMethods)
  6648.         DO WHILE LEFT(lcAppendDefineCode,2)==CR_LF
  6649.             lcAppendDefineCode=SUBSTR(lcAppendDefineCode,3)
  6650.         ENDDO
  6651.         DO WHILE RIGHT(lcAppendDefineCode,2)==CR_LF
  6652.             lcAppendDefineCode=LEFT(lcAppendDefineCode, ;
  6653.                     LEN(lcAppendDefineCode)-2)
  6654.         ENDDO
  6655.         lcAppendDefineCode=lcAppendDefineCode+lcCRLF3
  6656.     ENDIF
  6657. ENDDO
  6658. SET MESSAGE TO ""
  6659. IF NOT EMPTY(lcDefineClass)
  6660.     IF NOT EMPTY(lcInsertDefineCode)
  6661.         lcInsertDefineCode=lcInsertDefineCode+CR_LF+CR_LF
  6662.     ENDIF
  6663.     lcCode=lcCode+lcInsertDefineCode+lcAppendDefineCode
  6664.     DO WHILE RIGHT(lcCode,2)==CR_LF
  6665.         lcCode=LEFT(lcCode,LEN(lcCode)-2)
  6666.     ENDDO
  6667.     lcCode=lcCode+lcCRLF3+ ;
  6668.             IIF(llHTML,[<FONT COLOR="NAVY">]+CR_LF,[])+"ENDDEFINE"+CR_LF+ ;
  6669.             +IIF(llHTML,CR_LF+[<FONT COLOR="GREEN">]+CR_LF,[])+"*"+CR_LF+ ;
  6670.             lcComment+"EndDefine: "+lcDefineClass+CR_LF+lcBorder+ ;
  6671.             IIF(llHTML,CR_LF+[<FONT COLOR="BLACK">]+CR_LF,[])+CR_LF
  6672. ENDIF
  6673. IF llFileMode AND llSCXMode AND NOT EMPTY(lcCode)
  6674.     FOR lnCount = 1 TO lnClassLibCount
  6675.         lcInsertCode=lcInsertCode+"SET CLASSLIB TO "+laClassLib[lnCount]+ ;
  6676.                 " ADDITIVE"+CR_LF
  6677.     ENDFOR
  6678.     IF NOT EMPTY(lcInsertCode)
  6679.         lcInsertCode=lcInsertCode+CR_LF
  6680.     ENDIF
  6681.     lcVarName="o"+lcDefineClass
  6682.     lcInsertCode=[PUBLIC ]+lcVarName+CR_LF+CR_LF+lcInsertCode+ ;
  6683.             lcVarName+[=NEWOBJECT("]+lcDefineClass+[")]+CR_LF+ ;
  6684.             lcVarName+[.Show]+CR_LF+ ;
  6685.             [RETURN]+lcCRLF3
  6686. ENDIF
  6687. IF NOT EMPTY(lcInsertCode)
  6688.     lcCode=lcInsertCode+lcCode
  6689. ENDIF
  6690. IF NOT EMPTY(lcAppendCode)
  6691.     lcCode=lcCode+lcAppendCode
  6692. ENDIF
  6693. lcCode=STRTRAN(STRTRAN(lcCode,MARKER,""),CR_LF+TAB+CR_LF)
  6694. DO WHILE LEFT(lcCode,1)==TAB
  6695.     lcCode=ALLTRIM(SUBSTR(lcCode,2))
  6696. ENDDO
  6697. IF llHTML
  6698.     lcCode=[<HTML>]+CR_LF+ ;
  6699.             [<HEAD>]+CR_LF+ ;
  6700.             [<TITLE>]+IIF(toBrowser.lFileMode,M_CLASS_LIBRARY_LOC+" "+toBrowser.cClass, ;
  6701.             M_CLASS_LOC+" ("+toBrowser.cClass+")")+ ;
  6702.             [</TITLE>]+CR_LF+ ;
  6703.             [</HEAD>]+CR_LF+ ;
  6704.             [<BODY>]+CR_LF+CR_LF+ ;
  6705.             [<CODE><PRE><B>]+CR_LF+ ;
  6706.             lcCode+CR_LF+ ;
  6707.             [</B></PRE></CODE>]+CR_LF+CR_LF+ ;
  6708.             [</BODY>]+CR_LF+ ;
  6709.             [</HTML>]+CR_LF
  6710. ENDIF
  6711. lcCode=STRTRAN(STRTRAN(STRTRAN(lcCode,LF+TAB+CR,""),LF+LF,LF),CR+CR,CR)
  6712. DO WHILE lcCRLF4$lcCode
  6713.     lcCode=STRTRAN(lcCode,lcCRLF4,lcCRLF3)
  6714. ENDDO
  6715. IF NOT EMPTY(lcExportToFile)
  6716.     IF WEXIST(JUSTFNAME(lcExportToFile))
  6717.         RELEASE WINDOW (JUSTFNAME(lcExportToFile))
  6718.     ENDIF
  6719.     STRTOFILE(lcCode,lcExportToFile)
  6720. ENDIF
  6721. IF tlShow
  6722.     IF NOT EMPTY(lcExportToFile)
  6723.         IF llHTML
  6724.             toBrowser.ShellExecute(lcExportToFile)
  6725.         ELSE
  6726.             IF LOWER(JUSTEXT(lcExportToFile))=="prg"
  6727.                 MODIFY COMM (lcExportToFile) RANGE 1,1 IN SCREEN NOWAIT
  6728.             ELSE
  6729.                 MODIFY FILE (lcExportToFile) RANGE 1,1 IN SCREEN NOWAIT
  6730.             ENDIF
  6731.         ENDIF
  6732.     ELSE
  6733.         lcViewCodeFileName=LOWER(toBrowser.cViewCodeFileName)
  6734.         IF EMPTY(lcViewCodeFileName)
  6735.             lcViewCodeFileName=LOWER(toBrowser.cProgramPath+SYS(2015)+".prg")
  6736.         ENDIF
  6737.         IF WEXIST(JUSTFNAME(lcViewCodeFileName))
  6738.             RELEASE WINDOW (JUSTFNAME(lcViewCodeFileName))
  6739.         ENDIF
  6740.         STRTOFILE(lcCode,lcViewCodeFileName)
  6741.         IF LOWER(JUSTEXT(lcViewCodeFileName))=="prg"
  6742.             MODIFY COMM (lcViewCodeFileName) RANGE 1,1 IN SCREEN NOWAIT
  6743.         ELSE
  6744.             MODIFY FILE (lcViewCodeFileName) RANGE 1,1 IN SCREEN NOWAIT
  6745.         ENDIF
  6746.     ENDIF
  6747. ENDIF
  6748. toBrowser.SetBusyState(.F.)
  6749. SELECT (lnLastSelect)
  6750. SET MESSAGE TO
  6751. toBrowser.vResult=lcCode
  6752. RETURN toBrowser.vResult
  6753. ENDFUNC
  6754.  
  6755.  
  6756.  
  6757. FUNCTION brwExportView(toBrowser,tcAlias,tcExportToFile)
  6758. LOCAL lcExportToFile,lcAlias,lnLastSelect
  6759.  
  6760. IF toBrowser.AddInMethod("EXPORTVIEW")
  6761.     RETURN
  6762. ENDIF
  6763. lcAlias=IIF(EMPTY(tcAlias),toBrowser.cGallery,LOWER(ALLTRIM(tcAlias)))
  6764. IF NOT USED(lcAlias)
  6765.     toBrowser.vResult=.F.
  6766.     RETURN toBrowser.vResult
  6767. ENDIF
  6768. IF VARTYPE(tcExportToFile)=="C" AND NOT EMPTY(tcExportToFile)
  6769.     lcExportToFile=ALLTRIM(tcExportToFile)
  6770. ELSE
  6771.     lcExportToFile=LOWER(PUTFILE(M_SAVE_LOC,"","dbf"))
  6772. ENDIF
  6773. IF EMPTY(lcExportToFile)
  6774.     toBrowser.vResult=.F.
  6775.     RETURN toBrowser.vResult
  6776. ENDIF
  6777. IF NOT ":"$lcExportToFile AND NOT "\\"$lcExportToFile
  6778.     lcExportToFile=LOWER(FULLPATH(lcExportToFile))
  6779. ENDIF
  6780. IF FILE(lcExportToFile)
  6781.     IF toBrowser.MsgBox(lcExportToFile+M_ALREADY_EXISTS_OVER_LOC,35)#6
  6782.         toBrowser.vResult=.F.
  6783.         RETURN toBrowser.vResult
  6784.     ENDIF
  6785.     ERASE (lcExportToFile)
  6786.     IF FILE(lcExportToFile)
  6787.         toBrowser.vResult=.F.
  6788.         RETURN toBrowser.vResult
  6789.     ENDIF
  6790. ENDIF
  6791. lnLastSelect=SELECT()
  6792. SELECT (lcAlias)
  6793. COPY TO (lcExportToFile)
  6794. SELECT (lnLastSelect)
  6795. ENDFUNC
  6796.  
  6797.  
  6798.  
  6799. FUNCTION brwValidHTMLText(tcText)
  6800.  
  6801. IF VARTYPE(tcText)#"C"
  6802.     RETURN ""
  6803. ENDIF
  6804. RETURN STRTRAN(STRTRAN(STRTRAN(tcText,[-],[–]),[<],[<]),[>],[>])
  6805. ENDFUNC
  6806.  
  6807.  
  6808.  
  6809. *-- end BROWSER.PRG
  6810.