
LEGEND
------

✓ == done (i ^v u2713)
✗ == cancelled (i ^v u2717)


TODO
----

*   Populate 'working directory' from executable name or current working directory.
*   Add menu for 'Debug'. step/next/continue/finish.
*   SeerCodeManager: A full QTreeWidget slows resizing of the Seer application.
*   SeerCodeBrowser: Busy cursor when populating tree. Seems hard to do for some reason.
*   Add binary path and name to Seer title bar.
*   Add seer icon to application icon.
*   Find debug icons (step, next, etc.)
*   SeerBreakpoints: Need to display when an error occurs trying to set a breakpoint.
*   Switch to use cmake.
*   SeerThreadBrowser: Step/next by individual thread, or by all threads.
*   SeerCodeWidget: Move add handleText logic into SeerCodeManager.
*   With -run option, Load source file for main before running program.
*   Add gdb 'pretty printers' for custom display of some objects. QString, etc.
*   Add 'seer -remote host:port executable'  to debug a remotely running application.
*   Improve 'debug' dialog to include -attach, -run, -start, -corefile, -remote options.
*   SeerTracepoints and SeerTracepointsLog.
    Only works with gdbserver. There is no gdb/mi command. Use gdb 'trace' command.
*   SeerDataVisualizer      -data-read-memory-bytes


DONE
----

* ✗ Add logic to check if executable has changed (size,time) each time 'run' or 'start' is used.
    No need. Seer reloads the executable every time anyway.
* ✓ Add multiple source dialogs in source file manager.
* ✓ Inherit from UI class instead of having an instance of one.
* ✓ Change all includes to <QtSomething/QClass> format.
* ✓ Add 'cd to working directory' gdb call.
* ✓ Change UI clases to have 'Form' as the postfix part of the ui name.
* ✓ Change signal/slots to use the non-macro version.
* ✓ Add -start flag to 'start' the debug session when seer starts. (break in 'main')
* ✓ Add --launch-mode option to 'start' or 'run' the debug session when seer starts.
* ✓ Rename SeerWidget to something more meaningful (SeerGdbWidget?)
* ✓ Handle step/next/continue/finish when program has not been start with 'run' or 'start'.
* ✓ Add widget for code browser.
* ✓ SeerCodeBrowser: Sort by File column.
* ✓ SeerCodeBrowser: Separate tree by Source, Header, Other.
* ✓ SeerCodeBrowser: Clear tree when new program is debugged.
* ✓ SeerCodeBrowser: Populate tree when program is loaded. Refresh will always refresh.
* ✓ SeerCodeBrowser: Resize column 0 to contents.
* ✓ A QSplitter between SeerCodeBrowser and SeerCodeManager.
* ✓ SeerCodeManager: Add 'search in tree' feature.
* ✓ SeerStackBrowser: Add a widget to show/manipulate the stack.
* ✓ SeerLocalsBrowser: Add a widget to show local variables.
* ✓ Add a QSplitter above the log widgets.
* ✓ Rename SeerArgumentsBrowser, SeerStackBrowser, SeerLocalsBrowser => SeerStackArgumentsBrowser, SeerStackFramesBrowser, SeerStackLocalsBrowser.
* ✓ Add SeerArgumentsBrowser, SeerStackBrowser, SeerLocalsBrowser to a tab widget.
* ✓ Add refresh icon to refresh buttons.
* ✓ SeerArgumentsBrowser: Add a widget to show stack function arguments.
* ✓ SeerBreakpointsBrowser.
* ✓ SeerBreakpoints - add/disable when double-click on code margin.
* ✓ SeerBreakpoints - line/breakpoint mismatch in codewidget when inserting breakpoint on a non-line.
* ✓ SeerBreakpoints - code widget sometimes stores wrong breakpoint number for a line number.
* ✓ SeerBreakpoints - add breakpoint enable/disable state to code widget.
* ✓ SeerBreakpoints - show enabled/disabled icon in code widgets.
* ✓ change to:  seer [--run|--start]  executable arg1 arg2 ...
* ✓ SeerBreakpoints - double click on breakpoint in breakpoint browser will change selected line.
                      it should only scroll to.
                      Have a separate "scrollToLine" signal and "selectLine" signals.
* ✓ When stepping/stopping, update the highlited line in each code window. Also when a source file is loaded.
* ✓ SeerCodeWidget: If line # not set, don't highlite a line.
* ✓ SeerBreakpoints: Refresh list/editors when temporary breakpoint is reached.
* ✓ SeerBreakpoints: Change toggle to separate enable/disable tool buttons. Add icons to context menu in SeerCodeWidget.
* ✓ SeerStackFrame: StackFrameUp and StackFrameDown. hightlight current frame.
                    Local variables and frame arguments should reflect which frame is selected.
* ✓ SeerStackFrame: Selecting frame selects current stack-frame. Locals will show variables for that.
* ✓ Implement 'run to here' feature.    -exec-until recursive2.c:6
* ✓ SeerCodeWidget: Doesn't highlight multiple lines for the call stack if there are in a single file.
* ✓ SeerCodeWidget: Add prettier icons for breakpoints. gradient circles.
* ✓ SeerBreakpoints: Implement 'run to here'.
* ✓ SeerStackLocals: Doesn't parse complicated variables.  Debug 'seer' and show locals from main().
* ✓ Convert all QRegularExpression to SeerUtl::parse.
* ✓ Handle process signals like sigsegv.
* ✓ SeerWatchpoints: Implement. Very similiar to breakpoints.
* ✓ SeerRegisters: Implement. View cpu registers.
* ✓ SeerVariables: Implement. View a list of user selected variables.
* ✓ Browser: Implement a visible/hidden mode to not parse the 'text'. Refresh when made visiable.
* ✓ Window updates: Smarten the updates by SeerGdbWidget having a 'stoppingPointReached' signal.
                    Windows will get the signal and update if they are visable.
* ✓ Interrupt: Add an 'interrupt' button to stop a running process. Need to put gdb/mi in async mode. Affects how windows
                    are updated after a stop point is reached.
* ✓ Double refresh: Fixed double refresh bug after switching to async mode. The stackFrame widget was setting the current frame
                    after each update, thus doing another refresh.
* ✓ Change qDebug to this format : qDebug() << __PRETTY_FUNCTION__ << ":" << somedebug;
* ✓ Add search bar to code editor. CTRL+F to show.
* ✓ Show variable value as a tooltip in the code editor when the variable name is selected in the text.
* ✓ Show variable value as an entry in a Variable Log view.
* ✓ GdbMonitor: Programs the require text from stdin aren't handled well to get the input. Need to fix.
                Use a separate tty for the running executable for its stdin/stdout/stderr. The main tty is for gdb/mi interaction.
* ✓ Remove log for specific gdb channels. Keep just one for all channel output.
* ✓ GdbMonitor: Doesn't handle stdout text longer than 65536 reliably. Key off last char being a \n???
                Fixed. Changed from QProcess::readAll() to QProcess::readLine().
                Also, Explorer uses shared libraries that are not all loaded when Explorer is started. A manual refresh is needed.
* ✓ Display dialog on errors -  ^error,msg="malformed line offset: \"%2\""
* ✓ Add 'seer -core core.file executable'  to debug core files.
* ✓ Add 'seer -attach pid# executable'  to debug a running application.
* ✓ Add a log for "~" and "=" text.  Call it "GDB log"
    Add a log for all text. Call it "SEER log".
* ✓ Renamed SeedCodeWidget to SeerEditorWidget
* ✓ Renamed SeedCodeManager to SeerEditorManager
* ✓ Renamed SeedCodeBrowser to SeerSourceBrowser
* ✓ SeerSharedLibraries: -file-list-shared-libraries  (Need to manually refresh. Won't happen automatically after executable is
    loadded)
        (gdb)
        -file-list-shared-libraries
        ^done,shared-libraries=[
            {id="/lib/libfoo.so",target-name="/lib/libfoo.so",host-name="/lib/libfoo.so",symbols-loaded="1",thread-group="i1",ranges=[{from="0x72815989",to="0x728162c0"}]},
            {id="/lib/libbar.so",target-name="/lib/libbar.so",host-name="/lib/libbar.so",symbols-loaded="1",thread-group="i1",ranges=[{from="0x76ee48c0",to="0x76ee9160"}]}
        ]
        (gdb)
* ✓ Display debug dialog if no launch method is specified on the seer command line.


