Page 1 of 1

Variable Viewer: Please add Constants tab

Posted: Tue Oct 07, 2014 3:29 pm
by Tenaja
Please add a tab to the variable viewer for listing constants.

Thanks.

Re: Variable Viewer: Please add Constants tab

Posted: Wed Oct 08, 2014 9:01 pm
by Golfy
If someone is working on variables viewer, could it be possible to right click on a variable and to...
... launch the search function with the variable name prefilled
or
... display all lines where the variable appear in the file

A better things is to have the variable viewer in the tabs with 'project', 'form', 'Explorer'...

Thanks

Re: Variable Viewer: Please add Constants tab

Posted: Thu Oct 09, 2014 12:51 am
by Zebuddi123
Hi Golfy. Try Kiffi`s tool, variable viewer

just set as a tool, no arguments required. I use LCtrl+`as shortcut.

Zebuddi. :)

http://forums.purebasic.com/german/view ... w=previous

Code: Select all

; FindAllReferences
EnableExplicit

Enumeration ; Windows
   #frmMain
EndEnumeration
Enumeration ; Gadgets
   #frmMain_References
EndEnumeration
Enumeration ; Menu-/Toolbaritems
   #frmMain_Shortcut_Escape_Event
EndEnumeration

Global PbIdeHandle = Val(GetEnvironmentVariable("PB_TOOL_MainWindow"))
If PbIdeHandle = 0 : End : EndIf

Global ScintillaHandle = Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
If ScintillaHandle = 0 : End : EndIf

Procedure.s RemoveLeadingWhitespaceFromString(InString.s)
   
   While Left(InString, 1) = Chr(32) Or Left(InString, 1) = Chr(9)
      InString = LTrim(InString, Chr(32))
      InString = LTrim(InString, Chr(9))
   Wend
   
   ProcedureReturn InString
   
EndProcedure

Procedure.s GetScintillaText()
   
   Protected ReturnValue.s
   
   Protected length
   Protected buffer
   Protected processId
   Protected hProcess
   Protected result
   
   length = SendMessage_(ScintillaHandle, #SCI_GETLENGTH, 0, 0) 
   If length
      length + 2
      buffer = AllocateMemory(length)
      If buffer   
      	SendMessageTimeout_(ScintillaHandle, #SCI_GETCHARACTERPOINTER, 0, 0, #SMTO_ABORTIFHUNG, 2000, @result)
         If result
            GetWindowThreadProcessId_(ScintillaHandle, @processId)
            hProcess = OpenProcess_(#PROCESS_ALL_ACCESS, #False, processId)
            If hProcess
               ReadProcessMemory_(hProcess, result, buffer, length, 0)   
               ReturnValue = PeekS(buffer, -1, #PB_UTF8)
;                MessageRequester("",PeekS(buffer))
            EndIf
         EndIf
      EndIf
      FreeMemory(buffer)
   EndIf
   
   ProcedureReturn ReturnValue
   
EndProcedure

Procedure frmMain_SizeWindow_Event()
   ResizeGadget(#frmMain_References, #PB_Ignore, #PB_Ignore, WindowWidth(#frmMain) - 20, WindowHeight(#frmMain) - 20)
EndProcedure

Procedure frmMain_References_Event()
   
   Protected SelectedLine
   
   SelectedLine = Val(GetGadgetItemText(#frmMain_References, GetGadgetState(#frmMain_References), 0))
   
   If SelectedLine > 0
      SendMessage_(ScintillaHandle, #SCI_GOTOLINE, SelectedLine - 1, 0)
      SendMessage_(ScintillaHandle, #SCI_ENSUREVISIBLE, SelectedLine - 1, 0)
      SetForegroundWindow_(PbIdeHandle)
      SetActiveWindow_(PbIdeHandle)
   EndIf
   
EndProcedure

Define SelectedWord.s = GetEnvironmentVariable("PB_TOOL_Word")
If SelectedWord = "" : End : EndIf

Define ScintillaText.s = GetScintillaText()
If ScintillaText = "" : End : EndIf

Define Line.s
Define CountLines, LineCounter
Define CountTokens, TokenCounter
Define WWE
Define RegexLines, PbRegexTokens

Structure sFoundReference
   LineNo.i
   Reference.s
EndStructure

NewList FoundReference.sFoundReference()

Dim Tokens.s(0)
;------- debug
;http://www.purebasic.fr/english/viewtopic.php?f=12&t=37823
RegexLines = CreateRegularExpression(#PB_Any , ".*\r\n")
PbRegexTokens = CreateRegularExpression(#PB_Any, #DOUBLEQUOTE$ + "[^" + #DOUBLEQUOTE$ + "]*" + #DOUBLEQUOTE$ + "|[\*]?[a-zA-Z_]+[\w]*[\x24]?|#[a-zA-Z_]+[\w]*[\x24]?|[\[\]\(\)\{\}]|[-+]?[0-9]*\.?[0-9]+|;.*|\.|\+|-|[&@!\\\/\*,\|]|::|:|\|<>|>>|<<|=>{1}|>={1}|<={1}|=<{1}|={1}|<{1}|>{1}|\x24+[0-9a-fA-F]+|\%[0-1]*|%|'")

CountLines = CountString(ScintillaText, #CRLF$)

Dim Lines.s(0)

CountLines = ExtractRegularExpression(RegexLines, ScintillaText, Lines())

SelectedWord = LCase(SelectedWord) ; word passed from the scintilla gadget in the ide to match

For LineCounter = 0 To CountLines - 1
   
   Line = Lines(LineCounter)   
   
   CountTokens = ExtractRegularExpression(PbRegexTokens, Line, Tokens())
   
   For TokenCounter = 0 To CountTokens - 1   
   	PrintN(SelectedWord)
   	PrintN(Chr(9)+SelectedWord+Chr(10))
      If SelectedWord = LCase(Tokens(TokenCounter))
         AddElement(FoundReference())
         FoundReference()\LineNo = LineCounter + 1
         FoundReference()\Reference = Line
      EndIf
   Next
   
Next
;--------------------------------------
	
If ListSize(FoundReference()) = 0 : End : EndIf

OpenWindow(#frmMain, 
           #PB_Ignore,
           #PB_Ignore, 
           600,
           300,
           "All references for: '" + SelectedWord + "'",
           #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered);End_OpenWindow

StickyWindow(#frmMain, #True)

ListIconGadget(#frmMain_References, 
               10, 
               10,
               WindowWidth(#frmMain) - 20, 
               WindowHeight(#frmMain) - 20,
               "LineNo.", 
               50,
               #PB_ListIcon_FullRowSelect |   
               #PB_ListIcon_GridLines |
               #PB_ListIcon_AlwaysShowSelection)

AddGadgetColumn(#frmMain_References, 1, "Reference", 4000)
SetWindowColor(#frmMain, $98FAFF)
SetGadgetColor(#frmMain_References,#PB_Gadget_BackColor ,$BEFCFF)
ForEach FoundReference()
   AddGadgetItem(#frmMain_References, -1, Str(FoundReference()\LineNo) + #LF$ + Trim(FoundReference()\Reference))   
Next

AddKeyboardShortcut(#frmMain, #PB_Shortcut_Escape, #frmMain_Shortcut_Escape_Event)
BindEvent(#PB_Event_SizeWindow, @frmMain_SizeWindow_Event(), #frmMain)
BindGadgetEvent(#frmMain_References, @frmMain_References_Event())
SetActiveGadget(#frmMain_References)

Repeat
   
   WWE = WaitWindowEvent()
   
   If (WWE = #PB_Event_Menu And EventMenu() = #frmMain_Shortcut_Escape_Event) Or (WWE = #PB_Event_CloseWindow)
      Break
   EndIf
   
ForEver

Re: Variable Viewer: Please add Constants tab

Posted: Fri Oct 10, 2014 12:23 am
by majikeyric
Great tool ! :D

Re: Variable Viewer: Please add Constants tab

Posted: Fri Oct 10, 2014 1:02 am
by skywalk
Yes, very nice, but we really need TOOL_VAR's to span all open files. This only works in current file.
Like the File - Edit - Find in Files utility ...

Re: Variable Viewer: Please add Constants tab

Posted: Sat Oct 18, 2014 9:14 am
by blueznl
Though I'd +1 the feature request, CodeCaddy actually looks for variable declarations in current and related ('included') files.