Wrap String Utility

Applications, Games, Tools, User libs and useful stuff coded in PureBasic
User avatar
StarBootics
Addict
Addict
Posts: 1006
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

Wrap String Utility

Post by StarBootics »

Hello everyone,
Another use of Module example this time a small tool to perfom operation on some line of code.
See the "Insert" Module and inside the procedure "Language_To_GUI()" in the code it self to see example of what can be done.

Best regards
StarBootics

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Wrap String Utility program
; File Name : Wrap String - Main - Forum Edition.pb
; File version: 1.0.0
; Programming : OK
; Programmed by : StarBootics
; Date : 13-02-2015
; Last Update : 13-02-2015
; PureBasic code : V5.31
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

DeclareModule BuiltPathDirectory
  
  Declare.b DoIt(Path.s)
  
EndDeclareModule

Module BuiltPathDirectory
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      #PathSep = "\"
      
    CompilerCase #PB_OS_Linux
      #PathSep = "/"
      
    CompilerCase #PB_OS_MacOS
      #PathSep = "/"
      
  CompilerEndSelect
  
  Procedure.b DoIt(Path.s)
    
    DirectoryQty = CountString(Path, #PathSep) + 1 
    
    For Index = 1 To DirectoryQty
      
      Directory.s = Directory + StringField(Path, Index, #PathSep) + #PathSep
      
      If FileSize(Directory) = -1
        CreateDirectory(Directory)
      EndIf 
      
    Next
    
    If FileSize(Path) = -2
      Success.b = #True
    Else
      Success = #False
    EndIf
    
    ProcedureReturn Success
  EndProcedure
  
EndModule

DeclareModule GadgetLocate
  
  Declare DownOf(GadgetID, Gap = 0)
  Declare RightOf(GadgetID, Gap = 0)
  
EndDeclareModule

Module GadgetLocate
  
  Procedure DownOf(GadgetID, Gap = 0)
    
    ProcedureReturn (GadgetY(GadgetID) + GadgetHeight(GadgetID) + (Gap))
  EndProcedure
  
  Procedure RightOf(GadgetID, Gap = 0)
    
    ProcedureReturn (GadgetX(GadgetID) + GadgetWidth(GadgetID) + (Gap))
  EndProcedure
  
EndModule

DeclareModule Language
  
  Declare Initialize(P_PathName.s, P_FileName.s, PtrToGUI.i = #Null)
  Declare Reset()
  Declare CreateTableFile()
  Declare LoadTableFile()
  Declare WritePreferenceLanguage(P_GroupName.s)
  Declare ReadPreferenceLanguage(P_GroupName.s)
  Declare AddTableElement(P_Key.s, P_Message.s)
  Declare.s Message(P_Message.s)
  Declare.b Requester()

EndDeclareModule

Module Language
  
  Global PathName.s
  Global FileName.s
  Global RemoteToGUI.i
  Global NewMap Table.s()
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Procédures privées <<<<<
  
  Procedure SetLanguageXMLNode(CurrentNode)
    
    If ParentXMLNode(CurrentNode) = #Null
      StructNode = CreateXMLNode(CurrentNode, "Language")
    Else
      StructNode = CurrentNode
    EndIf
    
    FieldNode = CreateXMLNode(StructNode, "Table")
    SetXMLAttribute(FieldNode, "ElementCount", Str(MapSize(Table())))
    Element = 0
    
    ForEach Table()
      IndexNode = CreateXMLNode(FieldNode, "Element")
      SetXMLAttribute(IndexNode, "ID", Str(Element)) : Element + 1
      SetXMLAttribute(IndexNode, "Key", MapKey(Table()))
      SetXMLAttribute(IndexNode, "Table", Table())
    Next
    
  EndProcedure
  
  Procedure GetLanguageXMLNode(CurrentNode)
    
    If ParentXMLNode(CurrentNode) = #Null
      StructNode = ChildXMLNode(CurrentNode)
      If GetXMLNodeName(StructNode) = "Language"
        Success = #True
      EndIf
    Else
      Success = #True
      StructNode = CurrentNode
    EndIf
    
    If Success = #True
      
      FieldNode = ChildXMLNode(StructNode)
      
      While FieldNode
        
        Select GetXMLNodeName(FieldNode)
            
          Case "Table"
            Table_Max = Val(GetXMLAttribute(FieldNode, "ElementCount"))
            
            For Element = 0 To Table_Max - 1
              IndexNode = ChildXMLNode(FieldNode, Element + 1)
              If GetXMLNodeName(IndexNode) = "Element"
                AddMapElement(Table(), GetXMLAttribute(IndexNode, "Key"))
                Table() = GetXMLAttribute(IndexNode, "Table")
              EndIf
            Next
            
        EndSelect
        
        FieldNode = NextXMLNode(FieldNode)
        
      Wend
      
    EndIf
    
  EndProcedure 
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Procédures publiques <<<<<
  
  Procedure Initialize(P_PathName.s, P_FileName.s, PtrToGUI.i = #Null)
    
    PathName = P_PathName
    FileName = P_FileName
    RemoteToGUI = PtrToGUI
    
  EndProcedure
  
  Procedure Reset()
    
    PathName = ""
    FileName = ""
    RemoteToGUI = #Null
    ClearMap(Table()) 
    
  EndProcedure

  Procedure CreateTableFile()
    
    FileID = CreateXML(#PB_Any)
    
    If IsXML(FileID)
      SetLanguageXMLNode(RootXMLNode(FileID))
      FormatXML(FileID, #PB_XML_ReFormat | #PB_XML_ReIndent)
      SaveXML(FileID, PathName + FileName)
      FreeXML(FileID)
    EndIf
    
  EndProcedure
  
  Procedure LoadTableFile()
    
    FileID = LoadXML(#PB_Any, PathName + FileName)
    
    If IsXML(FileID)
      FormatXML(FileID, #PB_XML_CutNewline)
      GetLanguageXMLNode(RootXMLNode(FileID))
      FreeXML(FileID)
    EndIf
    
  EndProcedure
  
  Procedure WritePreferenceLanguage(P_GroupName.s)
    
    PreferenceGroup(P_GroupName)
    WritePreferenceString("FileName", FileName)
      
  EndProcedure
  
  Procedure ReadPreferenceLanguage(P_GroupName.s)
    
    PreferenceGroup(P_GroupName)
    FileName = ReadPreferenceString("FileName", FileName)
    
  EndProcedure
  
  Procedure AddTableElement(P_Key.s, P_Message.s)
    
    Table(P_Key) = P_Message
    
  EndProcedure
  
  Procedure.s Message(P_Message.s)
    
    If FindMapElement(Table(), P_Message)
      Message_Out.s = Table(P_Message)
    Else
      Message_Out = P_Message
    EndIf
    
    ProcedureReturn Message_Out
  EndProcedure
  
  Procedure.b Requester()
    
    LanguageRquester_Handle = OpenWindow(#PB_Any, 0, 0, 220, 125, Message("Language Requester"), #PB_Window_ScreenCentered)
    
    If LanguageRquester_Handle <> 0
      
      LanguageRquester_List_Handle = ListViewGadget(#PB_Any, 10, 10, 200, 60)
      LanguageRquester_Btn_OK_Handle = ButtonGadget(#PB_Any, 10, 90, 95, 25, Message("OK"))
      LanguageRquester_Btn_Cancel_Handle = ButtonGadget(#PB_Any, 115, 90, 95, 25, Message("Cancel"))
      
    EndIf
    
    ; On met en place la liste des langues disponibles
    
    If ExamineDirectory(0, PathName, "*.xml") <> 0
      
      While NextDirectoryEntry(0) <> 0
        
        langues.s = DirectoryEntryName(0)
        
        If Left(langues.s, 1) <> "."
          
          AddGadgetItem(LanguageRquester_List_Handle, -1, StringField(GetFilePart(langues), 1, "."))
          
        EndIf
        
      Wend
      
    EndIf
    
    Repeat
      
      EventID = WaitWindowEvent()
      
      If EventID = #PB_Event_Gadget
        
        Select EventGadget() ; La gestion des évenements
            
          Case LanguageRquester_Btn_OK_Handle
            
            Language.s = GetGadgetText(LanguageRquester_List_Handle) + ".xml"
            
            If FileName <> Language
              
              FileName = Language
              LoadTableFile()
              
              If RemoteToGUI <> #Null
                CallFunctionFast(RemoteToGUI)
              EndIf
              
            Else
              Success.b = #True
            EndIf
            
            
            EventID = #PB_Event_CloseWindow
            
          Case LanguageRquester_Btn_Cancel_Handle
            EventID = #PB_Event_CloseWindow
            Success = #False
            
        EndSelect
        
      EndIf
      
    Until EventID = #PB_Event_CloseWindow
    
    CloseWindow(LanguageRquester_Handle)
    
    ProcedureReturn Success
  EndProcedure
  
EndModule

DeclareModule Window 
  
  Declare Initialize(P_WinID.l, P_PosX.w, P_PosY.w, P_Width.w, P_Height.w, P_ReadWritePrefFlag.b = #True)
  Declare Reset(P_WinID.l)
  Declare ReadPreferenceWindow(GroupName.s, P_WinID.l)
  Declare WritePreferenceWindow(GroupName.s, P_WinID.l)
  Declare CreateWindow(P_WinID.l, Flag = #PB_Window_SystemMenu)
  Declare CreateWindowEx(P_WinID.l, Title.s, Flag = #PB_Window_SystemMenu, ParentID = #Null)
  Declare ReshapeWindow(P_WinID.l)
  Declare GetCurrentPosition(P_WinID.l)
  Declare GetCurrentSize(P_WinID.l)
  Declare GetCurrentPositionSize(P_WinID.l)
  Declare VerifyPosition(P_WinID.l)
  
EndDeclareModule

Module Window
  
  Structure Instance
    ID.l
    PosX.w
    PosY.w
    Width.w
    Height.w
    ReadWritePrefFlag.b
  EndStructure
 
  Global NewList Instances.Instance()
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Procédures privées <<<<<
  
  Procedure SeachInstances(P_WinID.l)
    
    Protected IsFoundAtIndex.l = -1
    
    ForEach Instances()
      
      If Instances()\ID = P_WinID
        IsFoundAtIndex = ListIndex(Instances())
        Break
      EndIf
      
    Next
    
    ProcedureReturn IsFoundAtIndex
  EndProcedure
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Procédures publiques <<<<<
  
  Procedure Initialize(P_WinID.l, P_PosX.w, P_PosY.w, P_Width.w, P_Height.w, P_ReadWritePrefFlag.b = #True)
    
    If SeachInstances(P_WinID) = -1
      AddElement(Instances())
    EndIf
    
    Instances()\ID = P_WinID
    Instances()\PosX = P_PosX
    Instances()\PosY = P_PosY 
    Instances()\Width = P_Width
    Instances()\Height = P_Height
    Instances()\ReadWritePrefFlag = P_ReadWritePrefFlag
    
  EndProcedure
  
  Procedure Reset(P_WinID.l)
    
    If P_WinID = -1
      
      ForEach Instances()
        Instances()\ID = 0
        Instances()\PosX = 0
        Instances()\PosY = 0
        Instances()\Width = 0
        Instances()\Height = 0
        Instances()\ReadWritePrefFlag = 0
      Next
      
      ClearList(Instances())
      
    Else
      
      If SeachInstances(P_WinID) <> -1
        Instances()\ID = 0
        Instances()\PosX = 0
        Instances()\PosY = 0
        Instances()\Width = 0
        Instances()\Height = 0
        Instances()\ReadWritePrefFlag = 0
        DeleteElement(Instances(), 1)
      EndIf

    EndIf
    
  EndProcedure
  
  Procedure ReadPreferenceWindow(GroupName.s, P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      
      PreferenceGroup(GroupName)
      
      Instances()\PosX = ReadPreferenceLong("PosX", Instances()\PosX)
      Instances()\PosY = ReadPreferenceLong("PosY", Instances()\PosY)
      
      If Instances()\ReadWritePrefFlag = #True
        Instances()\Width = ReadPreferenceLong("Width", Instances()\Width)
        Instances()\Height = ReadPreferenceLong("Height", Instances()\Height)
      EndIf
      
    EndIf
    
  EndProcedure
  
  Procedure WritePreferenceWindow(GroupName.s, P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      
      PreferenceGroup(GroupName)
      
      WritePreferenceLong("PosX", Instances()\PosX)
      WritePreferenceLong("PosY", Instances()\PosY)
      
      If Instances()\ReadWritePrefFlag = #True
        WritePreferenceLong("Width", Instances()\Width)
        WritePreferenceLong("Height", Instances()\Height)
      EndIf
      
    EndIf
    
  EndProcedure
  
  Procedure CreateWindow(P_WinID.l, Flag = #PB_Window_SystemMenu)
    
    If SeachInstances(P_WinID) <> -1
      Success = OpenWindow(P_WinID, Instances()\PosX, Instances()\PosY, Instances()\Width, Instances()\Height, "", Flag)
    EndIf
    
    ProcedureReturn Success
  EndProcedure
  
  Procedure CreateWindowEx(P_WinID.l, Title.s, Flag = #PB_Window_SystemMenu, ParentID = #Null)
    
    If SeachInstances(P_WinID) <> -1
      Success = OpenWindow(P_WinID, Instances()\PosX, Instances()\PosY, Instances()\Width, Instances()\Height, Title, Flag, ParentID)
    EndIf
    
    ProcedureReturn Success
  EndProcedure
  
  Procedure ReshapeWindow(P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      ResizeWindow(P_WinID, Instances()\PosX, Instances()\PosY, Instances()\Width, Instances()\Height)
    EndIf
    
  EndProcedure 
  
  Procedure GetCurrentPosition(P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      Instances()\PosX = WindowX(P_WinID)
      Instances()\PosY = WindowY(P_WinID)
    EndIf
    
  EndProcedure
  
  Procedure GetCurrentSize(P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      Instances()\Width = WindowWidth(P_WinID)
      Instances()\Height = WindowHeight(P_WinID)
    EndIf
    
  EndProcedure
  
  Procedure GetCurrentPositionSize(P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      
      Instances()\PosX = WindowX(P_WinID)
      Instances()\PosY = WindowY(P_WinID)
      
      If Instances()\ReadWritePrefFlag = #True
        Instances()\Width = WindowWidth(P_WinID)
        Instances()\Height = WindowHeight(P_WinID)
      EndIf
      
    EndIf
    
  EndProcedure
  
  Procedure VerifyPosition(P_WinID.l)
    
    If SeachInstances(P_WinID) <> -1
      
      If ExamineDesktops()
        
        If Instances()\PosX > DesktopWidth(0) Or Instances()\PosX < 0
          Instances()\PosX = 50
        EndIf
        
        If Instances()\PosY > DesktopHeight(0) Or Instances()\PosY < 0
          Instances()\PosY = 50
        EndIf
        
        If (Instances()\PosX + Instances()\Width) > DesktopWidth(0)
          Instances()\PosX = Instances()\PosX - Instances()\Width
        EndIf
        
        If (Instances()\PosY + Instances()\Height) > DesktopHeight(0)
         Instances()\PosY = Instances()\PosY - Instances()\Height
        EndIf
        
        If Instances()\ReadWritePrefFlag = #True
          
          If Instances()\Width > DesktopWidth(0)
            Instances()\Width = DesktopWidth(0) - Instances()\PosX
          EndIf
          
          If Instances()\Height > DesktopHeight(0)
            Instances()\Height = DesktopHeight(0) - Instances()\PosY
          EndIf 
          
        EndIf
        
      Else 
        
        Instances()\PosX = 50
        Instances()\PosY = 50
        
      EndIf
      
    EndIf
    
  EndProcedure
  
EndModule

DeclareModule Insert
  
  Declare Initialize()
  Declare Reset()
  Declare BasicType_To_Gadget(GadgetID)
  
EndDeclareModule

Module Insert
  
  Enumeration
    
    #INSERT_TYPE_BYTE
    #INSERT_TYPE_ASCII
    #INSERT_TYPE_CHARACTER
    #INSERT_TYPE_UNICODE
    #INSERT_TYPE_WORD
    #INSERT_TYPE_LONG
    #INSERT_TYPE_INTEGER
    #INSERT_TYPE_QUAD
    #INSERT_TYPE_FLOAT
    #INSERT_TYPE_DOUBLE
    
    #INSERT_TYPE_MAX
    
  EndEnumeration 
  
  Global StartCounter.b
  Global Dim Type.s(#INSERT_TYPE_MAX)

  Procedure Initialize()
    
    StartCounter = 0
    
    Type(#INSERT_TYPE_BYTE) = "Byte"
    Type(#INSERT_TYPE_ASCII) = "Ascii"
    Type(#INSERT_TYPE_CHARACTER) = "Character"
    Type(#INSERT_TYPE_UNICODE) = "Unicode"
    Type(#INSERT_TYPE_WORD) = "Word"
    Type(#INSERT_TYPE_LONG) = "Long"
    Type(#INSERT_TYPE_INTEGER) = "Integer"
    Type(#INSERT_TYPE_QUAD) = "Quad"
    Type(#INSERT_TYPE_FLOAT) = "Float"
    Type(#INSERT_TYPE_DOUBLE) = "Double"
    
  EndProcedure
  
  Procedure Reset()
    
    StartCounter = 0
    FreeArray(Type())
    
  EndProcedure
  
  Procedure BasicType_To_Gadget(GadgetID)
    
    If StartCounter < 3
      StartCounter = StartCounter + 1
    Else
      
      StartCounter = 0
      
      For TypeID = 0 To #INSERT_TYPE_MAX - 1
        AddGadgetItem(GadgetID, TypeID, Type(TypeID))
      Next
      
    EndIf
    
  EndProcedure
  
EndModule

DeclareModule WrapString
  
  Declare Initialize()
  Declare EventManager()
  
EndDeclareModule

Module WrapString
  
  #Version = " - V2.0.0"
  
  Enumeration
    
    #MainWin
    
    #Text_Before
    #String_Before
    
    #Text_After
    #String_After
    
    #Btn_WrapIt
    #Btn_StripIt
    #Btn_UCase
    #Btn_LCase
    #Btn_Language
    #Btn_Clipboard
    
    #Editor_Content
    
    #ShortCut_Insert
    
  EndEnumeration
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      #PathSep = "\"
      
    CompilerCase #PB_OS_Linux
      #PathSep = "/"
      
    CompilerCase #PB_OS_MacOS
      #PathSep = "/"
      
  CompilerEndSelect
  
  Global PrefFileName.s
  
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< OpenWrapStringPreferences (Private) <<<<<
  
  Procedure OpenWrapStringPreferences()
    
    If OpenPreferences(PrefFileName)
      
      Window::ReadPreferenceWindow("MainWin", #MainWin)
      Language::ReadPreferenceLanguage("Language")
      
      ClosePreferences()
      
    EndIf
    
  EndProcedure
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< CreateWrapStringPreferences (Private) <<<<<
  
  Procedure CreateWrapStringPreferences()
    
    If CreatePreferences(PrefFileName)
      
      Window::WritePreferenceWindow("MainWin", #MainWin)
      Language::WritePreferenceLanguage("Language")
      
      ClosePreferences()
      
    EndIf
    
  EndProcedure
  
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< ShutDown (Private) <<<<<
  
  Procedure ShutDown()
    
    Window::GetCurrentPositionSize(#MainWin)
    
    CreateWrapStringPreferences()
    
    Language::Reset()
    Window::Reset(-1)
    Insert::Reset()
    
    CloseWindow(#MainWin)
    End
    
  EndProcedure
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Language_To_GUI (Private) <<<<<
  
  Procedure Language_To_GUI()
    
    SetWindowTitle(#MainWin, Language::Message("Wrap String") + #Version)
    
    ; I just copy/paste the constant from the Enumeration in the program editor to add "SetGadgetText(" 
    ; in front of the constant and ", Language::Message(""))" after the constant. Mush faster thant doing 
    ; it manually ! Indeed the edition is not complete, I still have to add the string manually after.
  
    SetGadgetText(#Text_Before, Language::Message("Before"))
    SetGadgetText(#Text_After, Language::Message("After"))
    SetGadgetText(#Btn_WrapIt, Language::Message("Wrap It !"))
    SetGadgetText(#Btn_StripIt, Language::Message("Strip It !")) 
    SetGadgetText(#Btn_UCase, Language::Message("UCase It !"))
    SetGadgetText(#Btn_LCase, Language::Message("LCase It !")) 
    SetGadgetText(#Btn_Language, Language::Message("Language")) 
    SetGadgetText(#Btn_Clipboard, Language::Message("Copy to Clipboard")) 
    
  EndProcedure
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< BuiltLanguageDefaultFiles (Private) <<<<<
  
  CompilerIf #PB_Compiler_Debugger
    
    Procedure BuiltLanguageDefaultFiles(P_PathName.s)
      
      BuiltPathDirectory::DoIt(P_PathName)
      
      Language::Initialize(P_PathName, "English.xml")
      Language::AddTableElement("Wrap String", "Wrap String")
      Language::AddTableElement("Before", "Before")
      Language::AddTableElement("After", "After")
      Language::AddTableElement("Wrap It !", "Wrap It !")
      Language::AddTableElement("Strip It !", "Strip It !")
      Language::AddTableElement("UCase It !", "UCase It !")
      Language::AddTableElement("LCase It !", "LCase It !")
      Language::AddTableElement("Copy to Clipboard", "Copy to Clipboard")
      Language::AddTableElement("Language", "Language")
      Language::AddTableElement("Language Requester", "Choose Language")
      Language::AddTableElement("OK", "OK")
      Language::AddTableElement("Cancel", "Cancel")
      
      Language::CreateTableFile()
      Language::Reset()
      
      Language::Initialize(P_PathName, "Français.xml")
      Language::AddTableElement("Wrap String", "Wrap String")
      Language::AddTableElement("Before", "Devant")
      Language::AddTableElement("After", "Après")
      Language::AddTableElement("Wrap It !", "Wrap It !")
      Language::AddTableElement("Strip It !", "Strip It !")
      Language::AddTableElement("UCase It !", "UCase It !")
      Language::AddTableElement("LCase It !", "LCase It !")
      Language::AddTableElement("Copy to Clipboard", "Presse Papier")
      Language::AddTableElement("Language", "Langue")
      Language::AddTableElement("Language Requester", "Choix de la langue")
      Language::AddTableElement("OK", "OK")
      Language::AddTableElement("Cancel", "Annuler")
      
      Language::CreateTableFile()
      Language::Reset()
      
    EndProcedure
    
  CompilerEndIf 
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Initialize (Public) <<<<<
  
  Procedure Initialize()
    
    CompilerSelect #PB_Compiler_OS
        
      CompilerCase #PB_OS_Windows 
        UserPath.s = GetEnvironmentVariable("APPDATA") + #PathSep + "WrapString" + #PathSep
        
        If Left(UserPath, 2) <> "C:"
          UserPath = "C:" + #PathSep + UserPath
        EndIf
        
      CompilerCase #PB_OS_Linux
        UserPath.s = GetHomeDirectory() + ".wrap_string" + #PathSep
        
    CompilerEndSelect
    
    BuiltPathDirectory::DoIt(UserPath)
    
    LanguagePath.s = GetPathPart(ProgramFilename()) + "language" + #PathSep
    
    CompilerIf #PB_Compiler_Debugger
      BuiltLanguageDefaultFiles(LanguagePath)
    CompilerEndIf 
    
    PrefFileName = UserPath + "WrapString.prefs"
    
    Window::Initialize(#MainWin, 50, 50, 800, 600, #False)
    Language::Initialize(LanguagePath, "Français.xml", @Language_To_GUI())
    Insert::Initialize()
    
    If FileSize(PrefFileName) = -1
      CreateWrapStringPreferences()
    Else
      OpenWrapStringPreferences()
    EndIf
    
    Language::LoadTableFile()
    Window::VerifyPosition(#MainWin)
    
  EndProcedure
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< EventManager (Public) <<<<<
  
  Procedure EventManager()
    
    If Window::CreateWindow(#MainWin)
      
      TextGadget(#Text_Before, 5, 8, 80, 30, "", #PB_Text_Right)
      StringGadget(#String_Before, GadgetLocate::RightOf(#Text_Before, 5), 5, 340, 30, "")
      
      TextGadget(#Text_After, 5, GadgetLocate::DownOf(#String_Before, 8), 80, 30, "", #PB_Text_Right)
      StringGadget(#String_After, GadgetLocate::RightOf(#Text_After, 5), GadgetLocate::DownOf(#String_Before, 5), 340, 30, "")
      
      ButtonGadget(#Btn_WrapIt, GadgetLocate::RightOf(#String_Before, 5), 5, 100, 30, "")
      ButtonGadget(#Btn_StripIt, GadgetLocate::RightOf(#String_After, 5), GadgetLocate::DownOf(#Btn_WrapIt, 5), 100, 30, "")
      
      ButtonGadget(#Btn_UCase, GadgetLocate::RightOf(#Btn_WrapIt, 5), 5, 100, 30, "")
      ButtonGadget(#Btn_LCase, GadgetLocate::RightOf(#Btn_StripIt, 5), GadgetLocate::DownOf(#Btn_UCase, 5), 100, 30, "")
      
      ButtonGadget(#Btn_Language, GadgetLocate::RightOf(#Btn_UCase, 5), 5, 150, 30, "")
      ButtonGadget(#Btn_Clipboard, GadgetLocate::RightOf(#Btn_UCase, 5), GadgetLocate::DownOf(#Btn_Language, 5), 150, 30, "")
      
      EditorGadget(#Editor_Content, 5, GadgetLocate::DownOf(#String_After, 5), 790, 520) 
      
      AddKeyboardShortcut(#MainWin, #PB_Shortcut_Control | #PB_Shortcut_F1, #ShortCut_Insert)
      
      Language_To_GUI()
 
      Repeat
        
        Select WaitWindowEvent()
            
          Case #PB_Event_Menu
            
            Select EventMenu()
                
              Case #ShortCut_Insert
                Insert::BasicType_To_Gadget(#Editor_Content)
                
            EndSelect
            
          Case #PB_Event_Gadget
            
            Select EventGadget()
                
              Case #Btn_WrapIt
                For ItemID = 0 To CountGadgetItems(#Editor_Content)
                  SetGadgetItemText(#Editor_Content, ItemID, GetGadgetText(#String_Before) + Trim(GetGadgetItemText(#Editor_Content, ItemID)) + GetGadgetText(#String_After))
                Next
                
              Case #Btn_StripIt
                For ItemID = 0 To CountGadgetItems(#Editor_Content)
                  SetGadgetItemText(#Editor_Content, ItemID, RemoveString(RemoveString(Trim(GetGadgetItemText(#Editor_Content, ItemID)), GetGadgetText(#String_Before)), GetGadgetText(#String_After)))
                Next
                
              Case #Btn_UCase
                For ItemID = 0 To CountGadgetItems(#Editor_Content)
                  SetGadgetItemText(#Editor_Content, ItemID, UCase(GetGadgetItemText(#Editor_Content, ItemID)))
                Next   
                
              Case #Btn_LCase
                For ItemID = 0 To CountGadgetItems(#Editor_Content)
                  SetGadgetItemText(#Editor_Content, ItemID, LCase(GetGadgetItemText(#Editor_Content, ItemID)))
                Next  
                
              Case #Btn_Language
                Language::Requester()
                
              Case #Btn_Clipboard
                SetClipboardText(GetGadgetText(#Editor_Content))
                
            EndSelect
            
          Case #PB_Event_CloseWindow
            
            Select EventWindow()
                
              Case #MainWin
                ShutDown()
                
            EndSelect
            
        EndSelect
        
      ForEver
      
    EndIf  
    
  EndProcedure
  
EndModule

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Program Initialization <<<<<

WrapString::Initialize()

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Events Manager <<<<<

WrapString::EventManager()

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
The Stone Age did not end due to a shortage of stones !
User avatar
deseven
Enthusiast
Enthusiast
Posts: 367
Joined: Wed Jan 12, 2011 3:48 pm
Location: Serbia
Contact:

Re: Wrap String Utility

Post by deseven »

Nice example, thanks for sharing!

However, why so complex?

Code: Select all

; why not to write like that?
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  #PathSep = "\"
CompilerElse
  #PathSep = "/"
CompilerEndIf

; instead of
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows 
    #PathSep = "\"     
  CompilerCase #PB_OS_Linux
    #PathSep = "/"
  CompilerCase #PB_OS_MacOS
    #PathSep = "/"
CompilerEndSelect

; or
If FileSize(Path) = -2
  ProcedureReturn #True
EndIf
ProcedureReturn #False

; instead of
If FileSize(Path) = -2
  Success.b = #True
Else
  Success = #False
EndIf
ProcedureReturn Success
User avatar
StarBootics
Addict
Addict
Posts: 1006
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

Re: Wrap String Utility

Post by StarBootics »

deseven wrote:Nice example, thanks for sharing!

However, why so complex?

Code: Select all

; why not to write like that?
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  #PathSep = "\"
CompilerElse
  #PathSep = "/"
CompilerEndIf

; instead of
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows 
    #PathSep = "\"     
  CompilerCase #PB_OS_Linux
    #PathSep = "/"
  CompilerCase #PB_OS_MacOS
    #PathSep = "/"
CompilerEndSelect
This is because this small block of code is more populated than that, color contants like #White, #Black, #Red, and so on so forth are define only on window and not on linux. To avoid the already defined constant when I compile under window OS I add them in the " #PB_OS_Linux" CompilerCase

So instead ot have many snippet, I use only for all cases and populate it as needed.
deseven wrote:

Code: Select all

; or
If FileSize(Path) = -2
  ProcedureReturn #True
EndIf
ProcedureReturn #False

; instead of
If FileSize(Path) = -2
  Success.b = #True
Else
  Success = #False
EndIf
ProcedureReturn Success
It's a personal constraint to have only one "ProcedureReturn" per procedure.

Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Post Reply