; ; ------------------------------------------------------------ ; ; PureBasic - MDI example file ; ; (c) 2004 - Fantaisie Software ; ; ------------------------------------------------------------ ; ;modified by Norm Perry (waffle) ;to be used as a MDI text editor to replace notepad ;now includes a webbrowser for viewing html ;so, edit with MyPad, click view to display as html ;added multicolor text 05dev2005 ;code updated to PB4.2 14April2007 IncludeFile "MyRich.pb" IncludeFile "MyINI.pb" IncludeFile "myFTP.pb" ;maintain structure concept, but change to text information ;- MDI Structure Structure MDIWindow ; info about the loaded text FullName.s FileName.s Changed.l FullText.s ; the child window id ChildWindow.l ; gadget numbers ;the editor mdi EditorGadget.l StatBar.l ;the web mdi ButtonBack.l ButtonNext.l ButtonStop.l StringBrowse.l ButtonGo.l WebGadget.l AFrame.l ;the tag editor MDI Width.l NameGadget.l ClassGadget.l ClassButton.l PrefixGadget.l P1Gadget.l D1Gadget.l SuffixGadget.l P2Gadget.l D2Gadget.l EndGadget.l TheButton.l CanButton.l Browse1.l Browse2.l EditButton.l CList.l BList.l CheckBut1.l CheckBut2.l CheckBut3.l ;the FTP manager ListGadget.l AddButton.l EditFTP.l DelButton.l ScanFTP.l StartFTP.l StopFTP.l CancelFTP.l EndStructure ;- globals ;this replaced by the call ProgramFilename() ;hMod.l = GetModuleHandle_(0) Global RunPath.s ;RunPath = Space(255) ;GetModuleFileName_(hMod,@RunPath,255) RunPath=GetPathPart(ProgramFilename()) Global DefPath.s DefPath=RunPath Global SearchText.s Global FileName$ Global DefaultName$ DefaultName$="Untitled.txt" Global Pattern$ Pattern$="Text Files (*.txt)|*.txt|Web files (*.htm,*.html)|*.htm;*.html|Zips (*.zip)|*.zip|All Files (*.*)|*.*" Global FindText.FINDREPLACE Global EditTagLoaded.l Global FTPLoaded.l Global ThreadState.l Global ThreadMode.l Global NewList MDIWindow.MDIWindow() ;- Constants #WINDOW = 0 #TOOLBAR = 0 #MENU = 0 #GADGET_MDI = 0 Enumeration #MENU_New #MENU_Open #MENU_Close #MENU_CloseAll #MENU_Save #MENU_SaveAS #MENU_SaveALL #MENU_FTP #MENU_Quit #MENU_Cut #MENU_Copy #MENU_Paste #MENU_SELALL #MENU_Undo #MENU_Search #MENU_SAgain #MENU_REPLACE #MENU_RAGAIN #MENU_Insert #MENU_NTAG #MENU_ETAG #MENU_DTAG #MENU_WEB #MENU_TEXT #MENU_HELP #MENU_ABOUT #MENU_TileV #MENU_TileH #MENU_Cascade #MENU_Arrange #MENU_Previous #MENU_Next #MENU_FirstMDI EndEnumeration ;#MENU_FirstMDI=1000 ;- Special key codes ;first the scancode values for ;scancode wParam ;<=51 60 ;>=52 62 ;!=2 33 ;"=40 34 ;#NK_ = NormKey #NK_LessThan=60 #NK_GreaterThan=62 #NK_Quote=34 #NK_Flame=33 ;- TagStructure Structure HTMLTag TagMenuID.l TagName.s TClass.s ;TSClass.s NumParts.l Prefix.s P1Name.s P1Text.s Suffix.s P2Name.s P2Text.s EndTag.s EndStructure Structure MyConst Name.s EndStructure Global NewList MyConst.MyConst() Global NewList HTMLTag.HTMLTag() Global TagMode.l Global EditFocus.l Global UpdateLN.l Global UpdateTM.l Procedure about(parent, text.s) ;field delimiter nf.s = Chr(8) ;fields about.s = StringField(text, 1, nf) name.s = StringField(text, 2, nf) corp.s = StringField(text, 3, nf) txt.s = StringField(text, 4, nf) url.s = StringField(text, 5, nf) lnk.s = StringField(text, 6, nf) flags = #PB_Window_ScreenCentered | #PB_Window_SystemMenu win = OpenWindow(#PB_Any, 0, 0, 420, 325, name, flags) If win EnableWindow_(WindowID(parent), #False) StickyWindow(win, #True) ResizeWindow(win, #PB_Ignore, WindowY(win) - 50, #PB_Ignore, #PB_Ignore) If CreateGadgetList(WindowID(win)) img1 = CreateImage(#PB_Any, 420, 70) fnt1 = LoadFont(#PB_Any, "", 10) fnt2 = LoadFont(#PB_Any, "", 16) If StartDrawing(ImageOutput(img1)) DrawingMode(#PB_2DDrawing_Transparent) ;header background gradient For x = 0 To 419 LineXY(x, 0, x, 60, RGB(x / 2.5, x / 2.5, 255)) LineXY(x, 60, x, 70, RGB(225- x / 5, 225 - x / 5, 255)) Next x ;header icon ;res.s = "shell32.dll" ;ndx = 130 res.s = ProgramFilename() ndx = 0 ExtractIconEx_(res, ndx, 0, @icon, 1) If icon DrawImage(icon, 10, 5, 48, 48) DestroyIcon_(icon) Else ExtractIconEx_("shell32.dll", 130, 0, @icon, 1) If icon DrawImage(icon, 10, 5, 48, 48) DestroyIcon_(icon) EndIf EndIf ;header about field If fnt1 DrawingFont(FontID(fnt1)) EndIf DrawText(70, 10, about, RGB(255, 255, 255)) ;header program name field If fnt2 DrawingFont(FontID(fnt2)) EndIf DrawText(70, 28, name, RGB(255, 255, 255)) ;header company name field If fnt1 DrawingFont(FontID(fnt1)) EndIf DrawText(400 - TextWidth(corp), 35, corp, RGB(255, 255, 255)) StopDrawing() EndIf ImageGadget(#PB_Any, 0, 0, 0, 0, ImageID(img1)) ;text icon img2 = CreateImage(#PB_Any, 32, 32) If StartDrawing(ImageOutput(img2)) Box(0, 0, 32, 32, GetSysColor_(15)) ;res.s = "shell32.dll" ;ndx = 166 ;ndx = 55 res.s = ProgramFilename() ndx = 0 ExtractIconEx_(res, ndx, 0, @icon, 1) If icon DrawImage(icon, 0, 0, 32, 32) DestroyIcon_(icon) Else ExtractIconEx_("shell32.dll", 55, 0, @icon, 1) If icon DrawImage(icon, 0, 0, 32, 32) DestroyIcon_(icon) EndIf EndIf StopDrawing() EndIf ImageGadget(#PB_Any, 20, 100, 0, 0, ImageID(img2)) ;text TextGadget(#PB_Any, 70, 100, 330, 145, txt) ;divider line img3 = CreateImage(#PB_Any, 410, 2) If StartDrawing(ImageOutput(img3)) Line(0, 0, 420, 0, RGB(160, 160, 160)) Line(0, 1, 420, 0, RGB(255, 255, 255)) StopDrawing() EndIf ImageGadget(#PB_Any, 10, 260, 0, 0, ImageID(img3)) ;online link If Len(url) lnk1 = HyperLinkGadget(#PB_Any, 20, 275, 200, 24, url, RGB(0, 0, 255), #PB_HyperLink_Underline) SetGadgetColor(lnk1, #PB_Gadget_FrontColor, RGB(0, 0, 255)) EndIf ;ok button btn1 = ButtonGadget(#PB_Any, 330, 288, 80, 24, "OK", #PB_Button_Default) SetActiveGadget(btn1) EndIf Repeat event = WaitWindowEvent() Select event Case #PB_Event_Gadget Select EventGadget() Case lnk1 RunProgram(lnk) exit = #True Case btn1 exit = #True EndSelect Case #PB_Event_CloseWindow exit = #True EndSelect Until exit CloseWindow(win) EndIf EnableWindow_(WindowID(parent), #True) SetActiveWindow(parent) EndProcedure Procedure WrapAbout(parent,comp$,desc$,ver$,cwt$,link$) ;next field nf.s = Chr(8) ;next line nl.s = Chr(13) + Chr(10) AppName.s=GetFilePart(ProgramFilename()) ;about field txt.s = "About " + nf ;program name field txt + "'" + AppName + "'" + nf ;company field txt + comp$ + nf ;main text field txt + "'" + AppName + "' "+desc$ + nl + nl build$=FormatDate("%YYYY %MM %DD",#PB_Compiler_Date ) txt + "Ver. "+ver$+", date "+build$ + nl txt + nl + "Copyright (c)"+cwt$ + nl txt + "WARNING: This PROGRAM is NOT protected"+nl+" by copyright law or international treaties."+ nl +nl txt + "About box and FindReplace box created by"+nl+" Stig h. Johansen And Utopiomania.com" + nf ;online link field txt + "Visit '" + comp$ + "' online" + nf txt + link$ about(parent, txt) EndProcedure Procedure SetDefColor(GID.l) ;resume default color format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR ;format\crTextColor = Color Format\crTextColor=0 SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure Procedure NewColorLine(msg$,LN.l) ;this is to replace the old "ColorLine" procedure ;which was very slow and "flashy" ;first, obtain all handles GID=MDIWindow()\EditorGadget ;point to start of line SetGadgetItemText(GID,LN,"",0) ;assume windows sets caret to this location ..... GTLTFlag=0 QFlag=0 CommFlag=0 OldColor=42 tosend$="" ;change color to ensure black at start format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = 0 SendMessage_(GadgetID(GID), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) For C=1 To Len(msg$) M$=Mid(msg$,C,1) If CommFlag=0 If M$="<" GTLTFlag=1 ElseIf M$=">" GTLTFlag=3 ElseIf M$="!" If GTLTFlag CommFlag=1 EndIf ElseIf M$=Chr(34) If QFlag QFlag=3 Else QFlag=1 EndIf EndIf Else If M$=">" CommFlag=0 GTLTFlag=3 EndIf EndIf ;determine current color If Qflag DColor=RGB(0,0,255) CF=3 ElseIf CommFlag DColor=RGB(0,255,0) CF=2 ElseIf GTLTFlag DColor=RGB(255,0,0) CF=1 Else DColor=0 CF=0 EndIf If DColor<>OldColor ;CallDebugger ;Debug "Sending text" ;Debug CF ;Debug tosend$ ;send old text SetClipboardText(tosend$) tosend$=M$ ;Debug tosend$ SendMessage_(GadgetID(GID),#WM_PASTE,0,0) OldColor=DColor ;change color format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = DColor SendMessage_(GadgetID(GID), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) Else tosend$=tosend$ + M$ EndIf ;send the char to the editor ;SendMessage_(GadgetID(GID),#WM_PASTE,0,0) ;check for closing tags If GTLTflag=3 GTLTflag=0 EndIf If QFlag=3 Qflag=0 EndIf Next C ;send final text to editor ;CallDebugger ;Debug "Finishing With text" ;Debug tosend$ SetClipboardText(tosend$) SendMessage_(GadgetID(GID),#WM_PASTE,0,0) ;Debug "setting black color" ;change color to ensure black at start format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = 0 SendMessage_(GadgetID(GID), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure Procedure ColorLine(GID.l,LN.l,CP.l) Static LastCall.l Static OldLN.l Static ZeroFlag.l Static OldCP.l If LastCall=0 LastCall=GetTickCount_()-1000 EndIf If LN=0 If ZeroFlag=0 ZeroFlag=1 OldLN=-1 EndIf Else ZeroFlag=0 EndIf If OldLN<>LN Or CP<>OldCP ;this scans the target line in a gadget ;and sets up the color information aline.s=GetGadgetItemText(GID,LN,0) max.l=Len(aline) min=1 opentag.l=0 openquote.l=0 opencommet.l=0 ;setdefaultcolor Editor_SetColor(GID,LN,0,LN,Len(aline),0,CP) While min<=max achar.s=Mid(aline,min,1) If achar="<" If Mid(aline,min+1,1)<>" " If openquote ;color that blue Editor_SetColor(GID, LN, openquote, LN, min-1,RGB(0,0,255),CP) SetDefColor(GID) openquote=0 EndIf opentag=min If Mid(aline,min+1,1)="!" opencommet=min EndIf ;CallDebugger ;Debug opentag EndIf ElseIf achar=">" If Mid(aline,min-1,1)<>" " If openquote ;color that blue Editor_SetColor(GID, LN, openquote, LN, min-1,RGB(0,0,255),CP) SetDefColor(GID) openquote=0 opentag=min EndIf ;CallDebugger ;Debug min-opentag If opencommet Editor_SetColor(GID, LN, opentag, LN, min,RGB(0,255,0),CP) Else Editor_SetColor(GID, LN, opentag, LN, min,RGB(255,0,0),CP) EndIf opentag=0 opencommet=0 SetDefColor(GID) EndIf ElseIf achar=Chr(34) If openquote If opentag opentag=min+1 EndIf Editor_SetColor(GID, LN, openquote, LN, min,RGB(0,0,255),CP) SetDefColor(GID) openquote=0 Else If opentag Editor_SetColor(GID, LN, opentag, LN, min-1,RGB(255,0,0),CP) SetDefColor(GID) opentag=min+1 EndIf openquote=min EndIf EndIf min + 1 Wend EndIf ;LastCall=GetTickCount_() OldLN=LN OldCP=CP EndProcedure Procedure.l GetPattern(FN.s) ft.s=UCase(Right(FN,3)) If ft="TXT" PatType.l=0 ElseIf ft="HTM" PatType=1 ElseIf ft="TML" PatType=1 ElseIf ft="ZIP" PatType=2 Else PatType=3 EndIf ProcedureReturn PatType EndProcedure Procedure LoadFTP(GID.l) IniFile=RunPath+"MyPadFTP.ini" If FileSize(IniFile)>0 FTPCount.l=INI_ReadInteger("Summary","Total",0) DFTPHost.s=INI_ReadString("Summary","DHost","") DFTPUser.s=INI_ReadString("Summary","DUser","") DFTPPass.s=INI_ReadString("Summary","DPass","") DLPath.s=INI_ReadString("Summary","LPath",RunPath) If FTPCount For n=1 To FTPCount FID.s="File"+Trim(Str(n)) msg.s=INI_ReadString(FID,"Name","") AddGadgetItem(GID,-1,msg) SetGadgetItemText(GID,n-1,INI_ReadString(FID,"LPath",DLPath),3) SetGadgetItemText(GID,n-1,INI_ReadString(FID,"FPath",""),4) SetGadgetItemText(GID,n-1,INI_ReadString(FID,"Host",DFTPHost),5) SetGadgetItemText(GID,n-1,INI_ReadString(FID,"User",DFTPUser),6) SetGadgetItemText(GID,n-1,INI_ReadString(FID,"Pass",DFTPPass),7) Next n EndIf EndIf EndProcedure Procedure SaveFTP(GID.l) IniFile=RunPath+"MyPadFTP.ini" If FileSize(IniFile)>0 DeleteFile(IniFile) EndIf FTPCount=CountGadgetItems(GID) If FTPCount INI_WriteInteger("Summary","Total",FTPCount) INI_WriteString("Summary","DHost",GetGadgetItemText(GID,0,5)) INI_WriteString("Summary","DUser",GetGadgetItemText(GID,0,6)) INI_WriteString("Summary","DPass",GetGadgetItemText(GID,0,7)) INI_WriteString("Summary","LPath",GetGadgetItemText(GID,0,3)) For n=1 To FTPCount FID.s="File"+Trim(Str(n)) INI_WriteString(FID,"Name",GetGadgetItemText(GID,n-1,0)) INI_WriteString(FID,"LPath",GetGadgetItemText(GID,n-1,3)) INI_WriteString(FID,"FPath",GetGadgetItemText(GID,n-1,4)) INI_WriteString(FID,"Host",GetGadgetItemText(GID,n-1,5)) INI_WriteString(FID,"User",GetGadgetItemText(GID,n-1,6)) INI_WriteString(FID,"Pass",GetGadgetItemText(GID,n-1,7)) Next n EndIf EndProcedure Procedure ScanLocalFiles(GID) FCount.l=CountGadgetItems(GID) If FCount For n=0 To FCount-1 msg.s=GetGadgetItemText(GID,n,1) If Len(msg)=0 FD.l=GetFileDate(GetGadgetItemText(GID,n,3),#PB_Date_Created) Fdate.s=FormatDate("%yyyy%mm%dd",FD) SetGadgetItemText(GID,n,FDate,1) EndIf Next n EndIf EndProcedure Procedure ScanFTPFiles(GID) ScanLocalFiles(GID) DSite.s=GetGadgetItemText(GID,0,5) DUser.s=GetGadgetItemText(GID,0,6) DPass.s=GetGadgetItemText(GID,0,7) FCount.l=CountGadgetItems(GID) If FCount For n=0 To FCount-1 msg.s=GetGadgetItemText(GID,n,2) If Len(msg)=0 If Len(GetGadgetItemText(GID,0,5)) DSite=GetGadgetItemText(GID,0,5) EndIf If Len(GetGadgetItemText(GID,0,6)) DUser=GetGadgetItemText(GID,0,6) EndIf If Len(GetGadgetItemText(GID,0,7)) DPass=GetGadgetItemText(GID,0,7) EndIf FTPConnect(DSite,DUser,DPass) If hInternetConnect=0 MessageRequester("FTP Manager","Unable to connect to "+DSite,0) Break EndIf FTPDir.s=GetGadgetItemText(GID,n,4) If Len(FTPDir) FTPDir=FTPDir+"/" Else FTPDir="" EndIf FN.s=GetGadgetItemText(GID,n,0) FD.l=GetFTPFileDate(FTPDir+FN) Fdate.s=FormatDate("%yyyy%mm%dd",FD) SetGadgetItemText(GID,n,FDate,2) EndIf Next n EndIf If ThreadMode=1 FTPDisconnect() ThreadState=0 EndIf EndProcedure Procedure TransferFiles(GID) ScanFTPFiles(GID) DSite.s=GetGadgetItemText(GID,0,5) DUser.s=GetGadgetItemText(GID,0,6) DPass.s=GetGadgetItemText(GID,0,7) FCount.l=CountGadgetItems(GID) If FCount For n=0 To FCount-1 msg.s=GetGadgetItemText(GID,n,2) If Len(msg)=0 If Len(GetGadgetItemText(GID,0,5)) DSite=GetGadgetItemText(GID,0,5) EndIf If Len(GetGadgetItemText(GID,0,6)) DUser=GetGadgetItemText(GID,0,6) EndIf If Len(GetGadgetItemText(GID,0,7)) DPass=GetGadgetItemText(GID,0,7) EndIf FTPConnect(DSite,DUser,DPass) If hInternetConnect=0 ;MessageRequester("FTP Error","Unable to connect to "+DSite,0) Break EndIf ;FD.l=GetFTPFileDate(GetGadgetItemText(GID,n,3)) ;SetGadgetItemText(GID,n,Str(FD),2) If GetGadgetItemText(GID,n,1)<>GetGadgetItemText(GID,n,2) If PutFileFTP(GetGadgetItemText(GID,n,3),GetGadgetItemText(GID,n,4)) MessageRequester("FTP Manager","Failed To send file "+GetGadgetItemText(GID,n,3),#MB_ICONSTOP) EndIf EndIf EndIf Next n EndIf FTPDisconnect() ThreadState=0 EndProcedure Procedure AddFTPFile(GID.l,Pos.l) ;set POS to -1 for a new file ;any other value will edit that file msg.s="" If POS>=0 FName.s=GetGadgetItemText(GID,POS,0) LPath.s=GetGadgetItemText(GID,POS,3) FTPPath.s=GetGadgetItemText(GID,POS,4) Host.s=GetGadgetItemText(GID,POS,5) User.s=GetGadgetItemText(GID,POS,6) Pass.s=GetGadgetItemText(GID,POS,7) SID.s="File"+Trim(Str(POS+1)) Else FName.s="New.html" If CountGadgetItems(GID) LPath.s=GetGadgetItemText(GID,0,3) FTPPath.s=GetGadgetItemText(GID,0,4) Host.s=GetGadgetItemText(GID,0,5) User.s=GetGadgetItemText(GID,0,6) Pass.s=GetGadgetItemText(GID,0,7) Else LPath.s=RunPath FTPPath.s="" Host.s="" User.s="" Pass.s="" EndIf SID.s="File"+Trim(Str(CountGadgetItems(GID)+1)) EndIf ;OK, that was fun ;now check with user LPath=OpenFileRequester("Select file to upload",LPath,Pattern$,1) FName=GetFilePart(LPath) FTPPath=InputRequester("FTP Folder","Confirm FTP folder to upload file to",FTPPath) Host=InputRequester("FTP Host","Confirm FTP Host location to upload file to",Host) User=InputRequester("FTP User","Confirm FTP User for upload",User) Pass=InputRequester("FTP Password","Confirm FTP password for upload",Pass) ;msg=FName+Chr(10)+Chr(10)+Chr(10) ;msg=msg+LPath+Chr(10) ;msg=msg+FTPPath+Chr(10) ;msg=msg+Host+Chr(10) ;msg=msg+User+Chr(10) ;msg=msg+Pass If POS<0 AddGadgetItem(GID,-1,FName) pos.l=CountGadgetItems(GID)-1 Else SetGadgetItemText(GID,POS,FName,0) EndIf SetGadgetItemText(GID,pos,LPath,3) SetGadgetItemText(GID,pos,FTPPath,4) SetGadgetItemText(GID,pos,Host,5) SetGadgetItemText(GID,pos,User,6) SetGadgetItemText(GID,pos,Pass,7) SaveFTP(GID) EndProcedure Procedure LoadPrefs() LastMenuID.l=#MENU_FirstMDI +100 ClearList(HTMLTag()) ClearList(MyConst()) IniFile=RunPath+"mypad.ini" If FileSize(IniFile)>0 ;load constants TotalConst.l=INI_Readinteger("Constant","Total",0) If TotalConst For Const=1 To TotalConst sid.s="Const"+Trim(Str(Const)) MT.s=INI_ReadString("Constant",sid,sid) AddElement(MyConst()) MyConst()\Name=MT Next Const EndIf TotalSections=INI_Readinteger("Summary","Total",0) If Totalsections CreatePopupMenu(#MENU +1) MenuTitle("Insert Tag") For section.l=1 To Totalsections sid.s="Section"+Trim(Str(section)) MT.s=INI_ReadString("Summary",sid,sid) TotalTags.l=INI_REadInteger(MT,"Total",0) If TotalTags If TotalTags>1 OpenSubMenu(MT) EndIf For tag.l=1 To ToTalTags ;CallDebugger tagid.s="Tag"+Trim(Str(tag)) TagName.s=INI_ReadString(MT,tagid,tagid) ;ok finally have a tag AddElement(HTMLTag()) MenuItem(LastMenuID,TagName) HTMLTag()\TagMenuID=LastMenuID LastMenuID+1 HTMLTag()\TagName=TagName HTMLTag()\TClass=MT ;HTMLTag()\TSClass=ST HTMLTag()\NumParts=INI_ReadInteger(TagName,"NumParts",0) HTMLTag()\Prefix=INI_ReadString(TagName,"Prefix","");tag prefix code HTMLTag()\P1Name=INI_ReadString(TagName,"P1Name","");Prompt option 1 HTMLTag()\P1Text=INI_ReadString(TagName,"P1Text","");default parameter 1 HTMLTag()\Suffix=INI_ReadString(TagName,"Suffix","");tag prefix code HTMLTag()\P2Name=INI_ReadString(TagName,"P2Name","");prompt opt 2 HTMLTag()\P2Text=INI_ReadString(TagName,"P2Text","");default opt 2 HTMLTag()\EndTag=INI_ReadString(TagName,"EndTag","");end tag Next tag If TotalTags>1 CloseSubMenu() EndIf EndIf ;PreferenceGroup("Summary") Next section EndIf EndIf EndProcedure Procedure SavePrefs() ;LastMenuID.l=#MENU_FirstMDI +1 If IsMenu(#MENU +1) FreeMenu(#MENU +1) EndIf ;If CreatePreferences(RunPath+"mypad.ini") IniFile=RunPath+"mypad.ini" If FileSize(IniFile)>0 DeleteFile(IniFile) EndIf ResetList(MyConst()) While NextElement( MyConst()) myid.l=ListIndex(MyConst())+1 myname.s="Const"+Trim(Str(myid)) INI_WriteInteger("Constant","Total",MyID) INI_WriteString("Constant",myname,MyConst()\Name) Wend ResetList(HTMLTag()) While NextElement(HTMLTag()) ;CallDebugger MT.s=HTMLTag()\TClass If INI_ReadInteger(MT,"Total",0)=0 section=INI_INC("Summary","Total") sid.s="Section"+Trim(Str(section)) INI_WriteString("Summary",sid,MT) EndIf tag.l=INI_INC(MT,"Total") tagid.s="Tag"+Trim(Str(tag)) TagName.s=HTMLTag()\TagName INI_WriteString(MT,tagid,TagName) INI_Writeinteger(TagName,"NumParts",HTMLTag()\NumParts) INI_WriteString(TagName,"Prefix",HTMLTag()\Prefix) INI_WriteString(TagName,"P1Name",HTMLTag()\P1Name) INI_WriteString(TagName,"P1Text",HTMLTag()\P1Text) INI_WriteString(TagName,"Suffix",HTMLTag()\Suffix) INI_WriteString(TagName,"P2Name",HTMLTag()\P2Name) INI_WriteString(TagName,"P2Text",HTMLTag()\P2Text) INI_WriteString(TagName,"EndTag",HTMLTag()\EndTag) Wend LoadPrefs() EndProcedure Procedure SelectMDIWindow(Window) ;ripped from MDI demo ... new for PB4.2 ;because getgadgetstate(#MDIGADGET) returns the windowID and ;not the Index of the child window ForEach MDIWindow() If WindowID(MDIWindow()\ChildWindow) = WindowID(Window ) If MDIWindow()\EditorGadget EditFocus=MDIWindow()\EditorGadget Else EditFocus=0 EndIf ProcedureReturn 1 EndIf Next EndProcedure Procedure notes() ;also adjust colors ;first get current context msg$=GetGadgetItemText(EditFocus,line-1,0) GTLTFlag=0 QFlag=0 CommFlag=0 For C=1 To row+1 If GTLTFlag=3 GTLTFlag=0 EndIf If QFlag=3 QFlag=0 EndIf M$=Mid(msg$,C,1) If CommFlag=0 If M$="<" GTLTFlag=1 ElseIf M$=">" GTLTFlag=3 ElseIf M$="!" If GTLTFlag CommFlag=1 EndIf ElseIf M$=Chr(34) If QFlag QFlag=3 Else QFlag=1 EndIf EndIf Else If M$=">" CommFlag=0 GTLTFlag=3 EndIf EndIf ;determine current color If Qflag DColor=RGB(0,0,255) CF=3 ElseIf CommFlag DColor=RGB(0,255,0) CF=2 ElseIf GTLTFlag DColor=RGB(255,0,0) CF=1 Else DColor=0 CF=0 EndIf Next C format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = DColor StatusBarText(MDIWindow()\StatBar, 2, " Color: "+Str(CF),#PB_StatusBar_BorderLess) SendMessage_(GadgetID(EditFocus), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure Procedure.l EditorCallback(winId, message.l, wParam.l, lParam.l) Shared BlockMouse Static Row, Line , OldLine, LChange Protected result, *msgf.MSGFILTER result = #PB_ProcessPureBasicEvents Select message Case #WM_NOTIFY *msgf = lParam Select *msgf\NMHDR\code Case #EN_MSGFILTER ;handle statusbar line number field Select *msgf\msg Case #WM_LBUTTONUP ;line = getLineNumber(GID) + 1 ;gets the linenumber in an editorgadget from the caret position WID=GetGadgetState(#GADGET_MDI) If SelectMDIWindow(WID) If EditFocus SetActiveGadget(EditFocus) GetCaretPos_(@pos.point) char = SendMessage_(GadgetID(EditFocus), #EM_CHARFROMPOS, 0, @pos) line = SendMessage_(GadgetID(EditFocus), #EM_LINEFROMCHAR, char, 0) row=SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX, line, 0) row=char - row line + 1 StatusBarText(MDIWindow()\StatBar, 0, " Line: " + Str(line), #PB_StatusBar_BorderLess) StatusBarText(MDIWindow()\StatBar, 1, " Col: "+Str(row),#PB_StatusBar_BorderLess) If line<>OldLine If LChange msg$=GetGadgetItemText(EditFocus,Oldline-1,0) SetGadgetItemText(EditFocus,OldLine-1,"",0) AddGadgetItem(EditFocus,Oldline,"") ;AddGadgetItem(EditFocus,Oldline+1,"") cbt$=GetClipboardText() NewColorLine(msg$,Oldline) SetClipboardText(cbt$) Editor_Select(EditFocus, Line-1, 1, Line-1, 1) LChange=0 EndIf OldLine=line EndIf EndIf EndIf Case #WM_KEYUP WID=GetGadgetState(#GADGET_MDI) If SelectMDIWindow(WID) If EditFocus SetActiveGadget(EditFocus) GetCaretPos_(@pos.point) char = SendMessage_(GadgetID(EditFocus), #EM_CHARFROMPOS, 0, @pos) line = SendMessage_(GadgetID(EditFocus), #EM_LINEFROMCHAR, char, 0) row=SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX, line, 0) row=char - row line + 1 StatusBarText(MDIWindow()\StatBar, 0, " Line: " + Str(line), #PB_StatusBar_BorderLess) StatusBarText(MDIWindow()\StatBar, 1, " Col: "+Str(row),#PB_StatusBar_BorderLess) If line<>OldLine If LChange msg$=GetGadgetItemText(EditFocus,Oldline-1,0) SetGadgetItemText(EditFocus,OldLine-1,"",0) AddGadgetItem(EditFocus,Oldline,"") ;AddGadgetItem(EditFocus,Oldline+1,"") cbt$=GetClipboardText() NewColorLine(msg$,Oldline) SetClipboardText(cbt$) LChange=0 Editor_Select(EditFocus, Line-1, 1, Line-1, 1) EndIf OldLine=line EndIf EndIf EndIf Case #WM_CHAR ;for now, just record the char value If editfocus char=*msgf\wParam LChange=1 Select char Case #NK_LessThan M$="<" DColor=RGB(255,0,0) CF=1 Case #NK_GreaterThan M$=">" DColor=RGB(255,0,0) CF=1 Case #NK_Quote M$=Chr(34) DColor=RGB(0,0,255) CF=3 Case #NK_Flame M$="!" DColor=RGB(0,255,0) CF=2 Default ;also adjust colors ;first get current context msg$=GetGadgetItemText(EditFocus,line-1,0) GTLTFlag=0 QFlag=0 CommFlag=0 For C=1 To row+1 If GTLTFlag=3 GTLTFlag=0 EndIf If QFlag=3 QFlag=0 EndIf M$=Mid(msg$,C,1) If CommFlag=0 If M$="<" GTLTFlag=1 ElseIf M$=">" GTLTFlag=3 ElseIf M$="!" If GTLTFlag CommFlag=1 EndIf ElseIf M$=Chr(34) If QFlag QFlag=3 Else QFlag=1 EndIf EndIf Else If M$=">" CommFlag=0 GTLTFlag=3 EndIf EndIf ;determine current color If Qflag DColor=RGB(0,0,255) CF=3 ElseIf CommFlag DColor=RGB(0,255,0) CF=2 ElseIf GTLTFlag DColor=RGB(255,0,0) CF=1 Else DColor=0 CF=0 EndIf Next C EndSelect format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = DColor SendMessage_(GadgetID(EditFocus), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) ;StatusBarText(MDIWindow()\StatBar, 2, " Color: "+Str(CF),#PB_StatusBar_BorderLess) StatusBarText(MDIWindow()\StatBar, 2, " Char: "+Str(char),#PB_StatusBar_BorderLess) EndIf EndSelect EndSelect EndSelect ProcedureReturn result EndProcedure Procedure SaveAs() Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) PatType=GetPattern(MDIWindow()\FileName) MDIWindow()\FullName=SaveFileRequester("Save File As", DefPath+MDIWindow()\FileName, Pattern$, PatType) If Len(MDIWindow()\Fullname)>4 CreateFile(1,MDIWindow()\FullName) lines.l=CountGadgetItems(MDIWindow()\EditorGadget)-1 For x=0 To lines WriteStringN(1,GetGadgetItemText(MDIWindow()\EditorGadget,x,0)) Next x CloseFile(1) MDIWindow()\Changed=0 SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_SETMODIFY, #False, #Null) MDIWindow()\FullText=GetGadgetText(MDIWindow()\EditorGadget) MDIWindow()\FileName=GetFilePart(MDIWindow()\FullName) DefaultName$=MDIWindow()\FileName EndIf ;SetGadgetItemText(#GADGET_MDI,Item,MDIWindow()\FileName,0) SetWindowTitle(MDIWindow()\ChildWindow,MDIWindow()\FileName) EndIf EndIf EndProcedure Procedure SaveFile() Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If Left(MDIWindow()\FileName,8)="Untitled" MDIWindow()\Fullname="" EndIf If Len(MDIWindow()\Fullname)>4 CreateFile(1,MDIWindow()\FullName) lines.l=CountGadgetItems(MDIWindow()\EditorGadget)-1 For x=0 To lines WriteStringN(1,GetGadgetItemText(MDIWindow()\EditorGadget,x,0)) Next x CloseFile(1) MDIWindow()\Changed=0 SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_SETMODIFY, #False, #Null) ;SetGadgetItemText(#GADGET_MDI,Item,MDIWindow()\FileName,0) SetWindowTitle(MDIWindow()\ChildWindow,MDIWindow()\FileName) MDIWindow()\FullText=GetGadgetText(MDIWindow()\EditorGadget) Else SaveAs() EndIf EndIf EndIf EndProcedure Procedure LoadFile() Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) MDIWindow()\FullName = FileName$ MDIWIndow()\FileName = GetFilePart(FileName$) MDIWindow()\Changed = 0 If ReadFile(1,MDIWindow()\FullName) LN.l=0 ;AddGadgetItem(MDIWindow()\EditorGadget,1,"") ;AddGadgetItem(MDIWindow()\EditorGadget,2,"") ;AddGadgetItem(MDIWindow()\EditorGadget,3,"") cbt$=GetClipboardText() Repeat aline.s=ReadString(1) AddGadgetItem(MDIWindow()\EditorGadget,LN,"") AddGadgetItem(MDIWindow()\EditorGadget,LN+1,"") ;AddGadgetItem(MDIWindow()\EditorGadget,LN+2,"") ;ColorLine(MDIWindow()\EditorGadget,LN,0) NewColorLine(aline,LN) LN+1 Until Eof(1) CloseFile(1) SetClipboardText(cbt$) ;scroll to top FVL.l=SendMessage_(GadgetID(EditFocus), #EM_GETFIRSTVISIBLELINE,0,0) If FVL<>0 SendMessage_(GadgetID(EditFocus),#EM_LINESCROLL,0,-FVL) EndIf MDIWindow()\Changed=0 SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_SETMODIFY, #False, #Null) ;SetGadgetItemText(#GADGET_MDI,Item,MDIWindow()\FileName,0) SetWindowTitle(MDIWindow()\ChildWindow,MDIWindow()\FileName) DefaultName$=MDIWindow()\FileName MDIWindow()\FullText=GetGadgetText(MDIWindow()\EditorGadget) EndIf Else MessageRequester("MyPad","Can't open"+Chr(10)+MDIWindow()\FullName,#MB_ICONSTOP) EndIf EndIf EndProcedure Procedure EditTag() If EditTagLoaded ;locate existing tag editor ResetList(MDIWindow()) EditTagLoaded=0 While NextElement(MDIWindow()) If MDIWIndow()\ClassGadget EditTagLoaded=1 ;SetGadgetState(#GADGET_MDI,ListIndex(MDIWindow())) SetGadgetState(#Gadget_MDI,MDIWindow()\ChildWindow) Break EndIf Wend EndIf If EditTagLoaded=0 EditTagLoaded=1 ;first, standard MDI window LastElement(MDIWindow()) AddElement(MDIWindow()) ;Item.l = ListIndex(MDIWindow()) MDIWindow()\FullName = "" MDIWIndow()\FileName = "TagEditor" MDIWindow()\Changed = 0 Select TagMode Case 0 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, "Insert This Tag",#PB_Window_TitleBar) Case 1 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, "Edit This Tag",#PB_Window_TitleBar) Case 2 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, "Delete This Tag",#PB_Window_TitleBar) Case 3 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, "Create New Tag",#PB_Window_TitleBar) LastElement(HTMLTag()) AddElement(HTMLTag()) EndSelect ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 320) ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight, 215) ResizeWindow(MDIWindow()\ChildWindow,#PB_Ignore,#PB_Ignore,320,215) ;next, the Tag controls MDIWindow()\Width=320 ;MDIWindow()\Width=535 CreateGadgetList(WindowID(MDIWindow()\ChildWindow)) MDIWIndow()\NameGadget=StringGadget( #PB_Any, 5, 5, 100, 20, "Tag Name") GadgetToolTip(MDIWIndow()\NameGadget, "Tag name for Menu System") MDIWIndow()\ClassGadget=StringGadget( #PB_Any, 110, 5, 100, 20, "Type") GadgetToolTip(MDIWIndow()\ClassGadget, "Tag class for grouping Tags in menu") MDIWIndow()\ClassButton=ButtonGadget( #PB_Any, 215, 5, 100, 20, "Browse") GadgetToolTip(MDIWIndow()\ClassButton, "View Contants and Tag Classes") TextGadget( #PB_Any, 5, 35, 100, 20, "HTML Prefix Code") MDIWIndow()\PrefixGadget=StringGadget(#PB_Any, 110, 35, 100, 20, "Code") GadgetToolTip(MDIWIndow()\PrefixGadget, "HTML Code") MDIWindow()\CheckBut1=CheckBoxGadget( #PB_Any, 215, 35, 100, 20, "Extra Code Lines") GadgetToolTip(MDIWindow()\CheckBut1,"Add new line after each HTML code") MDIWIndow()\P1Gadget=StringGadget( #PB_Any, 5, 65, 100, 20, "Prompt1") GadgetToolTip(MDIWIndow()\P1Gadget, "User text for reminders") MDIWIndow()\D1Gadget=StringGadget( #PB_Any, 110, 65, 100, 20, "Default1") GadgetToolTip(MDIWIndow()\D1Gadget, "Default insert text") MDIWIndow()\Browse1=ButtonGadget( #PB_Any, 215, 65, 100, 20, "Browse") GadgetToolTip(MDIWIndow()\Browse1, "Browse for files or use _ to view constants") TextGadget( #PB_Any, 5, 95, 100, 20, "Suffix Code") MDIWIndow()\SuffixGadget=StringGadget(#PB_Any, 110, 95, 100, 20, "HTML Code") GadgetToolTip(MDIWIndow()\SuffixGadget, "HTML Code") MDIWindow()\CheckBut2=CheckBoxGadget( #PB_Any, 215, 95, 100, 20, "Extra Text Lines") GadgetToolTip(MDIWindow()\CheckBut2,"Add new line after each user text") MDIWIndow()\P2Gadget=StringGadget( #PB_Any, 5,125, 100, 20, "Prompt2") GadgetToolTip(MDIWIndow()\P2Gadget, "User Reminders for second part") MDIWIndow()\D2Gadget=StringGadget( #PB_Any, 110,125, 100, 20, "Default2") GadgetToolTip(MDIWIndow()\D2Gadget, "Default insert, use / for new line") MDIWIndow()\Browse2=ButtonGadget( #PB_Any, 215,125, 100, 20, "Browse") GadgetToolTip(MDIWIndow()\Browse2, "Browse for files or use _ to view constants") TextGadget( #PB_Any, 5,155, 100, 20, "HTML End Tag") MDIWindow()\EndGadget=StringGadget( #PB_Any, 110,155, 100, 20, "
") GadgetToolTip(MDIWIndow()\EndGadget, "End HTML Tag code") MDIWindow()\CheckBut3=CheckBoxGadget( #PB_Any, 215,155, 100, 20, "Short FileName") GadgetToolTip(MDIWindow()\CheckBut3,"Shortens filename to relative path") MDIWIndow()\TheButton=ButtonGadget( #PB_Any, 5,185, 100, 20, "OK") GadgetToolTip(MDIWIndow()\TheButton, "Commit to previous Action") MDIWIndow()\EditButton=ButtonGadget( #PB_Any, 110,185, 100, 20, "Edit") GadgetToolTip(MDIWIndow()\EditButton, "Cancel previous action and edit this tag") MDIWIndow()\CanButton=ButtonGadget( #PB_Any, 215,185, 100, 20, "Cancel") GadgetToolTip(MDIWIndow()\CanButton, "Cancel previous action") TextGadget( #PB_Any, 325, 5, 100, 20, "Constants") TextGadget( #PB_Any, 430, 5, 100, 20, "Tag Classes") MDIWindow()\CList=ListViewGadget( #PB_Any, 325, 35, 100,175) MDIWindow()\BList=ListViewGadget( #PB_Any, 430, 35, 100,175) GadgetToolTip(MDIWIndow()\CList, "known Constants") GadgetToolTip(MDIWIndow()\BList, "known Classes") ;Fill List Of Constants ResetList(MyConst()) While NextElement( MyConst()) sometext.s=MyConst()\Name AddGadgetItem(MDIWindow()\CList,-1,sometext) Wend ;Fill List Of Sections IniFile=RunPath+"mypad.ini" If FileSize(IniFile)>0 TotalSections=INI_Readinteger("Summary","Total",0) If Totalsections For section=1 To TotalSections sid.s="Section"+Trim(Str(section)) MT.s=INI_ReadString("Summary",sid,sid) AddGadgetItem(MDIWindow()\BList,-1,MT) Next section GS.s=GetGadgetItemText(MDIWindow()\BList,0,0) SetGadgetText(MDIWindow()\ClassGadget,gs) EndIf EndIf ;Customize Controls for context If TagMode<3 ;not a new tag ;dissable alot of buttons DisableGadget(MDIWindow()\NameGadget,1) DisableGadget(MDIWindow()\ClassGadget,1) DisableGadget(MDIWindow()\PrefixGadget,1) DisableGadget(MDIWindow()\P1Gadget,1) DisableGadget(MDIWindow()\SuffixGadget,1) DisableGadget(MDIWindow()\P2Gadget,1) DisableGadget(MDIWindow()\EndGadget,1) DisableGadget(MDIWindow()\ClassButton,1) ;read the data from HTML tag SetGadgetText(MDIWindow()\NameGadget,HTMLTag()\TagName) SetGadgetText(MDIWindow()\ClassGadget,HTMLTag()\TClass) SetGadgetText(MDIWindow()\PrefixGadget,HTMLTag()\Prefix) SetGadgetText(MDIWindow()\P1Gadget,HTMLTag()\P1Name) SetGadgetText(MDIWindow()\D1Gadget,HTMLTag()\P1Text) SetGadgetText(MDIWindow()\SuffixGadget,HTMLTag()\Suffix) SetGadgetText(MDIWindow()\P2Gadget,HTMLTag()\P2Name) SetGadgetText(MDIWindow()\D2Gadget,HTMLTag()\P2Text) SetGadgetText(MDIWindow()\EndGadget,HTMLTag()\EndTag) If HTMLTag()\NumParts & 1 SetGadgetState(MDIWindow()\CheckBut1,1) EndIf If HTMLTag()\NumParts & 2 SetGadgetState(MDIWindow()\CheckBut2,1) EndIf If HTMlTag()\NumParts & 4 SetGadgetState(MDIWindow()\CheckBut3,1) EndIf EndIf If TagMode ;not an insert mode DisableGadget(MDIWindow()\Browse1,1) DisableGadget(MDIWindow()\Browse2,1) Else DisableGadget(MDIWindow()\CheckBut1,1) DisableGadget(MDIWindow()\CheckBut2,1) DisableGadget(MDIWindow()\CheckBut3,1) EndIf EndIf EndProcedure Procedure NewWindow(Flag.l) If Flag=4 ;FTP Window If FTPLoaded FTPLoaded=0 ;locate existing FTP dialog ResetList(MDIWindow()) While NextElement(MDIWindow()) If MDIWIndow()\ListGadget FTPLoaded=1 ;SetGadgetState(#GADGET_MDI,ListIndex(MDIWindow())) SetGadgetState(#Gadget_mdi,MDIWindow()\ChildWindow) Break EndIf Wend EndIf If FTPLoaded=0 FTPLoaded=1 LastElement(MDIWindow()) AddElement(MDIWindow()) ;Item = ListIndex(MDIWindow()) MDIWindow()\FullName = "" MDIWIndow()\FileName = "FTP Manager" MDIWindow()\Changed = 0 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, MDIWIndow()\FileName,#PB_Window_TitleBar) ;Width = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth) Width=WindowWidth(MDIWindow()\ChildWindow) ;Width=525 ;Height = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight) Height=WindowHeight(MDIWindow()\Childwindow) ;MDIWindow()\Width=Width ;SetGadgetItemAttribute(#GADGET_MDI,Item,#PB_MDI_ItemWidth,MDIWindow()\Width) ;now for the controls CreateGadgetList(WindowID(MDIWindow()\ChildWindow)) MDIWindow()\ListGadget=ListIconGadget(#PB_Any,0,0,width,height-30,"FileName",100,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect) MDIWindow()\AddButton=ButtonGadget(#PB_Any,0,height-27,100,25,"Add File") MDIWindow()\EditFTP=ButtonGadget(#PB_Any,105,height-27,100,25,"Edit File") MDIWindow()\DelButton=ButtonGadget(#PB_Any,210,height-27,100,25,"Delete") MDIWindow()\ScanFTP= ButtonGadget(#PB_Any,315,height-27,100,25,"Scan") MDIWindow()\StartFTP= ButtonGadget(#PB_Any,420,height-27,100,25,"Start") MDIWindow()\StopFTP= ButtonGadget(#PB_Any,525,height-27,100,25,"Stop") MDIWindow()\CancelFTP=ButtonGadget(#PB_Any,630,height-27,100,25,"Close") ;some tips GadgetToolTip(MDIWIndow()\AddButton, "Add File to Upload") GadgetToolTip(MDIWIndow()\EditFTP,"Edit Selected File") GadgetToolTip(MDIWIndow()\DelButton,"Remove file from upload list") GadgetToolTip(MDIWIndow()\ScanFTP,"Retrieve file version data from FTP site") GadgetToolTip(MDIWIndow()\StartFTP,"Start uploading new files") GadgetToolTip(MDIWIndow()\StopFTP,"Stop file transfers") GadgetToolTip(MDIWIndow()\CancelFTP,"Exit FTP manager") ;finish up the columns for the list gadget AddGadgetColumn(MDIWindow()\ListGadget,1,"Local Version",100) AddGadgetColumn(MDIWindow()\ListGadget,2,"Site Version",100) AddGadgetColumn(MDIWindow()\ListGadget,3,"Local Path",100) AddGadgetColumn(MDIWindow()\ListGadget,4,"FTP Path",100) AddGadgetColumn(MDIWindow()\ListGadget,5,"FTP Host",100) AddGadgetColumn(MDIWindow()\ListGadget,6,"FTP User",100) AddGadgetColumn(MDIWindow()\ListGadget,7,"FTP Password",100) LoadFTP(MDIWindow()\ListGadget) EndIf ElseIf Flag=3 NewWindow(0) If FileSize(FileName$)>=0 If FileSize(FileName$)>64000 MessageRequester("MyPad","File Too Large",#MB_ICONSTOP) Else LoadFile() EndIf ElseIf FileSize(Chr(34)+FileName$+Chr(34))>=0 FileName$=Chr(34)+FileName$+Chr(34) LoadFile() Else MessageRequester("MyPad","Unable to load file"+Chr(10)+FileName$,0) EndIf ElseIf flag=2 ;make a browser window LastElement(MDIWindow()) AddElement(MDIWindow()) ;Item = ListIndex(MDIWindow()) MDIWindow()\FullName = FileName$ MDIWIndow()\FileName = GetFilePart(FileName$) MDIWindow()\Changed = 0 MDIWindow()\ChildWindow=AddGadgetItem(#GADGET_MDI, #PB_Any, MDIWIndow()\FileName) ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 600) ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight, 600) ;Width = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth) ;Height = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight) Width=WindowWidth(MDIWindow()\ChildWindow) Height=WindowHeight(MDIWindow()\Childwindow) ;custom stuff for browser CreateGadgetList(WindowID(MDIWindow()\ChildWindow)) MDIWindow()\ButtonBack=ButtonGadget(#PB_Any, 0, 0, 50, 25, "Back") MDIWindow()\ButtonNext=ButtonGadget(#PB_Any, 50, 0, 50, 25, "Next") MDIWindow()\ButtonStop=ButtonGadget(#PB_Any, 100, 0, 50, 25, "Stop") MDIWindow()\StringBrowse=StringGadget(#PB_Any, 155, 5, 0, 20, FileName$) GadgetToolTip(MDIWIndow()\StringBrowse, "Initial Displayed File Name") MDIWindow()\ButtonGo=ButtonGadget(#PB_Any, 0, 0, 25, 25, "Go") GadgetToolTip(MDIWIndow()\ButtonGo, "Go to filename") MDIWindow()\AFrame=Frame3DGadget(#PB_Any, 0, 30, 0, 2, "", 2) ; Nice little separator MDIWindow()\WebGadget=WebGadget(#PB_Any, 0, 31, width, height-30, FileName$) If MDIWindow()\WebGadget=0 MessageRequester("Error", "ATL.dll not found", 0) ;RemoveGadgetItem(#GADGET_MDI, Item) CloseWindow(MDIWindow()\ChildWindow) DeleteElement(MDIWindow()) Else ResizeGadget(MDIWindow()\WebGadget, 0, 31, Width, Height-30) ResizeGadget(MDIWindow()\StringBrowse, 155, 0, Width-185, 25) ResizeGadget(MDIWindow()\ButtonGo, Width-25, 0, 25, 25) ResizeGadget(MDIWindow()\AFrame, 0, 30, Width, 25) EndIf ElseIf flag=1 ;load file from commandline FileName$ = ProgramParameter() If Len(FileName$) done=0 Repeat more.s=ProgramParameter() If Len(more) FileName$=FileName$+" "+more Else done=1 Break EndIf Until done NewWindow(0) If FileSize(FileName$)>=0 If FileSize(FileName$)>64000 MessageRequester("MyPad","File Too Large",#MB_ICONSTOP) Else DefPath=GetPathPart(FileName$) LoadFile() EndIf ElseIf FileSize(Chr(34)+FileName$+Chr(34))>=0 FileName$=Chr(34)+FileName$+Chr(34) DefPath=GetPathPart(FileName$) LoadFile() Else MessageRequester("MyPad","Unable to load file"+Chr(10)+FileName$,0) EndIf EndIf Else ;FileName$=DefaultName$ LastElement(MDIWindow()) AddElement(MDIWindow()) ;Item = ListIndex(MDIWindow()) MDIWindow()\FullName = "" MDIWIndow()\FileName = "Untitled."+GetExtensionPart(DefaultName$) MDIWindow()\Changed = 0 MDIWindow()\Childwindow=AddGadgetItem(#GADGET_MDI, #PB_Any, MDIWIndow()\FileName) ;Width = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth) ;Height = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight) Width=WindowWidth(MDIWindow()\ChildWindow) Height=WindowHeight(MDIWindow()\ChildWindow) ;AdvancedGadgetEvents(#True) CreateGadgetList(WindowID(MDIWindow()\ChildWindow)) MDIWindow()\StatBar=CreateStatusBar(#PB_Any,WindowID(MDIWindow()\ChildWindow)) AddStatusBarField(100) AddStatusBarField(100) AddStatusBarField(100) MDIWindow()\EditorGadget=EditorGadget(#PB_Any,0,0,width,height-StatusBarHeight(MDIWindow()\StatBar)) EditFocus=MDIWindow()\EditorGadget SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_EXLIMITTEXT, 0, 64000) ;AdvancedGadgetEvents(#False) evMask = SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_GETEVENTMASK, 0, 0) SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_SETEVENTMASK, 0, evMask | #ENM_KEYEVENTS | #ENM_MOUSEEVENTS) EndIf EndProcedure Procedure.s GetRealFile(TFileName.s) ;WARNING this assumes a decorated filename from ;a web browser and converts to standard text ;step 1, trim off the first 8 chars fl.l=Len(TFileName)-8 TFileName=Right(TFileName,fl) ;step 2, convert %20 into a blank space ;also convert %23 into a # temp.s="" quit.l=Len(TFileName) char.l=1 Repeat If Mid(TFileName,char,3)="%20" temp=temp+" " char=char+3 ElseIf Mid(TFileName,char,3)="%23" temp=temp+"#" char=char+3 Else If Mid(TFileName,char,1)="/" temp=temp+"\" Else temp=temp+Mid(TFileName,char,1) EndIf char=char+1 EndIf Until char>quit ProcedureReturn temp EndProcedure Procedure findReplace(id,Sflag) ;ID is the #GadgetID for the rich edit control gadet ;S$ = lastsearch string checked for ;R$ = last replace string checked for ;Sflag = 0 for new check or replace ; 1 for continue search ; 2 for continue replace Static S$ Static R$ flags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered win = OpenWindow(#PB_Any, 0, 0, 400, 145, "Find/Replace", flags) If win StickyWindow(win, #True) If CreateGadgetList(WindowID(win)) ;draw the find icon img1 = CreateImage(#PB_Any, 22, 22) If StartDrawing(ImageOutput(img1)) Box(0, 0, 24, 24, GetSysColor_(15)) ;icon index 176, 55 ExtractIconEx_("shell32.dll", 176, 0, @icon, 1) If icon DrawImage(icon, 0, 0, 21, 21) DestroyIcon_(icon) EndIf StopDrawing() EndIf If 1 ImageGadget(#PB_Any, 10, 15, 0, 0, ImageID(img1)) TextGadget(#PB_Any, 40, 20, 75, 22, "Find:") Else TextGadget(#PB_Any, 10, 20, 75, 22, "Find What:") EndIf str1 = StringGadget(#PB_Any, 100, 15, 200, 21, S$) TextGadget(#PB_Any, 10, 50, 75, 22, "Replace With:") str2 = StringGadget(#PB_Any, 100, 45, 200, 21, R$) btn1 = ButtonGadget(#PB_Any, 310, 15, 80, 22, "Find Next", #PB_Button_Default) DisableGadget(btn1, #True) btn2 = ButtonGadget(#PB_Any, 310, 45, 80, 22, "Replace") DisableGadget(btn2, #True) btn3 = ButtonGadget(#PB_Any, 310, 80, 80, 22, "Replace all") DisableGadget(btn3, #True) btn4 = ButtonGadget(#PB_Any, 310, 110, 80, 22, "Cancel") chk1 = CheckBoxGadget(#PB_Any, 10, 80, 120, 22, "Match Case") chk2 = CheckBoxGadget(#PB_Any, 10, 112, 120, 22, "Whole Words only") chk3 = CheckBoxGadget(#PB_Any, 140, 112, 160, 22, "Search From Top") If SFlag=0 ;get any selected text in the richedit SendMessage_(GadgetID(id), #EM_EXGETSEL, 0, @text.FINDTEXT\chrg) If (text\chrg\cpMin <> text\chrg\cpMax) ;selected text range found, check it's length len = text\chrg\cpMax - text\chrg\cpMin If len < 128 ;Debug len char.c *txt = AllocateMemory((len + 1) * SizeOf(char)) ;get the selected text SendMessage_(GadgetID(id), #EM_GETSELTEXT, 0, *txt) SetGadgetText(str1, PeekS(*txt)) FreeMemory(*txt) ;focus the replace input field SetActiveGadget(str2) ;enable the buttons DisableGadget(btn1, #False) DisableGadget(btn2, #False) DisableGadget(btn3, #False) EndIf Else ;focus the findstring input field SetActiveGadget(str1) EndIf ;no text found yet: pos = -1 Else ;set up buttons to continue operations DisableGadget(btn1, #False) find.s = GetGadgetText(str1) text.FINDTEXT\lpstrText = @find ;get current position or selected range in the text SendMessage_(GadgetID(id), #EM_EXGETSEL, 0, @text\chrg) If (text\chrg\cpMin <> text\chrg\cpMax) ;selected text range found, search from the end of it text\chrg\cpMin = text\chrg\cpMax EndIf If GetGadgetState(chk3) ;reset, search from the top SetGadgetState(chk3, 0) text\chrg\cpMin = 0 EndIf ;search to the end of the text: text\chrg\cpMax = -1 ;set the search flags flg = 0 flg | #FR_DOWN If GetGadgetState(chk1) flg | #FR_MATCHCASE EndIf If GetGadgetState(chk2) flg | #FR_WHOLEWORD EndIf pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find + Chr(13) + Chr(10) msg + "Search again from the top ?" flags = #MB_ICONQUESTION | #MB_YESNOCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDYES ;first position in the text SendMessage_(GadgetID(id), #EM_SETSEL, 0, 0) text\chrg\cpMin = 0 ;search to the end of the text: text\chrg\cpMax = -1 pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find flags = #MB_ICONINFORMATION | #MB_OK MessageRequester("Find/Replace", msg, flags) EndIf SetActiveGadget(id) EndSelect EndIf If SFlag>1 DisableGadget(btn2, #False) DisableGadget(btn3, #False) EndIf EndIf ;default search flag flg | #FR_DOWN Repeat event = WaitWindowEvent() If EventWindow() = win Select event Case #PB_Event_Gadget Select EventGadget() Case str1 ;find string GadgetToolTip(str1, GetGadgetText(str1)) If Len(GetGadgetText(str1)) DisableGadget(btn1, #False) DisableGadget(btn2, #False) DisableGadget(btn3, #False) S$=GetGadgetText(str1) Else DisableGadget(btn1, #True) DisableGadget(btn2, #True) DisableGadget(btn3, #True) EndIf Case str2 ;replace string GadgetToolTip(str2, GetGadgetText(str2)) R$=GetGadgetText(str2) Case btn1 ;find button find.s = GetGadgetText(str1) text.FINDTEXT\lpstrText = @find ;get current position or selected range in the text SendMessage_(GadgetID(id), #EM_EXGETSEL, 0, @text\chrg) If (text\chrg\cpMin <> text\chrg\cpMax) ;selected text range found, search from the end of it text\chrg\cpMin = text\chrg\cpMax EndIf If GetGadgetState(chk3) ;reset, search from the top SetGadgetState(chk3, 0) text\chrg\cpMin = 0 EndIf ;search to the end of the text: text\chrg\cpMax = -1 ;set the search flags flg = 0 flg | #FR_DOWN If GetGadgetState(chk1) flg | #FR_MATCHCASE EndIf If GetGadgetState(chk2) flg | #FR_WHOLEWORD EndIf pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find + Chr(13) + Chr(10) msg + "Search again from the top ?" flags = #MB_ICONQUESTION | #MB_YESNOCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDYES ;first position in the text SendMessage_(GadgetID(id), #EM_SETSEL, 0, 0) text\chrg\cpMin = 0 ;search to the end of the text: text\chrg\cpMax = -1 pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find flags = #MB_ICONINFORMATION | #MB_OKCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDCANCEL Break EndSelect EndIf SetActiveGadget(id) Case #IDCANCEL Break EndSelect EndIf Case btn2 ;replace button ;get selected range in the text SendMessage_(GadgetID(id), #EM_EXGETSEL, 0, @text\chrg) If (text\chrg\cpMin <> text\chrg\cpMax) ;found selected text range repl.s = GetGadgetText(str2) If text\chrg\cpMax - text\chrg\cpMin = Len(GetGadgetText(str1)) ;same length as the find string, replace it SendMessage_(GadgetID(id), #EM_REPLACESEL, 1, @repl) ;advance the current position text\chrg\cpMin + Len(repl) EndIf Else ;no selection made yet, search from the current position text\chrg\cpMin = text\chrg\cpMax EndIf If GetGadgetState(chk3) ;reset, search from the top SetGadgetState(chk3, 0) text\chrg\cpMin = 0 EndIf ;search to the end of the text: text\chrg\cpMax = -1 find.s = GetGadgetText(str1) text\lpstrText = @find ;set the search flags flg = 0 flg | #FR_DOWN If GetGadgetState(chk1) flg | #FR_MATCHCASE EndIf If GetGadgetState(chk2) flg | #FR_WHOLEWORD EndIf pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find + Chr(13) + Chr(10) msg + "Search again from the top ?" flags = #MB_ICONQUESTION | #MB_YESNOCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDYES ;first position in the text SendMessage_(GadgetID(id), #EM_SETSEL, 0, 0) text\chrg\cpMin = 0 ;search to the end of the text: text\chrg\cpMax = -1 pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find flags = #MB_ICONINFORMATION | #MB_OKCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDCANCEL Break EndSelect EndIf Case #IDCANCEL Break EndSelect EndIf Case btn3 ;replace all button Repeat ;get selected range in the text SendMessage_(GadgetID(id), #EM_EXGETSEL, 0, @text\chrg) If (text\chrg\cpMin <> text\chrg\cpMax) ;found selected text range repl.s = GetGadgetText(str2) If text\chrg\cpMax - text\chrg\cpMin = Len(GetGadgetText(str1)) ;same length as the find string, replace it SendMessage_(GadgetID(id), #EM_REPLACESEL, 1, @repl) ;advance the current position text\chrg\cpMin + Len(repl) EndIf Else ;no selection made yet, search from the current position text\chrg\cpMin = text\chrg\cpMax EndIf If GetGadgetState(chk3) ;reset, search from the top SetGadgetState(chk3, 0) text\chrg\cpMin = 0 EndIf ;search to the end of the text: text\chrg\cpMax = -1 find.s = GetGadgetText(str1) text\lpstrText = @find ;set the search flags flg = 0 flg | #FR_DOWN If GetGadgetState(chk1) flg | #FR_MATCHCASE EndIf If GetGadgetState(chk2) flg | #FR_WHOLEWORD EndIf pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) EndIf Until pos = -1 msg.s = "Cannot find " + find + Chr(13) + Chr(10) msg + "Search again from the top ?" flags = #MB_ICONQUESTION | #MB_YESNOCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDYES ;first position in the text SendMessage_(GadgetID(id), #EM_SETSEL, 0, 0) text\chrg\cpMin = 0 ;search to the end of the text: text\chrg\cpMax = -1 pos = SendMessage_(GadgetID(id), #EM_FINDTEXT, flg, @text) If pos <> -1 ;found, select the text range SendMessage_(GadgetID(id), #EM_SETSEL, pos, pos + Len(find)) Else msg.s = "Cannot find " + find flags = #MB_ICONINFORMATION | #MB_OKCANCEL Select MessageRequester("Find/Replace", msg, flags) Case #IDCANCEL Break EndSelect EndIf Case #IDCANCEL Break EndSelect Case btn4 ;cancel button Break EndSelect Case #PB_Event_CloseWindow Break EndSelect EndIf ForEver EndIf CloseWindow(win) EndIf EndProcedure Procedure FindText(Flag.l) ;tomio ;code ripped from tomio's demo/tutorial Static Search.s Static Replace.s Static LCv.l ;first visible line in edit box Static LC.l ;number of visible lines Static SelStart.l Static SelEnd.l Static CLn.l ;current line under mouse Static CPS.l ;character count from left, under mouse Static CLn0.l Static CPS0.l Static FindPs.l Static FindLn.l Static FindLn0.l Static ix.l ;which editor? ;If GetWindow() If SelectMDIWindow(GetGadgetState(#GADGET_MDI)) If EditFocus ;use Flag to initialize vars Select Flag Case 0 ;called during resize event LCv=SendMessage_(GadgetID(EditFocus), #EM_GETFIRSTVISIBLELINE,0,0) ;where am I? LC=SendMessage_(GadgetID(EditFocus), #EM_GETLINECOUNT ,0,0) Case 1 Search=InputRequester("MyPad","Text to find",Search) If Search="" Flag=0 EndIf Case 3 ;If Search="" ; Search="Hello" ;EndIf Search=InputRequester("MyPad","Text to find",Search) If Search="" Flag=0 EndIf If Replace="" Replace=Search EndIf Replace=InputRequester("MyPad","Text to replace",Replace) If Replace="" Flag=0 EndIf Case 5 flag=0 ;called during editing ;to let find-function know where to continue ;CLn == line of mouse-position, CPs == character-position-in-line: CLn=SendMessage_(GadgetID(EditFocus), #EM_LINEFROMCHAR,-1,0): CPs0=0:CLn0=0 CPs=SendMessage_(GadgetID(EditFocus), #EM_GETSEL,0,0)&$ffff - SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX,-1,0) ;Debug GetGadgetItemText(EditFocus,CLn,0) ;Debug CLn ;Debug CPs ;CallDebugger ;Clx2=SendMessage_(GadgetID(EditFocus), #EM_LINEFROMCHAR,-1,0) ;Cpx2=SendMessage_(GadgetID(EditFocus), #EM_GETSEL,0,0)&$ffff - SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX,-1,0) ;ColorLine(MDIWindow()\EditorGadget,Clx2,Cpx2) ;Debug Cpx2 ;ColorLine(EditFocus,CLn,CPs) Case 6 ;called during right button in demo ;should not be used by me because I use a dif menu system selStart - 0 selEnd = 0 SendMessage_(GadgetID(EditFocus), #EM_GETSEL, @selStart, @selEnd) If Len(GetGadgetText(EditFocus)) < 1 DisableMenuItem(#MENU,#MENU_SEARCH,1) DisableMenuItem(#MENU,#MENU_SAGAIN,1) DisableMenuItem(#MENU,#MENU_REPLACE,1) DisableMenuItem(#MENU,#MENU_RAGAIN,1) ElseIf selStart = selEnd DisableMenuItem(#MENU,#MENU_SEARCH,0) DisableMenuItem(#MENU,#MENU_SAGAIN,0) DisableMenuItem(#MENU,#MENU_REPLACE,0) DisableMenuItem(#MENU,#MENU_RAGAIN,0) EndIf flag=0 Case 7 ;edit gadget event ;same as 5 ;in the demo is was for other editing events Cln=SendMessage_(GadgetID(EditFocus), #EM_LINEFROMCHAR,-1,0) Cps=SendMessage_(GadgetID(EditFocus), #EM_GETSEL,0,0)&$ffff - SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX,-1,0) flag=0 ColorLine(EditFocus,CLn,Cps) EndSelect Else ;MessageRequester("MyPad - Error","Unable to determine search window",#MB_ICONINFORMATION) flag=0 EndIf If Flag ;ready to seach for text ;UCSearch.s=UCase(Search) If CLn<>CLn0 FindLn.l=CLn CLn0=Cln EndIf ;new CARET positon.. If CPs<>CPs0 FindPs.l=CPs+1 CPs0=CPs EndIf ;..via LBUTTONDOWN ? CPz.l = CountGadgetItems(EditFocus)-1 Find0.l=SendMessage_(GadgetID(EditFocus), #EM_GETFIRSTVISIBLELINE,0,0) i0.l=Find0 i=FindLn ic.l=0 Repeat ;loop through text: line per line t$=GetGadgetItemText(EditFocus, i,0) ;next line FindPs=FindString(UCase(t$),UCase(Search),FindPs) ;next character-position of searchstring If SendMessage_(GadgetID(EditFocus), #EM_GETFIRSTVISIBLELINE,0,0)<>i0 ;if line out of window... SendMessage_(GadgetID(EditFocus),#EM_LINESCROLL,0,ix-4) ;..move text... i0=SendMessage_(GadgetID(EditFocus), #EM_GETFIRSTVISIBLELINE,0,0) ;..down ix=i-i0 If ix<0 ix=0 EndIf ic=0 EndIf While FindPs>0 ;loop through line strg.CHARRANGE\cpMin=SendMessage_(GadgetID(EditFocus), #EM_LINEINDEX, i,0)+FindPs-1 ;string.. strg\cpMax=strg\cpMin +Len(Search) ;..highlight with.. SendMessage_(GadgetID(EditFocus), #EM_EXSETSEL, 0, @strg) ;..default color Select Flag Case 1 FindPs=FindPs+Len(Search) If MessageRequester("MyPad","Search Again",#MB_OKCANCEL)=#IDCANCEL Break 2 EndIf Case 2 FindPs=FindPS+Len(Search) Break 2 Default FindPs+Len(Search) If MessageRequester("MyPad"+Str(Flag),"Replace Text",#MB_OKCANCEL)=#IDCANCEL Break 2 Else ;replace this text SetClipboardText(Replace) SendMessage_(GadgetID(EditFocus),#WM_PASTE,0,0) ;FindPS+Len(Search) If Flag=3 Break 2 EndIf EndIf EndSelect FindPs=FindString(UCase(t$),UCase(Search),FindPs) Wend i+1 FindLn=i ic+1 ;next line If i=CPz ;last line?...jump to top: SendMessage_(GadgetID(EditFocus),#EM_LINESCROLL,0,-1000):i=0:i0=0:FindLn=0 EndIf Until ic>CPz ;only to prevent endless loop in case something goes wrong CPs=FindPS+1 Cln=FindLn CPs0=Cps Cln0=Cln EndIf EndIf EndProcedure #WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget ;- MakeWindow UpdateTM=GetTickCount_()+1000 blockmouse.l=GetTickCount_() If OpenWindow(#WINDOW, 0, 0, 500, 400,"Norms Pad", #WindowFlags ) If CreateMenu(#MENU, WindowID(#WINDOW)) MenuTitle("File") MenuItem(#MENU_New,"New") MenuItem(#MENU_Open, "Open") MenuItem(#MENU_Close, "Close") MenuItem(#MENU_CloseAll, "Close All") MenuItem(#MENU_Save,"Save") MenuItem(#MENU_SaveAs,"Save As") MenuItem(#MENU_SaveAll,"Save All") MenuBar() MenuItem(#MENU_FTP,"FTP") MenuBar() MenuItem(#MENU_QUit, "Quit") MenuTitle("Edit") MenuItem(#MENU_Cut,"Cut") MenuItem(#MENU_Copy,"Copy") MenuItem(#MENU_Paste,"Paste") MenuBar() MenuItem(#MENU_SELALL,"Select All") MenuBar() MenuItem(#MENU_Undo,"Undo") MenuBar() MenuItem(#MENU_Search,"Search") MenuItem(#MENU_SAgain,"Search Again F3") MenuItem(#MENU_REPLACE,"Replace") MenuItem(#MENU_RAGAIN,"Replace Again F4") MenuTitle("Tags") MenuItem(#Menu_INSERT,"Insert Tag") MenuItem(#MENU_NTAG,"New Tag") MenuItem(#MENU_ETAG,"Edit Tag") MenuItem(#MENU_DTAG,"Delete Tag") MenuTitle("View") MenuItem(#MENU_WEB,"As Web") MenuItem(#MENU_TEXT,"as Text") MenuItem(#MENU_HELP,"Help") MenuItem(#MENU_ABOUT,"About") MenuTitle("Windows") MenuItem(#MENU_TileV, "Tile vertically") MenuItem(#MENU_TileH, "Tile horizontally") MenuItem(#MENU_Cascade, "Cascade") MenuItem(#MENU_Previous, "Previous") MenuItem(#MENU_Next, "Next") ; MDI subwindows will get added here EndIf If CreateToolBar(#TOOLBAR, WindowID(#WINDOW)) ToolBarStandardButton(#MENU_New, #PB_ToolBarIcon_New) ToolBarStandardButton(#MENU_Open, #PB_ToolBarIcon_Open) ToolBarStandardButton(#MENU_Close, #PB_ToolBarIcon_Delete) ToolBarSeparator() ToolBarStandardButton(#MENU_Save, #PB_ToolBarIcon_Save) ToolBarSeparator() ToolBarStandardButton(#MENU_Cut, #PB_ToolBarIcon_Cut) ToolBarStandardButton(#MENU_Copy, #PB_ToolBarIcon_Copy) ToolBarStandardButton(#MENU_Paste, #PB_ToolBarIcon_Paste) ToolBarSeparator() ;ToolBarStandardButton(#MENU_Undo, #PB_ToolBarIcon_Undo) ;ToolBarSeparator() ;ToolBarStandardButton(#MENU_Search, #PB_ToolBarIcon_Find) ;ToolBarSeparator() ToolBarStandardButton(#MENU_Previous, #PB_ToolBarIcon_Undo) ToolBarStandardButton(#MENU_Next, #PB_ToolBarIcon_Redo) ToolBarSeparator() ToolBarStandardButton(#MENU_INSERT,#PB_ToolBarIcon_Properties) EndIf ;AdvancedGadgetEvents(#True) If CreateGadgetList(WindowID(#WINDOW)) MDIGadget(#GADGET_MDI, 0, 0, 0, 0, 4, #MENU_FirstMDI, #PB_MDI_AutoSize) EndIf ;AdvancedGadgetEvents(#False) ;AddKeyboardShortcut(#WINDOW, #PB_Shortcut_Return, #MENU_FIRSTMDI) AddKeyboardShortcut(#WINDOW, #PB_Shortcut_F3, #MENU_SAGAIN) AddKeyboardShortcut(#WINDOW, #PB_Shortcut_F4, #MENU_RAGAIN) Quit = 0 ;- MainLoop NewWindow(1) LoadPrefs() RButtonFlag.l=0 SetWindowCallback(@EditorCallback()) Repeat Event = WaitWindowEvent() WID=EventWindow() ;- CloseWindow If Event = #PB_Event_CloseWindow If WID=#Window Quit = 1 canceled.l=0 ForEach MDIWindow() ;FreeImage(MDIWindow()\Image) If MDIWindow()\Changed msg.s="File>"+MDIWindow()\FileName+" has changed."+Chr(10)+"Do you wish to save?" reply.l=MessageBox_(WindowID(#WINDOW),msg,"MyPad",#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES ;item.l=ListIndex(MDIWindow()) ;SetGadgetState(#GADGET_MDI,item) SetGadgetState(#GADGET_MDI,MDIWindow()\ChildWindow) SaveFile() ElseIf reply=#IDCANCEL canceled=1 Break EndIf EndIf Next MDIWindow() If canceled=0 ClearGadgetItemList(#GADGET_MDI) ClearList(MDIWindow()) Else Quit=0 EndIf Else ;this is a childwindow If SelectMDIWindow(WID) canceled.l=0 If MDIWindow()\Changed msg.s="File>"+MDIWindow()\FileName+" has changed."+Chr(10)+"Do you wish to save?" reply.l=MessageBox_(WindowID(#Window),msg,"MyPad",#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES ;item.l=ListIndex(MDIWindow()) SetGadgetState(#GADGET_MDI,MDIWindow()\ChildWindow) SaveFile() ElseIf reply=#IDCANCEL canceled=1 EndIf EndIf If canceled=0 If MDIWindow()\ClassGadget EditTagLoaded=0 ElseIf MDIWindow()\ListGadget FTPLoaded=0 EndIf ;RemoveGadgetItem(#GADGET_MDI, WID) CloseWindow(WID) EditFocus=0 DeleteElement(MDIWindow()) SelectMDIWindow(GetGadgetState(#GADGET_MDI)) EndIf EndIf EndIf ;- LButtonDown ElseIf event= #WM_LBUTTONDOWN ;CallDebugger this still called ; If BlockMouse#Window If SelectMDIWindow(WID) width=WindowWidth(WID) height=WindowHeight(WID) If EditFocus ;width=WindowWidth(WID) height=height-StatusBarHeight(MDIWindow()\StatBar) ResizeGadget(EditFocus,0,0,width,height) ;FindText(0) ElseIf MDIWindow()\WebGadget ;ResizeGadget(MDIWindow()\WebGadget,#PB_Ignore,#PB_Ignore,width,height-23) ResizeGadget(MDIWindow()\AFrame, 0, 30, Width, 25) ResizeGadget(MDIWindow()\WebGadget, 0, 31, Width, Height-30) ResizeGadget(MDIWindow()\StringBrowse, 155, 0, Width-185, 25) ResizeGadget(MDIWindow()\ButtonGo, Width-25, 0, 25, 25) ElseIf MDIWindow()\ListGadget ResizeGadget(MDIWindow()\ListGadget,0,0,width,height-30) ResizeGadget(MDIWindow()\AddButton,0,height-27,100,25) ResizeGadget(MDIWindow()\EditFTP,105,height-27,100,25) ResizeGadget(MDIWindow()\DelButton,210,height-27,100,25) ResizeGadget(MDIWindow()\ScanFTP,315,height-27,100,25) ResizeGadget(MDIWindow()\StartFTP,420,height-27,100,25) ResizeGadget(MDIWindow()\StopFTP,525,height-27,100,25) ResizeGadget(MDIWindow()\CancelFTP,630,height-27,100,25) Else ;this is the tag gadget If width<>MDIWindow()\Width Or height<>215 ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 320) ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight, 215) ResizeWindow(WID,#PB_Ignore,#PB_Ignore,320,215) EndIf EndIf EndIf EndIf ;- RButonDown ElseIf Event= #WM_RBUTTONDOWN ;CallDebugger ;this seems to work too If IsMenu(#MENU + 1) TagMode=0 Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget ;If ChildWindowFromPoint_(WindowID(), WindowMouseX(), WindowMouseY()) = GadgetID(MDIWindow()\EditorGadget) EditFocus=MDIWindow()\EditorGadget ;FindText(5) DisplayPopupMenu(#MENU + 1, WindowID(item)) ;EndIf EndIf EndIf EndIf Else ;CallDebugger LoadPrefs() EndIf ;- Menu Events ElseIf Event = #PB_Event_Menu Select EventMenu() Case #MENU_FTP NewWindow(4) Case #MENU_Insert If IsMenu(#MENU + 1) TagMode=0 Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget DisplayPopupMenu(#MENU + 1, WindowID(#WINDOW)) EditFocus=MDIWindow()\EditorGadget ;FindText(5) EndIf EndIf EndIf EndIf Case #MENU_NTAG ;If EditTagLoaded=0 TagMode=3 Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget EditTag() EndIf EndIf EndIf ;EndIf Case #MENU_ETAG If IsMenu(#MENU + 1) TagMode=1 Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget DisplayPopupMenu(#MENU + 1, WindowID(#WINDOW)) EndIf EndIf EndIf EndIf Case #MENU_DTAG If IsMenu(#MENU + 1) TagMode=2 Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget DisplayPopupMenu(#MENU + 1, WindowID(#WINDOW)) EndIf EndIf EndIf EndIf Case #MENU_HELP FileName$=RunPath+"MyPadHelp.htm" NewWindow(2) Case #MENU_ABOUT ;msg.s="MyPad"+Chr(10) ;msg=msg+"Build="+Str(#PB_Compiler_Date )+Chr(10) ;msg=msg+"By Norman Perry"+Chr(10) ;msg=msg+"HTML code stolen from TDKman" ;MessageRequester("MyPad",msg,0) WrapAbout(#Window,"ArconRPG.com","Norm's HTML editor","3","May 2007","www.archonrpg.com") Case #MENU_WEB Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(Item) If MDIWindow()\EditorGadget FileName$=MDIWindow()\FullName EditFocus=MDIWindow()\EditorGadget NewWindow(2) EndIf EndIf EndIf Case #MENU_TEXT Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(Item) If MDIWindow()\WebGadget FileName$=GetGadgetText(MDIWindow()\WebGadget) FileName$=GetRealFile(FileName$) NewWindow(3) EndIf EndIf EndIf Case #MENU_FIRSTMDI Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(Item) If MDIWindow()\EditorGadget EditFocus=MDIWindow()\EditorGadget ;p.l=GetGadgetState(MDIWindow()\EditorGadget) ;AddGadgetItem(MDIWindow()\EditorGadget,p,"",0) ;MDIWindow()\Changed=1 ;Else ;SetGadgetText(MDIWindow()\WebGadget,GetGadgetText(MDIWindow()\StringBrowse)) EndIf EndIf EndIf Case #MENU_New NewWindow(0) ;CloseGadgetList() Case #MENU_Open PatType=GetPattern(DefaultName$) FileName$ = OpenFileRequester("Open Text File", DefPath+DefaultName$, Pattern$, PatType, #PB_Requester_MultiSelection) While FileName$ NewWindow(0) LoadFile() FileName$ = NextSelectedFileName() Wend Case #MENU_Save SaveFile() Case #MENU_SaveAS SaveAs() Case #MENU_SaveALL ForEach MDIWindow() Savefile() Next MDIWindow() Case #MENU_Close Item = GetGadgetState(#GADGET_MDI) If Item <> -1 ;RemoveGadgetItem(#GADGET_MDI, Item) CloseWindow(Item) ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(Item) ;FreeImage(MDIWindow()\Image) DeleteElement(MDIWindow()) EditFocus=0 EndIf EndIf ;GetWindow() Window=GetGadgetState(#GADGET_MDI) If Window=-1 If FirstElement(MDIWindow()) SetGadgetState(#GADGET_MDI,MDIWindow()\ChildWindow) If MDIWindow()\EditorGadget EditFocus=MDIWindow()\EditorGadget EndIf EndIf Else If SelectMDIWindow(Window) If MDIWindow()\EditorGadget EditFocus=MDIWindow()\EditorGadget EndIf EndIf EndIf Case #MENU_CloseAll canceled.l=0 ForEach MDIWindow() ;FreeImage(MDIWindow()\Image) If MDIWindow()\Changed msg.s="File>"+MDIWindow()\FileName+" has changed."+Chr(10)+"Do you wish to save?" reply.l=MessageBox_(WindowID(#window),msg,"MyPad",#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES item.l=ListIndex(MDIWindow()) SetGadgetState(#GADGET_MDI,item) SaveFile() ElseIf reply=#IDCANCEL canceled=1 Break EndIf EndIf CloseWindow(MDIWindow()\Childwindow) Next MDIWindow() EditFocus=0 If canceled=0 ClearGadgetItemList(#GADGET_MDI) ClearList(MDIWindow()) Else ;GetWindow() SelectMDIWindow(GetGadgetState(#GADGET_MDI)) EndIf Case #MENU_Quit canceled.l=0 ResetList(MDIWindow()) While NextElement( MDIWindow()) ;FreeImage(MDIWindow()\Image) If MDIWindow()\Changed msg.s="File>"+MDIWindow()\FileName+" has changed."+Chr(10)+"Do you wish to save?" reply.l=MessageBox_(WindowID(#Window),msg,"MyPad",#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES item.l=ListIndex(MDIWindow()) SetGadgetState(#GADGET_MDI,item) SaveFile() ElseIf reply=#IDCANCEL canceled=1 Break EndIf EndIf Wend EditFocus=0 If canceled=0 ClearGadgetItemList(#GADGET_MDI) ClearList(MDIWindow()) Quit = 1 Else ;GetWindow() SelectMDIWindow(GetGadgetState(#GADGET_MDI)) EndIf Case #MENU_Cut Item = GetGadgetState(#GADGET_MDI) If item<>-1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) SendMessage_(GadgetID(MDIWindow()\EditorGadget),#WM_CUT,0,0) EditFocus=MDIWindow()\EditorGadget MDIWindow()\Changed=1 ;FindText(5) EndIf EndIf Case #MENU_Copy Item = GetGadgetState(#GADGET_MDI) If item<>-1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget SendMessage_(GadgetID(MDIWindow()\EditorGadget),#WM_COPY,0,0) EditFocus=MDIWindow()\EditorGadget ;FindText(5) ElseIf MDIWindow()\WebGadget SendMessage_(GadgetID(MDIWindow()\WebGadget),#WM_COPY,0,0) Else ;just send to the window and hope ... SendMessage_(WindowID(item),#WM_COPY,0,0) EndIf EndIf EndIf Case #MENU_Paste Item = GetGadgetState(#GADGET_MDI) If item<>-1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget SendMessage_(GadgetID(MDIWindow()\EditorGadget),#WM_PASTE,0,0) EditFocus=MDIWindow()\EditorGadget ;FindText(5) MDIWindow()\Changed=1 Else SendMessage_(WindowID(item),#WM_PASTE,0,0) EndIf EndIf EndIf Case #MENU_Undo Item = GetGadgetState(#GADGET_MDI) If item<>-1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) SendMessage_(GadgetID(MDIWindow()\EditorGadget),#WM_UNDO,0,0) EditFocus=MDIWindow()\EditorGadget ;FindText(5) MDIWindow()\Changed=1 EndIf EndIf Case #MENU_SELALL Item = GetGadgetState(#GADGET_MDI) If item<>-1 ;SelectElement(MDIWindow(), Item) If SelectMDIWindow(item) If MDIWindow()\EditorGadget SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_SETSEL, 0, -1) EndIf EndIf EndIf Case #MENU_Search ;FindText(1) If EditFocus FindReplace(EditFocus,0) EndIf Case #MENU_SAgain If EditFocus ;FindText(2) FindReplace(EditFocus,1) EndIf Case #MENU_REPLACE ;FindText(3) If editfocus FindReplace(EditFocus,0) EndIf Case #MENU_RAGAIN ;FindText(4) If EditFocus FindReplace(EditFocus,2) EndIf Case #MENU_TileV SetGadgetState(#GADGET_MDI, #PB_MDI_TileVertically) Case #MENU_TileH SetGadgetState(#GADGET_MDI, #PB_MDI_TileHorizontally) Case #MENU_Cascade SetGadgetState(#GADGET_MDI, #PB_MDI_Cascade) Case #MENU_Arrange SetGadgetState(#GADGET_MDI, #PB_MDI_Arrange) Case #MENU_Previous SetGadgetState(#GADGET_MDI, #PB_MDI_Previous) Case #MENU_Next SetGadgetState(#GADGET_MDI, #PB_MDI_Next) Default ResetList(HTMLTag()) found.l=0 While NextElement(HTMLTag()) If HTMLTag()\TagMenuID=EventMenu() found.l=1 Break EndIf Wend If found ;MessageRequester("MyPad","Tag="+HTMLTag()\TagName+" Mode="+Str(TagMode),0) If TagMode=0 If Len(HTMLTag()\P1Name)=0 And Len(HTMLTag()\P2Name)=0 ;EditTag() ;no prompts, just insert it TheTag.s=HTMLTag()\Prefix If (HTMLTag()\NumParts & 1)=1 TheTag=TheTag+Chr(13) ElseIf UCase(Right(TheTag,4))="
" TheTag=TheTag+Chr(13) EndIf GS.s=HTMLTag()\P1Text If GS<>"/" TheTag=TheTag+GS Else TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf TheTag=TheTag+HTMLTag()\Suffix If (HTMLTag()\NumParts & 1)=1 TheTag=TheTag+Chr(13) ElseIf UCase(Right(TheTag,4))="
" TheTag=TheTag+Chr(13) EndIf GS=HTMLTag()\P2TEXT If GS<>"/" TheTag=TheTag+GS Else TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf TheTag=TheTag+HTMLTag()\EndTag If (HTMLTag()\NumParts & 1)=1 TheTag=TheTag+Chr(13) ElseIf UCase(Right(TheTag,4))="
" TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf SetClipboardText(TheTag) If SelectMDIWindow(GetGadgetState(#GADGET_MDI)) If EditFocus SendMessage_(GadgetID(EditFocus),#WM_PASTE,0,0) ;FindText(5) EndIf EndIf Else EditTag() EndIf Else EditTag() EndIf EndIf EndSelect ;- Gadget Events ElseIf Event = #PB_Event_Gadget GID.l=EventGadget() If GID ;other gadget events If SelectMDIWindow(WID) Type = EventType() ;-gadget events If GID=MDIWindow()\EditorGadget ;- editing event ;CallDebugger this seems to be working ;If BlockMouse"/" TheTag=TheTag+GS Else TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf TheTag=TheTag+GetGadgetText(MDIWindow()\SuffixGadget) If (HTMLTag()\NumParts & 1)=1 TheTag=TheTag+Chr(13) ElseIf UCase(Right(TheTag,4))="
" TheTag=TheTag+Chr(13) EndIf GS=GetGadgetText(MDIWindow()\D2Gadget) If GS<>"/" TheTag=TheTag+GS Else TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf TheTag=TheTag+GetGadgetText(MDIWindow()\EndGadget) If (HTMLTag()\NumParts & 1)=1 TheTag=TheTag+Chr(13) ElseIf UCase(Right(TheTag,4))="
" TheTag=TheTag+Chr(13) EndIf If (HTMLTag()\NumParts & 2)=2 TheTag=TheTag+Chr(13) EndIf SetClipboardText(TheTag) try.l=0 Item.l=GetGadgetState(#GADGET_MDI) Repeat SetGadgetState(#GADGET_MDI, #PB_MDI_Next) ;If GetWindow() If SelectMDIWindow(GetGadgetState(#GADGET_MDI)) If EditFocus Break EndIf Else try+1 EndIf Until try>3 If EditFocus SendMessage_(GadgetID(EditFocus),#WM_PASTE,0,0) ;FindText(5) EndIf SetGadgetState(#GADGET_MDI,Item) ;SelectElement(MDIWindow(),Item) SelectMDIWindow(Item) EndIf EndIf ;close this window ;RemoveGadgetItem(#GADGET_MDI, Item) CloseWindow(WID) DeleteElement(MDIWindow()) TagMode=0 EditTagLoaded=0 ElseIf GID=MDIWindow()\EditButton ;enable all buttons TagMode=1 DisableGadget(MDIWindow()\NameGadget,0) DisableGadget(MDIWindow()\ClassGadget,0) DisableGadget(MDIWindow()\PrefixGadget,0) DisableGadget(MDIWindow()\P1Gadget,0) DisableGadget(MDIWindow()\SuffixGadget,0) DisableGadget(MDIWindow()\P2Gadget,0) DisableGadget(MDIWindow()\EndGadget,0) DisableGadget(MDIWindow()\Browse1,1) DisableGadget(MDIWindow()\Browse2,1) DisableGadget(MDIWindow()\ClassButton,0) DisableGadget(MDIWindow()\CheckBut1,0) DisableGadget(MDIWindow()\CheckBut2,0) DisableGadget(MDIWindow()\CheckBut3,0) ElseIf GID=MDIWindow()\ClassButton MDIWindow()\Width=535 ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 535) ResizeWindow(MDIWindow()\ChildWindow,#PB_Ignore,#PB_Ignore,535,#PB_Ignore) ElseIf GID=MDIWindow()\Browse1 If Left(GetGadgetText(MDIWindow()\D1Gadget),1)="_" MDIWindow()\Width=430 ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 430) ResizeWindow(MDIWindow()\ChildWindow,#PB_Ignore,#PB_Ignore,430,#PB_Ignore) Else rs.s=OpenFileRequester("MyPad",DefPath+GetGadgetText(MDIWindow()\D1Gadget),Pattern$,GetPattern(GetGadgetText(MDIWindow()\D1Gadget))) If Len(rs) If GetGadgetState(MDIWindow()\CheckBut3) temp.s=GetPathPart(rs) ds.l=Len(temp)-Len(DefPath) If ds>0 temp=Right(temp,ds) Else temp="" EndIf rs=temp+GetFilePart(rs) EndIf SetGadgetText(MDIWindow()\D1Gadget,rs) EndIf EndIf ElseIf GID=MDIWindow()\Browse2 If Left(GetGadgetText(MDIWindow()\D2Gadget),1)="_" MDIWindow()\Width=430 ;SetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth, 430) ResizeWindow(MDIWindow()\ChildWindow,#PB_Ignore,#PB_Ignore,430,#PB_Ignore) Else rs.s=OpenFileRequester("MyPad",DefPath+GetGadgetText(MDIWindow()\D2Gadget),Pattern$,GetPattern(GetGadgetText(MDIWindow()\D1Gadget))) If Len(rs) If GetGadgetState(MDIWindow()\CheckBut3) temp.s=GetPathPart(rs) ds.l=Len(temp)-Len(DefPath) temp=Right(temp,ds) rs=temp+GetFilePart(rs) EndIf SetGadgetText(MDIWindow()\D2Gadget,rs) EndIf EndIf ElseIf GID=MDIWindow()\AddButton ;- FTP Window If ThreadState=0 AddFTPFile(MDIWindow()\ListGadget,-1) Else MessageRequester("FTP Manager","You need to wait until the current proccess is finished",0) EndIf ElseIf GID=MDIWindow()\EditFTP If ThreadState=0 POS.l=GetGadgetState(MDIWindow()\ListGadget) AddFTPFile(MDIWindow()\ListGadget,POS) Else MessageRequester("FTP Manager","You need to wait until the current proccess is finished",0) EndIf ElseIf GID=MDIWindow()\DelButton If ThreadState=0 POS.l=GetGadgetState(MDIWindow()\ListGadget) If POS>=0 RemoveGadgetItem(MDIWindow()\ListGadget,POS) SaveFTP(MDIWindow()\ListGadget) EndIf Else MessageRequester("FTP Manager","You need to wait until the current proccess is finished",0) EndIf ElseIf GID=MDIWindow()\ScanFTP ;begin scanning files If ThreadState=0 ThreadMode=1 ThreadState=CreateThread(@ScanFTPFiles(),MDIWindow()\ListGadget) Else MessageRequester("FTP Manager","You need to wait until the current proccess is finished",0) EndIf ElseIf GID=MDIWindow()\StartFTP ;begin file transfer If threadstate=0 ThreadMode=2 ThreadState=CreateThread(@TransferFiles(),MDIWindow()\ListGadget) Else MessageRequester("FTP Manager","You need to wait until the current proccess is finished",0) EndIf ElseIf GID=MDIWindow()\StopFTP ;stop scanns or transfers If threadstate KillThread(ThreadState) ThreadState=0 Else MessageRequester("FTP Manager","Proccess has finished",0) EndIf ElseIf GID=MDIWindow()\CancelFTP If ThreadState ;terminate thread .... KillThread(ThreadState) ThreadState=0 EndIf ;close this window Item=ListIndex(MDIWindow()) ;RemoveGadgetItem(#GADGET_MDI, Item) CloseWindow(WID) DeleteElement(MDIWindow()) FTPLoaded=0 EndIf EndIf EndIf Else ;item.l=GetGadgetState(#GADGET_MDI) ;If item<>-1 ; ;SelectElement(MDIWindow(),item) ; If SelectMDIWindow(item) ; If MDIWindow()\WebGadget ; fn.s=GetGadgetText(MDIWindow()\WebGadget) ; fn=GetRealFile(fn) ; SetGadgetText(MDIWindow()\StringBrowse,fn) ; EndIf ; EndIf ;EndIf EndIf Until Quit = 1 EndIf ; IDE Options = PureBasic v4.02 (Windows - x86) ; CursorPosition = 1006 ; FirstLine = 1003 ; Folding = ----- ; EnableXP ; UseIcon = C:\Program Files\PureBasic\Projects\MyPad\PENS04.ICO ; Executable = ..\..\..\PureBasic\Projects\MyPad\MyPad.exe ; CommandLine = C:\Program Files\PureBasic\Projects\MyPad\booger.ttt ; IncludeVersionInfo ; VersionField0 = 3 Improved highlights ; VersionField1 = 3 ; VersionField2 = waffle ; VersionField3 = MyPad ; VersionField4 = 3 ; VersionField5 = 3 ; VersionField6 = HTML editor ; VersionField7 = MyPad ; VersionField8 = MyPad ; VersionField9 = May 2007 ; VersionField13 = mycat98501@yahoo.com ; VersionField14 = www.archonrpg.com