Just as well, since I only have a short pigtail connecting to some RG213AU cable and I have to hold the cable and the radio in each hand and try to transmit at the same time!!!
Anyway, I needed a simple application to load in all the callsigns found, 'caller' and 'called' in a small list and all the actual data in the main list when a callsign is clicked on (it's an ongoing design) and to be able to dump the entire concatenated list to disk when I wanted it. And to be able to search it all.
I find it very useful to relate all the data with my actual QSO's when I couldn't write down contacts by hand.
Might be useful to somebody, who knows....
Code: Select all
;- Window Constants
Enumeration 1
#Window_ID51LogLister
EndEnumeration
#WindowIndex = #PB_Compiler_EnumerationValue
;- Gadget Constants
Enumeration 1
; Window_ID51LogLister
#MenuBar_ID51LogLister_Files
#MenuBar_ID51LogLister_Setdirectory
#MenuBar_ID51LogLister_Getlogfiles
#MenuBar_ID51LogLister_Savemasterlog
#MenuBar_ID51LogLister_Exitprogram
#Gadget_ID51LogLister_Callsigns
#Gadget_ID51LogLister_fSeparator1
#Gadget_ID51LogLister_lLoglist
#Gadget_ID51LogLister_fSeparator2
#Gadget_ID51LogLister_cControl
#Gadget_ID51LogLister_fSeparator4
#Gadget_ID51LogLister_cStatusbar
#Gadget_ID51LogLister_Setdirectory
#Gadget_ID51LogLister_Getlogfiles
#Gadget_ID51LogLister_Savemasterlog
#Gadget_ID51LogLister_fSeparator3
#Gadget_ID51LogLister_Directory
#Gadget_ID51LogLister_LgetDirectory
#Gadget_ID51LogLister_Searchbox
#Gadget_ID51LogLister_lSearchbox
#Gadget_ID51LogLister_ExitProgram
#Gadget_ID51LogLister_Messages
#Gadget_ID51LogLister_Current
#Gadget_ID51LogLister_Lines
EndEnumeration
#GadgetIndex = #PB_Compiler_EnumerationValue
;- MenuBar Constants
Enumeration 1
#MenuBar_ID51LogLister
EndEnumeration
#MenuBarIndex = #PB_Compiler_EnumerationValue
Procedure.i Window_ID51LogLister()
If OpenWindow(#Window_ID51LogLister,58,75,1000,760,"Parse and display Icom D-Star CSV log file lists",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowColor(#Window_ID51LogLister,$E0E0E0)
CreateImageMenu(#MenuBar_ID51LogLister,WindowID(#Window_ID51LogLister))
MenuTitle("Files menu")
MenuItem(#MenuBar_ID51LogLister_Setdirectory,"Set directory")
MenuItem(#MenuBar_ID51LogLister_Getlogfiles,"Get log files")
MenuItem(#MenuBar_ID51LogLister_Savemasterlog,"Save master log")
MenuBar()
MenuItem(#MenuBar_ID51LogLister_Exitprogram,"Exit this program")
ListIconGadget(#Gadget_ID51LogLister_Callsigns,5,5,130,600,"Callsigns",126,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
SetGadgetColor(#Gadget_ID51LogLister_Callsigns,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_Callsigns,LoadFont(#Gadget_ID51LogLister_Callsigns,"Comic Sans MS",10,0))
FrameGadget(#Gadget_ID51LogLister_fSeparator1,140,5,5,600,"",#PB_Frame_Double)
ListIconGadget(#Gadget_ID51LogLister_lLoglist,150,5,845,600,"Details",0,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
SetGadgetColor(#Gadget_ID51LogLister_lLoglist,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_lLoglist,LoadFont(#Gadget_ID51LogLister_lLoglist,"Comic Sans MS",10,0))
FrameGadget(#Gadget_ID51LogLister_fSeparator2,5,610,990,5,"",#PB_Frame_Double)
ContainerGadget(#Gadget_ID51LogLister_cControl,5,620,990,80,#PB_Container_Flat|#PB_Container_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_cControl,#PB_Gadget_BackColor,$E0E0E0)
ButtonGadget(#Gadget_ID51LogLister_Setdirectory,5,5,135,22,"Set log directory",#PB_Button_MultiLine)
SetGadgetFont(#Gadget_ID51LogLister_Setdirectory,LoadFont(#Gadget_ID51LogLister_Setdirectory,"Comic Sans MS",10,0))
ButtonGadget(#Gadget_ID51LogLister_Getlogfiles,5,28,135,22,"Get log files",#PB_Button_MultiLine)
SetGadgetFont(#Gadget_ID51LogLister_Getlogfiles,LoadFont(#Gadget_ID51LogLister_Getlogfiles,"Comic Sans MS",10,0))
ButtonGadget(#Gadget_ID51LogLister_Savemasterlog,5,51,135,22,"Save master log",#PB_Button_MultiLine)
SetGadgetFont(#Gadget_ID51LogLister_Savemasterlog,LoadFont(#Gadget_ID51LogLister_Savemasterlog,"Comic Sans MS",10,0))
FrameGadget(#Gadget_ID51LogLister_fSeparator3,145,5,5,70,"",#PB_Frame_Double)
StringGadget(#Gadget_ID51LogLister_Directory,155,5,735,25,"",#PB_String_ReadOnly|#PB_String_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_Directory,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_Directory,LoadFont(#Gadget_ID51LogLister_Directory,"Comic Sans MS",10,0))
TextGadget(#Gadget_ID51LogLister_LgetDirectory,155,30,735,15," Current directory to be catalogued...")
SetGadgetColor(#Gadget_ID51LogLister_LgetDirectory,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_LgetDirectory,LoadFont(#Gadget_ID51LogLister_LgetDirectory,"Comic Sans MS",8,0))
StringGadget(#Gadget_ID51LogLister_Searchbox,705,50,185,20,"",#PB_String_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_Searchbox,#PB_Gadget_BackColor,$D4D4D4)
SetGadgetFont(#Gadget_ID51LogLister_Searchbox,LoadFont(#Gadget_ID51LogLister_Searchbox,"Comic Sans MS",10,0))
TextGadget(#Gadget_ID51LogLister_lSearchbox,555,55,150,15,"Search for items in here --->")
SetGadgetColor(#Gadget_ID51LogLister_lSearchbox,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_lSearchbox,LoadFont(#Gadget_ID51LogLister_lSearchbox,"Comic Sans MS",8,0))
ButtonGadget(#Gadget_ID51LogLister_ExitProgram,895,5,90,70,"Exit this program",#PB_Button_MultiLine)
SetGadgetFont(#Gadget_ID51LogLister_ExitProgram,LoadFont(#Gadget_ID51LogLister_ExitProgram,"Comic Sans MS",10,0))
CloseGadgetList()
FrameGadget(#Gadget_ID51LogLister_fSeparator4,5,705,990,5,"",#PB_Frame_Double)
ContainerGadget(#Gadget_ID51LogLister_cStatusbar,5,715,990,20,#PB_Container_Flat|#PB_Container_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_cStatusbar,#PB_Gadget_BackColor,$E0E0E0)
StringGadget(#Gadget_ID51LogLister_Messages,0,0,780,20,"",#PB_String_ReadOnly|#PB_String_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_Messages,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_Messages,LoadFont(#Gadget_ID51LogLister_Messages,"Comic Sans MS",8,0))
StringGadget(#Gadget_ID51LogLister_Current,785,0,100,20,"",#PB_String_ReadOnly|#PB_String_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_Current,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_Current,LoadFont(#Gadget_ID51LogLister_Current,"Comic Sans MS",8,0))
StringGadget(#Gadget_ID51LogLister_Lines,890,0,100,20,"",#PB_String_ReadOnly|#PB_String_BorderLess)
SetGadgetColor(#Gadget_ID51LogLister_Lines,#PB_Gadget_BackColor,$E0E0E0)
SetGadgetFont(#Gadget_ID51LogLister_Lines,LoadFont(#Gadget_ID51LogLister_Lines,"Comic Sans MS",8,0))
CloseGadgetList()
HideWindow(#Window_ID51LogLister,0)
ProcedureReturn WindowID(#Window_ID51LogLister)
EndIf
EndProcedure
#EmptyString = ""
Structure ProgramData
QuitValue.i
ListColumns.i
CsvDirectory.s
CurrentDirectory.s
ConfigFileName.s
MasterLogFileName.s
SearchCueFont.i ; Searchbox cue font
SearchNormalFont.i ; Searchbox normal font
SearchCueText.s ; Search box prompt text
EndStructure
DataSection
ListColumnNames:
Data.s "Frequency" ; 1
Data.s "Mode" ; 2
Data.s "Caller" ; 3
Data.s "/" ; 4
Data.s "Called" ; 5
Data.s "Rx RPT1" ; 6
Data.s "Rx RPT2" ; 7
Data.s "Message" ; 8
Data.s "Status" ; 9
Data.s "Received date" ; 10
Data.s "BK" ; 11
Data.s "EMR" ; 12
Data.s "Latitude" ; 13
Data.s "Longitude" ; 14
Data.s "Altitude" ; 15
Data.s "SSID" ; 16
Data.s "D-PRS Symbol" ; 17
Data.s "Course" ; 18
Data.s "Speed" ; 19
Data.s "Power" ; 20
Data.s "Height" ; 21
Data.s "Gain" ; 22
Data.s "Directivity" ; 23
Data.s "Object/Item Name" ; 24
Data.s "Data Type" ; 25
Data.s "Temperature" ; 26
Data.s "Rainfall" ; 27
Data.s "Rainfall (24 Hours)" ; 28
Data.s "Rainfall (Midnight)" ; 29
Data.s "Wind Direction" ; 20
Data.s "Wind Speed" ; 21
Data.s "Gust Speed" ; 22
Data.s "Barometric" ; 23
Data.s "Humidity" ; 24
Data.s "GPS Time Stamp" ; 25
Data.s "GPS Message" ; 26
Data.s "_END_" ;
EndDataSection
Global Program.ProgramData
Global NewList Callsigns.s()
Global NewList Logdetails.s()
Program\CurrentDirectory = GetCurrentDirectory()
Program\ConfigFileName = Program\CurrentDirectory + "ID-51 log parser.config"
Program\MasterLogFileName = Program\CurrentDirectory + "ID-51 master log file.log"
; Setup the search box cue fonts
Program\SearchCueFont = LoadFont(#PB_Any, "Georgia", 10, #PB_Font_Italic) ; Empty search cue font
Program\SearchNormalFont = LoadFont(#PB_Any, "Comic Sans MS", 10, 0) ; Filled cue box font
Program\SearchCueText = Space(256) ; Set the cue text buffer
PokeS(@Program\SearchCueText, "Search string here...", -1, #PB_Unicode) ; Fill the buffer with the cue text
;
Enumeration #GadgetIndex
#Shortcut_ID51LogLister_SearchCalsigns
EndEnumeration
;
Declare CheckDuplicateCallsign(CallSign.s) ;
Declare ExportMasterLogFile() ;
Declare GetCallsignLog() ;
Declare LoadConfigFile() ;
Declare SaveConfigFile() ;
Declare SearchCallsignLog() ;
Declare ProcessLogFiles() ;
Declare ProcessCurrentLogFile(LogFileNames.s) ;
Declare SetInfoBarArea(FieldName.s, FieldStatus.s, MessageContent.s = "0", ModuleName.s = #EmptyString) ;
; ;
;
; XIncludeFile "ID-51 Log parser_Constants.pb" ; Visual designer created constants
; XIncludeFile "ID-51 Log parser_Windows.pb" ; Visual designer created windows
; XIncludeFile "ID-51 Log parser_MyConstants.pb" ; My personal constants
; XIncludeFile "ID-51 Log parser_MyDeclarations.pb" ; My procedural declarations
;
; ;
;
; XIncludeFile "Modules\_CheckDuplicateCallsign.pbi" ;
; XIncludeFile "Modules\_ExportMasterLogFile.pbi" ;
; XIncludeFile "Modules\_GetCallsignLog.pbi" ;
; XIncludeFile "Modules\_LoadConfigFile.pbi" ;
; XIncludeFile "Modules\_SaveConfigFile.pbi" ;
; XIncludeFile "Modules\_SearchCallsignLog.pbi" ;
; XIncludeFile "Modules\_ProcessLogFiles.pbi" ;
; XIncludeFile "Modules\_ProcessCurrentLogFile.pbi" ;
; XIncludeFile "Modules\_SetInfoBarArea.pbi" ; Send messages and error reports to the fake status bar area
;
Procedure CheckDuplicateCallsign(CallSign.s)
If CallSign.s <> "" And CallSign.s <> "Caller" And CallSign.s <> "Called" And CallSign.s <> " I"
ForEach Callsigns.s()
If Callsigns.s() = CallSign.s
FoundFlag.i = 1
EndIf
Next
If FoundFlag.i = 0
AddElement(Callsigns.s())
Callsigns.s() = CallSign.s
AddGadgetItem(#Gadget_ID51LogLister_Callsigns, -1, CallSign.s)
EndIf
EndIf
EndProcedure
;
Procedure ExportMasterLogFile()
ListHandle.i = SendMessage_(GadgetID(#Gadget_ID51LogLister_lLoglist), #LVM_GETHEADER, 0, 0) ; : Debug "Got handle to the List: " + Str(ListHandle.i)
NumberOfColumns.i = SendMessage_(ListHandle.i, #HDM_GETITEMCOUNT, 0, 0) ; : Debug "Got number of columns in List: " + Str(NumberOfColumns.i)
SortList(Logdetails.s(), #PB_Sort_Ascending | #PB_Sort_NoCase)
MasterLogFile.i = CreateFile(#PB_Any, Program\MasterLogFileName) ; : Debug "Created master output file: " + Str(MasterLogFile.i)
If MasterLogFile.i <> 0
ForEach (Logdetails.s())
WriteStringN(MasterLogFile.i, Logdetails.s())
Next
CloseFile(MasterLogFile.i)
SetInfoBarArea("Headings", "Info", "Master log file created in program directory", "ExportMasterLogFile")
Else
SetInfoBarArea("Headings", "Warn", "Could not create the master log file", "ExportMasterLogFile")
EndIf
EndProcedure
;
Procedure GetCallsignLog()
CurrentLine.i = GetGadgetState(#Gadget_ID51LogLister_Callsigns)
If CurrentLine.i <> -1
ClearGadgetItems(#Gadget_ID51LogLister_lLoglist)
CurrentCallsign.s = GetGadgetItemText(#Gadget_ID51LogLister_Callsigns, CurrentLine.i, 0)
SetInfoBarArea("Record", "", CurrentCallsign.s, "GetCallsignLog")
ForEach Logdetails.s()
If FindString(Logdetails.s(), CurrentCallsign.s) <> 0
AddGadgetItem(#Gadget_ID51LogLister_lLoglist, -1, ReplaceString(Logdetails.s(), ",", #LF$))
EndIf
Next
For WidthSet.i = 0 To Program\ListColumns - 1
SendMessage_(GadgetID(#Gadget_ID51LogLister_lLoglist), #LVM_SETCOLUMNWIDTH, WidthSet.i, #LVSCW_AUTOSIZE)
Next WidthSet.i
SetInfoBarArea("Headings", "Info", "Finished resizing columns to fit Data", "GetCallsignLog")
SetInfoBarArea("Callsigns", "", Str(CountGadgetItems(#Gadget_ID51LogLister_lLoglist)), "GetCallsignLog")
Else
SetInfoBarArea("Headings", "Warn", "Nothing to resize, no data found", "GetCallsignLog")
EndIf
EndProcedure
;
Procedure LoadConfigFile()
If FileSize(Program\ConfigFileName) <> -1
ConfigFileHandle.i = ReadFile(#PB_Any, Program\ConfigFileName)
If ConfigFileHandle.i <> 0
Program\CsvDirectory = ReadString(ConfigFileHandle.i)
If Program\CsvDirectory <> ""
SetGadgetText(#Gadget_ID51LogLister_Directory, Program\CsvDirectory)
SetInfoBarArea("Headings", "Info", "Catalogue directory name was set", "LoadConfigFile")
Else
SetInfoBarArea("Headings", "Error", "Could not set the catalogue directory name", "LoadConfigFile")
EndIf
CloseFile(ConfigFileHandle.i)
Else
SetInfoBarArea("Headings", "Error", "Could not open the program config file", "LoadConfigFile")
EndIf
Else
SaveConfigFile()
EndIf
EndProcedure
;
Procedure SaveConfigFile()
Program\CsvDirectory = PathRequester("CSV log path", "")
If Program\CsvDirectory
SetGadgetText(#Gadget_ID51LogLister_Directory, Program\CsvDirectory)
ConfigFileHandle.i = CreateFile(#PB_Any, Program\ConfigFileName)
If ConfigFileHandle.i <> 0
WriteStringN(ConfigFileHandle.i, Program\CsvDirectory)
SetInfoBarArea("Headings", "Info", "Config file created in program directory", "SaveConfigFile")
Else
SetInfoBarArea("Headings", "Error", "Could not create config file in program directory", "SaveConfigFile")
EndIf
Else
SetInfoBarArea("Headings", "Warn", "User decided not to change catalogue path", "SaveConfigFile")
EndIf
EndProcedure
;
Procedure SearchCallsignLog()
If ListSize(Logdetails.s())
CurrentText.s = GetGadgetText(#Gadget_ID51LogLister_Searchbox)
If CurrentText.s <> ""
ClearGadgetItems(#Gadget_ID51LogLister_lLoglist)
SetGadgetText(#Gadget_ID51LogLister_Searchbox, "")
ForEach Logdetails.s()
If FindString(Logdetails.s(), CurrentText.s, 1, #PB_String_NoCase) <> 0
AddGadgetItem(#Gadget_ID51LogLister_lLoglist, -1, ReplaceString(Logdetails.s(), ",", #LF$))
EndIf
Next
For WidthSet.i = 0 To Program\ListColumns - 1
SendMessage_(GadgetID(#Gadget_ID51LogLister_lLoglist), #LVM_SETCOLUMNWIDTH, WidthSet.i, #LVSCW_AUTOSIZE)
Next WidthSet.i
SetInfoBarArea("Headings", "Info", "Finished resizing columns to fit data", "SearchCallsignLog")
SetInfoBarArea("Callsigns", "", Str(CountGadgetItems(#Gadget_ID51LogLister_lLoglist)), "MainMenu")
Else
SetInfoBarArea("Headings", "Warn", "User entered no data to search for", "SearchCallsignLog")
EndIf
Else
SetInfoBarArea("Headings", "Error", "Nothing loaded in memory to search through", "SearchCallsignLog")
EndIf
EndProcedure
;
Procedure ProcessLogFiles()
Pattern.s = "Csv (*.csv)|*.csv"
Position.i = 0
LogFileNames.s = OpenFileRequester("Provide CSV logfile names", Program\CsvDirectory, Pattern.s, Position.i, #PB_Requester_MultiSelection)
If LogFileNames.s <> ""
While LogFileNames.s
ProcessCurrentLogFile(LogFileNames.s)
LogFileNames.s = NextSelectedFileName()
Wend
SetInfoBarArea("Headings", "Info", "All selected log files have been loaded into memory", "ProcessLogFiles")
If CountGadgetItems(#Gadget_ID51LogLister_Callsigns) <> 0
SetGadgetState(#Gadget_ID51LogLister_Callsigns, 0)
PostEvent(#PB_Event_Gadget, #Window_ID51LogLister, #Gadget_ID51LogLister_Callsigns, #PB_EventType_Change)
EndIf
Else
SetInfoBarArea("Headings", "Warn", "User provided no filenames to process", "ProcessLogFiles")
EndIf
EndProcedure
;
Procedure ProcessCurrentLogFile(LogFileNames.s)
CurrentFileName.i = ReadFile(#PB_Any, LogFileNames.s)
If CurrentFileName.i
While Eof(CurrentFileName.i) = 0
CurrentLine.s = ReadString(CurrentFileName.i)
CheckDuplicateCallsign(StringField(CurrentLine.s, 3, ","))
CheckDuplicateCallsign(StringField(CurrentLine.s, 5, ","))
If Left(CurrentLine.s, 9) <> "Frequency"
If FindString(CurrentLine.s, "LMSG") = 0 And FindString(CurrentLine.s, "RPTR") = 0
If StringField(CurrentLine.s, 3, ",") <> "" And StringField(CurrentLine.s, 5, ",") <> ""
AddElement(Logdetails.s())
Logdetails.s() = CurrentLine.s
EndIf
EndIf
EndIf
Wend
CloseFile(CurrentFileName.i)
Else
SetInfoBarArea("Headings", "Warn", "The current filename could not be processed", "ProcessCurrentLogFile")
EndIf
EndProcedure
; Send messages and error reports to the fake status bar area
Procedure SetInfoBarArea(FieldName.s, FieldStatus.s, MessageContent.s = "0", ModuleName.s = #EmptyString)
; Take care of any orphan routines that might want to send status messages here
If IsWindow(#Window_ID51LogLister)
; Select the name of the field to put our heading string
Select FieldName.s
; Select the correct heading by the status field
Case "Headings"
;
Select FieldStatus.s
Case "Welcome"
MessageHeader.s = "Welcome!"
Colour.i = $0000FF
Case "Info"
MessageHeader.s = "Information"
Colour.i = $000000
Case "Warn"
MessageHeader.s = "Warning"
Colour.i = $7D1F82
Case "Error"
MessageHeader.s = "Error"
Colour.i = $0402FB
EndSelect
; Send all the strings to the fake status bar area
If ModuleName.s <> #EmptyString
SetGadgetText(#Gadget_ID51LogLister_Messages, MessageHeader.s + ": " + MessageContent.s + " ::" + ModuleName.s + "::")
Else
SetGadgetText(#Gadget_ID51LogLister_Messages, MessageHeader.s + ": " + MessageContent.s)
EndIf
;
Case "Record"
;
SetGadgetText(#Gadget_ID51LogLister_Current, "Call: " + MessageContent.s)
;
Case "Callsigns"
; Figure out the correct spelling for the record field for singles or multiples
If Val(MessageContent.s) = 0
RecordHeader.s = "Records"
ElseIf Val(MessageContent.s) = 1
RecordHeader.s = "Record"
ElseIf Val(MessageContent.s) >= 2
RecordHeader.s = "Records"
EndIf
; Set the record number details in the fake status bar area
SetGadgetText(#Gadget_ID51LogLister_Lines, MessageContent.s + " " + RecordHeader.s)
;
EndSelect
;
EndIf
;
EndProcedure
;
If Window_ID51LogLister()
; Add a keyboard shortcut for the search box
AddKeyboardShortcut(#Window_ID51LogLister, #PB_Shortcut_Return, #Shortcut_ID51LogLister_SearchCalsigns)
; Remove the empty column from the details list
RemoveGadgetColumn(#Gadget_ID51LogLister_lLoglist, 0)
; Load the directory configuration file
LoadConfigFile()
; Add the list of column names from the data sections
Program\ListColumns = 0
;
Restore ListColumnNames
While TempString.s <> "_END_"
Read.s TempString.s
If TempString.s <> "_END_"
AddGadgetColumn(#Gadget_ID51LogLister_lLoglist, Program\ListColumns, TempString.s, 0)
Program\ListColumns + 1
EndIf
Wend
TempString.s = "<><>"
; Limit the number of search box characters and set the cue banner text. These variables are set
; in the Keeper_Myconstants file.
SendMessage_(GadgetID(#Gadget_ID51LogLister_Searchbox), #EM_SETLIMITTEXT, 67, 0)
SendMessage_(GadgetID(#Gadget_ID51LogLister_Searchbox), #EM_SETCUEBANNER, 1, Program\SearchCueText)
; Set initial search cue font
SetGadgetFont(#Gadget_ID51LogLister_Searchbox, FontID(Program\SearchCueFont))
; Give the startup message and callsign count
SetInfoBarArea("Headings", "Welcome", "ID-51 log parser startup", "MainMenu")
SetInfoBarArea("Record", "", "?", "MainMenu")
SetInfoBarArea("Callsigns", "", Str(CountGadgetItems(#Gadget_ID51LogLister_lLoglist)), "MainMenu")
; Set focus on the search bar
SetActiveGadget(#Gadget_ID51LogLister_Searchbox)
; Main event handler
Repeat
;
EventID = WaitWindowEvent()
MenuID = EventMenu()
GadgetID = EventGadget()
WindowID = EventWindow()
;
Select EventID
;
Case #PB_Event_CloseWindow
Select WindowID
Case #Window_ID51LogLister : Program\QuitValue = 1
EndSelect
;
Case #PB_Event_Menu
Select MenuID
Case #MenuBar_ID51LogLister_Setdirectory : SaveConfigFile()
Case #MenuBar_ID51LogLister_Getlogfiles : ProcessLogFiles()
Case #MenuBar_ID51LogLister_Savemasterlog : ExportMasterLogFile()
Case #MenuBar_ID51LogLister_Exitprogram : Program\QuitValue = 1
Case #Shortcut_ID51LogLister_SearchCalsigns : If GetActiveGadget() = #Gadget_ID51LogLister_Searchbox : SearchCallsignLog() : EndIf
EndSelect
;
Case #PB_Event_Gadget
Select GadgetID
Case #Gadget_ID51LogLister_Callsigns
Select EventType()
Case #PB_EventType_LeftDoubleClick :
Case #PB_EventType_RightDoubleClick :
Case #PB_EventType_RightClick :
Case #PB_EventType_Change : GetCallsignLog()
EndSelect
Case #Gadget_ID51LogLister_lLoglist
Select EventType()
Case #PB_EventType_LeftDoubleClick :
Case #PB_EventType_RightDoubleClick :
Case #PB_EventType_RightClick :
Case #PB_EventType_Change :
EndSelect
Case #Gadget_ID51LogLister_Searchbox
Select EventType()
Case #PB_EventType_Change
If GetGadgetText(#Gadget_ID51LogLister_Searchbox) = ""
SetGadgetFont(#Gadget_ID51LogLister_Searchbox, FontID(Program\SearchCueFont))
Else
SetGadgetFont(#Gadget_ID51LogLister_Searchbox, FontID(Program\SearchNormalFont))
EndIf
EndSelect
Case #Gadget_ID51LogLister_Setdirectory : SaveConfigFile()
Case #Gadget_ID51LogLister_Getlogfiles : ProcessLogFiles()
Case #Gadget_ID51LogLister_Savemasterlog : ExportMasterLogFile()
Case #Gadget_ID51LogLister_ExitProgram : Program\QuitValue = 1
EndSelect
;
EndSelect
;
Until Program\QuitValue
;
CloseWindow(#Window_ID51LogLister)
;
EndIf
;
End