;
; ------------------------------------------------------------
;
; 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+Chr(13)
EndIf
GS.s=GetGadgetText(MDIWindow()\D1Gadget)
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()\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