; Program Name: myFavs (Bookmark Manager) ; Author: Vern Marsden : vmars316 @ http://www.purebasic.fr/english/ ; With MAJOR HELPs from Co-Author: Vera @ http://www.purebasic.fr/english/ ; Website: http://www.vmars.us/ http://liesandcowpies.com/ ; Date: May 10 , 2016 ; OS: Windows & Linux Global Window_0, Container_0, ListViewLinks, ListViewHtml, Container_1, InFileNameLbl Global InFileNameTxt, OutFileNameLbl, OutFileNameTxt, Container_2, OpenBtn Global BuildBtn, ViewBtn, SaveFileBtn, AddSaveBtn, ClearBtn, DeleteBtn, ExitBtn, HelpBtn Global Container_3, MenuNameLbl, MenuNameTxt, LinkTitleLbl, LinkTitleTxt Global LinkAddressLbl, LinkAddressTxt, Container_4, FindLinkBtn, FindLinkTxt Global LvLineCountLbl, LvLineCountTxt, vmResult Global LvLineCountNum, HtmlLineCount, LvLinkGadgetState Global FileType$, CurrentDIR$, PosOf_ttt$, LinkAddressTxt$, myFavsHelpFile$ = "myFavs_Help.html" Global FavsTxtFilename$, HtmlFilename$, FavsTxtFilenameBK$, HtmlFilenameBK$ Global ComingFrom$, GoToWebSite$="www.vmars316.com" Global Container_5, StatusLbl, StatusTxt, HtmlFilenameLen, CurrentEventClicked Global savF = #True #DQ$ = Chr(34) ; DoubleQuote CompilerIf #PB_Compiler_Version >= 510 Global Delimiter$ = "[]" CompilerElse Global Delimiter$ = "~" CompilerEndIf Global SelectedLvItem$ = " ", DelimsHold$ = "", Text$, GetText$, FindLinkText$ Global FavsFileOpened$ = "", FavsFileSaved$ = "" , SelectedLvItemNum Global LvStrDelimCnt = 0 , LvSelectedIndex = 0 , LineDelim_a = 0, a = 0, FoundTextPos Global LvLineLen = 0 , DelimsHoldNum.q , LvItemsCount = 0 , LineInTest = 0, NumItemsFound = 0 Global LvLineCountTxt$, CurrentLvLine$, FoundTextPos$, LastGadgetClicked$ = "" ; Global FavsFile$ = "myFavs~Sorted.txt" , FavsFileBK$ = "myFavs~Sorted-BK.txt" Global FavsFile$ = "myFavs"+Delimiter$+"Sorted.txt" , FavsFileBK$ = "myFavs"+Delimiter$+"Sorted-BK.txt" Global FileOpen = 0, LvLineCount = 0, OneLine$="", LvWriteLine$ = "", MenuCount=0 Global myFavsHtmlBK$ = "myFavs-BK.Html" , myFavsHtml$ = "myFavs.Html" Global ReadThisFile$ , LastMenuName$ = "LastMenuName$ 1st Time I" Global SelectStyleConstant$ = ("" Global HtmlOptionSelectedConstant$ = (" ") Global HtmlOptionValueConstant$ = ("") Global LastHtmlMenuName$ = "LastHtmlMenuName$ 1st Time In", OptionValueLineOut$ Global MenuNameWork$ = "MenuNameWork$ 1st Time In" , InComingLine$ = "InComingLine$ 1st Time In" Global HtmlOptionSelectedWork$, OptionValueWork$, ListViewLinksLineIn$ Global HtmlTrailer$ = "
" Global HoldHtmlLine$ Global BuildLinkLine$ = "", StringLength = 0 Global LinkTitleHold$, LinkAddressHold$ Enumeration ;FormFont #Font_Window_0_0 EndEnumeration Declare BuildHtmlHdr() Declare BuildHtmlLinks() Declare BuildHtmlTrailer() Declare ReadFileEof() Declare BuildOneHtmlLine() Declare ClearBtn_clicked() Declare SortLinksList() ; new for Linux atm Declare ViewBtn_clicked() Declare HelpBtn_clicked() Declare OpenWebsite_DoubleLClick() Procedure OpenWindow_0(x = 10, y = 10, width = 600, height = 735) ; Load Icon via Compiler option works fine . Result$ = GetCurrentDirectory() vmResult = LoadImage_(0, Result$+"myFavs48x48.ico", #IMAGE_ICON, 0,0,#LR_LOADFROMFILE) ;Debug "vmResult = " + vmResult ;Debug "#PB_Compiler_Home = " + #PB_Compiler_Home ;Debug "GetCurrentDirectory() =" + Result$ Window_0 = OpenWindow(#PB_Any, x, y, width, height, "myFavs 1.0", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) SendMessage_(WindowID(Window_0), #WM_SETICON, 0, vmResult) CompilerIf #PB_Compiler_OS = #PB_OS_Windows ; LoadFont(#Font_Window_0_0,"Candara", 10) LoadFont(#Font_Window_0_0,"Candara", 10) CompilerElse ; all others incl. Linux and MacOS LoadFont(#Font_Window_0_0,"Monospace", 9) ; or Courier New or Times or ??? CompilerEndIf SetWindowColor(Window_0, RGB(42,18,25)) Container_0 = ContainerGadget(#PB_Any, 10, 10, 580, 710) SetGadgetColor(Container_0, #PB_Gadget_BackColor, RGB(59, 25, 34)) CompilerIf #PB_Compiler_OS = #PB_OS_Windows ListViewLinks = ListViewGadget(#PB_Any, 0, 280, 576, 380, #LBS_SORT | #LBS_NOINTEGRALHEIGHT | #LBS_HASSTRINGS) CompilerElse ; all others incl. Linux and MacOS ListViewLinks = ListViewGadget(#PB_Any, 0, 280, 576, 380) CompilerEndIf GadgetToolTip(ListViewLinks, "URL Links-List , Left_Click = Select / Left_DoubleClick = GoTo-Website.") SetGadgetColor(ListViewLinks, #PB_Gadget_BackColor, RGB(236,210,194)) ;RGB(224,172,144)) ;RGB(246,231,223)) ; vs changed to make it obvious SetGadgetFont(ListViewLinks, FontID(#Font_Window_0_0)) SendMessage_(GadgetID(ListViewLinks),#LB_SETHORIZONTALEXTENT,1000,0) ListViewHtml = ListViewGadget(#PB_Any, 14, 236, 551, 385) HideGadget(ListViewHtml, 1) ; ------------- Container_1 = ContainerGadget(#PB_Any, 0, 2, 576, 36) SetGadgetColor(Container_1, #PB_Gadget_BackColor, RGB(90, 105, 125)) InFileNameLbl = StringGadget(#PB_Any, 14, 4, 120, 24, "InputFile.txt -->", #PB_String_ReadOnly) SetGadgetFont(InFileNameLbl, FontID(#Font_Window_0_0)) SetGadgetColor(InFileNameLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) InFileNameTxt = StringGadget(#PB_Any, 130, 4, 150, 24, "myFavs.txt", #PB_String_ReadOnly) GadgetToolTip(InFileNameTxt, "myFavs input txt filename") SetGadgetColor(InFileNameTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) SetGadgetFont(InFileNameTxt, FontID(#Font_Window_0_0)) OutFileNameLbl = StringGadget(#PB_Any, 298, 4, 120, 24, " OutputFile.html -->", #PB_String_ReadOnly) SetGadgetColor(OutFileNameLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) SetGadgetFont(OutFileNameTxt, FontID(#Font_Window_0_0)) OutFileNameTxt = StringGadget(#PB_Any, 418, 4, 150, 24, "myFavs.html", #PB_String_ReadOnly) SetGadgetColor(OutFileNameTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) GadgetToolTip(OutFileNameTxt, "myFavs output html filename") SetGadgetFont(OutFileNameTxt, FontID(#Font_Window_0_0)) CloseGadgetList() ; ------------- Container_2 = ContainerGadget(#PB_Any, 0, 45, 576, 82) SetGadgetColor(Container_2, #PB_Gadget_BackColor, RGB(90, 105, 125)) OpenBtn = ButtonGadget(#PB_Any, 14, 10, 125, 24, "Open myFavs Txt") GadgetToolTip(OpenBtn, "Open myFavs input txt File") SetGadgetFont(OpenBtn, FontID(#Font_Window_0_0)) SaveFileBtn = ButtonGadget(#PB_Any, 156, 10, 125, 24, "Save myFavs Txt") GadgetToolTip(SaveFileBtn, "Save myFavs input txt File.") SetGadgetFont(SaveFileBtn, FontID(#Font_Window_0_0)) BuildBtn = ButtonGadget(#PB_Any, 298, 10, 125, 24, "Build Html File") GadgetToolTip(BuildBtn, "Build myFavs output html File.") SetGadgetFont(BuildBtn, FontID(#Font_Window_0_0)) ViewBtn = ButtonGadget(#PB_Any, 440, 10, 125, 24, "View Html File") GadgetToolTip(ViewBtn, "Show myFavs output html File in Browser.") SetGadgetFont(ViewBtn, FontID(#Font_Window_0_0)) AddSaveBtn = ButtonGadget(#PB_Any, 156, 46, 125, 24, "Add Link") GadgetToolTip(AddSaveBtn, "Add New-Link , NO Duplicates Allowed.") SetGadgetFont(AddSaveBtn, FontID(#Font_Window_0_0)) ClearBtn = ButtonGadget(#PB_Any, 14, 46, 125, 24, "Clear work-area") GadgetToolTip(ClearBtn, "Clear Text work-area") SetGadgetFont(ClearBtn, FontID(#Font_Window_0_0)) DeleteBtn = ButtonGadget(#PB_Any, 298, 46, 125, 24, "Delete Link") GadgetToolTip(DeleteBtn, "Delete Selected-Link from Links-List.") SetGadgetFont(DeleteBtn, FontID(#Font_Window_0_0)) HelpBtn = ButtonGadget(#PB_Any, 440, 46, 60, 24, "Help") GadgetToolTip(HelpBtn, ("Open " + myFavsHelpFile$ + " 'Help/About' in Browser.")) SetGadgetFont(HelpBtn, FontID(#Font_Window_0_0)) ExitBtn = ButtonGadget(#PB_Any, 505, 46, 60, 24, "Exit") GadgetToolTip(ExitBtn, "Exit Program.") SetGadgetFont(ExitBtn, FontID(#Font_Window_0_0)) CloseGadgetList() ; ------------- Container_3 = ContainerGadget(#PB_Any, 0, 134, 576, 94) SetGadgetColor(Container_3, #PB_Gadget_BackColor, RGB(90, 105, 125)) MenuNameLbl = StringGadget(#PB_Any, 14, 5, 125, 24, "Menu Name", #PB_String_ReadOnly) SetGadgetColor(MenuNameLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) MenuNameTxt = StringGadget(#PB_Any, 156, 5, 410, 24, "") GadgetToolTip(MenuNameTxt, "Menu-Name work-area") SetGadgetColor(MenuNameTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) SetGadgetFont(MenuNameTxt, FontID(#Font_Window_0_0)) LinkTitleLbl = StringGadget(#PB_Any, 14, 32, 125, 24, "Link Title", #PB_String_ReadOnly) SetGadgetColor(LinkTitleLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) LinkTitleTxt = StringGadget(#PB_Any, 156, 32, 410, 24, "") GadgetToolTip(LinkTitleTxt, "Link-Title work-area") SetGadgetColor(LinkTitleTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) SetGadgetFont(LinkTitleTxt, FontID(#Font_Window_0_0)) LinkAddressLbl = StringGadget(#PB_Any, 14, 61, 125, 24, "Link Address", #PB_String_ReadOnly) SetGadgetColor(LinkAddressLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) LinkAddressTxt = StringGadget(#PB_Any, 156, 61, 410, 24, "") GadgetToolTip(LinkAddressTxt, "Link-Address work-area") SetGadgetColor(LinkAddressTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) SetGadgetFont(LinkAddressTxt, FontID(#Font_Window_0_0)) CloseGadgetList() ; ------------- Container_4 = ContainerGadget(#PB_Any, 0, 235, 576, 38) SetGadgetColor(Container_4, #PB_Gadget_BackColor, RGB(90, 105, 125)) FindLinkBtn = ButtonGadget(#PB_Any, 14, 5, 125, 24, "Find Link") GadgetToolTip(FindLinkBtn, "Click to begin Search.") SetGadgetFont(FindLinkBtn, FontID(#Font_Window_0_0)) FindLinkTxt = StringGadget(#PB_Any, 156, 5, 268, 24, "") GadgetToolTip(FindLinkTxt, "Enter search Arg") SetGadgetColor(FindLinkTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) LvLineCountLbl = StringGadget(#PB_Any, 440, 5, 85, 24, "Links Count = ", #PB_String_ReadOnly) SetGadgetColor(LvLineCountLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) LvLineCountTxt = StringGadget(#PB_Any, 524, 5, 40, 24, "0", #PB_String_ReadOnly) SetGadgetColor(LvLineCountTxt, #PB_Gadget_BackColor, RGB(224, 172, 144)) CloseGadgetList() ; ------------- Container_5, StatusLbl, StatusTxt Container_5 = ContainerGadget(#PB_Any, 0, 672, 576, 38) SetGadgetColor(Container_5, #PB_Gadget_BackColor, RGB(90, 105, 125)) StatusLbl = StringGadget(#PB_Any, 14, 6, 75, 24, " Status --->", #PB_String_ReadOnly) ; SetGadgetFont(StatusLbl, FontID(#Font_Window_0_0)) SetGadgetColor(StatusLbl, #PB_Gadget_BackColor, RGB(224, 172, 144)) StatusTxt = StringGadget(#PB_Any, 95, 6, 468, 24, "Welcome !", #PB_String_ReadOnly) GadgetToolTip(StatusTxt, "Program Status , Message Area") ; SetGadgetColor(StatusTxt, #PB_Gadget_BackColor, RGB(252, 247, 243)) SetGadgetColor(StatusTxt, #PB_Gadget_BackColor, RGB(224, 172, 144)) ; SetGadgetFont(InFileNameTxt, FontID(#Font_Window_0_0)) CloseGadgetList() ; Container_5 ; ------------- CloseGadgetList() ; 1st - outer Container EndProcedure ; Procedure OpenWindow_0 ;============================================= Procedure OpenBtn_clicked() ClearGadgetItems(ListViewLinks) LvLineCountTxt$ = "0" CurrentDIR$ = GetCurrentDirectory() FileType$ = "myFavs Text File|*.txt" ReadThisFile$ = OpenFileRequester("Select Your Favs Text File" , CurrentDIR$ , FileType$, 0) If ReadThisFile$ = "" MessageRequester("No File Loaded :" , "Try Again !" ) Goto SkipCkOpen : EndIf ; FavsTxtFilename$ = GetFilePart(ReadThisFile$) FavsTxtFilenameBK$ = ReplaceString(FavsTxtFilename$, ".txt", "-BK.txt") HtmlFilename$ = ReplaceString(FavsTxtFilename$, ".txt", ".html") HtmlFilenameBK$ = ReplaceString(HtmlFilename$, ".html", "-BK.html") FavsFileOpened$ = FavsTxtFilename$ SetGadgetText(InFileNameTxt, FavsTxtFilename$) SetGadgetText(OutFileNameTxt, HtmlFilename$) ComingFrom$ = "OpenBtn_Clicked" ReadFileEof() ; Procedure LvLineCountTxt$ = Str(CountGadgetItems(ListViewLinks)) ; LvItemsCount SetGadgetText(LvLineCountTxt, LvLineCountTxt$) LvLineCountNum = Val(LvLineCountTxt$) SetGadgetText(StatusTxt, (" " + FavsTxtFilename$ + " ... Open And Loaded")) SkipCkOpen: If ReadThisFile$ = "" SetGadgetText(StatusTxt, FavsTxtFilename$ + "No File Loaded : Try Again !") EndIf LastGadgetClicked$ = "OpenBtn" EndProcedure ; OpenBtn_clicked() ;============================================= Procedure ReadFileEof() If ReadFile(1, ReadThisFile$) Format = ReadStringFormat(1) ; remove UniCode BOM Byte Order Mark While Eof(1)=0 Text$ = ReadString(1, Format) If ComingFrom$ = "OpenBtn_Clicked" AddGadgetItem(ListViewLinks,-1,Text$) : EndIf If ComingFrom$ = "BuildHtmlHdr" Text$ = ReplaceString(Text$, "ttt", HtmlFilename$) AddGadgetItem(ListViewHtml,-1,Text$) EndIf Wend CloseFile(1) Else MessageRequester("Open File ERROR","Couldn't open the file " + ReadThisFile$) EndIf EndProcedure ; ReadFileEof ;============================================= Procedure BuildBtn_clicked() ClearGadgetItems(ListViewHtml) BuildHtmlHdr() If LastGadgetClicked$ = "Links View is empty" Goto SkipCk3 EndIf BuildHtmlLinks() BuildHtmlTrailer() SetGadgetText(StatusTxt, ("Builded " + HtmlFilename$ + " File is Ready. " + " Click on [View Html FIle] Button To View")) SkipCk3: LastGadgetClicked$ = "BuildBtn" EndProcedure ; BuildBtn ;============================================= Procedure BuildHtmlHdr() LvLineCountNum = Val(GetGadgetText(LvLineCountTxt)) If LvLineCountNum > 0 ReadThisFIle$ = "myFavs_HtmlHdr.txt" ComingFrom$ = "BuildHtmlHdr" ReadFileEof() Else MessageRequester("Buil Html File:", "Links View is empty. Try Click on [Open myFavs Txt]") LastGadgetClicked$ = "Links View is empty" EndIf EndProcedure ; BuildHtmlHdr ;============================================= Procedure BuildHtmlLinks() LvLineCountNum = Val(GetGadgetText(LvLineCountTxt)) ; If LvLineCountNum > 0 For a=0 To LvLineCountNum -1 LineInTest = LineInTest + 1 ListViewLinksLineIn$ = GetGadgetItemText(ListViewLinks , (a)) ; MessageRequester("For a=0 To Lv = " + ListViewLinksLineIn$ , "LineInTest LineNum=" + ; Str(LineInTest) +#CRLF$+ "Hmm...") BuildOneHtmlLine() Next ; EndIf EndProcedure ; BuildHtmlLinks ;============================================= Procedure BuildOneHtmlLine() InComingLine$ = ListViewLinksLineIn$ ; inComing line LvStrDelimCnt = CountString(InComingLine$, Delimiter$) ; validate ListViewLinksLineIn$ If LvStrDelimCnt = 3 LvLineLen = Len(InComingLine$) For k = 1 To 3 ReplacementString$ = StringField(InComingLine$, k, Delimiter$) ; MessageRequester("For k = 1 To 3 = " + MenuNameWork$, "LastMenuName$ = " + LastMenuName$) If k = 1 ; SelectStyle$ MenuNameWork$ = ReplacementString$ ; MessageRequester("k=1a MenuNameWork$ = " + MenuNameWork$, "LastMenuName$ = " + LastMenuName$) If MenuNameWork$ <> LastMenuName$ ; WriteNew SelectStyle$ MenuLine MenuCount = (MenuCount + 1) If MenuCount > 1 AddGadgetItem(ListViewHtml,-1,EndOfSelect$) EndIf AddGadgetItem(ListViewHtml,-1,SelectStyleConstant$) HtmlOptionSelectedWork$ = ReplaceString(HtmlOptionSelectedConstant$, "xxx", ReplacementString$) AddGadgetItem(ListViewHtml,-1,HtmlOptionSelectedWork$) LastMenuName$ = MenuNameWork$ EndIf EndIf If k = 2 ; TITLE HtmlOptionValue$ yyy OptionValueWork$ = ReplaceString(HtmlOptionValueConstant$, "zzz", ReplacementString$) EndIf If k = 3 ; URL HtmlOptionValue$ zzz OptionValueWork$ = ReplaceString(OptionValueWork$, "yyy", ReplacementString$) AddGadgetItem(ListViewHtml,-1,OptionValueWork$) EndIf Next Else MessageRequester("URL Link ERROR:", ("Missing delimiters "+ Delimiter$ + Str(LvLineCountNum) + " " + InComingLine$)+ #CRLF$+ "ListViewLinksLineIn$ = " + ListViewLinksLineIn$) EndIf EndProcedure ; BuildOneHtmlLine ;============================================= Procedure BuildHtmlTrailer() AddGadgetItem(ListViewHtml,-1,HtmlTrailer$) Result = DeleteFile(HtmlFilenameBK$) Result = RenameFile(HtmlFilename$, HtmlFilenameBK$) ; create HtmlFilenameBK$ If CreateFile(0, HtmlFilename$) ; create NEW HtmlFilename$ HtmlLineCount = CountGadgetItems(ListViewHtml) ; HtmlItemsCount For a=1 To HtmlLineCount ; HtmlLineCount WriteHtmlLine$ = GetGadgetItemText(ListViewHtml , (a -1)) WriteStringN(0 , WriteHtmlLine$, #PB_Ascii) Next CloseFile(0) EndIf EndProcedure ; BuildHtmlTrailer ;============================================= Procedure HelpBtn_clicked() ; myFavsHelpFile$ MessageRequester("HelpBtn"," Procedure HelpBtn_clicked() ; myFavsHelpFile$") CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Windows RunProgram(myFavsHelpFile$) CompilerCase #PB_OS_Linux RunProgram("xdg-open", myFavsHelpFile$, "") ; vs missing 3rd parameter "" CompilerCase #PB_OS_MacOS ; would be different too CompilerEndSelect SetGadgetText(StatusTxt, (" " + myFavsHelpFile$ + " ... on Display in Browser")) LastGadgetClicked$ = "HelpBtn" EndProcedure ; HelpBtn ;============================================= Procedure ViewBtn_clicked() HtmlFilenameLen = Len(HtmlFilename$) If HtmlFilenameLen < 5 MessageRequester("View ERROR " , "You must [Build Html File] before trying To VIEW it ! ") Goto NoView EndIf CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Windows RunProgram(HtmlFilename$) CompilerCase #PB_OS_Linux RunProgram("xdg-open", HtmlFilename$, "") ; CompilerCase #PB_OS_MacOS ; would be different too CompilerEndSelect SetGadgetText(StatusTxt, (" " + HtmlFilename$ + " ... on Display in Browser")) NoView: LastGadgetClicked$ = "ViewBtn" EndProcedure ; ViewBtn ;============================================= Declare SaveFileBtn_clicked() Procedure ExitBtn_clicked() Result = Len(FavsFileOpened$) ; FavsFileOpened$ FavsFileSaved$ If Result > 0 Result = Len(FavsFileSaved$) If Result < 1 And savF = #False submit = MessageRequester(" WARNING - File Not Saved", "Do you want " +#DQ$+FavsFileOpened$+#DQ$+ " to be saved before exiting ?", #PB_MessageRequester_YesNo) If submit = #PB_MessageRequester_Yes SaveFileBtn_clicked() End ; save + exit Else End ; exit if save changes not wanted EndIf Else End ; exit if nothing was changed EndIf Else End ; exit if nothing was loaded EndIf EndProcedure ; ExitBtn ;============================================= Procedure MenuNameTxt_clicked() LastGadgetClicked$ = "MenuNameTxt" EndProcedure ;============================================= Procedure LinkTitleTxt_clicked() LastGadgetClicked$ = "LinkTitleTxt" EndProcedure ;============================================= Procedure LinkAddressTxt_clicked() LastGadgetClicked$ = "LinkAddressTxt" EndProcedure ;============================================= Procedure FindLinkTxt_clicked() LastGadgetClicked$ = "FindLinkTxt" EndProcedure ;============================================= Procedure ClearBtn_clicked() ; MessageRequester("ClearBtn_Clicked:", "ClearBtn_Clicked") SetGadgetText(MenuNameTxt , "") SetGadgetText(LinkTitleTxt , "") SetGadgetText(LinkAddressTxt , "") LastGadgetClicked$ = "ClearBtn" EndProcedure ; ClearBtn ;============================================= Procedure AddSaveBtn_clicked() MenuNameHold$ = GetGadgetText(MenuNameTxt) StringLength = Len(MenuNameHold$) If StringLength < 1 MessageRequester("MenuNameTxt", "MenuName is empty !") Goto SkipCk EndIf LinkTitleHold$ = GetGadgetText(LinkTitleTxt) StringLength = Len(LinkTitleHold$) If StringLength < 1 MessageRequester("LinkTitle", "LinkTitle is empty !") Goto SkipCk EndIf LinkAddressHold$ = GetGadgetText(LinkAddressTxt) StringLength = Len(LinkAddressHold$) If StringLength < 1 MessageRequester("LinkAddress", "LinkAddress is empty !") Goto SkipCk EndIf BuildLinkLine$ = (MenuNameHold$ + Delimiter$ + LinkTitleHold$ + Delimiter$ + LinkAddressHold$ + Delimiter$) For n = 0 To CountGadgetItems(ListViewLinks)-1 ; prevent double-entries If BuildLinkLine$ = GetGadgetItemText(ListViewLinks, n) ; RemoveGadgetItem(ListViewLinks, n) ; in case an item should be Debug GetGadgetItemText(ListViewLinks, n) ; just a control-debug SetGadgetText(StatusTxt, ("This Link already exists !")) Goto SkipCk ; Break ; prevent obsolet comparison ; if used without goto EndIf Next CompilerIf #PB_Compiler_OS = #PB_OS_Windows SendMessage_(GadgetID(ListViewLinks), #LB_ADDSTRING, 0, BuildLinkLine$) CompilerElse AddGadgetItem(ListViewLinks, -1, BuildLinkLine$) SortLinksList() CompilerEndIf SetGadgetText(LvLineCountTxt, Str(Val(GetGadgetText(LvLineCountTxt))+1)) LvSelectedIndex = GetGadgetState(ListViewLinks) ; Zero based result SetGadgetText(StatusTxt, (" Link: " + BuildLinkLine$ + " ADDED !")) savF = #False SkipCk: LvLineCountTxt$ = Str(CountGadgetItems(ListViewLinks)) ; LvItemsCount SetGadgetText(LvLineCountTxt, LvLineCountTxt$) LvLineCountNum = Val(LvLineCountTxt$) LastGadgetClicked$ = "AddSaveBtn" SetGadgetText(ListViewLinks, BuildLinkLine$) ; sets focus on added or double LinkListItem EndProcedure ; Procedure AddSaveBtn_clicked ;============================================= Procedure SaveFileBtn_clicked() ; FavsFile$ = "myFavs~Sorted.txt" FavsFileBK$ = "myFavs~Sorted-BK.txt" LvLineCountTxt2$ = GetGadgetText(LvLineCountTxt) If LvLineCountTxt2$ = "0" MessageRequester("SaveFileBtn_Clicked:", "ERROR, Nothing to Save .") Goto SkipCk2 : EndIf Result = DeleteFile(FavsTxtFilenameBK$) Result = CopyFile(FavsTxtFilename$, FavsTxtFilenameBK$) ; SetGadgetText(InFileNameTxt, FavsTxtFilename$) ; Result = RenameFile(OldFilename$, NewFilename$) If CreateFile(0, FavsTxtFilename$) LvLineCount = CountGadgetItems(ListViewLinks) ; LvItemsCount FavsFileSaved$ = FavsTxtFilename$ For a=1 To LvLineCount LvWriteLine$ = GetGadgetItemText(ListViewLinks , (a -1)) WriteStringN(0 , LvWriteLine$,#PB_Ascii) Next CloseFile(0) SetGadgetText(StatusTxt, (" " + FavsTxtFilename$ + " and "+ FavsTxtFilenameBK$ + " SAVED !")) savF = #True EndIf LastGadgetClicked$ = "SaveFileBtn" ; ClearGadgetItems(ListViewLinks) ; OpenBtn_clicked() SkipCk2: LastGadgetClicked$ = "SaveFileBtn" EndProcedure ; SaveFileBtn_clicked() ;================================================= Procedure DeleteBtn_clicked() MenuNameHold$ = GetGadgetText(MenuNameTxt) LinkTitleHold$ = GetGadgetText(LinkTitleTxt) LinkAddressHold$ = GetGadgetText(LinkAddressTxt) LvSelectedIndex = GetGadgetState(ListViewLinks) ; Zero based result If LvSelectedIndex => 0 RemoveGadgetItem(ListViewLinks, GetGadgetState(ListViewLinks)) ; Remove the current Link of ListViewLinks LvLineCountTxt$ = Str(CountGadgetItems(ListViewLinks)) ; LvItemsCount LinkAddressTxt$ = GetGadgetText(LinkAddressTxt) SetGadgetText(LvLineCountTxt, LvLineCountTxt$) LvLineCountNum = Val(LvLineCountTxt$) SetGadgetText(StatusTxt, (" Link: "+MenuNameHold$+ Delimiter$ +LinkTitleHold$+ Delimiter$ +LinkAddressHold$+ Delimiter$+ " DELETED !")) savF = #False Else MessageRequester("Delete ERROR ","NO LINK SELECTED , Try Again !") EndIf LastGadgetClicked$ = "DeleteBtn" ; SetGadgetText(LvLineCountTxt, Str(Val(GetGadgetText(LvLineCountTxt))-1)) EndProcedure ; DeleteBtn ;============================================= Procedure SortLinksList() stringCount = CountGadgetItems(ListViewLinks) - 1 ;: Debug stringCount If stringCount <= 0 : ProcedureReturn : EndIf Dim stringList.s(stringCount) ; Array to hold list-items For i = 0 To stringCount stringList(i) = GetGadgetItemText(ListViewLinks, i) Next i SortArray(stringList(), #PB_Sort_Ascending | #PB_Sort_NoCase) ClearGadgetItems(ListViewLinks) ; Sort_NoCase doesn't work with Unicode-mode For j = 0 To stringCount AddGadgetItem(ListViewLinks, -1, stringList(j)) Next j EndProcedure ;============================================= Procedure ListViewLinks_clicked() ; MessageRequester("ListViewLinks_clicked" , "LastGadgetClicked$ = " + LastGadgetClicked$) If CountGadgetItems(ListViewLinks) = 0 : ProcedureReturn : EndIf SelectedLvItem$ = GetGadgetItemText(ListViewLinks,GetGadgetState(ListViewLinks)) SelectedLvItemNum = GetGadgetState(ListViewLinks) ; for Vera LvStrDelimCnt = CountString(SelectedLvItem$, Delimiter$) LvSelectedIndex = GetGadgetState(ListViewLinks) ; Zero based result If LvStrDelimCnt = 3 LvLineLen = Len(SelectedLvItem$) For k = 1 To 3 DelimsHold$ = StringField(SelectedLvItem$, k, Delimiter$) If k = 1 SetGadgetText(MenuNameTxt, DelimsHold$) EndIf If k = 2 SetGadgetText(LinkTitleTxt, DelimsHold$) EndIf If k = 3 SetGadgetText(LinkAddressTxt, DelimsHold$) GoToWebSite$ = DelimsHold$ ; in case #WM_RBUTTONDOWN EndIf Next Else MessageRequester("URL Link ERROR:", "Missing 1 or more delimiters " +Delimiter$+ " .") EndIf If LastGadgetClicked$ <> "FindLinkBtn" LastGadgetClicked$ = "ListViewLinks" EndIf If CurrentEventClicked = #PB_EventType_LeftDoubleClick ; #PB_EventType_RightClick OpenWebsite_DoubleLClick() EndIf EndProcedure ; ListViewLinks_clicked() ;================================================= Procedure OpenWebsite_DoubleLClick() submit = MessageRequester("Do you want to visit this Website ?" , GoToWebSite$, #PB_MessageRequester_YesNo) If submit = #PB_MessageRequester_Yes CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Windows RunProgram(GoToWebSite$) CompilerCase #PB_OS_Linux RunProgram("xdg-open", GoToWebSite$, "") CompilerCase #PB_OS_MacOS ; would be different too CompilerEndSelect SetGadgetText(StatusTxt, ("Browser = " + GoToWebSite$ )) Else SetGadgetText(StatusTxt, ("Browser = WebSite-visit cancelled")) EndIf EndProcedure ; OpenWebsite_DoubleLClick() ;================================================= Procedure FindLinkBtn_clicked() LvLineCountNum = CountGadgetItems(ListViewLinks) ; LvItemsCount If LastGadgetClicked$ <> "FindLinkBtn" ; ie. If first time in LvLinkGadgetState = 0 : NumItemsFound = 0 LastGadgetClicked$ = "FindLinkBtn" EndIf For a = LvLinkGadgetState To LvLineCountNum -1 ListViewLinksLineIn$ = GetGadgetItemText(ListViewLinks , (a)) FindLinkText$ = GetGadgetText(FindLinkTxt) CompilerIf #PB_Compiler_Version >= 510 FoundTextPos = FindString(ListViewLinksLineIn$, FindLinkText$,1, #PB_String_NoCase) CompilerElse FoundTextPos = FindString(ListViewLinksLineIn$, FindLinkText$,1) CompilerEndIf If FoundTextPos > 0 ; ie. <> "0" = Found Text NumItemsFound = NumItemsFound +1 SetGadgetState(ListViewLinks, a) : LvLinkGadgetState = a + 1 ; save , prepare for another click ;============================================= EventType = #PB_EventType_LeftClick LastGadgetClicked$ = "FindLinkBtn" ListViewLinks_clicked() ;============================================= Break EndIf Next If NumItemsFound = 0 MessageRequester("Find", "Link Not Found ") EndIf If a = LvLineCountNum MessageRequester("Find", " End Of Search ") LvLinkGadgetState = 0 : NumItemsFound = 0 LastGadgetClicked$ = "EndOf-FindLinkBtn" EndIf EndProcedure ; FindLinkBtn_clicked() ;================================================= OpenWindow_0() ;SendMessage_(WindowID(Window_0), #WM_SETICON, 0, vmResult) ;- loop Repeat Event = WaitWindowEvent() ; CurrentEventClicked = Event Select Event Case #PB_Event_Gadget Select EventGadget() Case OpenBtn OpenBtn_clicked() Case BuildBtn BuildBtn_clicked() Case ViewBtn ViewBtn_clicked() Case ExitBtn ExitBtn_clicked() Case ClearBtn ClearBtn_clicked() Case AddSaveBtn AddSaveBtn_clicked() Case DeleteBtn DeleteBtn_clicked() Case FindLinkBtn FindLinkBtn_clicked() Case SaveFileBtn SaveFileBtn_clicked() ; Case ListViewLinks ; ListViewLinks_clicked() Case ListViewLinks If EventType() = #PB_EventType_LeftClick ;: Debug "Event LeftClick" CurrentEventClicked = #PB_EventType_LeftClick ListViewLinks_clicked() EndIf ; If EventType() = #PB_EventType_RightClick : Debug "Event RightClick" ; CurrentEventClicked = #PB_EventType_RightClick ; ListViewLinks_clicked() ; EndIf If EventType() = #PB_EventType_LeftDoubleClick ; : Debug "Event LeftDoubleClick" CurrentEventClicked = #PB_EventType_LeftDoubleClick ListViewLinks_clicked() EndIf Case MenuNameTxt MenuNameTxt_clicked() Case LinkTitleTxt LinkTitleTxt_clicked() Case LinkAddressTxt LinkAddressTxt_clicked() Case FindLinkTxt FindLinkTxt_clicked() Case HelpBtn HelpBtn_clicked() EndSelect EndSelect ; EventGadget() Until Event = #PB_Event_CloseWindow ; Repeat End ; IDE Options = PureBasic 5.31 (Windows - x64) ; CursorPosition = 4 ; Folding = ----- ; EnableUnicode ; EnableXP ; UseIcon = myFavs48x48.ico ; Executable = myFavs-05.08.16.exe ; CompileSourceDirectory ; EnableCompileCount = 193