The ChooseAnalysis dialog lists the analysis tabs so the user can select
them. Create a new metaclass so the listing of tabs, grouping in the menu,
and the invocation of the tab's class is automatic. This requires section,
tab_title, and mlsonly class attributes.
Signed-off-by: Chris PeBenito <pebenito@ieee.org>
Suppress errors like this:
Exception ignored in: <function DomainTransitionAnalysisTab.__del__ at 0x7fcb4e93c1f0>
Traceback (most recent call last):
File "/home/pebenito/projects/setools/setoolsgui/apol/dta.py", line 54, in __del__
self.thread.quit()
RuntimeError: wrapped C/C++ object of type ResultsUpdater has been deleted
Exception ignored in: <function ResultsUpdater.__del__ at 0x7fcb4e943550>
Traceback (most recent call last):
File "/home/pebenito/projects/setools/setoolsgui/apol/dta.py", line 449, in __del__
self.wait()
RuntimeError: wrapped C/C++ object of type ResultsUpdater has been deleted
Exception ignored in: <function BrowserUpdater.__del__ at 0x7fcb4e943820>
Traceback (most recent call last):
File "/home/pebenito/projects/setools/setoolsgui/apol/dta.py", line 538, in __del__
self.wait()
RuntimeError: wrapped C/C++ object of type BrowserUpdater has been deleted
Signed-off-by: Chris PeBenito <pebenito@ieee.org>
* Close all tabs when closing the policy
* Close the policy if using the "open policy" action and policy load
succeeds.
* Warn the user the above actions will close analysis tabs
(if any tabs are open)
* Set analysis widgets to delete on close since widgets are not deleted
by QTabWidget.clear() or .removeTab()
Connect all setools and setoolsgui INFO+ messages and display them on
the statusbar.
Use each tab's analysis/query INFO+ messages and display them on the
"busy" status dialog box.
The isInterruptionRequested flag on a QThread only resets after the thread
finishes. The original implementation never had the thread finish until
the tab was closed, so if a user canceled an operation, each successive
time an analysis ran on that tab, it would immediately have a request
to interrupt.
Also more agressively check cancelation, so processing will end sooner.
Force repaints to try to ensure the dialog text is updated, as for large
results, the GUI becomes unresponsive when resizing the table.
Only resize columns to content once, when results are generated. This will
generally provide a reasonable column width, while still allowing the user
to resize the columns, such as when the permission list is very long.