summaryrefslogtreecommitdiff
path: root/doc/source/modules/gui
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/modules/gui')
-rw-r--r--doc/source/modules/gui/console.rst9
-rw-r--r--doc/source/modules/gui/data/arraytable.rst23
-rw-r--r--doc/source/modules/gui/data/dataviewer.rst7
-rw-r--r--doc/source/modules/gui/data/dataviewerframe.rst7
-rw-r--r--doc/source/modules/gui/data/img/DataViewer.pngbin0 -> 37627 bytes
-rw-r--r--doc/source/modules/gui/data/img/DataViewerFrame.pngbin0 -> 41699 bytes
-rw-r--r--doc/source/modules/gui/data/img/NumpyAxesSelector.pngbin0 -> 9537 bytes
-rw-r--r--doc/source/modules/gui/data/index.rst19
-rw-r--r--doc/source/modules/gui/data/numpyaxesselector.rst7
-rw-r--r--doc/source/modules/gui/data/textformatter.rst7
-rw-r--r--doc/source/modules/gui/designer.rst1
-rw-r--r--doc/source/modules/gui/fit/backgroundwidget.rst27
-rw-r--r--doc/source/modules/gui/fit/fitwidget.rst18
-rw-r--r--doc/source/modules/gui/fit/img/bgwidget.pngbin0 -> 68544 bytes
-rw-r--r--doc/source/modules/gui/fit/index.rst32
-rw-r--r--doc/source/modules/gui/hdf5/examples_hdf5widget.rst6
-rw-r--r--doc/source/modules/gui/hdf5/getting_started.rst226
-rw-r--r--doc/source/modules/gui/hdf5/h5node.rst9
-rw-r--r--doc/source/modules/gui/hdf5/hdf5contextmenuevent.rst9
-rw-r--r--doc/source/modules/gui/hdf5/hdf5treemodel.rst9
-rw-r--r--doc/source/modules/gui/hdf5/hdf5treeview.rst9
-rw-r--r--doc/source/modules/gui/hdf5/img/Hdf5Example.pngbin0 -> 98584 bytes
-rw-r--r--doc/source/modules/gui/hdf5/img/Hdf5TreeView.pngbin0 -> 38565 bytes
-rw-r--r--doc/source/modules/gui/hdf5/index.rst46
-rw-r--r--doc/source/modules/gui/hdf5/nexussortfilterproxymodel.rst9
-rw-r--r--doc/source/modules/gui/icons.rst346
-rw-r--r--doc/source/modules/gui/index.rst21
-rw-r--r--doc/source/modules/gui/plot/dev.rst204
-rw-r--r--doc/source/modules/gui/plot/getting_started.rst491
-rw-r--r--doc/source/modules/gui/plot/imageview.rst15
-rw-r--r--doc/source/modules/gui/plot/img/ImageView.pngbin0 -> 174050 bytes
-rw-r--r--doc/source/modules/gui/plot/img/LimitsToolBar.pngbin0 -> 2331 bytes
-rw-r--r--doc/source/modules/gui/plot/img/Plot1D.pngbin0 -> 26947 bytes
-rw-r--r--doc/source/modules/gui/plot/img/Plot2D.pngbin0 -> 59679 bytes
-rw-r--r--doc/source/modules/gui/plot/img/PlotWidget.pngbin0 -> 32084 bytes
-rw-r--r--doc/source/modules/gui/plot/img/PlotWindow.pngbin0 -> 47112 bytes
-rw-r--r--doc/source/modules/gui/plot/img/PositionInfo.pngbin0 -> 3401 bytes
-rw-r--r--doc/source/modules/gui/plot/img/StackView.pngbin0 -> 126723 bytes
-rw-r--r--doc/source/modules/gui/plot/img/StackViewMainWindow.pngbin0 -> 126821 bytes
-rw-r--r--doc/source/modules/gui/plot/img/colorScale.pngbin0 -> 1653 bytes
-rw-r--r--doc/source/modules/gui/plot/img/colorScaleBar.pngbin0 -> 4667 bytes
-rw-r--r--doc/source/modules/gui/plot/img/fftAction0.pngbin0 -> 91165 bytes
-rw-r--r--doc/source/modules/gui/plot/img/fftAction1.pngbin0 -> 38847 bytes
-rw-r--r--doc/source/modules/gui/plot/img/linearColorbar.pngbin0 -> 6585 bytes
-rw-r--r--doc/source/modules/gui/plot/img/logColorbar.pngbin0 -> 8575 bytes
-rw-r--r--doc/source/modules/gui/plot/img/netCounts.pngbin0 -> 18711 bytes
-rw-r--r--doc/source/modules/gui/plot/img/plot_and_backend.pngbin0 -> 39491 bytes
-rw-r--r--doc/source/modules/gui/plot/img/rawCounts.pngbin0 -> 18437 bytes
-rw-r--r--doc/source/modules/gui/plot/img/roiwidget.pngbin0 -> 38771 bytes
-rw-r--r--doc/source/modules/gui/plot/img/shiftAction0.pngbin0 -> 29092 bytes
-rw-r--r--doc/source/modules/gui/plot/img/shiftAction3.pngbin0 -> 25949 bytes
-rw-r--r--doc/source/modules/gui/plot/img/tickbar.pngbin0 -> 2080 bytes
-rw-r--r--doc/source/modules/gui/plot/index.rst130
-rw-r--r--doc/source/modules/gui/plot/items.rst63
-rw-r--r--doc/source/modules/gui/plot/plot.rst16
-rw-r--r--doc/source/modules/gui/plot/plotactions.rst20
-rw-r--r--doc/source/modules/gui/plot/plotactions_examples.rst93
-rw-r--r--doc/source/modules/gui/plot/plottools.rst36
-rw-r--r--doc/source/modules/gui/plot/plotwidget.rst173
-rw-r--r--doc/source/modules/gui/plot/plotwindow.rst30
-rw-r--r--doc/source/modules/gui/plot/profile.rst20
-rw-r--r--doc/source/modules/gui/plot/roi.rst17
-rw-r--r--doc/source/modules/gui/plot/stackview.rst24
-rw-r--r--doc/source/modules/gui/plot3d/actions.rst10
-rw-r--r--doc/source/modules/gui/plot3d/dev.rst38
-rw-r--r--doc/source/modules/gui/plot3d/glutils.rst67
-rw-r--r--doc/source/modules/gui/plot3d/img/Plot3DWidget.pngbin0 -> 11811 bytes
-rw-r--r--doc/source/modules/gui/plot3d/img/Plot3DWindow.pngbin0 -> 20571 bytes
-rw-r--r--doc/source/modules/gui/plot3d/img/SFViewParamTree.pngbin0 -> 19705 bytes
-rw-r--r--doc/source/modules/gui/plot3d/img/ScalarFieldView.pngbin0 -> 42407 bytes
-rw-r--r--doc/source/modules/gui/plot3d/index.rst83
-rw-r--r--doc/source/modules/gui/plot3d/plot3dwidget.rst15
-rw-r--r--doc/source/modules/gui/plot3d/plot3dwindow.rst15
-rw-r--r--doc/source/modules/gui/plot3d/scalarfieldview.rst50
-rw-r--r--doc/source/modules/gui/plot3d/scene.rst84
-rw-r--r--doc/source/modules/gui/plot3d/sfviewparamtree.rst13
-rw-r--r--doc/source/modules/gui/plot3d/toolbars.rst29
-rw-r--r--doc/source/modules/gui/plot3d/utils.rst12
-rw-r--r--doc/source/modules/gui/plot3d/viewer3dvolume_example.rst7
-rw-r--r--doc/source/modules/gui/qt.rst8
-rw-r--r--doc/source/modules/gui/update_icons_rst.py90
-rw-r--r--doc/source/modules/gui/widgets/framebrowser.rst19
-rw-r--r--doc/source/modules/gui/widgets/index.rst19
-rw-r--r--doc/source/modules/gui/widgets/periodictable.rst37
-rw-r--r--doc/source/modules/gui/widgets/tablewidget.rst42
-rw-r--r--doc/source/modules/gui/widgets/threadpoolpushbutton.rst14
-rw-r--r--doc/source/modules/gui/widgets/waitingpushbutton.rst13
87 files changed, 2844 insertions, 0 deletions
diff --git a/doc/source/modules/gui/console.rst b/doc/source/modules/gui/console.rst
new file mode 100644
index 0000000..5c8398e
--- /dev/null
+++ b/doc/source/modules/gui/console.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`console`: IPython console widgets
+---------------------------------------
+
+.. automodule:: silx.gui.console
+ :members:
+ :exclude-members: main, sizeHint
diff --git a/doc/source/modules/gui/data/arraytable.rst b/doc/source/modules/gui/data/arraytable.rst
new file mode 100644
index 0000000..b929cd5
--- /dev/null
+++ b/doc/source/modules/gui/data/arraytable.rst
@@ -0,0 +1,23 @@
+
+.. currentmodule:: silx.gui.data
+
+:mod:`ArrayTableWidget`: Browsing Numpy arrays
+----------------------------------------------
+
+.. automodule:: silx.gui.data.ArrayTableWidget
+
+Widget
+++++++
+
+.. autoclass:: silx.gui.data.ArrayTableWidget.ArrayTableWidget
+ :members:
+
+
+
+Data model
+++++++++++
+
+.. automodule:: silx.gui.data.ArrayTableModel
+
+.. autoclass:: silx.gui.data.ArrayTableModel.ArrayTableModel
+ :exclude-members: data, rowCount, columnCount, headerData, flags, setData,
diff --git a/doc/source/modules/gui/data/dataviewer.rst b/doc/source/modules/gui/data/dataviewer.rst
new file mode 100644
index 0000000..7f87c49
--- /dev/null
+++ b/doc/source/modules/gui/data/dataviewer.rst
@@ -0,0 +1,7 @@
+:mod:`DataViewer`: Widget to display any kind of data
+-----------------------------------------------------
+
+.. automodule:: silx.gui.data.DataViewer
+
+.. autoclass:: DataViewer
+ :members:
diff --git a/doc/source/modules/gui/data/dataviewerframe.rst b/doc/source/modules/gui/data/dataviewerframe.rst
new file mode 100644
index 0000000..12ccfa0
--- /dev/null
+++ b/doc/source/modules/gui/data/dataviewerframe.rst
@@ -0,0 +1,7 @@
+:mod:`DataViewerFrame`: Widget to display any kind of data
+----------------------------------------------------------
+
+.. automodule:: silx.gui.data.DataViewerFrame
+
+.. autoclass:: DataViewerFrame
+ :members:
diff --git a/doc/source/modules/gui/data/img/DataViewer.png b/doc/source/modules/gui/data/img/DataViewer.png
new file mode 100644
index 0000000..719c822
--- /dev/null
+++ b/doc/source/modules/gui/data/img/DataViewer.png
Binary files differ
diff --git a/doc/source/modules/gui/data/img/DataViewerFrame.png b/doc/source/modules/gui/data/img/DataViewerFrame.png
new file mode 100644
index 0000000..88dc09a
--- /dev/null
+++ b/doc/source/modules/gui/data/img/DataViewerFrame.png
Binary files differ
diff --git a/doc/source/modules/gui/data/img/NumpyAxesSelector.png b/doc/source/modules/gui/data/img/NumpyAxesSelector.png
new file mode 100644
index 0000000..c508b80
--- /dev/null
+++ b/doc/source/modules/gui/data/img/NumpyAxesSelector.png
Binary files differ
diff --git a/doc/source/modules/gui/data/index.rst b/doc/source/modules/gui/data/index.rst
new file mode 100644
index 0000000..e70138d
--- /dev/null
+++ b/doc/source/modules/gui/data/index.rst
@@ -0,0 +1,19 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`data`: Widgets for data visualization
+-------------------------------------------
+
+.. automodule:: silx.gui.data
+
+
+Public modules:
+
+.. toctree::
+ :maxdepth: 2
+
+ arraytable.rst
+ dataviewerframe.rst
+ dataviewer.rst
+ numpyaxesselector.rst
+ textformatter.rst
diff --git a/doc/source/modules/gui/data/numpyaxesselector.rst b/doc/source/modules/gui/data/numpyaxesselector.rst
new file mode 100644
index 0000000..e1ab952
--- /dev/null
+++ b/doc/source/modules/gui/data/numpyaxesselector.rst
@@ -0,0 +1,7 @@
+:mod:`NumpyAxesSelector`:Widget to select a view from a numpy array
+-------------------------------------------------------------------
+
+.. automodule:: silx.gui.data.NumpyAxesSelector
+
+.. autoclass:: NumpyAxesSelector
+ :members:
diff --git a/doc/source/modules/gui/data/textformatter.rst b/doc/source/modules/gui/data/textformatter.rst
new file mode 100644
index 0000000..6903f80
--- /dev/null
+++ b/doc/source/modules/gui/data/textformatter.rst
@@ -0,0 +1,7 @@
+:mod:`TextFormatter`: Common text formatter
+-------------------------------------------
+
+.. automodule:: silx.gui.data.TextFormatter
+
+.. autoclass:: TextFormatter
+ :members:
diff --git a/doc/source/modules/gui/designer.rst b/doc/source/modules/gui/designer.rst
new file mode 100644
index 0000000..fc52e1f
--- /dev/null
+++ b/doc/source/modules/gui/designer.rst
@@ -0,0 +1 @@
+.. include:: ../../../../qtdesigner_plugins/README.rst
diff --git a/doc/source/modules/gui/fit/backgroundwidget.rst b/doc/source/modules/gui/fit/backgroundwidget.rst
new file mode 100644
index 0000000..eea2052
--- /dev/null
+++ b/doc/source/modules/gui/fit/backgroundwidget.rst
@@ -0,0 +1,27 @@
+
+.. currentmodule:: silx.gui.fit
+
+:mod:`BackgroundWidget`
+=======================
+
+.. automodule:: silx.gui.fit.BackgroundWidget
+
+
+.. |imgBGWidget| image:: ./img/bgwidget.png
+ :height: 300px
+ :align: middle
+
+|imgBGWidget|
+
+
+API
+---
+
+.. currentmodule:: silx.gui.fit.BackgroundWidget
+
+.. autoclass:: BackgroundWidget
+ :members:
+
+.. autoclass:: BackgroundDialog
+ :members:
+
diff --git a/doc/source/modules/gui/fit/fitwidget.rst b/doc/source/modules/gui/fit/fitwidget.rst
new file mode 100644
index 0000000..5eb0280
--- /dev/null
+++ b/doc/source/modules/gui/fit/fitwidget.rst
@@ -0,0 +1,18 @@
+
+.. currentmodule:: silx.gui.fit
+
+:mod:`FitWidget`
+================
+
+.. automodule:: silx.gui.fit.FitWidget
+
+For a tutorial on how to use :class:`FitWidget`, see :ref:`fitwidget-tutorial`.
+
+API
+---
+
+.. currentmodule:: silx.gui.fit.FitWidget
+
+.. autoclass:: FitWidget
+ :members: __init__, configdialogs, setData, associateConfigDialog
+
diff --git a/doc/source/modules/gui/fit/img/bgwidget.png b/doc/source/modules/gui/fit/img/bgwidget.png
new file mode 100644
index 0000000..724eadb
--- /dev/null
+++ b/doc/source/modules/gui/fit/img/bgwidget.png
Binary files differ
diff --git a/doc/source/modules/gui/fit/index.rst b/doc/source/modules/gui/fit/index.rst
new file mode 100644
index 0000000..67c22a1
--- /dev/null
+++ b/doc/source/modules/gui/fit/index.rst
@@ -0,0 +1,32 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`fit`: Fit widgets
+------------------------
+
+.. automodule:: silx.gui.fit
+
+Snapshot of the widgets:
+
+
+.. |imgFitWidget| image:: ../../../Tutorials/img/fitwidget4.png
+ :height: 150px
+ :align: middle
+
+.. |imgBGWidget| image:: ./img/bgwidget.png
+ :height: 150px
+ :align: middle
+
+=================== ==========================
+|imgFitWidget| |imgBGWidget|
+:class:`FitWidget` :class:`BackgroundWidget`
+=================== ==========================
+
+Public modules:
+
+.. toctree::
+ :maxdepth: 2
+
+ fitwidget.rst
+ backgroundwidget.rst
+
diff --git a/doc/source/modules/gui/hdf5/examples_hdf5widget.rst b/doc/source/modules/gui/hdf5/examples_hdf5widget.rst
new file mode 100644
index 0000000..90f218f
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/examples_hdf5widget.rst
@@ -0,0 +1,6 @@
+hdf5widget.py
+=============
+
+Sample code demonstrating :mod:`silx.gui.hdf5` widgets:
+
+.. literalinclude:: ../../../../../examples/hdf5widget.py
diff --git a/doc/source/modules/gui/hdf5/getting_started.rst b/doc/source/modules/gui/hdf5/getting_started.rst
new file mode 100644
index 0000000..e843cac
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/getting_started.rst
@@ -0,0 +1,226 @@
+.. currentmodule:: silx.gui.hdf5
+
+Getting started with HDF5 widgets
+=================================
+
+Silx provides an implementation of a tree model and a tree view for HDF5 files.
+The aim of this tree is to provide a convenient read-only widget for a big
+amount of data and supporting file formats often used in synchrotrons.
+
+This page provides some source code to show how to use this widget.
+
+Commented source code
+---------------------
+
+Import and create your tree view
+++++++++++++++++++++++++++++++++
+
+HDF5 widgets are all exposed by the package `silx.gui.hdf5`.
+
+.. testsetup:: *
+
+ from silx.gui import qt
+ app = qt.QApplication([])
+ import silx.gui.hdf5
+ treeview = silx.gui.hdf5.Hdf5TreeView()
+ header = treeview.header()
+ model = treeview.findHdf5TreeModel()
+
+.. testcode::
+
+ import silx.gui.hdf5
+ treeview = silx.gui.hdf5.Hdf5TreeView()
+
+Custom your tree view
++++++++++++++++++++++
+
+The tree view can be customized to be sorted by default.
+
+.. testcode::
+
+ # Sort content of files by time or name
+ treeview.setSortingEnabled(True)
+
+The model can be customized to support mouse interaction.
+A convenient method :meth:`Hdf5TreeView.findHdf5TreeModel` returns the main
+HDF5 model used through proxy models.
+
+.. testcode::
+
+ model = treeview.findHdf5TreeModel()
+
+ # Avoid the user to drop file in the widget
+ model.setFileDropEnabled(False)
+
+ # Allow the user to reorder files with drag-and-drop
+ model.setFileMoveEnabled(True)
+
+The tree view is also provided with a custom header which help to choose
+visible columns.
+
+.. testcode::
+
+ header = treeview.header()
+
+ # Select displayed columns
+ column_ids = [treeview.findHdf5TreeModel().NAME_COLUMN]
+ header.setSections(column_ids)
+
+ # Do not allow the user to custom visible columns
+ header.setEnableHideColumnsPopup(False)
+
+Add a file by name
+++++++++++++++++++
+
+The model can be used to add HDF5. It is internally using
+:func:`silx.io.open`.
+
+.. code-block:: python
+
+ model.insertFile("test.h5")
+
+Add a file with h5py
+++++++++++++++++++++
+
+The model internally uses :mod:`h5py` object API. We can use h5py file, group
+and dataset as it is.
+
+.. code-block:: python
+
+ import h5py
+ h5 = h5py.File("test.h5")
+
+ # We can use file
+ model.insertH5pyObject(h5)
+
+ # or group or dataset
+ model.insertH5pyObject(h5["group1"])
+ model.insertH5pyObject(h5["group1/dataset50"])
+
+Add a file with silx
+++++++++++++++++++++
+
+Silx also provides an input API. It supports HDF5 files through :mod:`h5py`.
+
+.. code-block:: python
+
+ import silx.io
+
+ # We can load HDF5 files
+ model.insertH5pyObject(silx.io.open("test.h5"))
+
+ # or Spec files
+ model.insertH5pyObject(silx.io.open("test.dat"))
+
+
+Custom context menu
++++++++++++++++++++
+
+The :class:`Hdf5TreeView` provides a callback API to populate the context menu.
+The callback receives a :class:`Hdf5ContextMenuEvent` every time the user
+requests the context menu. The event contains :class:`H5Node` objects which wrap
+h5py objects with extra information.
+
+.. testcode::
+
+ def my_action_callback(obj):
+ # do what you want
+ pass
+
+ def my_callback(event):
+ objects = list(event.source().selectedH5Nodes())
+ obj = objects[0] # for single selection
+
+ menu = event.menu()
+ if obj.ntype is h5py.Dataset:
+ action = qt.QAction("My funky action on datasets only", menu)
+ action.triggered.connect(lambda: my_action_callback(obj))
+ menu.addAction(action)
+
+ treeview.addContextMenuCallback(my_callback)
+
+Capture selection
++++++++++++++++++
+
+The :class:`Hdf5TreeView` widget provides default Qt signals inherited from
+`QAbstractItemView`.
+
+- `activated`:
+ This signal is emitted when the item specified by index is
+ activated by the user. How to activate items depends on the platform;
+ e.g., by single- or double-clicking the item, or by pressing the
+ Return or Enter key when the item is current.
+- `clicked`:
+ This signal is emitted when a mouse button is clicked. The item the mouse
+ was clicked on is specified by index. The signal is only emitted when the
+ index is valid.
+- `doubleClicked`:
+ This signal is emitted when a mouse button is double-clicked. The item
+ the mouse was double-clicked on is specified by index. The signal is
+ only emitted when the index is valid.
+- `entered`:
+ This signal is emitted when the mouse cursor enters the item specified by
+ index. Mouse tracking needs to be enabled for this feature to work.
+- `pressed`:
+ This signal is emitted when a mouse button is pressed. The item the mouse
+ was pressed on is specified by index. The signal is only emitted when the
+ index is valid.
+
+The method :meth:`Hdf5TreeView.selectedH5Nodes` returns an iterator of :class:`H5Node`
+objects which wrap h5py objects with extra information.
+
+.. testcode::
+
+ def my_callback(index):
+ objects = list(treeview.selectedH5Nodes())
+ obj = objects[0] # for single selection
+
+ print(obj)
+
+ print(obj.basename) # not provided by h5py
+ print(obj.name)
+ print(obj.file.filename)
+
+ print(obj.local_basename) # not provided by h5py
+ print(obj.local_name) # not provided by h5py
+ print(obj.local_file.filename) # not provided by h5py
+
+ print(obj.attrs)
+
+ if obj.ntype is h5py.Dataset:
+ print(obj.dtype)
+ print(obj.shape)
+ print(obj.value) # create a copy of data of the dataset
+ print(obj.h5py_object) # reference to the Hdf5 dataset (or group)
+
+ treeview.clicked.connect(my_callback)
+
+Example
+-------
+
+.. toctree::
+ :hidden:
+
+ examples_hdf5widget.rst
+
+The :doc:`examples_hdf5widget` sample code provides an example of properties of
+the view, the model and the header.
+
+.. image:: img/Hdf5Example.png
+ :height: 200px
+ :width: 400px
+ :alt: Example for HDF5TreeView features
+ :align: center
+
+Source code: :doc:`examples_hdf5widget`.
+
+After installing `silx` and downloading the script, you can start it from the
+command prompt:
+
+.. code-block:: bash
+
+ python hdf5widget.py <files>
+
+This example loads files added to the command line, or files dropped from the
+file system. It also provides a GUI to display test files created
+programmatically.
diff --git a/doc/source/modules/gui/hdf5/h5node.rst b/doc/source/modules/gui/hdf5/h5node.rst
new file mode 100644
index 0000000..a57bbe7
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/h5node.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui.hdf5
+
+:class:`H5Node` class
+---------------------
+
+.. autoclass:: H5Node
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/hdf5/hdf5contextmenuevent.rst b/doc/source/modules/gui/hdf5/hdf5contextmenuevent.rst
new file mode 100644
index 0000000..972a267
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/hdf5contextmenuevent.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui.hdf5
+
+:class:`Hdf5ContextMenuEvent` class
+-----------------------------------
+
+.. autoclass:: Hdf5ContextMenuEvent
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/hdf5/hdf5treemodel.rst b/doc/source/modules/gui/hdf5/hdf5treemodel.rst
new file mode 100644
index 0000000..1269e7d
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/hdf5treemodel.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui.hdf5
+
+:class:`Hdf5TreeModel` class
+----------------------------
+
+.. autoclass:: Hdf5TreeModel
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/hdf5/hdf5treeview.rst b/doc/source/modules/gui/hdf5/hdf5treeview.rst
new file mode 100644
index 0000000..cd44f74
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/hdf5treeview.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui.hdf5
+
+:class:`Hdf5TreeView` class
+---------------------------
+
+.. autoclass:: Hdf5TreeView
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/hdf5/img/Hdf5Example.png b/doc/source/modules/gui/hdf5/img/Hdf5Example.png
new file mode 100644
index 0000000..2b1ed0b
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/img/Hdf5Example.png
Binary files differ
diff --git a/doc/source/modules/gui/hdf5/img/Hdf5TreeView.png b/doc/source/modules/gui/hdf5/img/Hdf5TreeView.png
new file mode 100644
index 0000000..2010069
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/img/Hdf5TreeView.png
Binary files differ
diff --git a/doc/source/modules/gui/hdf5/index.rst b/doc/source/modules/gui/hdf5/index.rst
new file mode 100644
index 0000000..cd2c4eb
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/index.rst
@@ -0,0 +1,46 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`hdf5`: HDF5 widgets
+=========================
+
+.. toctree::
+ :hidden:
+
+ getting_started.rst
+
+.. currentmodule:: silx.gui.hdf5
+
+.. automodule:: silx.gui.hdf5
+
+For an introduction to the widgets of this package, see :doc:`getting_started`.
+
+Widgets gallery
+---------------
+
+.. |imgHdf5TreeView| image:: img/Hdf5TreeView.png
+ :height: 150px
+ :align: middle
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Widget
+ - Description
+ * - |imgHdf5TreeView|
+ - :class:`Hdf5TreeView` is the base Qt widget providing a tree view of
+ multiple HDF5 files, or assimilated file with an adapter.
+
+
+Public modules
+--------------
+
+.. toctree::
+ :maxdepth: 2
+
+ hdf5treeview.rst
+ hdf5treemodel.rst
+ hdf5contextmenuevent.rst
+ h5node.rst
+ nexussortfilterproxymodel.rst
diff --git a/doc/source/modules/gui/hdf5/nexussortfilterproxymodel.rst b/doc/source/modules/gui/hdf5/nexussortfilterproxymodel.rst
new file mode 100644
index 0000000..ec2a8a9
--- /dev/null
+++ b/doc/source/modules/gui/hdf5/nexussortfilterproxymodel.rst
@@ -0,0 +1,9 @@
+
+.. currentmodule:: silx.gui.hdf5
+
+:class:`NexusSortFilterProxyModel` class
+----------------------------------------
+
+.. autoclass:: NexusSortFilterProxyModel
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/icons.rst b/doc/source/modules/gui/icons.rst
new file mode 100644
index 0000000..61ea71d
--- /dev/null
+++ b/doc/source/modules/gui/icons.rst
@@ -0,0 +1,346 @@
+
+.. AUTOMATICALLY GENERATED FILE DO NOT EDIT
+ Use update_icons_rst.py script instead
+
+.. currentmodule:: silx.gui
+
+:mod:`icons`: Set of icons
+--------------------------
+
+.. automodule:: silx.gui.icons
+ :members:
+
+Available icons
++++++++++++++++
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Icon
+ - Name
+ * - |3d-plane-normal-x|
+ - 3d-plane-normal-x
+ * - |3d-plane-normal-y|
+ - 3d-plane-normal-y
+ * - |3d-plane-normal-z|
+ - 3d-plane-normal-z
+ * - |3d-plane|
+ - 3d-plane
+ * - |arrow-keys|
+ - arrow-keys
+ * - |camera|
+ - camera
+ * - |clipboard|
+ - clipboard
+ * - |close|
+ - close
+ * - |colormap|
+ - colormap
+ * - |crop|
+ - crop
+ * - |crosshair|
+ - crosshair
+ * - |cube-back|
+ - cube-back
+ * - |cube-bottom|
+ - cube-bottom
+ * - |cube-front|
+ - cube-front
+ * - |cube-left|
+ - cube-left
+ * - |cube-right|
+ - cube-right
+ * - |cube-top|
+ - cube-top
+ * - |cube|
+ - cube
+ * - |document-open|
+ - document-open
+ * - |document-print|
+ - document-print
+ * - |document-save|
+ - document-save
+ * - |draw-brush|
+ - draw-brush
+ * - |draw-pencil|
+ - draw-pencil
+ * - |draw-rubber|
+ - draw-rubber
+ * - |edit-copy|
+ - edit-copy
+ * - |first|
+ - first
+ * - |folder|
+ - folder
+ * - |image-mask|
+ - image-mask
+ * - |image-select-add|
+ - image-select-add
+ * - |image-select-box|
+ - image-select-box
+ * - |image-select-brush|
+ - image-select-brush
+ * - |image-select-erase-rubber|
+ - image-select-erase-rubber
+ * - |image-select-erase|
+ - image-select-erase
+ * - |image|
+ - image
+ * - |item-0dim|
+ - item-0dim
+ * - |item-1dim|
+ - item-1dim
+ * - |item-2dim|
+ - item-2dim
+ * - |item-3dim|
+ - item-3dim
+ * - |item-ndim|
+ - item-ndim
+ * - |item-object|
+ - item-object
+ * - |last|
+ - last
+ * - |math-average|
+ - math-average
+ * - |math-derive|
+ - math-derive
+ * - |math-energy|
+ - math-energy
+ * - |math-fit|
+ - math-fit
+ * - |math-normalize|
+ - math-normalize
+ * - |math-peak-reset|
+ - math-peak-reset
+ * - |math-peak-search|
+ - math-peak-search
+ * - |math-peak|
+ - math-peak
+ * - |math-sigma|
+ - math-sigma
+ * - |math-smooth|
+ - math-smooth
+ * - |math-substract|
+ - math-substract
+ * - |math-swap-sign|
+ - math-swap-sign
+ * - |math-ymin-to-zero|
+ - math-ymin-to-zero
+ * - |next|
+ - next
+ * - |normal|
+ - normal
+ * - |pixel-intensities|
+ - pixel-intensities
+ * - |plot-grid|
+ - plot-grid
+ * - |plot-roi-above|
+ - plot-roi-above
+ * - |plot-roi-below|
+ - plot-roi-below
+ * - |plot-roi-between|
+ - plot-roi-between
+ * - |plot-roi-reset|
+ - plot-roi-reset
+ * - |plot-roi|
+ - plot-roi
+ * - |plot-toggle-points|
+ - plot-toggle-points
+ * - |plot-widget|
+ - plot-widget
+ * - |plot-window-image|
+ - plot-window-image
+ * - |plot-window|
+ - plot-window
+ * - |plot-xauto|
+ - plot-xauto
+ * - |plot-xlog|
+ - plot-xlog
+ * - |plot-yauto|
+ - plot-yauto
+ * - |plot-ydown|
+ - plot-ydown
+ * - |plot-ylog|
+ - plot-ylog
+ * - |plot-yup|
+ - plot-yup
+ * - |previous|
+ - previous
+ * - |profile1D|
+ - profile1D
+ * - |profile2D|
+ - profile2D
+ * - |remove|
+ - remove
+ * - |rudder|
+ - rudder
+ * - |selected|
+ - selected
+ * - |shape-circle-solid|
+ - shape-circle-solid
+ * - |shape-circle|
+ - shape-circle
+ * - |shape-diagonal|
+ - shape-diagonal
+ * - |shape-ellipse-solid|
+ - shape-ellipse-solid
+ * - |shape-ellipse|
+ - shape-ellipse
+ * - |shape-horizontal|
+ - shape-horizontal
+ * - |shape-polygon|
+ - shape-polygon
+ * - |shape-rectangle|
+ - shape-rectangle
+ * - |shape-square|
+ - shape-square
+ * - |shape-vertical|
+ - shape-vertical
+ * - |silx|
+ - silx
+ * - |sliders-off|
+ - sliders-off
+ * - |sliders-on|
+ - sliders-on
+ * - |spec|
+ - spec
+ * - |test-png|
+ - test-png
+ * - |view-1d|
+ - view-1d
+ * - |view-2d-stack|
+ - view-2d-stack
+ * - |view-2d|
+ - view-2d
+ * - |view-3d|
+ - view-3d
+ * - |view-fullscreen|
+ - view-fullscreen
+ * - |view-nofullscreen|
+ - view-nofullscreen
+ * - |view-raw|
+ - view-raw
+ * - |view-refresh|
+ - view-refresh
+ * - |view-text|
+ - view-text
+ * - |window-new|
+ - window-new
+ * - |zoom-in|
+ - zoom-in
+ * - |zoom-original|
+ - zoom-original
+ * - |zoom-out|
+ - zoom-out
+ * - |zoom|
+ - zoom
+
+.. |3d-plane-normal-x| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-x.png
+.. |3d-plane-normal-y| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-y.png
+.. |3d-plane-normal-z| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-z.png
+.. |3d-plane| image:: ../../../../silx/resources/gui/icons/3d-plane.png
+.. |arrow-keys| image:: ../../../../silx/resources/gui/icons/arrow-keys.png
+.. |camera| image:: ../../../../silx/resources/gui/icons/camera.png
+.. |clipboard| image:: ../../../../silx/resources/gui/icons/clipboard.png
+.. |close| image:: ../../../../silx/resources/gui/icons/close.png
+.. |colormap| image:: ../../../../silx/resources/gui/icons/colormap.png
+.. |crop| image:: ../../../../silx/resources/gui/icons/crop.png
+.. |crosshair| image:: ../../../../silx/resources/gui/icons/crosshair.png
+.. |cube-back| image:: ../../../../silx/resources/gui/icons/cube-back.png
+.. |cube-bottom| image:: ../../../../silx/resources/gui/icons/cube-bottom.png
+.. |cube-front| image:: ../../../../silx/resources/gui/icons/cube-front.png
+.. |cube-left| image:: ../../../../silx/resources/gui/icons/cube-left.png
+.. |cube-right| image:: ../../../../silx/resources/gui/icons/cube-right.png
+.. |cube-top| image:: ../../../../silx/resources/gui/icons/cube-top.png
+.. |cube| image:: ../../../../silx/resources/gui/icons/cube.png
+.. |document-open| image:: ../../../../silx/resources/gui/icons/document-open.png
+.. |document-print| image:: ../../../../silx/resources/gui/icons/document-print.png
+.. |document-save| image:: ../../../../silx/resources/gui/icons/document-save.png
+.. |draw-brush| image:: ../../../../silx/resources/gui/icons/draw-brush.png
+.. |draw-pencil| image:: ../../../../silx/resources/gui/icons/draw-pencil.png
+.. |draw-rubber| image:: ../../../../silx/resources/gui/icons/draw-rubber.png
+.. |edit-copy| image:: ../../../../silx/resources/gui/icons/edit-copy.png
+.. |first| image:: ../../../../silx/resources/gui/icons/first.png
+.. |folder| image:: ../../../../silx/resources/gui/icons/folder.png
+.. |image-mask| image:: ../../../../silx/resources/gui/icons/image-mask.png
+.. |image-select-add| image:: ../../../../silx/resources/gui/icons/image-select-add.png
+.. |image-select-box| image:: ../../../../silx/resources/gui/icons/image-select-box.png
+.. |image-select-brush| image:: ../../../../silx/resources/gui/icons/image-select-brush.png
+.. |image-select-erase-rubber| image:: ../../../../silx/resources/gui/icons/image-select-erase-rubber.png
+.. |image-select-erase| image:: ../../../../silx/resources/gui/icons/image-select-erase.png
+.. |image| image:: ../../../../silx/resources/gui/icons/image.png
+.. |item-0dim| image:: ../../../../silx/resources/gui/icons/item-0dim.png
+.. |item-1dim| image:: ../../../../silx/resources/gui/icons/item-1dim.png
+.. |item-2dim| image:: ../../../../silx/resources/gui/icons/item-2dim.png
+.. |item-3dim| image:: ../../../../silx/resources/gui/icons/item-3dim.png
+.. |item-ndim| image:: ../../../../silx/resources/gui/icons/item-ndim.png
+.. |item-object| image:: ../../../../silx/resources/gui/icons/item-object.png
+.. |last| image:: ../../../../silx/resources/gui/icons/last.png
+.. |math-average| image:: ../../../../silx/resources/gui/icons/math-average.png
+.. |math-derive| image:: ../../../../silx/resources/gui/icons/math-derive.png
+.. |math-energy| image:: ../../../../silx/resources/gui/icons/math-energy.png
+.. |math-fit| image:: ../../../../silx/resources/gui/icons/math-fit.png
+.. |math-normalize| image:: ../../../../silx/resources/gui/icons/math-normalize.png
+.. |math-peak-reset| image:: ../../../../silx/resources/gui/icons/math-peak-reset.png
+.. |math-peak-search| image:: ../../../../silx/resources/gui/icons/math-peak-search.png
+.. |math-peak| image:: ../../../../silx/resources/gui/icons/math-peak.png
+.. |math-sigma| image:: ../../../../silx/resources/gui/icons/math-sigma.png
+.. |math-smooth| image:: ../../../../silx/resources/gui/icons/math-smooth.png
+.. |math-substract| image:: ../../../../silx/resources/gui/icons/math-substract.png
+.. |math-swap-sign| image:: ../../../../silx/resources/gui/icons/math-swap-sign.png
+.. |math-ymin-to-zero| image:: ../../../../silx/resources/gui/icons/math-ymin-to-zero.png
+.. |next| image:: ../../../../silx/resources/gui/icons/next.png
+.. |normal| image:: ../../../../silx/resources/gui/icons/normal.png
+.. |pixel-intensities| image:: ../../../../silx/resources/gui/icons/pixel-intensities.png
+.. |plot-grid| image:: ../../../../silx/resources/gui/icons/plot-grid.png
+.. |plot-roi-above| image:: ../../../../silx/resources/gui/icons/plot-roi-above.png
+.. |plot-roi-below| image:: ../../../../silx/resources/gui/icons/plot-roi-below.png
+.. |plot-roi-between| image:: ../../../../silx/resources/gui/icons/plot-roi-between.png
+.. |plot-roi-reset| image:: ../../../../silx/resources/gui/icons/plot-roi-reset.png
+.. |plot-roi| image:: ../../../../silx/resources/gui/icons/plot-roi.png
+.. |plot-toggle-points| image:: ../../../../silx/resources/gui/icons/plot-toggle-points.png
+.. |plot-widget| image:: ../../../../silx/resources/gui/icons/plot-widget.png
+.. |plot-window-image| image:: ../../../../silx/resources/gui/icons/plot-window-image.png
+.. |plot-window| image:: ../../../../silx/resources/gui/icons/plot-window.png
+.. |plot-xauto| image:: ../../../../silx/resources/gui/icons/plot-xauto.png
+.. |plot-xlog| image:: ../../../../silx/resources/gui/icons/plot-xlog.png
+.. |plot-yauto| image:: ../../../../silx/resources/gui/icons/plot-yauto.png
+.. |plot-ydown| image:: ../../../../silx/resources/gui/icons/plot-ydown.png
+.. |plot-ylog| image:: ../../../../silx/resources/gui/icons/plot-ylog.png
+.. |plot-yup| image:: ../../../../silx/resources/gui/icons/plot-yup.png
+.. |previous| image:: ../../../../silx/resources/gui/icons/previous.png
+.. |profile1D| image:: ../../../../silx/resources/gui/icons/profile1D.png
+.. |profile2D| image:: ../../../../silx/resources/gui/icons/profile2D.png
+.. |remove| image:: ../../../../silx/resources/gui/icons/remove.png
+.. |rudder| image:: ../../../../silx/resources/gui/icons/rudder.png
+.. |selected| image:: ../../../../silx/resources/gui/icons/selected.png
+.. |shape-circle-solid| image:: ../../../../silx/resources/gui/icons/shape-circle-solid.png
+.. |shape-circle| image:: ../../../../silx/resources/gui/icons/shape-circle.png
+.. |shape-diagonal| image:: ../../../../silx/resources/gui/icons/shape-diagonal.png
+.. |shape-ellipse-solid| image:: ../../../../silx/resources/gui/icons/shape-ellipse-solid.png
+.. |shape-ellipse| image:: ../../../../silx/resources/gui/icons/shape-ellipse.png
+.. |shape-horizontal| image:: ../../../../silx/resources/gui/icons/shape-horizontal.png
+.. |shape-polygon| image:: ../../../../silx/resources/gui/icons/shape-polygon.png
+.. |shape-rectangle| image:: ../../../../silx/resources/gui/icons/shape-rectangle.png
+.. |shape-square| image:: ../../../../silx/resources/gui/icons/shape-square.png
+.. |shape-vertical| image:: ../../../../silx/resources/gui/icons/shape-vertical.png
+.. |silx| image:: ../../../../silx/resources/gui/icons/silx.png
+.. |sliders-off| image:: ../../../../silx/resources/gui/icons/sliders-off.png
+.. |sliders-on| image:: ../../../../silx/resources/gui/icons/sliders-on.png
+.. |spec| image:: ../../../../silx/resources/gui/icons/spec.png
+.. |test-png| image:: ../../../../silx/resources/gui/icons/test-png.png
+.. |view-1d| image:: ../../../../silx/resources/gui/icons/view-1d.png
+.. |view-2d-stack| image:: ../../../../silx/resources/gui/icons/view-2d-stack.png
+.. |view-2d| image:: ../../../../silx/resources/gui/icons/view-2d.png
+.. |view-3d| image:: ../../../../silx/resources/gui/icons/view-3d.png
+.. |view-fullscreen| image:: ../../../../silx/resources/gui/icons/view-fullscreen.png
+.. |view-nofullscreen| image:: ../../../../silx/resources/gui/icons/view-nofullscreen.png
+.. |view-raw| image:: ../../../../silx/resources/gui/icons/view-raw.png
+.. |view-refresh| image:: ../../../../silx/resources/gui/icons/view-refresh.png
+.. |view-text| image:: ../../../../silx/resources/gui/icons/view-text.png
+.. |window-new| image:: ../../../../silx/resources/gui/icons/window-new.png
+.. |zoom-in| image:: ../../../../silx/resources/gui/icons/zoom-in.png
+.. |zoom-original| image:: ../../../../silx/resources/gui/icons/zoom-original.png
+.. |zoom-out| image:: ../../../../silx/resources/gui/icons/zoom-out.png
+.. |zoom| image:: ../../../../silx/resources/gui/icons/zoom.png
diff --git a/doc/source/modules/gui/index.rst b/doc/source/modules/gui/index.rst
new file mode 100644
index 0000000..eecd124
--- /dev/null
+++ b/doc/source/modules/gui/index.rst
@@ -0,0 +1,21 @@
+
+.. py:module:: silx.gui
+
+:mod:`silx.gui`: Graphical user interface
+=========================================
+
+The ``silx.gui`` package provides a set of PyQt widgets.
+
+
+.. toctree::
+ :maxdepth: 1
+
+ console.rst
+ data/index.rst
+ fit/index.rst
+ hdf5/index.rst
+ icons.rst
+ plot/index.rst
+ plot3d/index.rst
+ qt.rst
+ widgets/index.rst
diff --git a/doc/source/modules/gui/plot/dev.rst b/doc/source/modules/gui/plot/dev.rst
new file mode 100644
index 0000000..707d215
--- /dev/null
+++ b/doc/source/modules/gui/plot/dev.rst
@@ -0,0 +1,204 @@
+Package structure
+=================
+
+The :mod:`silx.gui.plot` package provides plot widgets.
+This package is structured as follows.
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`.PlotWidget` and :mod:`.PlotWindow` provides the user API.
+:class:`PlotWidget` is a Qt widget (actually a :class:`QMainWindow`) displaying a 1D, 2D plot area.
+It provides different interaction modes.
+:class:`PlotWindow` is a Qt widget (actually a :class:`QMainWindow`) which adds a set of toolbar buttons and associated functionalities to :class:`PlotWidget`.
+The toolbar QActions are implemented in :mod:`.PlotActions`.
+
+:mod:`.Plot`, :mod:`.PlotEvents` and :mod:`.PlotInteraction` implement the plotting API regardless of the rendering backend and regardless of its integration in Qt.
+The plotting API in defined in :mod:`.Plot`.
+The different interaction modes (zoom, drawing, pan) are implemented in :mod:`.PlotInteraction`.
+Each interaction mode is implemented with a state machine structure (implemented in :mod:`.Interaction`).
+The different events emitted by :class:`Plot` and by the interaction modes are created with helper functions defined in :mod:`.PlotEvents`.
+
+The :class:`PlotWindow` uses additional widgets:
+
+- :mod:`.ColormapDialog` to change colormap settings.
+- :mod:`.CurvesROIWidget` to create regions of interest for curves
+- :mod:`.LegendSelector` to display a list of curves legends which provides some control on the curves (e.g., select, delete).
+- :mod:`.MaskToolsWidget` to provide tools to draw a mask on an image.
+- :mod:`.ScatterMaskToolsWidget` to provide tools to draw a mask on a scatter.
+- The :mod:`.PlotTools` module provides a set of additional widgets:
+
+ - :class:`.PlotTools.PositionInfo`
+ - :class:`.PlotTools.LimitsToolBar`
+
+- The :mod:`.Profile` module provides toolbar for extracting profiles from image and image stack:
+
+ - :class:`.Profile.ProfileToolBar`
+ - :class:`.Profile.Profile3DToolBar`
+
+- :mod:`silx.gui.console` to provide an IPython console which can control the plot area content.
+
+The widgets also use the following miscellaneous modules:
+
+- :mod:`.Colors` to convert colors from name to RGB(A)
+- :mod:`.MPLColormap` to embed recent matplotlib colormaps: 'magma', 'inferno', 'plasma' and 'viridis'.
+- :mod:`._utils`: utility functions
+
+The :mod:`backends` package provide the implementation of the rendering used by the :class:`Plot`.
+It contains:
+:mod:`.backends.BackendBase` defines the API any plot backend should provide in :class:`BackendBase`.
+:mod:`.backends.BackendMatplotlib` implements a `matplotlib <http://matplotlib.org/>`_ backend.
+It uses :mod:`.backends.ModestImage` to provide a faster matplotlib AxesImage class using nearest values.
+The :mod:`.backends.BackendMatplotlib` the provides two classes:
+
+.. currentmodule:: silx.gui.plot.backends.BackendMatplotlib
+
+- :class:`BackendMatplotlib` that provides a matplotlib backend without a specific canvas.
+- :class:`BackendMatplotlibQt` which inherits from :class:`BackendMatplotlib` and adds a Qt canvas, and Qt specific functionalities.
+
+The OpenGL-based backend is implemented in the :mod:`.backends.BackendOpenGL` module and
+the :mod:`.backends.glutils` package which provides the different primitives used for rendering and interaction.
+It is based on :mod:`silx.gui._glutils`, `PyOpenGL <http://pyopengl.sourceforge.net/>`_ and OpenGL >= 2.1.
+
+.. |Plot and backend| image:: img/plot_and_backend.png
+ :align: middle
+
+|Plot and backend|
+
+Modules
+=======
+
+.. currentmodule:: silx.gui.plot
+
+For :mod:`.PlotWidget` and :mod:`.Plot` modules, see their respective documentations: :mod:`.PlotWidget`, :mod:`.Plot`.
+
+The following modules are the modules used internally by the plot package.
+
+:mod:`backends.BackendBase`
++++++++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.backends.BackendBase
+
+.. automodule:: silx.gui.plot.backends.BackendBase
+ :members:
+
+:mod:`backends.BackendMatplotlib`
++++++++++++++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.backends.BackendMatplotlib
+
+.. automodule:: silx.gui.plot.backends.BackendMatplotlib
+ :members:
+
+:mod:`backends.ModestImage`
++++++++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.backends.ModestImage
+
+.. automodule:: silx.gui.plot.backends.ModestImage
+ :members:
+ :undoc-members:
+
+:mod:`ColormapDialog`
++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.ColormapDialog
+
+.. automodule:: silx.gui.plot.ColormapDialog
+ :members:
+
+:mod:`Colors`
++++++++++++++
+
+.. currentmodule:: silx.gui.plot.Colors
+
+.. automodule:: silx.gui.plot.Colors
+ :members: rgba
+
+:mod:`CurvesROIWidget`
+++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.CurvesROIWidget
+
+.. automodule:: silx.gui.plot.CurvesROIWidget
+ :members:
+
+:mod:`Interaction`
+++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.Interaction
+
+.. automodule:: silx.gui.plot.Interaction
+ :members:
+
+:mod:`LegendSelector`
++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.LegendSelector
+
+.. automodule:: silx.gui.plot.LegendSelector
+ :members:
+
+:mod:`_BaseMaskToolsWidget`
++++++++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot._BaseMaskToolsWidget
+
+.. automodule:: silx.gui.plot._BaseMaskToolsWidget
+ :members:
+
+:mod:`MaskToolsWidget`
+++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.MaskToolsWidget
+
+.. automodule:: silx.gui.plot.MaskToolsWidget
+ :members:
+ :show-inheritance:
+
+:mod:`ScatterMaskToolsWidget`
++++++++++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.ScatterMaskToolsWidget
+
+.. automodule:: silx.gui.plot.ScatterMaskToolsWidget
+ :members:
+ :show-inheritance:
+
+:mod:`MPLColormap`
+++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.MPLColormap
+
+.. automodule:: silx.gui.plot.MPLColormap
+ :members:
+
+:mod:`PlotEvents`
++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.PlotEvents
+
+.. automodule:: silx.gui.plot.PlotEvents
+ :members:
+ :undoc-members:
+
+:mod:`PlotInteraction`
+++++++++++++++++++++++
+
+.. currentmodule:: silx.gui.plot.PlotInteraction
+
+.. automodule:: silx.gui.plot.PlotInteraction
+ :members:
+
+:mod:`_utils`
++++++++++++++
+
+.. currentmodule:: silx.gui.plot._utils
+
+.. automodule:: silx.gui.plot._utils
+ :members:
+
+:mod:`ticklayout`
+-----------------
+
+.. automodule:: silx.gui.plot._utils.ticklayout
+ :members: \ No newline at end of file
diff --git a/doc/source/modules/gui/plot/getting_started.rst b/doc/source/modules/gui/plot/getting_started.rst
new file mode 100644
index 0000000..9e45b70
--- /dev/null
+++ b/doc/source/modules/gui/plot/getting_started.rst
@@ -0,0 +1,491 @@
+.. currentmodule:: silx.gui
+
+Getting started with plot widgets
+=================================
+
+This introduction to :mod:`silx.gui.plot` covers the following topics:
+
+- `Use silx.gui.plot from the console`_
+- `Use silx.gui.plot from a script`_
+- `Plot curves in a widget`_
+- `Plot images in a widget`_
+- `Control plot axes`_
+
+For a complete description of the API, see :mod:`silx.gui.plot`.
+
+Use :mod:`silx.gui.plot` from the console
+-----------------------------------------
+
+From IPython
+++++++++++++
+
+To run :mod:`silx.gui.plot` widgets from `IPython <http://ipython.org/>`_, IPython must be set to use Qt (and in case of using PyQt4 and Python 2.7, PyQt must be set ti use API version 2, see Explanation_ below).
+
+As *silx* is performing some configuration of the Qt binding and `matplotlib <http://matplotlib.org/>`_, the safest way to use *silx* from IPython is to import :mod:`silx.gui.plot` first and then run either `%gui <http://ipython.org/ipython-doc/stable/interactive/magics.html#magic-gui>`_ qt or `%pylab <http://ipython.org/ipython-doc/stable/interactive/magics.html#magic-pylab>`_ qt::
+
+ In [1]: from silx.gui.plot import *
+ In [2]: %pylab qt
+
+Alternatively, when using Python 2.7 and PyQt4, you can start IPython with the ``QT_API`` environment variable set to ``pyqt``.
+
+On Linux and MacOS X, run::
+
+ QT_API=pyqt ipython
+
+On Windows, run from the command line::
+
+ set QT_API=pyqt&&ipython
+
+
+Explanation
+...........
+
+PyQt4 used from Python 2.x provides 2 incompatible versions of QString and QVariant:
+
+- version 1, the legacy which is the default, and
+- version 2, a more pythonic one, which is the only one supported by *silx*.
+
+All other configurations (i.e., PyQt4 on Python 3.x, PySide, PyQt5, IPython QtConsole widget) uses version 2 only or as the default.
+
+For more information, see `IPython, PyQt and PySide <http://ipython.org/ipython-doc/stable/interactive/reference.html#pyqt-and-pyside>`_.
+
+
+From Python
++++++++++++
+
+The :mod:`silx.sx` package is a convenient module to use silx from the console.
+It sets-up Qt and provides functions for the main features of silx.
+
+>>> from silx import sx
+
+Alternatively, you can create a QApplication before using silx widgets:
+
+>>> from silx.gui import qt # Import Qt binding and do some set-up
+>>> qapp = qt.QApplication([])
+
+>>> from silx.gui.plot import * # Import plot widgets and set-up matplotlib
+
+.. currentmodule:: silx.sx
+
+Plot functions
+++++++++++++++
+
+The :mod:`silx.sx` package provides 2 functions to plot curves and images from the (I)Python console in a widget with a set of tools:
+
+- :func:`plot`, and
+- :func:`imshow`.
+
+For more features, use widgets directly (see `Plot curves in a widget`_ and `Plot images in a widget`_).
+
+
+Curve: :func:`plot`
+...................
+
+The following examples must run with a Qt QApplication initialized (see `Use silx.gui.plot from the console`_).
+
+First import :mod:`sx` function:
+
+>>> from silx import sx
+>>> import numpy
+
+Plot a single curve given some values:
+
+>>> values = numpy.random.random(100)
+>>> plot_1curve = sx.plot(values, title='Random data')
+
+Plot a single curve given the x and y values:
+
+>>> angles = numpy.linspace(0, numpy.pi, 100)
+>>> sin_a = numpy.sin(angles)
+>>> plot_sinus = sx.plot(angles, sin_a,
+... xlabel='angle (radian)', ylabel='sin(a)')
+
+Plot many curves by giving a 2D array, provided xn, yn arrays:
+
+>>> plot_curves = sx.plot(x0, y0, x1, y1, x2, y2, ...)
+
+Plot curve with style giving a style string:
+
+>>> plot_styled = sx.plot(x0, y0, 'ro-', x1, y1, 'b.')
+
+See :func:`plot` for details.
+
+
+Image: :func:`imshow`
+.....................
+
+This example plot a single image.
+
+First, import :mod:`silx.sx`:
+
+>>> from silx import sx
+>>> import numpy
+
+>>> data = numpy.random.random(1024 * 1024).reshape(1024, 1024)
+>>> plt = sx.imshow(data, title='Random data')
+
+See :func:`imshow` for more details.
+
+
+Use :mod:`silx.gui.plot` from a script
+--------------------------------------
+
+A Qt GUI script must have a QApplication initialized before creating widgets:
+
+.. code-block:: python
+
+ from silx.gui import qt
+
+ [...]
+
+ qapp = qt.QApplication([])
+
+ [...] # Widgets initialisation
+
+ if __name__ == '__main__':
+ [...]
+ qapp.exec_()
+
+Unless a Qt binding has already been loaded, :mod:`silx.gui.qt` uses the first Qt binding it founds by probing in the following order: PyQt5, PyQt4 and finally PySide.
+If you prefer to choose the Qt binding yourself, import it before importing
+a module from :mod:`silx.gui`:
+
+.. code-block:: python
+
+ import PySide # Importing PySide will force silx to use it
+ from silx.gui import qt
+
+
+.. warning::
+ :mod:`silx.gui.plot` widgets are not thread-safe.
+ All calls to :mod:`silx.gui.plot` widgets must be made from the main thread.
+
+Plot curves in a widget
+-----------------------
+
+The :class:`Plot1D` widget provides a plotting area and a toolbar with tools useful for curves such as setting logarithmic scale or defining region of interest.
+
+First, create a :class:`Plot1D` widget:
+
+.. code-block:: python
+
+ from silx.gui.plot import Plot1D
+
+ plot = Plot1D() # Create the plot widget
+ plot.show() # Make the plot widget visible
+
+
+One curve
++++++++++
+
+To display a single curve, use the :meth:`.PlotWidget.addCurve` method:
+
+.. code-block:: python
+
+ plot.addCurve(x=(1, 2, 3), y=(3, 2, 1)) # Add a curve with default style
+
+When you need to update this curve, call :meth:`.PlotWidget.addCurve` again with the new values to display:
+
+.. code-block:: python
+
+ plot.addCurve(x=(1, 2, 3), y=(1, 2, 3)) # Replace the existing curve
+
+To clear the plotting area, call :meth:`.PlotWidget.clear`:
+
+.. code-block:: python
+
+ plot.clear()
+
+
+Multiple curves
++++++++++++++++
+
+In order to display multiple curves at the same time, you need to provide a different ``legend`` string for each of them:
+
+.. code-block:: python
+
+ import numpy
+
+ x = numpy.linspace(-numpy.pi, numpy.pi, 1000)
+ plot.addCurve(x, numpy.sin(x), legend='sinus')
+ plot.addCurve(x, numpy.cos(x), legend='cosinus')
+ plot.addCurve(x, numpy.random.random(len(x)), legend='random')
+
+
+To update a curve, call :meth:`.PlotWidget.addCurve` with the ``legend`` of the curve you want to udpdate.
+By default, the new curve will keep the same color (and style) as the curve it is updating:
+
+.. code-block:: python
+
+ plot.addCurve(x, numpy.random.random(len(x)) - 1., legend='random')
+
+To remove a curve from the plot, call :meth:`.PlotWidget.remove` with the ``legend`` of the curve you want to remove from the plot:
+
+.. code-block:: python
+
+ plot.remove('random')
+
+To clear the plotting area, call :meth:`.PlotWidget.clear`:
+
+.. code-block:: python
+
+ plot.clear()
+
+Curve style
++++++++++++
+
+By default, different curves will automatically use different styles to render, and keep the same style when updated.
+
+It is possible to specify the ``color`` of the curve, its ``linewidth`` and ``linestyle`` as well as the ``symbol`` to use as markers for data points (See :meth:`.PlotWidget.addCurve` for more details):
+
+.. code-block:: python
+
+ import numpy
+
+ x = numpy.linspace(-numpy.pi, numpy.pi, 100)
+
+ # Curve with a thick dashed line
+ plot.addCurve(x, numpy.sin(x), legend='sinus',
+ linewidth=3, linestyle='--')
+
+ # Curve with pink markers only
+ plot.addCurve(x, numpy.cos(x), legend='cosinus',
+ color='pink', linestyle=' ', symbol='o')
+
+ # Curve with green line with square markers
+ plot.addCurve(x, numpy.random.random(len(x)), legend='random',
+ color='green', linestyle='-', symbol='s')
+
+
+
+Histogram
++++++++++
+
+Data can be displayed as an histogram. This must be specified when calling the the addCurve function. (using ``histogram``, See :meth:`.PlotWidget.addCurve` for more details ).
+
+Histogram steps can be centered on x values or set at the left or the right of the given x values.
+
+.. code-block:: python
+
+ import numpy
+ x = numpy.arange(0, 20, 1)
+ plot.addCurve(x, x+1, histogram='center', fill=True, color='green')
+
+.. note:: You can also give x as edges. For this you must have len(x) = len(y) + 1
+
+Plot images in a widget
+-----------------------
+
+The :class:`Plot2D` widget provides a plotting area and a toolbar with tools useful for images, such as keeping aspect ratio, changing the colormap or defining a mask.
+
+First, create a :class:`Plot2D` widget:
+
+.. code-block:: python
+
+ from silx.gui.plot import Plot2D
+
+ plot = Plot2D() # Create the plot widget
+ plot.show() # Make the plot widget visible
+
+
+One image
++++++++++
+
+To display a single image, use the :meth:`.PlotWidget.addImage` method:
+
+.. code-block:: python
+
+ import numpy
+
+ data = numpy.random.random(512 * 512).reshape(512, -1) # Create 2D image
+ plot.addImage(data) # Plot the 2D data set with default colormap
+
+
+To update this image, call :meth:`.PlotWidget.addImage` again with the new image to display:
+
+.. code-block:: python
+
+ # Create a RGB image
+ rgb_image = (numpy.random.random(512*512*3) * 255).astype(numpy.uint8)
+ rgb_image.shape = 512, 512, 3
+
+ plot.addImage(rgb_image) # Plot the RGB image instead of the previous data
+
+
+To clear the plotting area, call :meth:`.PlotWidget.clear`:
+
+.. code-block:: python
+
+ plot.clear()
+
+
+Origin and scale
+++++++++++++++++
+
+:meth:`.PlotWidget.addImage` supports both 2D arrays of data displayed with a colormap and RGB(A) images as 3D arrays of shape (height, width, color channels).
+
+When displaying an image, it is possible to specify the ``origin`` and the ``scale`` of the image array in the plot area coordinates:
+
+.. code-block:: python
+
+ data = numpy.random.random(512 * 512).reshape(512, -1)
+ plot.addImage(data, origin=(100, 100), scale=(0.1, 0.1))
+
+When updating an image, if ``origin`` and ``scale`` are not provided, the previous values will be used:
+
+.. code-block:: python
+
+ data = numpy.random.random(512 * 512).reshape(512, -1)
+ plot.addImage(data) # Keep previous origin and scale
+
+
+Colormap
+++++++++
+
+A ``colormap`` is described with a :class:`dict` as follows (See :mod:`silx.gui.plot.Plot` for full documentation of the colormap):
+
+.. code-block:: python
+
+ colormap = {
+ 'name': 'gray', # Name of the colormap
+ 'normalization': 'linear', # Either 'linear' or 'log'
+ 'autoscale': True, # True to autoscale colormap to data range, False to use [vmin, vmax]
+ 'vmin': 0.0, # If not autoscale, data value to bind to min of colormap
+ 'vmax': 1.0 # If not autoscale, data value to bind to max of colormap
+ }
+
+
+At least the following colormap names are guaranteed to be available, but any colormap name from `matplotlib <http://matplotlib.org/>`_ (see `Choosing Colormaps <http://matplotlib.org/users/colormaps.html>`_) should work:
+
+- gray
+- reversed gray
+- temperature
+- red
+- green
+- blue
+- viridis
+- magma
+- inferno
+- plasma
+
+It is possible to change the default colormap of :meth:`.PlotWidget.addImage` for the plot widget with :meth:`.PlotWidget.setDefaultColormap` (and to get it with :meth:`.PlotWidget.getDefaultColormap`):
+
+.. code-block:: python
+
+ colormap = {'name': 'viridis', 'normalization': 'linear',
+ 'autoscale': True, 'vmin': 0.0, 'vmax': 1.0}
+ plot.setDefaultColormap(colormap)
+
+ data = numpy.arange(512 * 512.).reshape(512, -1)
+ plot.addImage(data) # Rendered with the default colormap set before
+
+It is also possible to provide a ``colormap`` to :meth:`.PlotWidget.addImage` to override this default for an image:
+
+.. code-block:: python
+
+ colormap = {'name': 'magma', 'normalization': 'log',
+ 'autoscale': False, 'vmin': 1.2, 'vmax': 1.8}
+ data = numpy.random.random(512 * 512).reshape(512, -1) + 1.
+ plot.addImage(data, colormap=colormap)
+
+As for `Origin and scale`_, when updating an image, if ``colormap`` is not provided, the previous colormap will be used:
+
+.. code-block:: python
+
+ data = numpy.random.random(512 * 512).reshape(512, -1) + 1.
+ plot.addImage(data) # Keep previous colormap
+
+The colormap can be changed by the user from the widget's toolbar.
+
+
+Multiple images
++++++++++++++++
+
+In order to display multiple images at the same time, you need to provide a different ``legend`` string for each of them and to set the ``replace`` argument to ``False``:
+
+.. code-block:: python
+
+ data = numpy.random.random(512 * 512).reshape(512, -1)
+ plot.addImage(data, legend='random', replace=False)
+
+ data = numpy.arange(512 * 512.).reshape(512, -1)
+ plot.addImage(data, legend='arange', replace=False, origin=(512, 512))
+
+
+To update an image, call :meth:`.PlotWidget.addImage` with the ``legend`` of the curve you want to udpdate.
+By default, the new image will keep the same colormap, origin and scale as the image it is updating:
+
+.. code-block:: python
+
+ data = (512 * 512. - numpy.arange(512 * 512.)).reshape(512, -1)
+ plot.addImage(data, legend='arange', replace=False) # Beware of replace=False
+
+
+To remove an image from the plot, call :meth:`.PlotWidget.remove` with the ``legend`` of the image you want to remove:
+
+.. code-block:: python
+
+ plot.remove('random')
+
+
+Control plot axes
+-----------------
+
+The following examples illustrate the API to control the plot axes.
+
+Labels and title
+++++++++++++++++
+
+Use :meth:`.PlotWidget.setGraphTitle` to set the plot main title.
+Use :meth:`.PlotWidget.setGraphXLabel` and :meth:`.PlotWidget.setGraphYLabel` to set the axes text labels:
+
+.. code-block:: python
+
+ plot.setGraphTitle('My plot')
+ plot.setGraphXLabel('X')
+ plot.setGraphYLabel('Y')
+
+
+Axes limits
++++++++++++
+
+Different methods allows to get and set the data limits displayed on each axis.
+
+The following code moves the visible plot area to the right:
+
+.. code-block:: python
+
+ xmin, xmax = plot.getGraphXLimits()
+ offset = 0.1 * (xmax - xmin)
+ plot.setGraphXLimits(xmin + offset, xmax + offset)
+
+:meth:`.PlotWidget.resetZoom` set the plot limits to the bounds of the data:
+
+.. code-block:: python
+
+ plot.resetZoom()
+
+See :meth:`.PlotWidget.resetZoom`, :meth:`.PlotWidget.setLimits`, :meth:`.PlotWidget.getGraphXLimits`, :meth:`.PlotWidget.setGraphXLimits`, :meth:`.PlotWidget.getGraphYLimits`, :meth:`.PlotWidget.setGraphYLimits` for details.
+
+
+Axes
+++++
+
+Different methods allow plot axes modifications:
+
+.. code-block:: python
+
+ plot.setYAxisInverted(True) # Makes the Y axis pointing downward
+ plot.setKeepDataAspectRatio(True) # To keep aspect ratio between X and Y axes
+
+See :meth:`.PlotWidget.setYAxisInverted`, :meth:`.PlotWidget.setKeepDataAspectRatio` for details.
+
+.. code-block:: python
+
+ plot.setGraphGrid(which='both') # To show a grid for both minor and major axes ticks
+
+ # Use logarithmic axes
+ plot.setXAxisLogarithmic(True)
+ plot.setYAxisLogarithmic(True)
+
+See :meth:`.PlotWidget.setGraphGrid`, :meth:`.PlotWidget.setXAxisLogarithmic`, :meth:`.PlotWidget.setYAxisLogarithmic` for details.
diff --git a/doc/source/modules/gui/plot/imageview.rst b/doc/source/modules/gui/plot/imageview.rst
new file mode 100644
index 0000000..c2663c7
--- /dev/null
+++ b/doc/source/modules/gui/plot/imageview.rst
@@ -0,0 +1,15 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`ImageView`: Plot an image with side histograms
+====================================================
+
+.. automodule:: silx.gui.plot.ImageView
+
+.. currentmodule:: silx.gui.plot.ImageView
+
+:class:`ImageView` class
+------------------------
+
+.. autoclass:: ImageView
+ :members: valueChanged, profile, setImage, getColormap, setColormap, getHistogram, setGraphTitle, setGraphXLabel, setGraphYLabel
diff --git a/doc/source/modules/gui/plot/img/ImageView.png b/doc/source/modules/gui/plot/img/ImageView.png
new file mode 100644
index 0000000..170466c
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/ImageView.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/LimitsToolBar.png b/doc/source/modules/gui/plot/img/LimitsToolBar.png
new file mode 100644
index 0000000..99af8bd
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/LimitsToolBar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/Plot1D.png b/doc/source/modules/gui/plot/img/Plot1D.png
new file mode 100644
index 0000000..9417d77
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/Plot1D.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/Plot2D.png b/doc/source/modules/gui/plot/img/Plot2D.png
new file mode 100644
index 0000000..e00de28
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/Plot2D.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/PlotWidget.png b/doc/source/modules/gui/plot/img/PlotWidget.png
new file mode 100644
index 0000000..2ecc73f
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/PlotWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/PlotWindow.png b/doc/source/modules/gui/plot/img/PlotWindow.png
new file mode 100644
index 0000000..86acc52
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/PlotWindow.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/PositionInfo.png b/doc/source/modules/gui/plot/img/PositionInfo.png
new file mode 100644
index 0000000..5572f53
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/PositionInfo.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/StackView.png b/doc/source/modules/gui/plot/img/StackView.png
new file mode 100644
index 0000000..4ed2a68
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/StackView.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/StackViewMainWindow.png b/doc/source/modules/gui/plot/img/StackViewMainWindow.png
new file mode 100644
index 0000000..e1e900a
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/StackViewMainWindow.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/colorScale.png b/doc/source/modules/gui/plot/img/colorScale.png
new file mode 100644
index 0000000..162ce3f
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/colorScale.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/colorScaleBar.png b/doc/source/modules/gui/plot/img/colorScaleBar.png
new file mode 100644
index 0000000..e57ce0b
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/colorScaleBar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/fftAction0.png b/doc/source/modules/gui/plot/img/fftAction0.png
new file mode 100644
index 0000000..5bd8061
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/fftAction0.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/fftAction1.png b/doc/source/modules/gui/plot/img/fftAction1.png
new file mode 100644
index 0000000..e4b20d7
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/fftAction1.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/linearColorbar.png b/doc/source/modules/gui/plot/img/linearColorbar.png
new file mode 100644
index 0000000..26621ce
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/linearColorbar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/logColorbar.png b/doc/source/modules/gui/plot/img/logColorbar.png
new file mode 100644
index 0000000..cdd247c
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/logColorbar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/netCounts.png b/doc/source/modules/gui/plot/img/netCounts.png
new file mode 100644
index 0000000..f987d1f
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/netCounts.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/plot_and_backend.png b/doc/source/modules/gui/plot/img/plot_and_backend.png
new file mode 100644
index 0000000..6c36c4f
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/plot_and_backend.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/rawCounts.png b/doc/source/modules/gui/plot/img/rawCounts.png
new file mode 100644
index 0000000..fa36b8e
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/rawCounts.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/roiwidget.png b/doc/source/modules/gui/plot/img/roiwidget.png
new file mode 100644
index 0000000..35ef7f1
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/roiwidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/shiftAction0.png b/doc/source/modules/gui/plot/img/shiftAction0.png
new file mode 100644
index 0000000..2d5837a
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/shiftAction0.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/shiftAction3.png b/doc/source/modules/gui/plot/img/shiftAction3.png
new file mode 100644
index 0000000..a2187b8
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/shiftAction3.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/tickbar.png b/doc/source/modules/gui/plot/img/tickbar.png
new file mode 100644
index 0000000..214fec7
--- /dev/null
+++ b/doc/source/modules/gui/plot/img/tickbar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/index.rst b/doc/source/modules/gui/plot/index.rst
new file mode 100644
index 0000000..143b85b
--- /dev/null
+++ b/doc/source/modules/gui/plot/index.rst
@@ -0,0 +1,130 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`plot`: 1D and 2D Plot widgets
+===================================
+
+.. toctree::
+ :hidden:
+
+ getting_started.rst
+
+.. currentmodule:: silx.gui.plot
+
+.. automodule:: silx.gui.plot
+
+For an introduction to the widgets of this package, see :doc:`getting_started`.
+
+For examples of custom plot actions, see :doc:`plotactions_examples`.
+
+Widgets gallery
+---------------
+
+The :mod:`silx.gui.plot` package provides the following plotting widgets:
+
+.. |imgPlotWidget| image:: img/PlotWidget.png
+ :height: 150px
+ :align: middle
+
+.. |imgPlotWindow| image:: img/PlotWindow.png
+ :height: 150px
+ :align: middle
+
+.. |imgPlot1D| image:: img/Plot1D.png
+ :height: 150px
+ :align: middle
+
+.. |imgPlot2D| image:: img/Plot2D.png
+ :height: 150px
+ :align: middle
+
+.. |imgImageView| image:: img/ImageView.png
+ :height: 150px
+ :align: middle
+
+.. |imgStackView| image:: img/StackView.png
+ :height: 150px
+ :align: middle
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Widget
+ - Description
+ * - |imgPlotWidget|
+ - :class:`PlotWidget` is the base Qt widget providing a plot area.
+ Other plot widgets are based on this one and provides the same API.
+ * - |imgPlotWindow|
+ - :class:`PlotWindow` adds a toolbar to :class:`PlotWidget`.
+ The content of this toolbar can be configured from the
+ :class:`PlotWindow` constructor or by hiding its content afterward.
+ * - |imgPlot1D|
+ - :class:`.Plot1D` is a :class:`PlotWindow` configured with tools useful
+ for curves.
+ * - |imgPlot2D|
+ - :class:`.Plot2D` is a :class:`PlotWindow` configured with tools useful
+ for images.
+ * - |imgImageView|
+ - :class:`ImageView` adds side histograms to a :class:`.Plot2D` widget.
+ * - |imgStackView|
+ - :class:`StackView` is a widget designed to display an image from a
+ stack of images in a :class:`PlotWindow` widget, with a frame browser
+ to navigate in the stack. The profile tool can do a 2D profile on the
+ stack of images.
+
+It also provides (and uses) widgets that can be attached to a :class:`PlotWidget`:
+
+.. |imgPositionInfo| image:: img/PositionInfo.png
+ :width: 300px
+ :align: middle
+
+.. |imgLimitsToolBar| image:: img/LimitsToolBar.png
+ :width: 300px
+ :align: middle
+
+.. |imgColorbar| image:: img/logColorbar.png
+ :height: 150px
+ :align: middle
+
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Widget
+ - Description
+ * - |imgPositionInfo|
+ - :class:`.PlotTools.PositionInfo` is a widget displaying mouse position and
+ information of a :class:`PlotWidget` associated to the mouse position.
+ * - |imgLimitsToolBar|
+ - :class:`.PlotTools.LimitsToolBar` is a QToolBar displaying and
+ controlling the limits of a :class:`PlotWidget`.
+ * - |imgColorbar|
+ - :class:`.ColorBar.ColorBarWidget` display colormap gradient and can be linked with a plot
+ to display the colormap
+
+Public modules
+--------------
+
+.. toctree::
+ :maxdepth: 2
+
+ plotwidget.rst
+ plotwindow.rst
+ imageview.rst
+ stackview.rst
+ plot.rst
+ items.rst
+ plotactions.rst
+ plottools.rst
+ profile.rst
+ roi.rst
+
+Internals
+---------
+
+.. toctree::
+ :maxdepth: 2
+
+ dev.rst
diff --git a/doc/source/modules/gui/plot/items.rst b/doc/source/modules/gui/plot/items.rst
new file mode 100644
index 0000000..beba3a1
--- /dev/null
+++ b/doc/source/modules/gui/plot/items.rst
@@ -0,0 +1,63 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`items`: Plot primitives
+=============================
+
+.. automodule:: silx.gui.plot.items
+
+.. currentmodule:: silx.gui.plot.items
+
+Curve
+-----
+
+.. autoclass:: Curve
+ :members:
+ :inherited-members:
+
+Images
+------
+
+.. autoclass:: ImageData
+ :members:
+ :inherited-members:
+
+.. autoclass:: ImageRgba
+ :members:
+ :inherited-members:
+
+Scatter
+-------
+
+.. autoclass:: Scatter
+ :members:
+ :inherited-members:
+
+Histogram
+---------
+
+.. autoclass:: Histogram
+ :members:
+ :inherited-members:
+
+Markers
+-------
+
+.. autoclass:: Marker
+ :members:
+ :inherited-members:
+
+.. autoclass:: XMarker
+ :members:
+ :inherited-members:
+
+.. autoclass:: YMarker
+ :members:
+ :inherited-members:
+
+Item
+----
+
+.. autoclass:: Shape
+ :members:
+ :inherited-members:
diff --git a/doc/source/modules/gui/plot/plot.rst b/doc/source/modules/gui/plot/plot.rst
new file mode 100644
index 0000000..2b8e096
--- /dev/null
+++ b/doc/source/modules/gui/plot/plot.rst
@@ -0,0 +1,16 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`Plot`: Full plot API
+==========================
+
+.. automodule:: silx.gui.plot.Plot
+
+.. currentmodule:: silx.gui.plot.Plot
+
+:class:`Plot` class
+-------------------
+
+.. autoclass:: Plot
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot/plotactions.rst b/doc/source/modules/gui/plot/plotactions.rst
new file mode 100644
index 0000000..29a3656
--- /dev/null
+++ b/doc/source/modules/gui/plot/plotactions.rst
@@ -0,0 +1,20 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`PlotActions`: Actions for PlotWidget
+===========================================
+
+.. currentmodule:: silx.gui.plot.PlotActions
+
+The :class:`PlotAction` is a base class used to define plot actions.
+
+Plot actions serve to add menu items or toolbar items that are associated with a method
+that can interact with the associated :class:`PlotWidget`.
+
+For an introduction to creating custom plot actions, see :doc:`plotactions_examples`.
+
+PlotActions API
+---------------
+
+.. automodule:: silx.gui.plot.PlotActions
+ :members:
diff --git a/doc/source/modules/gui/plot/plotactions_examples.rst b/doc/source/modules/gui/plot/plotactions_examples.rst
new file mode 100644
index 0000000..f14a42a
--- /dev/null
+++ b/doc/source/modules/gui/plot/plotactions_examples.rst
@@ -0,0 +1,93 @@
+.. currentmodule:: silx.gui
+
+Adding custom plot actions
+==========================
+
+A :class:`PlotWindow` defines a number of standard plot actions that can be executed
+by clicking on toolbar icons.
+
+Developers can design additional plot actions to be added as toolbar icons or as menu entries,
+to be added to a :class:`PlotWindow` or to design their own plot window based on
+:class:`PlotWidget`.
+
+This documentation pages provides examples on how to do this.
+
+Simple example: Shift a curve
+-----------------------------
+
+The following script is a simplistic example to show the basic required steps:
+
+ - create a new class inheriting from :class:`silx.gui.plot.PlotActions.PlotAction`
+ - define basic parameters such as the icon, the tooltip...
+ - write a method that will be triggered by the action
+ - initialize the new plot action by passing a reference to a plot window
+ - add the action to a toolbar or a menu
+
+The method implemented in this action interacts with the plot in a basic way. It gets the active curve,
+then it creates a new data array based on the curve data, and finally it replaces the original curve
+with a new one using the modified data array.
+
+.. literalinclude:: ../../../../../examples/shiftPlotAction.py
+ :lines: 36-
+
+.. |imgShiftAction0| image:: img/shiftAction0.png
+ :height: 300px
+ :align: middle
+
+.. |imgShiftAction3| image:: img/shiftAction3.png
+ :height: 300px
+ :align: middle
+
+.. list-table::
+ :widths: 1 2
+
+ * - |imgShiftAction0|
+ - Initial state
+ * - |imgShiftAction3|
+ - After triggering the action 3 times, the selected triangle shaped curve
+ is shifted up by 3 units
+
+Advanced example: Display amplitude spectrum
+--------------------------------------------
+
+This more advanced example shows additional ways of interacting with the plot, by changing
+labels, storing additional data array along with the curve data.
+
+This action is *checkable*, meaning that is has two states. When clicking the toolbar icon
+or the menu item, it remains in a *pushed* state until it is clicked again.
+
+In one state (*un-checked*), the original data is displayed. In the other state, the amplitude
+spectrum of the original signal is displayed. When the state is changed, the triggered action
+computes either the Fast Fourier Transform (FFT), or the reverse FFT.
+
+This example also illustrates how to store additional data, along with a curve.
+The FFT computation returns complex values, but we want to display real data, so we compute
+the amplitude spectrum. However, the inverse FFT requires the complete FFT data as input.
+We are therefore required to store the complex array of FFT data as curve metadata,
+in order to be able to reverse the process when the action is unchecked.
+
+.. literalinclude:: ../../../../../examples/fftPlotAction.py
+ :lines: 44-
+
+.. |imgFftAction0| image:: img/fftAction0.png
+ :height: 300px
+ :align: middle
+
+.. |imgFftAction1| image:: img/fftAction1.png
+ :height: 300px
+ :align: middle
+
+.. list-table::
+ :widths: 1 2
+
+ * - |imgFftAction0|
+ - Original signals (zoom applied). In red, a cosine wave at 7 Hz.
+ In black, a sum of sines with frequencies of 3, 20 and 42 Hz.
+ In green, a square wave with a fundamental frequency of 0.5 Hz
+ (wavelength of 2 seconds).
+ * - |imgFftAction1|
+ - Amplitude spectra (zoom applied), with peaks visible at
+ the expected frequencies of 3, 7, 20 and 42 Hz for the sine and cosine
+ signals. In green, we see the complete series of peaks related to the square wave,
+ with a fundamental frequency at 0.5 Hz and harmonic frequencies at every
+ odd multiple of the fundamental.
diff --git a/doc/source/modules/gui/plot/plottools.rst b/doc/source/modules/gui/plot/plottools.rst
new file mode 100644
index 0000000..4cf8f88
--- /dev/null
+++ b/doc/source/modules/gui/plot/plottools.rst
@@ -0,0 +1,36 @@
+:mod:`PlotTools`: Tool widgets for PlotWidget
+=============================================
+
+.. currentmodule:: silx.gui.plot.PlotTools
+
+.. automodule:: silx.gui.plot.PlotTools
+
+:class:`PositionInfo` class
+---------------------------
+
+.. autoclass:: PositionInfo
+ :show-inheritance:
+ :members:
+
+:class:`LimitsToolBar` class
+----------------------------
+
+.. autoclass:: LimitsToolBar
+ :show-inheritance:
+ :members:
+
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`ColorBar`: ColorBar Widget
+================================
+
+.. currentmodule:: silx.gui.plot.ColorBar
+
+.. automodule:: silx.gui.plot.ColorBar
+
+:class:`ColorBarWidget` class
+-----------------------------
+
+.. autoclass:: ColorBarWidget
+ :members:
diff --git a/doc/source/modules/gui/plot/plotwidget.rst b/doc/source/modules/gui/plot/plotwidget.rst
new file mode 100644
index 0000000..df576fc
--- /dev/null
+++ b/doc/source/modules/gui/plot/plotwidget.rst
@@ -0,0 +1,173 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`PlotWidget`: Base class for plotting widgets
+==================================================
+
+.. module:: silx.gui.plot.PlotWidget
+
+.. currentmodule:: silx.gui.plot.PlotWidget
+
+The :class:`PlotWidget` is a Qt widget providing the plot API initially
+provided in `PyMca <http://pymca.sourceforge.net/>`_.
+It is the basis of other plot widget, thus all plot widgets share the same API.
+
+For an introduction and examples of the plot API, see :doc:`getting_started`.
+
+Plot API
+--------
+
+.. currentmodule:: silx.gui.plot.Plot
+
+This is a choosen subset of the complete plot API, the full API is
+documented in :class:`silx.gui.plot.Plot`.
+
+.. currentmodule:: silx.gui.plot.PlotWidget
+
+.. autoclass:: PlotWidget
+ :show-inheritance:
+
+Plot data
+.........
+
+Those methods allow to add and update plotted data:
+
+.. automethod:: PlotWidget.addCurve
+.. automethod:: PlotWidget.addImage
+.. automethod:: PlotWidget.addScatter
+.. automethod:: PlotWidget.addHistogram
+
+Plot markers
+............
+
+It is also possible to add point or line markers to the plot:
+
+.. automethod:: PlotWidget.addMarker
+.. automethod:: PlotWidget.addXMarker
+.. automethod:: PlotWidget.addYMarker
+
+Remove data from the plot
+.........................
+
+.. automethod:: PlotWidget.clear
+.. automethod:: PlotWidget.remove
+
+Title and labels
+................
+
+Those methods handle the text labels of the axes and the plot title:
+
+.. automethod:: PlotWidget.getGraphTitle
+.. automethod:: PlotWidget.setGraphTitle
+.. automethod:: PlotWidget.getGraphXLabel
+.. automethod:: PlotWidget.setGraphXLabel
+.. automethod:: PlotWidget.getGraphYLabel
+.. automethod:: PlotWidget.setGraphYLabel
+
+Axes limits
+...........
+
+Those methods change the range of data values displayed on each axis.
+
+.. automethod:: PlotWidget.getGraphXLimits
+.. automethod:: PlotWidget.setGraphXLimits
+.. automethod:: PlotWidget.getGraphYLimits
+.. automethod:: PlotWidget.setGraphYLimits
+.. automethod:: PlotWidget.setLimits
+
+Axes
+....
+
+The following methods handle the display properties of the axes:
+
+.. automethod:: PlotWidget.isXAxisLogarithmic
+.. automethod:: PlotWidget.setXAxisLogarithmic
+.. automethod:: PlotWidget.isYAxisLogarithmic
+.. automethod:: PlotWidget.setYAxisLogarithmic
+
+.. automethod:: PlotWidget.isYAxisInverted
+.. automethod:: PlotWidget.setYAxisInverted
+.. automethod:: PlotWidget.isKeepDataAspectRatio
+.. automethod:: PlotWidget.setKeepDataAspectRatio
+.. automethod:: PlotWidget.getGraphGrid
+.. automethod:: PlotWidget.setGraphGrid
+
+Reset zoom
+..........
+
+.. automethod:: PlotWidget.resetZoom
+
+Those methods change the behavior of :meth:`PlotWidget.resetZoom`.
+
+.. automethod:: PlotWidget.getDataMargins
+.. automethod:: PlotWidget.setDataMargins
+.. automethod:: PlotWidget.isXAxisAutoScale
+.. automethod:: PlotWidget.setXAxisAutoScale
+.. automethod:: PlotWidget.isYAxisAutoScale
+.. automethod:: PlotWidget.setYAxisAutoScale
+
+Defaults
+........
+
+Those methods set-up default values for :meth:`PlotWidget.addCurve` and
+:meth:`PlotWidget.addImage`:
+
+.. automethod:: PlotWidget.getDefaultColormap
+.. automethod:: PlotWidget.setDefaultColormap
+.. automethod:: PlotWidget.getSupportedColormaps
+.. automethod:: PlotWidget.setDefaultPlotPoints
+.. automethod:: PlotWidget.setDefaultPlotLines
+
+Interaction
+...........
+
+Those methods allow to change the interaction mode (e.g., drawing mode)
+of the plot and to toggle the use of a crosshair cursor:
+
+.. automethod:: PlotWidget.getInteractiveMode
+.. automethod:: PlotWidget.setInteractiveMode
+
+.. automethod:: PlotWidget.getGraphCursor
+.. automethod:: PlotWidget.setGraphCursor
+
+Misc.
+.....
+
+.. automethod:: PlotWidget.saveGraph
+
+Signals
+.......
+
+The :class:`PlotWidget` provides the following Qt signals:
+
+.. autoattribute:: PlotWidget.sigPlotSignal
+.. autoattribute:: PlotWidget.sigSetYAxisInverted
+.. autoattribute:: PlotWidget.sigSetXAxisLogarithmic
+.. autoattribute:: PlotWidget.sigSetYAxisLogarithmic
+.. autoattribute:: PlotWidget.sigSetXAxisAutoScale
+.. autoattribute:: PlotWidget.sigSetYAxisAutoScale
+.. autoattribute:: PlotWidget.sigSetKeepDataAspectRatio
+.. autoattribute:: PlotWidget.sigSetGraphGrid
+.. autoattribute:: PlotWidget.sigSetGraphCursor
+.. autoattribute:: PlotWidget.sigSetPanWithArrowKeys
+.. autoattribute:: PlotWidget.sigContentChanged
+.. autoattribute:: PlotWidget.sigActiveCurveChanged
+.. autoattribute:: PlotWidget.sigActiveImageChanged
+.. autoattribute:: PlotWidget.sigInteractiveModeChanged
+
+.. Not documented:
+ addItem, removeItem, clearItems
+ isActiveCurveHandling, enableActiveCurveHandling,
+ getActiveCurveColor, setActiveCurveColor,
+ getActiveCurve, setActiveCurve,
+ isCurveHidden, hideCurve,
+ getActiveImage, setActiveImage,
+ getAllCurves, getCurve, getImage, getAllImages,
+ getScatter, getHistogram,
+ setDefaultPlotPoints, setDefaultPlotLines,
+ getWidgetHandle, notify, setCallback, graphCallback,
+ dataToPixel, pixelToData, getPlotBoundsInPixels,
+ setGraphCursorShape, pickMarker, moveMarker, pickImageOrCurve, moveImage,
+ onMousePress, onMouseMove, onMouseRelease, onMouseWheel,
+ isDrawModeEnabled, setDrawModeEnabled, getDrawMode,
+ isZoomModeEnabled, setZoomModeEnabled,
diff --git a/doc/source/modules/gui/plot/plotwindow.rst b/doc/source/modules/gui/plot/plotwindow.rst
new file mode 100644
index 0000000..1447403
--- /dev/null
+++ b/doc/source/modules/gui/plot/plotwindow.rst
@@ -0,0 +1,30 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`PlotWindow`: Plot widget with toolbar
+===========================================
+
+.. automodule:: silx.gui.plot.PlotWindow
+
+.. currentmodule:: silx.gui.plot.PlotWindow
+
+:class:`PlotWindow` class
+-------------------------
+
+.. autoclass:: PlotWindow
+ :show-inheritance:
+ :members:
+
+:class:`Plot1D`: Plot curves
+----------------------------
+
+.. autoclass:: Plot1D
+ :show-inheritance:
+ :members:
+
+:class:`Plot2D`: Plot images
+----------------------------
+
+.. autoclass:: Plot2D
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot/profile.rst b/doc/source/modules/gui/plot/profile.rst
new file mode 100644
index 0000000..56530f3
--- /dev/null
+++ b/doc/source/modules/gui/plot/profile.rst
@@ -0,0 +1,20 @@
+:mod:`Profile`: Toolbars with profile tools
+===========================================
+
+.. currentmodule:: silx.gui.plot.Profile
+
+.. automodule:: silx.gui.plot.Profile
+
+:class:`ProfileToolBar` class
+-----------------------------
+
+.. autoclass:: ProfileToolBar
+ :show-inheritance:
+ :members:
+
+:class:`Profile3DToolBar` class
+-------------------------------
+
+.. autoclass:: Profile3DToolBar
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot/roi.rst b/doc/source/modules/gui/plot/roi.rst
new file mode 100644
index 0000000..77b5c2a
--- /dev/null
+++ b/doc/source/modules/gui/plot/roi.rst
@@ -0,0 +1,17 @@
+.. currentmodule:: silx.gui.plot
+
+:mod:`CurvesROIWidget`: ROI from curves
+=======================================
+
+.. |roiWidgetImage| image:: img/roiwidget.png
+ :height: 400px
+ :align: middle
+
+You can access to the ROIWidget from a Plot window by :
+
+- using the tool button 'ROI'
+- using the options button then by selecting region of interest.
+
+|roiWidgetImage|
+
+.. automodule:: silx.gui.plot.CurvesROIWidget
diff --git a/doc/source/modules/gui/plot/stackview.rst b/doc/source/modules/gui/plot/stackview.rst
new file mode 100644
index 0000000..7f2442a
--- /dev/null
+++ b/doc/source/modules/gui/plot/stackview.rst
@@ -0,0 +1,24 @@
+
+.. currentmodule:: silx.gui.plot
+
+:mod:`StackView`: Plot a stack of images
+=========================================
+
+.. automodule:: silx.gui.plot.StackView
+
+.. currentmodule:: silx.gui.plot.StackView
+
+:class:`StackView` class
+------------------------
+
+.. autoclass:: StackView
+ :members:
+ :exclude-members: remove, setInteractiveMode, addItem
+
+:class:`StackViewMainWindow` class
+----------------------------------
+
+.. autoclass:: StackViewMainWindow
+ :show-inheritance:
+ :members:
+
diff --git a/doc/source/modules/gui/plot3d/actions.rst b/doc/source/modules/gui/plot3d/actions.rst
new file mode 100644
index 0000000..a2fde68
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/actions.rst
@@ -0,0 +1,10 @@
+Actions
+=======
+
+:mod:`Plot3DActions`
+--------------------
+
+.. currentmodule:: silx.gui.plot3d.Plot3DActions
+
+.. automodule:: silx.gui.plot3d.Plot3DActions
+ :members:
diff --git a/doc/source/modules/gui/plot3d/dev.rst b/doc/source/modules/gui/plot3d/dev.rst
new file mode 100644
index 0000000..757240e
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/dev.rst
@@ -0,0 +1,38 @@
+Package structure
+=================
+
+The :mod:`silx.gui.plot3d` package provides 3D visualisation widgets.
+This package is structured as follows.
+
+.. currentmodule:: silx.gui.plot3d
+
+Widget-level API
+----------------
+
+Widgets are available as modules of the :mod:`silx.gui.plot3d` packages.
+
+The :mod:`.Plot3DWidget` module provides the OpenGL canvas where the scene is rendered.
+The :mod:`.Plot3DWindow` module provides a :class:`QMainWindow` with a :class:`Plot3DWindow` as its central widget
+and toolbars: :class:`ViewpointToolBar` and :class:`Plot3DToolBar`.
+:class:`QAction` that can be associated with a :class:`Plot3DWidget` are defined in the :mod:`.Plot3DActions` module.
+Those actions are used by the :class:`Plot3DToolBar` toolbar.
+
+The :mod:`.ScalarFieldView` module defines the :class:`ScalarFieldView` widget that displays iso-surfaces of a 3D scalar data set and the associated classes.
+The :mod:`.SFViewParamTree` module defines a :class:`SFViewParamTree.TreeView` widget that can be attached to a :class:`ScalarFieldView` to control the display.
+
+OpenGL scene API
+----------------
+
+This API is NOT stable.
+Widgets of :mod:`silx.gui.plot3d` are based on the following sub-packages:
+
+- :mod:`.scene`: Provides a hierarchical scene structure handling rendering and interaction.
+- :mod:`.utils`: Miscellaneous supporting modules.
+- :mod:`silx.gui._glutils`: Loads PyOpenGL and provides classes to handle OpenGL resources.
+
+.. toctree::
+ :maxdepth: 2
+
+ scene.rst
+ utils.rst
+ glutils.rst
diff --git a/doc/source/modules/gui/plot3d/glutils.rst b/doc/source/modules/gui/plot3d/glutils.rst
new file mode 100644
index 0000000..2c36e83
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/glutils.rst
@@ -0,0 +1,67 @@
+:mod:`_glutils`
+===============
+
+.. automodule:: silx.gui._glutils
+
+
+:mod:`_glutils.gl`
+------------------
+
+.. automodule:: silx.gui._glutils.gl
+ :members:
+
+Utility functions
+-----------------
+
+.. currentmodule:: silx.gui._glutils
+
+For OpenGL context management:
+
+.. autofunction:: getGLContext
+
+.. autofunction:: setGLContextGetter
+
+For type checking and conversion:
+
+.. autofunction:: sizeofGLType
+
+.. autofunction:: isSupportedGLType
+
+.. autofunction:: numpyToGLType
+
+:class:`Program`
+----------------
+
+.. autoclass:: Program
+ :members:
+
+:class:`Texture`
+----------------
+
+.. autoclass:: Texture
+ :members:
+
+:class:`FramebufferTexture`
+---------------------------
+
+.. autoclass:: FramebufferTexture
+ :members:
+
+Vertex Buffer
+-------------
+
+.. autoclass:: VertexBuffer
+ :members:
+
+.. autoclass:: VertexBufferAttrib
+ :members:
+
+.. autofunction:: vertexBuffer
+
+:mod:`font`
+-----------
+
+.. currentmodule:: silx.gui._glutils.font
+
+.. automodule:: silx.gui._glutils.font
+ :members:
diff --git a/doc/source/modules/gui/plot3d/img/Plot3DWidget.png b/doc/source/modules/gui/plot3d/img/Plot3DWidget.png
new file mode 100644
index 0000000..d39e4db
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/img/Plot3DWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot3d/img/Plot3DWindow.png b/doc/source/modules/gui/plot3d/img/Plot3DWindow.png
new file mode 100644
index 0000000..0e562f5
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/img/Plot3DWindow.png
Binary files differ
diff --git a/doc/source/modules/gui/plot3d/img/SFViewParamTree.png b/doc/source/modules/gui/plot3d/img/SFViewParamTree.png
new file mode 100644
index 0000000..1b44ed9
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/img/SFViewParamTree.png
Binary files differ
diff --git a/doc/source/modules/gui/plot3d/img/ScalarFieldView.png b/doc/source/modules/gui/plot3d/img/ScalarFieldView.png
new file mode 100644
index 0000000..f40fdac
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/img/ScalarFieldView.png
Binary files differ
diff --git a/doc/source/modules/gui/plot3d/index.rst b/doc/source/modules/gui/plot3d/index.rst
new file mode 100644
index 0000000..8941403
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/index.rst
@@ -0,0 +1,83 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`plot3d`: 3D Visualisation widgets
+=======================================
+
+.. currentmodule:: silx.gui.plot3d
+
+.. automodule:: silx.gui.plot3d
+
+Widgets gallery
+---------------
+
+.. |imgPlot3DWidget| image:: img/Plot3DWidget.png
+ :height: 150px
+ :align: middle
+
+.. |imgPlot3DWindow| image:: img/Plot3DWindow.png
+ :height: 150px
+ :align: middle
+
+.. |imgScalarFieldView| image:: img/ScalarFieldView.png
+ :height: 150px
+ :align: middle
+
+.. |imgSFViewParamTree| image:: img/SFViewParamTree.png
+ :height: 150px
+ :align: middle
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Widget
+ - Description
+ * - |imgScalarFieldView|
+ - :class:`ScalarFieldView` is a :class:`Plot3DWindow` dedicated to display 3D scalar field.
+ It can display iso-surfaces and an interactive cutting plane.
+ Sample code: :doc:`viewer3dvolume_example`.
+ * - |imgPlot3DWindow|
+ - :class:`Plot3DWindow` is a :class:`QMainWindow` with a :class:`Plot3DWidget` as central widget
+ and toolbars.
+ * - |imgPlot3DWidget|
+ - :class:`Plot3DWidget` is the base Qt widget providing an OpenGL 3D scene.
+ Other widgets are using this widget as the OpenGL scene canvas.
+ * - |imgSFViewParamTree|
+ - :class:`SFViewParamTree` is a :class:`QTreeView` widget that can be attached to a :class:`ScalarFieldView`.
+ It displays current parameters of the :class:`ScalarFieldView` and allows to modify it.
+ Sample code: :doc:`viewer3dvolume_example`.
+
+Public modules
+--------------
+
+The following sub-modules are available:
+
+.. toctree::
+ :maxdepth: 2
+
+ plot3dwidget.rst
+ plot3dwindow.rst
+ scalarfieldview.rst
+ sfviewparamtree.rst
+ toolbars.rst
+ actions.rst
+
+
+Sample code
+-----------
+
+- :doc:`viewer3dvolume_example`: Sample code using :class:`ScalarFieldView`
+
+Internals
+---------
+
+.. toctree::
+ :maxdepth: 2
+
+ dev.rst
+
+.. toctree::
+ :hidden:
+
+ viewer3dvolume_example.rst
diff --git a/doc/source/modules/gui/plot3d/plot3dwidget.rst b/doc/source/modules/gui/plot3d/plot3dwidget.rst
new file mode 100644
index 0000000..1b01eac
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/plot3dwidget.rst
@@ -0,0 +1,15 @@
+.. currentmodule:: silx.gui.plot3d
+
+:mod:`Plot3DWidget`: OpenGL scene widget
+========================================
+
+.. automodule:: silx.gui.plot3d.Plot3DWidget
+
+.. currentmodule:: silx.gui.plot3d.Plot3DWidget
+
+:class:`Plot3DWidget`
+---------------------
+
+.. autoclass:: Plot3DWidget
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot3d/plot3dwindow.rst b/doc/source/modules/gui/plot3d/plot3dwindow.rst
new file mode 100644
index 0000000..4b4264d
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/plot3dwindow.rst
@@ -0,0 +1,15 @@
+.. currentmodule:: silx.gui.plot3d
+
+:mod:`Plot3DWindow`: OpenGL scene and toolbar
+=============================================
+
+.. automodule:: silx.gui.plot3d.Plot3DWindow
+
+.. currentmodule:: silx.gui.plot3d.Plot3DWindow
+
+:class:`Plot3DWindow`
+---------------------
+
+.. autoclass:: Plot3DWindow
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot3d/scalarfieldview.rst b/doc/source/modules/gui/plot3d/scalarfieldview.rst
new file mode 100644
index 0000000..763c18e
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/scalarfieldview.rst
@@ -0,0 +1,50 @@
+.. currentmodule:: silx.gui.plot3d
+
+:mod:`ScalarFieldView`: 3D volume scalar data viewer
+====================================================
+
+.. automodule:: silx.gui.plot3d.ScalarFieldView
+
+For sample code using ScalarFieldView, see :doc:`viewer3dvolume_example`
+
+.. currentmodule:: silx.gui.plot3d.ScalarFieldView
+
+:class:`ScalarFieldView`
+------------------------
+
+.. autoclass:: ScalarFieldView
+ :show-inheritance:
+ :members:
+
+Helper classes
+--------------
+
+Those classes are used by :class:`ScalarFieldView`.
+
+:class:`Colormap`
++++++++++++++++++
+
+.. autoclass:: Colormap
+ :show-inheritance:
+ :members:
+
+:class:`CutPlane`
++++++++++++++++++
+
+.. autoclass:: CutPlane
+ :show-inheritance:
+ :members:
+
+:class:`IsoSurface`
++++++++++++++++++++
+
+.. autoclass:: Isosurface
+ :show-inheritance:
+ :members:
+
+:class:`SelectedRegion`
++++++++++++++++++++++++
+
+.. autoclass:: SelectedRegion
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot3d/scene.rst b/doc/source/modules/gui/plot3d/scene.rst
new file mode 100644
index 0000000..4f6d9c4
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/scene.rst
@@ -0,0 +1,84 @@
+:mod:`scene`
+============
+
+.. currentmodule:: silx.gui.plot3d.scene
+
+.. automodule:: silx.gui.plot3d.scene
+
+:mod:`axes`: Bounding Box with axes ticks and labels
+----------------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.axes
+ :members:
+
+:mod:`camera`: Projection management classes
+--------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.camera
+ :members:
+
+:mod:`core`: Base class of the scene nodes
+------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.core
+ :members:
+
+:mod:`cutplane`: Cutting plane primitive
+----------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.cutplane
+ :members:
+
+:mod:`event`: Scene event system
+--------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.event
+ :members:
+
+:mod:`function`: OpenGL shader functions
+----------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.function
+ :members:
+
+:mod:`interaction`: User interaction implementation
+---------------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.interaction
+ :members:
+
+:mod:`primitives`: Base rendering primitives
+--------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.primitives
+ :members:
+
+:mod:`text`: Text field rendering primitives
+--------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.text
+ :members:
+
+:mod:`transform`: Transformation matrix system
+----------------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.transform
+ :members:
+
+:mod:`utils`: Miscellaneous
+---------------------------
+
+.. automodule:: silx.gui.plot3d.scene.utils
+ :members:
+
+:mod:`viewport`: Root of a scene tree
+-------------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.viewport
+ :members:
+
+:mod:`window`: On-screen window
+-------------------------------
+
+.. automodule:: silx.gui.plot3d.scene.window
+ :members:
diff --git a/doc/source/modules/gui/plot3d/sfviewparamtree.rst b/doc/source/modules/gui/plot3d/sfviewparamtree.rst
new file mode 100644
index 0000000..bfb4052
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/sfviewparamtree.rst
@@ -0,0 +1,13 @@
+:mod:`SFViewParamTree`: :class:`ScalarFieldView` parameters widget
+==================================================================
+
+.. currentmodule:: silx.gui.plot3d.SFViewParamTree
+
+.. automodule:: silx.gui.plot3d.SFViewParamTree
+
+:class:`TreeView`
+-----------------
+
+.. autoclass:: TreeView
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot3d/toolbars.rst b/doc/source/modules/gui/plot3d/toolbars.rst
new file mode 100644
index 0000000..df4b4ef
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/toolbars.rst
@@ -0,0 +1,29 @@
+Toolbars
+========
+
+
+:mod:`ViewpointToolbar`
+-----------------------
+
+.. currentmodule:: silx.gui.plot3d.ViewpointToolBar
+
+.. automodule:: silx.gui.plot3d.ViewpointToolBar
+
+.. autoclass:: ViewpointActionGroup
+ :show-inheritance:
+ :members:
+
+.. autoclass:: ViewpointToolBar
+ :show-inheritance:
+ :members:
+
+:mod:`Plot3DToolbar`
+--------------------
+
+.. currentmodule:: silx.gui.plot3d.Plot3DToolBar
+
+.. automodule:: silx.gui.plot3d.Plot3DToolBar
+
+.. autoclass:: Plot3DToolBar
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/gui/plot3d/utils.rst b/doc/source/modules/gui/plot3d/utils.rst
new file mode 100644
index 0000000..fcd5426
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/utils.rst
@@ -0,0 +1,12 @@
+:mod:`utils`
+============
+
+.. currentmodule:: silx.gui.plot3d.utils
+
+.. automodule:: silx.gui.plot3d.utils
+
+:mod:`mng`
+----------
+
+.. automodule:: silx.gui.plot3d.utils.mng
+ :members:
diff --git a/doc/source/modules/gui/plot3d/viewer3dvolume_example.rst b/doc/source/modules/gui/plot3d/viewer3dvolume_example.rst
new file mode 100644
index 0000000..5368e05
--- /dev/null
+++ b/doc/source/modules/gui/plot3d/viewer3dvolume_example.rst
@@ -0,0 +1,7 @@
+viewer3DVolume.py
+=================
+
+Sample code demonstrating :mod:`silx.gui.plot3d.ScalarFieldView` widget:
+
+.. literalinclude:: ../../../../../examples/viewer3DVolume.py
+ :lines: 38- \ No newline at end of file
diff --git a/doc/source/modules/gui/qt.rst b/doc/source/modules/gui/qt.rst
new file mode 100644
index 0000000..bcdad13
--- /dev/null
+++ b/doc/source/modules/gui/qt.rst
@@ -0,0 +1,8 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`qt`: Qt bindings
+----------------------
+
+.. automodule:: silx.gui.qt
+ :members: BINDING
diff --git a/doc/source/modules/gui/update_icons_rst.py b/doc/source/modules/gui/update_icons_rst.py
new file mode 100644
index 0000000..3f6565a
--- /dev/null
+++ b/doc/source/modules/gui/update_icons_rst.py
@@ -0,0 +1,90 @@
+# coding: utf-8
+# /*##########################################################################
+#
+# Copyright (c) 2016 European Synchrotron Radiation Facility
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# ###########################################################################*/
+"""Script to update icons.rst file according to icons available in resources.
+"""
+
+__authors__ = ["Thomas Vincent"]
+__license__ = "MIT"
+__date__ = "30/06/2016"
+
+
+import os
+import glob
+
+
+ICONS_RST_FILENAME = os.path.join(os.path.dirname(__file__), 'icons.rst')
+
+
+ICONS_DIR = os.path.join(
+ os.path.dirname(__file__),
+ '..', '..', '..', '..', 'silx', 'resources', 'gui', 'icons', '*.png')
+
+
+ICONS_RST_HEADER = """
+.. AUTOMATICALLY GENERATED FILE DO NOT EDIT
+ Use %s script instead
+
+.. currentmodule:: silx.gui
+
+:mod:`icons`: Set of icons
+--------------------------
+
+.. automodule:: silx.gui.icons
+ :members:
+
+Available icons
++++++++++++++++
+
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
+
+ * - Icon
+ - Name
+""" % os.path.basename(__file__)
+
+
+def main():
+ """Write icons.rst file"""
+ icons = glob.glob(ICONS_DIR)
+ icons = [os.path.relpath(f, os.path.dirname(__file__)) for f in icons]
+ icons = sorted(icons)
+
+ icons_table = '\n'.join(
+ ' * - |%s|\n - %s' % (os.path.basename(f)[:-4],
+ os.path.basename(f)[:-4]) for f in icons)
+
+ icon_definitions = '\n'.join(
+ '.. |%s| image:: %s' % (os.path.basename(f)[:-4], f) for f in icons)
+
+ content = ICONS_RST_HEADER + icons_table + '\n\n' + icon_definitions + '\n'
+
+ # Write to file
+ with open(ICONS_RST_FILENAME, 'w') as f:
+ f.write(content)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/doc/source/modules/gui/widgets/framebrowser.rst b/doc/source/modules/gui/widgets/framebrowser.rst
new file mode 100644
index 0000000..5ea0918
--- /dev/null
+++ b/doc/source/modules/gui/widgets/framebrowser.rst
@@ -0,0 +1,19 @@
+
+.. currentmodule:: silx.gui.widgets
+
+:mod:`FrameBrowser`
+-------------------
+
+.. automodule:: silx.gui.widgets.FrameBrowser
+
+API
+***
+
+.. autoclass:: silx.gui.widgets.FrameBrowser.HorizontalSliderWithBrowser
+ :members:
+
+
+.. autoclass:: silx.gui.widgets.FrameBrowser.FrameBrowser
+ :members:
+
+
diff --git a/doc/source/modules/gui/widgets/index.rst b/doc/source/modules/gui/widgets/index.rst
new file mode 100644
index 0000000..2284f22
--- /dev/null
+++ b/doc/source/modules/gui/widgets/index.rst
@@ -0,0 +1,19 @@
+
+.. currentmodule:: silx.gui
+
+:mod:`widgets`: Simple widgets
+------------------------------
+
+.. automodule:: silx.gui.widgets
+
+
+Public modules:
+
+.. toctree::
+ :maxdepth: 2
+
+ framebrowser.rst
+ periodictable.rst
+ tablewidget.rst
+ threadpoolpushbutton.rst
+ waitingpushbutton.rst
diff --git a/doc/source/modules/gui/widgets/periodictable.rst b/doc/source/modules/gui/widgets/periodictable.rst
new file mode 100644
index 0000000..dead3d9
--- /dev/null
+++ b/doc/source/modules/gui/widgets/periodictable.rst
@@ -0,0 +1,37 @@
+
+.. currentmodule:: silx.gui.widgets
+
+:mod:`PeriodicTable`: Atomic elements widgets
+----------------------------------------------
+
+.. automodule:: silx.gui.widgets.PeriodicTable
+
+Widgets
++++++++
+
+.. autoclass:: silx.gui.widgets.PeriodicTable.PeriodicTable
+ :members:
+ :exclude-members: elementEnter, elementLeave, elementClicked, elementToggle
+ :show-inheritance:
+
+
+.. autoclass:: silx.gui.widgets.PeriodicTable.PeriodicList
+ :members:
+ :show-inheritance:
+
+.. autoclass:: silx.gui.widgets.PeriodicTable.PeriodicCombo
+ :members:
+ :show-inheritance:
+
+
+Data model
+++++++++++
+
+.. autoclass:: silx.gui.widgets.PeriodicTable.PeriodicTableItem
+ :members:
+
+
+.. autoclass:: silx.gui.widgets.PeriodicTable.ColoredPeriodicTableItem
+ :members:
+ :show-inheritance:
+
diff --git a/doc/source/modules/gui/widgets/tablewidget.rst b/doc/source/modules/gui/widgets/tablewidget.rst
new file mode 100644
index 0000000..1eb5695
--- /dev/null
+++ b/doc/source/modules/gui/widgets/tablewidget.rst
@@ -0,0 +1,42 @@
+
+.. currentmodule:: silx.gui.widgets
+
+:mod:`TableWidget`: Table widget
+--------------------------------
+
+.. automodule:: silx.gui.widgets.TableWidget
+
+
+Widget
+++++++
+
+.. autoclass:: silx.gui.widgets.TableWidget.TableWidget
+ :members:
+ :show-inheritance:
+
+
+View
+++++
+
+.. autoclass:: silx.gui.widgets.TableWidget.TableView
+ :members:
+ :show-inheritance:
+
+
+Actions
++++++++
+
+.. autoclass:: silx.gui.widgets.TableWidget.CopySelectedCellsAction
+ :show-inheritance:
+
+.. autoclass:: silx.gui.widgets.TableWidget.CopyAllCellsAction
+ :show-inheritance:
+
+.. autoclass:: silx.gui.widgets.TableWidget.CutSelectedCellsAction
+ :show-inheritance:
+
+.. autoclass:: silx.gui.widgets.TableWidget.CutAllCellsAction
+ :show-inheritance:
+
+.. autoclass:: silx.gui.widgets.TableWidget.PasteCellsAction
+ :show-inheritance:
diff --git a/doc/source/modules/gui/widgets/threadpoolpushbutton.rst b/doc/source/modules/gui/widgets/threadpoolpushbutton.rst
new file mode 100644
index 0000000..cd98ac4
--- /dev/null
+++ b/doc/source/modules/gui/widgets/threadpoolpushbutton.rst
@@ -0,0 +1,14 @@
+
+.. currentmodule:: silx.gui.widgets
+
+:mod:`ThreadPoolPushButton`: Button to execute a threaded task
+--------------------------------------------------------------
+
+.. automodule:: silx.gui.widgets.ThreadPoolPushButton
+
+
+.. autoclass:: silx.gui.widgets.ThreadPoolPushButton.ThreadPoolPushButton
+ :members:
+
+
+
diff --git a/doc/source/modules/gui/widgets/waitingpushbutton.rst b/doc/source/modules/gui/widgets/waitingpushbutton.rst
new file mode 100644
index 0000000..310ea80
--- /dev/null
+++ b/doc/source/modules/gui/widgets/waitingpushbutton.rst
@@ -0,0 +1,13 @@
+
+.. currentmodule:: silx.gui.widgets
+
+:mod:`WaitingPushButton`: Button with waiting status
+----------------------------------------------------
+
+.. automodule:: silx.gui.widgets.WaitingPushButton
+
+.. autoclass:: silx.gui.widgets.WaitingPushButton.WaitingPushButton
+ :members:
+
+
+