Slicer4:QtPort/OpenDiscussions

From Slicer Wiki
Revision as of 16:18, 4 September 2010 by Kikinis (talk | contribs) (→‎Open Issues)
Jump to: navigation, search
Home < Slicer4:QtPort < OpenDiscussions

QtPort

Introduction

This page gathers discussions about code architecture/implementation/design of the Slicer port to Qt. This page is mainly for developers as it concerns the internal/implementation part of Slicer, discussions about the interface design should be listed on the UIDesign wiki page. User feedbacks should be reported on the Usability wiki page.

  • Please add your ideas/comments/remarks/feedback/suggestions/problems/... below.
  • Points will be discussed during regular TCon meetings , on the Slicer developer list and/or by email.
  • Decisions resulting from discussions should be tracked into the Mantis under the category: QtGUI.

TODO

Open Issues

  • Usability of the slider widget
    • Issue: The usability of the slider widget both in KWSlicer and QtSlicer may not provide sufficient flexibility.
    • Reporter: Andrey Fedorov
    • Motivation: Both in the KW and Qt versions of Slicer, precise adjustment of the values with the slider widget is difficult. Often, it is only possible by manually entering the value, which is not very convenient. Also, see related discussion on kwwidgets mail list. I checked the Qt version, and click on 'through' area increments by 1. In the context of Transform, 1 mm or 1 degree can bee too coarse granularity for some applications.
    • Suggestion: Discuss whether the widget can be improved in the Qt version. Possible ideas:
      • Handle additional events (Ctrl-click/Shift-click in the 'through' area) and change the position by smaller increments?
      • Introduce additional ('advanced'?) field in the Transform module, which would allow to specify the increment granularity?
    • Decision: TBD
    • Result: TBD
    • Note: TBD
  • Flexible layouts
    • Issue: Improve usability and capability of Slicer visualization views and view layouts.
    • Reporter: Andrey Fedorov
    • Motivation: The current layout configuration is in some ways restricted by not allowing to set arbitrary configuration of slice view/3D view combinations. Additionally, the types of views are restricted to only 2 types (slice or 3D).
    • Suggestion: Evaluate the applicability of the flexible layout framework used in Paraview for adoption in QtSlicer (see the screenshot attached). The nice features observed in Paraview layout framework, which in my opinion are highly applicable to Slicer are:
      • any view can be split vertically or horizontally with just a click of a button in the corner of the view -- very flexible
      • once the view is split, user is given a choice, which view should be created -- simple and intuitive
      • very cool view types that can be created: bar chart, plot, spreadsheet! Bar chart and plot features have been previously requested by Slicer users. Of course, introduction of new types will require re-thinking of the architecture.
      • let any view to do be undocked from the main Slicer screen, to allow display on a secondary monitor (needed for interventional applicaitons, more info: Andras Lasso)
    • Decision: TBD
    • Result: TBD
    • Note: TBD
    • Please see related design.
Screenshot showing some of the capabilities of the flexible layouts in Paraview GUI
  • Have 2 Modules open at the same time
    • Motivation: It would be good for the Reporting module if we could access the module as well as the volume module to change how the image displayed in the image while annotating the image at the same time
    • Suggestion: Create a pop up window which can host any module. Maybe even better: enable undocking (display in a floating, top-level window) any module GUI window.
    • Decision: TBD
    • Result: TBD
    • Note: TBD
    • See design sketch for tabbed UI panels that display multiple modules or layouts.
  • Widget to automatically set values
    • Issue: Add more features to qCTKSliderSpinBoxWidget for a user-friendly way of setting values to parameters
    • Reporter: Steve Pieper
    • Motivation: Setting parameter values is key in Slicer, it should be made easy for the user to select a value
    • Suggestion:
      • ValueIsChanging: Currently a signal (valueChanged) is emitted any time the slider is moved or the spinbox value is changed, the widget should support a Tracking property to emit another kind of signal: valueIsChanging ( similar to QAbstractSlider::tracking). Doing so would decrease the number of valueChanged signals emitted (for time-consuming slots connected to the signal).
      • Min/Max: we should think about how the min/max is handled (some cases don't have min/max and others do). We should also think about the resolution of the slider in the case when max-min is very large
      • Expert mode: we should have some good ways for expert users to quickly get to the numbers they want. Something like Control-drag and Shift-drag on the slider changing the 'gain' with respect to the value changes.
      • Name: Perhaps qCTKValueSetter is clearer? Perhaps this can be a subclass that has more of this custom behavior.
  • Templates for modules
    • Issue: Guiding the developers to develop Qt modules
    • Reporter: Alexander Yarmarkovich
    • Motivation: Consistency between all the Qt modules
    • Suggestion: Templates for the Qt modules
  • Style and naming conventions
    • Issue: What indentation and variable/method naming to use in different classes
    • Reporter: Alexander Yarmarkovich
    • Motivation: Consistency and readability of code
    • Suggestion: Follow convention of superclass see Slicer3 style conventions
  • Widget naming conventions
    • Issue: How do we name custom widgets that we want developers to use for sake of consistency, application interface usability, etc?
    • Reporter: wjp
    • Motivation: Widgets like the multi-column list being developed in the Reporting Module should be made available to all developers -- the custom widget will contain options for 'select all', 'deselect all', 'delete selected', 'make all visible', 'make all invisible' (with accompanying logic), which can be exposed or hidden. What are we calling these classes, and how will we promote their use?
  • General Coding issues
    • Issues:
      • using private classes vs public
      • where initialization should happen
      • using separate slots for each parameter vs one slot
      • logic observing only parameter node
  • UI Design issues
    • Issue: Please organize the "Window/Level Presets" (drop the word editor) in analogy to the LUT's? CT, PET, MR, Misc. as the main categories and then the names with the little icons as a list.
      • See also, the image to the right:
Screenshot showing this
    • Issue: Some modules have help tabs, but not acknowledgment tabs. Acknowledgements are extremely important, and we must both port them and and enable them forward looking.
SlicerHelpExample.png
SlicerAcknowledgementExample.png

Closed Issues

  • Module Logic
    • Issue: Change qSlicerModuleLogic into vtkSlicerModuleLogic
    • Reporter: Alexander Yarmarkovich
    • Motivation: A lot of slicer logics already exist, using qSlicerModuleLogic implies to wrap this logics. Why not directly use the vtkSlicerModuleLogic?
    • Decision: Talked by email and over the phone during the Tuesday TCon (01/26/10). The suggestion has been accepted.
    • Result: The change has been committed on 01/28/10 (r11850, r11852, r11853, r11854)
    • Note: While new module logics must derive from vtkSlicerModuleLogic, logics deriving from vtkSlicerLogic are supported for backward compatibility reasons (the core module logics derive from vtkSlicerLogic).