<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.commontk.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Benjamin.long</id>
	<title>Commontk - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.commontk.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Benjamin.long"/>
	<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Special:Contributions/Benjamin.long"/>
	<updated>2026-04-13T03:08:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1444</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1444"/>
		<updated>2012-03-16T18:45:27Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;Translator and player if popup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;qMRMLWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCaptureToolBar&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCheckableNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLClipNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorListView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorPickerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLDisplayNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLEventBrokerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLabelComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLayoutWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLinearTransformSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLListWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNavigationView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLROIWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScalarInvariantComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneFactoryWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneViewMenu&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScreenShotDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceControllerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDViewControllerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTransformSliders&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTreeView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeInfoWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeThresholdWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLWindowLevelWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1443</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1443"/>
		<updated>2012-03-16T18:44:45Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;Translator and player if popup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;qMRMLWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCaptureToolBar&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCheckableNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLClipNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorListView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorPickerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLDisplayNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLEventBrokerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLabelComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLayoutWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLinearTransformSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLListWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNavigationView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLROIWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScalarInvariantComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneFactoryWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneViewMenu&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScreenShotDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceControllerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDViewControllerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTransformSliders&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTreeView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeInfoWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeThresholdWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLWindowLevelWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1386</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1386"/>
		<updated>2012-01-12T18:52:48Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;Translator and player if popup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;qMRMLWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCaptureToolBar&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCheckableNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLClipNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorListView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorPickerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLDisplayNodeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLEventBrokerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLabelComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLayoutWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLinearTransformSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLListWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNavigationView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNodeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLROIWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScalarInvariantComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneFactoryWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneViewMenu&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScreenShotDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceControllerWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDViewControllerWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTransformSliders&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTreeView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeInfoWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeThresholdWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLWindowLevelWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1385</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1385"/>
		<updated>2012-01-12T18:45:08Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;Translator and player if popup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;qMRMLWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCaptureToolBar&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCheckableNodeComboBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLClipNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLCollapsibleButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorListView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorPickerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableComboBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLColorTableView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLDisplayNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLEventBrokerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLabelComboBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLayoutWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLLinearTransformSlider&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLMatrixWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNavigationView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLNodeComboBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLROIWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScalarInvariantComboBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneFactoryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSceneViewMenu&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLScreenShotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceControllerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLSliceWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDViewControllerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLThreeDWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTransformSliders&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLTreeView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeInfoWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumePropertyNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLVolumeThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qMRMLWindowLevelWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1384</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1384"/>
		<updated>2012-01-02T18:11:42Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;Translator and player if popup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1380</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1380"/>
		<updated>2011-12-09T22:29:12Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1379</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1379"/>
		<updated>2011-12-09T21:58:50Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1378</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1378"/>
		<updated>2011-12-09T21:57:50Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1377</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1377"/>
		<updated>2011-12-09T21:57:10Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1376</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1376"/>
		<updated>2011-12-09T21:56:49Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. See ctkPopupWidget&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}} - TO VERIFY&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ?&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Note: This won&#039;t work if there multiple items with a similar name. This is not an issue in Slicer since selection is based on string&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;See ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;See ctkVTKMatrixWidget - There is no need for specific translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Since it&#039;s based on QVTKWidget - See ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1375</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1375"/>
		<updated>2011-12-09T21:43:13Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|NA&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|NA&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|NA&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Developer should make sure menus have a parent. See https://bugreports.qt.nokia.com/browse/QTBUG-20929&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Note that the first time the listview is displayed, it will show on the top left corner of the screen.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;See ctkSettingsDialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|NA&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1374</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1374"/>
		<updated>2011-12-09T21:33:06Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Issue if the subMenus have no parent - Qt issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1348</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1348"/>
		<updated>2011-12-06T19:20:02Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039; no visuel effects &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Issue if the subMenus have no parent - Qt issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1347</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1347"/>
		<updated>2011-12-06T19:13:54Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1346</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1346"/>
		<updated>2011-12-01T19:36:45Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1343</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1343"/>
		<updated>2011-11-30T22:21:08Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Issues found on QtTesting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} &amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&amp;lt;br/&amp;gt;&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1342</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1342"/>
		<updated>2011-11-30T22:20:34Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Issues found on QtTesting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}}&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQSpinBox QSpinBox]&lt;br /&gt;
Here the link to my Github for the [https://github.com/benjaminlong/QtTesting/tree/88-IssueQDoubleSpinBox QDoublSpinBox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1267</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1267"/>
		<updated>2011-11-25T23:32:10Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1266</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1266"/>
		<updated>2011-11-25T22:10:54Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Issues found on QtTesting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribut to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1265</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1265"/>
		<updated>2011-11-25T22:10:37Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Issues found on QtTesting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1264</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1264"/>
		<updated>2011-11-25T22:03:37Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Limits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
Note that there are still severals limits to this testing framework :&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1263</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1263"/>
		<updated>2011-11-25T22:02:09Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* How */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QObject::connect(Ui.RecordButton, SIGNAL(clicked(bool)), this, SLOT(record()));&lt;br /&gt;
QObject::connect(Ui.PlayBackButton, SIGNAL(clicked(bool)), this, SLOT(play()));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1262</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1262"/>
		<updated>2011-11-25T22:01:10Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* How */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Record, and link it to the ctkQtTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkQtTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1261</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1261"/>
		<updated>2011-11-25T22:00:40Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note}} You can have your own &#039;&#039;EventObserver&#039;&#039; and &#039;&#039;EventSource&#039;&#039;&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1260</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1260"/>
		<updated>2011-11-25T21:55:04Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* How */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkQtTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1259</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1259"/>
		<updated>2011-11-25T21:52:13Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* How */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
#* And initialize this variable as following :&lt;br /&gt;
this-&amp;gt;TestUtility = new ctkQtTestingUtility(this);&amp;lt;br /&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventObserver(&amp;quot;xml&amp;quot;, new ctkXMLEventObserver(this));&amp;lt;br /&amp;gt;&lt;br /&gt;
this-&amp;gt;TestUtility-&amp;gt;addEventSource(&amp;quot;xml&amp;quot;, new ctkXMLEventSource(this));&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Note}} you can implemente your own &#039;&#039;EventSource&#039;&#039; and &#039;&#039;EventObserver&#039;&#039;&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1258</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1258"/>
		<updated>2011-11-25T21:47:13Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
Follow these steps to add this testing framework to your application.&lt;br /&gt;
# Create a variable ctkTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&amp;lt;br /&amp;gt;{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1257</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1257"/>
		<updated>2011-11-25T21:45:32Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
Follow these steps to add this testing framework to your application.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
# Create a variable ctkTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&lt;br /&gt;
&lt;br /&gt;
{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - Below the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1256</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1256"/>
		<updated>2011-11-25T21:45:01Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
Follow these steps to add this testing framework to your application.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can see the application exemple created in CTK to have an exemple:&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
# Create a variable ctkTestingUtiliy - can be added to your mainWindow class.&lt;br /&gt;
# Create a button Redord, and link it to the ctkTestUtility slot &#039;&#039;record&#039;&#039;&lt;br /&gt;
# Create a button Play, and link it to the ctkTestingUtility slot &#039;&#039;play&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# The ctkVTKRenderView had to have the same size between the record and the playback.&lt;br /&gt;
#* To solve the issue, ctkTestingUtility record all the application property - size, state, font ... - and before a playback, if these property are differents, ask the user if he wants to load the settings.&lt;br /&gt;
&lt;br /&gt;
{{Note}} We are working on this limit to find a better solution.&lt;br /&gt;
# All the CTK Widgets are not yet tested - see the [summary table] -&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1255</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1255"/>
		<updated>2011-11-25T21:15:11Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
Adding the testing framework will allow users to recover script, but also a easy way to create tutorial or to test all the widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
Follow these steps to add this testing framework to your application. &lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1254</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1254"/>
		<updated>2011-11-25T21:09:07Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Adding the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== Why ===&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1253</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1253"/>
		<updated>2011-11-25T21:02:27Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1252</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1252"/>
		<updated>2011-11-25T21:02:00Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &amp;lt;br /&amp;gt; - Not working if the renderView has a different size&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1251</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1251"/>
		<updated>2011-11-25T21:00:42Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Better normalization {{Done}} &lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1250</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1250"/>
		<updated>2011-11-25T20:58:47Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Player/Translators Widget Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
Summury table, to know each widgets&#039; state.&amp;lt;br /&amp;gt;&lt;br /&gt;
The state can be &#039;&#039;Done&#039;&#039; : {{Done}} , &#039;&#039;Done with QtTesting issue&#039;&#039; : {{Done}}{{Doing}} , &#039;&#039;in progress&#039;&#039; : {{Doing}} , or &#039;&#039;without unit test&#039;&#039;: {{Not Done}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1249</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1249"/>
		<updated>2011-11-25T20:51:39Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1248</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1248"/>
		<updated>2011-11-25T20:50:35Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
=== Player/Translators Widget Testing ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1247</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1247"/>
		<updated>2011-11-25T20:49:23Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Builds Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1246</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1246"/>
		<updated>2011-11-25T20:48:19Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Milestones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Builds Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1245</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1245"/>
		<updated>2011-11-25T20:47:46Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* How added the testing framework into your application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Adding the testing framework into your application =&lt;br /&gt;
=== How ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1244</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1244"/>
		<updated>2011-11-25T20:47:00Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Limits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= How added the testing framework into your application =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
=== Limits ===&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1243</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1243"/>
		<updated>2011-11-25T20:46:49Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Milestones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= How added the testing framework into your application =&lt;br /&gt;
=== Milestones ===&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
== Limits ==&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1242</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1242"/>
		<updated>2011-11-25T20:44:52Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= How added the testing framework into your application =&lt;br /&gt;
== Milestones ==&lt;br /&gt;
# ...&lt;br /&gt;
# ...&lt;br /&gt;
== Limits ==&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1241</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1241"/>
		<updated>2011-11-25T20:39:46Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test - [http://www.commontk.org/index.php/File:CtkEventTranslatorPlayerWidget.png Image]&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework into your application if you&#039;re using CTK :&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;Milestones :&amp;quot;&amp;quot;&lt;br /&gt;
*# ...&lt;br /&gt;
*# ...&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1240</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1240"/>
		<updated>2011-11-25T20:38:38Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Milestones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework into your application if you&#039;re using CTK :&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;Milestones :&amp;quot;&amp;quot;&lt;br /&gt;
*# ...&lt;br /&gt;
*# ...&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - [http://www.commontk.org/index.php/File:CtkQtTestingScreenShot.png ctkQtTesting] - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1239</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1239"/>
		<updated>2011-11-25T20:29:04Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework into your application if you&#039;re using CTK :&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;Milestones :&amp;quot;&amp;quot;&lt;br /&gt;
*# ...&lt;br /&gt;
*# ...&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - ctkQtTesting - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1238</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1238"/>
		<updated>2011-11-25T20:28:16Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework into your application if you&#039;re using CTK :&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;Milestones :&amp;quot;&amp;quot;&lt;br /&gt;
*#&lt;br /&gt;
*#&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - ctkQtTesting - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1237</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1237"/>
		<updated>2011-11-25T20:25:43Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework into your application if you&#039;re using CTK :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - ctkQtTesting - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1236</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1236"/>
		<updated>2011-11-25T20:23:51Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#* Including the class :&lt;br /&gt;
#**&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
#**&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
#**&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
#**&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - ctkQtTesting - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1235</id>
		<title>Documentation/Widget testing</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Widget_testing&amp;diff=1235"/>
		<updated>2011-11-25T20:22:32Z</updated>

		<summary type="html">&lt;p&gt;Benjamin.long: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Back to CTK Documentation]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Testing of both CTK widgets and application built on top of CTK could leverage the capabilities offered by the [http://www.paraview.org/Wiki/Testing_design QtTesting library] developed by [http://www.paraview.org Paraview] folks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;How added the testing framework to CTK :&#039;&#039;&#039;&lt;br /&gt;
* Turn the variable &#039;&#039;CTK_USE_QTTESTING&#039;&#039; into &#039;&#039;ON&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;If the option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; is enabled, the build system will :&#039;&#039;&#039;&lt;br /&gt;
# Download external project QtTesting&lt;br /&gt;
# Compile the CTKQtTesting Library&lt;br /&gt;
#*; Including the class :&lt;br /&gt;
&#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; : Widget used by the Unit Test&lt;br /&gt;
&#039;&#039;ctkQtTestingUtility&#039;&#039; : Class used by the application - inherits from pqTestUtility&lt;br /&gt;
&#039;&#039;ctkXMLEventObserver&#039;&#039; : Recover the Event and write the .xml file.&lt;br /&gt;
&#039;&#039;ctkXMLEventSource&#039;&#039; : Read the .xml file and create the events.&lt;br /&gt;
# For CTKWidget - CTKVisualizationWidget - CTKCoreWidget :&lt;br /&gt;
#* Include the event translator and player required for custom widgets. (Located in the same folder as their associated widget sources)&lt;br /&gt;
# If &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is enabled: widgets EventTranslatorTests will be compiled. &lt;br /&gt;
#*&#039;&#039;These tests will use &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; and ensure that events associated with widgets can be properly recorded and played.&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{note}}&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Option &#039;&#039;&#039;CTK_USE_QTTESTING&#039;&#039;&#039; will be automatically enabled if &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; is ON&lt;br /&gt;
&lt;br /&gt;
= Milestones =&lt;br /&gt;
&lt;br /&gt;
# Integrate QtTesting has an external projects {{Done}}&lt;br /&gt;
# Add unit test to all the widget - Below, the [http://www.commontk.org/index.php/Documentation/Widget_testing#Player.2FTranslators_Widget_Testing summuray table] -&lt;br /&gt;
## Implement &#039;&#039;ctkEventTranslaterPlayerWidget&#039;&#039; {{Done}}&lt;br /&gt;
## Create custom translator/player if needed {{Doing}}&lt;br /&gt;
## Implement widgets EventTranslatorTests {{Doing}}&lt;br /&gt;
# Create an Application test - ctkQtTesting - {{Done}}&lt;br /&gt;
&lt;br /&gt;
= Issues found on QtTesting =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QSpinBox/QDoubleSpinBox :&#039;&#039;&#039; &lt;br /&gt;
** A long click on the up/down arrow -&amp;gt; just one click even if the value change severals times. &lt;br /&gt;
** Fast click -&amp;gt; Double click -&amp;gt; no effect.&lt;br /&gt;
** clik on the up/down arrow just after editing the spin Box -&amp;gt; no effect.&lt;br /&gt;
&#039;&#039;Solve : Contribution to the QtTesting by modified the pqSpinBoxEventTranslator&#039;&#039; {{Doing}} - Push on my local branch -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; In pq3DView :&#039;&#039;&#039;&lt;br /&gt;
** The scroll button has no effect - Implemented for ctk.&lt;br /&gt;
** Shift between the current/Expected image.&lt;br /&gt;
&#039;&#039;Solve : new Implementation with the ctkVTKRenderViewEventTranslator and the ctkVTKRenderViewEventPlayer :&#039;&#039; {{Done}}&lt;br /&gt;
# &#039;&#039;Change the normalization into a normalization by the widget center.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Implemented the scroll action&#039;&#039;&lt;br /&gt;
# &#039;&#039;Add a better rounded when we cast from double to int to not have shift issue.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039; QComboBox when it is editable :&#039;&#039;&#039;&lt;br /&gt;
** The hight-event &amp;quot;set_sting&amp;quot; crash if we edit the comboBox. &lt;br /&gt;
*** &#039;&#039;&#039;&#039;&#039;Exemple :&#039;&#039;&#039; If we have an item &amp;quot;foo&amp;quot;, we are going to edit the comboBox with &amp;quot;f&amp;quot;, but the item &amp;quot;f&amp;quot; doesn&#039;t exist, and the player will crash.&#039;&#039;&lt;br /&gt;
&#039;&#039;Solve : ...&#039;&#039; {{Not Done}}&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300 px heights=200px perrow=3&amp;gt;&lt;br /&gt;
Image:CtkQtTestingScreenShot.png|Simple application with recording / playing Qt testing capabilities&lt;br /&gt;
Image:CtkEventTranslatorPlayerWidget.png|Little exemple of the widget testing &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Player/Translators Widget Testing =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|-  valign=top&lt;br /&gt;
| style=&amp;quot;width:50%;&amp;quot; |&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkActionsWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAddRemoveComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkAxesWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Translator/player implemented&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkBasePopupWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;ctkPopupWidget inherit of it. So we Test Directly ctkPopupWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkButtonGroup &lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;minor issue with the currentText()&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckableHeaderView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;more test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckBoxPixmaps&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCheckablePushButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not used in Slicer&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCompleter&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCollapsibleGroupBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkColorPickerButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QSpinBox issue if used&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConsole&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;May have a problem with the command&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkConfirmExitDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkCoordinatesWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;Problem with the QSpinBox&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkCrosshairLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDateRangeWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Problem with QDateTimer&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ctkDirectoryButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;Value OK but no dialog&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDoubleSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDynamicSpacer&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogStatusMessageHandler&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Not a Widget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkErrorLogWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkExpandButton&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkFileDialog&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039; EventTranslator ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFittedTextBrowser&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;This widget just display text.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFlowLayout&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Layout are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkFontButton&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot; |&#039;&#039;QComboBox doesn&#039;t change the font&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkIconEnginePlugin&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Plugin are not tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyPreviewLabel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Not sure if something is requiered since it seems to be a label&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMaterialPropertyWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Skip all the visual effect&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuButton&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Use in Slicer ? Implemented event translator/player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkMenuComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Issue if the subMenus have no parent &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkModalityWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPathLineEdit&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039; Little issue with the listView for the fist show - As ctkMenuComboBox &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkPixmapIconEngine&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;++&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkPopupWidget&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#efabab&amp;quot; |&#039;&#039;Implemented event translator/player &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkQImageView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;---&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeSlider&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkRangeWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QDoubleSpinBox issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkScreenshotDialog&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSearchBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettings&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Need a Test ?&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsDialog&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSettingsPanel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;It&#039;s a panel so doesn&#039;t need to be tested. However, is tested in ctkSettingsDialog testing&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSignalMapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This object is not a widget and doesn&#039;t have to be tested through the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkSimpleLayoutManager&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkSliderWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
| bgcolor=&amp;quot;f4db9e&amp;quot;|&#039;&#039;QSpinBox Issue&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTestApplication&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkThumbnailWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;--&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkToolTipTrapper&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionBarsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionControlPointsItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionGradientItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionItem&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionScene&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTransferFunctionView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkTreeComboBox&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+&#039;&#039;&#039;&lt;br /&gt;
| bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;Good method ? - Spy count error&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWidgetsUtils&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;This is a utility class. Shouldn&#039;t be tested using the event translator/player mechanism&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowAbstractPagedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowButtonBoxWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowGroupBox&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowStackedWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkWorkflowWidgetStep&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
| style=&amp;quot;width:50%; &amp;quot;text-align: center; &amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKVisualizationVTKWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractMatrixWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKMatrixWidget&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKAbstractView&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;Tested in ctkVTKRenderView&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKChartView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetArrayComboBox&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKDataSetModel&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMagnifyView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKMatrixWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;use ctkMatrixWidget translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKRenderView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|bgcolor=&amp;quot;#efabab&amp;quot; | &#039;&#039;Translator/Player implemented &amp;lt;br /&amp;gt; What we want :&amp;lt;br /&amp;gt; - Wheel event {{Done}} &amp;lt;br /&amp;gt; - Record the widget size {{Done}} &amp;lt;br /&amp;gt; - Resize the view before the playback {{Doing}} &amp;lt;br /&amp;gt; - Add QMessageBox to prevent the user - BUG - {{Doing}}&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarBarWidget&lt;br /&gt;
|{{Done}}{{Doing}}&lt;br /&gt;
|&lt;br /&gt;
|bgcolor=&amp;quot;#f4db9e&amp;quot; |&#039;&#039;QSpinBox issue + key &amp;quot;.&amp;quot;(pad) on the line edit&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKScalarsToColorsWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSliceView&lt;br /&gt;
|{{Doing}}&lt;br /&gt;
|&#039;&#039;&#039;+++&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;may use the ctkVTKRenderView translator &amp;amp; player&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKSurfaceMaterialPropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKTextPropertyWidget&lt;br /&gt;
|{{Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThresholdWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKThumbnailView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKVolumePropertyWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkVTKWidgetsUtils&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; width:100%; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;CTKDICOMWidgets&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Widgets&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| State&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Priority&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMAppWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDatasetView&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMDirectoryListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImage&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMImportWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMItemTreeModel&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMListenerWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryResultsTabWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryRetrieveWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMQueryWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMServerNodeWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailGenerator&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ctkDICOMThumbnailListWidget&lt;br /&gt;
|{{Not Done}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Benjamin.long</name></author>
	</entry>
</feed>