📄 fsupselector.class
字号:
imgForm = Picture["img/32/form.png"] imgModule = Picture["img/32/module.png"] imgPicture = Picture["img/32/image.png"] imgProject = Picture["img/32/gambas.png"] imgDirectory = Picture["img/32/folder.png"] imgNoDir = Picture["img/32/forbid.png"] Explorer = ivExplorer iImageSize = 32 cvExplorer.Visible = FALSE ivExplorer.Visible = TRUE btnTypeList.Picture = Picture["img/16/list.png"] btnTypeList.ToolTip = ("Show by list") ENDIF Explorer.RaiseENDPRIVATE SUB Fill_Tree(sPath AS String) DIM sDir AS String DIM arFile AS NEW String[] DIM scDir AS String DIM sSeq AS String 'Message("tree " & sPath) sSeq = Left(sPath) sPath = Mid(sPath,2) IF NOT Exist (sPath) THEN RETURN IF NOT TreeExplorer.Exist(sSeq & sPath &/ "child") THEN RETURN TreeExplorer.Remove(sSeq & sPath &/ "child") 'TRY sDir = Dir(sPath) INC Application.Busy FOR EACH sDir IN Dir(sPath) IF IsDir(sPath &/ sDir) THEN IF Stat(sPath &/ sDir).Hidden AND NOT ShowHidden THEN CONTINUE arFile.add(sDir) ENDIF NEXT arFile.Sort FOR EACH sDir IN arFile 'scDir = Conv$(sDir, System.Charset, Desktop.Charset) scDir = sDir IF AccessTest(sPath &/ sDir) THEN IF Exist(sPath &/ sDir &/ ".project") THEN TreeExplorer.add(sSeq & sPath &/ sDir, scDir,imgTreeProject,sSeq & sPath) IF HaveDirChild(sPath &/ sDir) THEN TreeExplorer.add(sSeq & sPath &/ sDir &/ "child", "",imgTreeDir,sSeq & sPath &/ sDir) ELSE TreeExplorer.add(sSeq & sPath &/ sDir, scDir,imgTreeDir,sSeq & sPath) IF HaveDirChild(sPath &/ sDir) THEN TreeExplorer.add(sSeq & sPath &/ sDir &/ "child", "",imgTreeDir,sSeq & sPath &/ sDir) ENDIF ELSE TreeExplorer.add(sSeq & sPath &/ sDir, scDir,imgTreeNoDir,sSeq & sPath) ENDIF NEXTFINALLY DEC Application.BusyCATCH TreeExplorer.ClearENDPRIVATE FUNCTION HaveDirChild(sPath AS String) AS Boolean DIM shDir AS String FOR EACH shDir IN Dir(sPath) WITH Stat(sPath &/ shDir) IF .Type = gb.Directory THEN IF .Hidden THEN IF ShowHidden THEN RETURN TRUE ELSE RETURN TRUE ENDIF ENDIF END WITH NEXT RETURN FALSEENDPUBLIC SUB TreeExplorer_Expand() Fill_Tree(LAST.Item.Key)ENDPUBLIC SUB InitTree(sPath AS String, OPTIONAL Seq AS String) DIM arSeq AS NEW String[] DIM sSeq AS String TreeExplorer.Clear IF NOT Seq THEN Seq = "$" arSeq = Split(Seq, ",") FOR EACH sSeq IN arSeq IF MyVal(sSeq) > CoolTab.Count() - 1 THEN sSeq = "0" IF sSeq = "$" THEN sPath = sSeq & sPath imgTreeRoot = CoolTab.current.Picture ELSE CoolTab.Button_Select(MyVal(sSeq)) sPath = sSeq & CoolTab.GetBookMark(MyVal(sSeq)).ToolTip imgTreeRoot = CoolTab.GetBookMark(MyVal(sSeq)).Picture ENDIF TreeExplorer.Add(sPath,File.Name(Mid(sPath,2)),imgTreeRoot) TreeExplorer.Add(sPath &/ "child","child",,sPath) TreeExplorer[sPath].Expanded = TRUE 'Fill_Tree("/") NEXTENDPUBLIC SUB Form_Resize() DIM iBW AS Integer IF DialogType = SHOW_DIRECTORY THEN pnlFile.H = txtFile.Y + txtFile.H + 8 ENDIF iBW = ButtonWidth IF iBW THEN ibW = iBW + 8 lblLook.Move(0, 0) pnlFile.Move(0, ME.ClientHeight - pnlFile.Height, ME.ClientWidth - iBW) txtFile.Move(lblFile.Width + 10, lblFile.Top, pnlFile.ClientWidth - lblFile.Width - 10) cboFilter.Move(lblFilter.Width + 10, pnlFile.ClientH - cboFilter.Height, pnlFile.ClientWidth - lblFilter.Width - 10) pnlButton.Move(ME.ClientWidth - pnlButton.Width,0) cboLook.Move(lblLook.Width , 0, ME.ClientWidth - pnlButton.Width - lblLook.Width - 10, 24) Splitter.Move (CoolTab.Width(),cboLook.Height + 5,ME.ClientWidth - CoolTab.Width(),ME.ClientHeight - cboLook.Height - pnlFile.Height - 16) cvExplorer.ScrollBar = Scroll.Both CoolTab.Move(0,Splitter.Top,, Splitter.Height)ENDPUBLIC SUB TreeExplorer_Select() DIM sPath AS String 'Message(TreeExplorer.Current.Key) sPath = Mid(TreeExplorer.Key,2) IF Left(TreeExplorer.Key,1) <> CurSeq THEN CurSeq = Left(TreeExplorer.Key,1) IF CurSeq <> "$" THEN Root = CoolTab.GetTabUrl(MyVal(CurSeq)) ENDIF ENDIF IF AccessTest(sPath) THEN CurrentPath = sPath Fill_Explorer(CurrentPath) IF Validate(sPath) THEN txtFile.Text = TreeExplorer.Current.Text ENDIFENDPUBLIC SUB Button3_Click() PreviewImg = NOT PreviewImg Fill_Explorer(CurrentPath)ENDPRIVATE SUB Fill_Look(sPath AS String) cboLook.Clear IF NOT sPath THEN RETURN IF sPath ="/" THEN cboLook.add(sPath) RETURN ENDIF IF Right(sPath, 1) = "/" THEN sPath = Left(sPath, Len(sPath) - 1) DO cboLook.Add(sPath) IF sPath = "/" THEN RETURN IF sPath = Root THEN RETURN sPath = File.Dir(sPath) LOOPENDPUBLIC SUB cboLook_Click() IF TExplorer = -1 THEN RETURN Fill_Explorer(cboLook.Current.Text) SelectNode(Left(TreeExplorer.Key, 1) & cboLook.Current.Text)ENDPUBLIC FUNCTION SelectNode(sNode AS String) AS Boolean DIM arParse AS NEW String[] DIM sVar AS String DIM sPath AS String DIM TreeSeq AS String TreeSeq = Left(sNode,1) sPath = Mid(sNode,2) IF NOT Exist(sPath) THEN RETURN arParse = Split(sPath, "/") sPath = "/" FOR EACH sVar IN arParse sPath = sPath &/ sVar Fill_Tree(TreeSeq & sPath) TRY TreeExplorer[TreeSeq & File.dir(sPath)].Expanded = TRUE NEXT 'IF NOT TreeExplorer.Exist(sNode) THEN Message(sNode) TreeExplorer[sNode].Selected = TRUE TreeExplorer[sNode].EnsureVisibleCATCH RETURN TRUEENDPUBLIC SUB btnTypeList_Click() IF TExplorer = 0 THEN ChangeExplorer(1) ELSE ChangeExplorer(0) ENDIF RefreshExplorerENDPUBLIC FUNCTION Validate(OPTIONAL sPath AS String) AS Boolean DIM sFile AS String DIM sCurrentPath AS String DIM bSel AS Boolean 'Validation sCurrentPath = CurrentPath IF sPath THEN sCurrentPath = File.Dir(sPath) txtFile.Text = "" sFile = File.Name(sPath) IF sPath = File.Dir(CurrentPath) THEN RETURN ELSE IF txtFile.Text = "" THEN SELECT CASE DialogType CASE SHOW_PROJECT Message.Warning(("Please choose a project.")) CASE SHOW_DIRECTORY Message.Warning(("Please choose a valid directory.")) END SELECT RETURN ENDIF sFile = txtFile.Text ENDIF IF NOT sPath THEN TRY bSel = Explorer.Current.Selected IF NOT bSel THEN sFile = "" ENDIF SELECT CASE DialogType CASE SHOW_PROJECT 'BM - Why this test ?? This is an HORRIBLE and buggy hack, shame on you Fabien ! 'IF File.Name(sCurrentPath) = sFile THEN sFile = "" IF Exist(sCurrentPath &/ sFile &/ ".project") THEN Path = sCurrentPath &/ sFile GOTO GOOD '$BM ENDIF IF NOT sPath THEN Message.Error(("Cannot find this project.")) CASE SHOW_DIRECTORY 'IF File.Name(sCurrentPath) = sFile THEN sFile = "" IF Exist(sCurrentPath &/ sFile) THEN IF IsDir(sCurrentPath &/sFile) THEN IF NoProjectDir THEN 'Message (sPath) IF Exist(sCurrentPath &/ sFile &/ ".project") OR IsProjectChild(sCurrentPath &/ sFile) THEN RETURN FALSE ENDIF ENDIF Path = sCurrentPath &/ sFile GOTO GOOD '$BM ENDIF ENDIF IF NOT sPath THEN Message.Error(("Cannot find this directory.")) CASE SHOW_FILE, SHOW_IMAGE IF IsDir(sCurrentPath &/ sFile) THEN RETURN FALSE IF bAllowNewFile THEN Path = sCurrentPath &/ sFile GOTO GOOD ENDIF IF Exist(sCurrentPath &/ sFile) THEN Path = sCurrentPath &/ sFile GOTO GOOD ENDIF IF NOT sPath THEN Message.Error(("Cannot find this file.")) '$BM END SELECT RETURN FALSEGOOD: '$BM IF sPath THEN RETURN TRUE IF Key THEN IF DialogType = SHOW_FILE OR DialogType = SHOW_IMAGE THEN 'Message (key &/ "Path") Settings[Key &/ "Path"] = File.Dir(Path) ELSE Settings[Key &/ "Path"] = Path ENDIF Settings[Key &/ "Key"] = CStr(CoolTab.Current.Tag) ENDIF RETURN TRUEENDPUBLIC SUB Explorer_Click() IF Validate(Explorer.Item.Key) THEN txtFile.Text = Explorer.Current.Text ENDIFCATCHENDPRIVATE SUB DefineFilters() 'Definition for Filters (Multi Filters in Some Case) DIM arpreFilter AS String[] DIM arSubFilter AS String[] DIM sSubFilter AS String DIM Index AS Integer arpreFilter = Split(Filters, "|") FOR Index = 0 TO arpreFilter.Count - 1 arSubFilter = NEW String[] arSubFilter = Split(arpreFilter[Index], ",") $arFilters.add( arSubFilter) NEXT FOR Index = 0 TO $arFilters.Count - 1 STEP 2 cboFilter.add($arFilters[Index][0]) NEXT TRY cbofilter.Index = FilterIndexENDPUBLIC SUB cboFilter_Click() RefreshExplorerENDPUBLIC SUB btnParent_Click() IF CurrentPath <> Root THEN CurrentPath = File.Dir(CurrentPath) RefreshExplorer ENDIFENDPRIVATE SUB RefreshExplorer() $sLastPath = "" Fill_Explorer(CurrentPath)ENDPUBLIC SUB btnRefresh_Click() DIM TreeSeq AS String DIM sKey AS String DIM bExpand AS Boolean TreeSeq = "$" sKey = TreeExplorer.Key TRY bExpand = TreeExplorer[sKey].Expanded InitTree(Root,TreeSequence) TRY TreeSeq = Left(TreeExplorer.Key) RefreshExplorer SelectNode(TreeSeq & CurrentPath) TRY TreeExplorer[sKey].Expanded = bExpandENDPUBLIC SUB CoolTab_ButtonClick(Index AS Integer, Button AS Integer) DIM arSeq AS NEW String[] DIM Fi AS Integer IF Button = 2 THEN arSeq = Split(TreeSequence,",") Fi = arSeq.Find(Str(Index)) IF Fi <> -1 THEN IF arSeq.Count = 1 THEN RETURN 'PRINT arSeq.Count CoolTab.Button_UnSelect(arSeq[Fi] ) arSeq.Remove(Fi) TreeSequence = arSeq.Join(",") btnRefresh_Click() ELSE IF NOT Exist (CoolTab.Current.Tooltip) THEN RETURN TreeSequence = TreeSequence & "," & Str(Index) 'CoolTab.Button_Select(Index) Root = Cooltab.Current.Tooltip btnRefresh_Click() ENDIF ELSE IF NOT Exist (CoolTab.Current.Tooltip) THEN RETURN TreeSequence = Str(Index) CurrentPath = CoolTab.Current.Tooltip Root = Cooltab.Current.Tooltip btnRefresh_Click() ENDIFEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -