tomwer 1.1.1__py3-none-any.whl → 1.2.0a0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangecontrib/tomwer/__init__.py +1 -0
- orangecontrib/tomwer/orange/managedprocess.py +6 -4
- orangecontrib/tomwer/state_summary.py +3 -2
- orangecontrib/tomwer/widgets/__init__.py +2 -2
- orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +9 -7
- orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +6 -5
- orangecontrib/tomwer/widgets/control/AdvancementOW.py +2 -1
- orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +235 -0
- orangecontrib/tomwer/widgets/control/DataListOW.py +7 -5
- orangecontrib/tomwer/widgets/control/DataListenerOW.py +13 -14
- orangecontrib/tomwer/widgets/control/DataSelectorOW.py +8 -6
- orangecontrib/tomwer/widgets/control/DataTransfertOW.py +9 -9
- orangecontrib/tomwer/widgets/control/DataValidatorOW.py +7 -8
- orangecontrib/tomwer/widgets/control/DataWatcherOW.py +25 -17
- orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +8 -8
- orangecontrib/tomwer/widgets/control/FilterOW.py +9 -8
- orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -4
- orangecontrib/tomwer/widgets/control/NXTomomillOW.py +13 -14
- orangecontrib/tomwer/widgets/control/NotifierOW.py +3 -4
- orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +7 -5
- orangecontrib/tomwer/widgets/control/TimerOW.py +6 -5
- orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +5 -3
- orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -6
- orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +10 -9
- orangecontrib/tomwer/widgets/control/icons/datadiscover.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/datadiscover.svg +137 -0
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.png +0 -0
- orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +5 -8
- orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +13 -15
- orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +3 -2
- orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +10 -7
- orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +8 -5
- orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -2
- orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +6 -3
- orangecontrib/tomwer/widgets/edit/test/test_dark_flat_patch.py +8 -6
- orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py +3 -1
- orangecontrib/tomwer/widgets/edit/test/test_image_key_upgrader.py +3 -1
- orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -1
- orangecontrib/tomwer/widgets/other/PythonScriptOW.py +11 -11
- orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -27
- orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +13 -11
- orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +11 -9
- orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +16 -14
- orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +27 -32
- orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +27 -34
- orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +23 -25
- orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +16 -18
- orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +9 -7
- orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.png +0 -0
- orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.svg +8 -11
- orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +8 -8
- orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +6 -4
- orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +4 -3
- orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +4 -3
- orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +6 -4
- orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +8 -6
- orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +6 -3
- orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +7 -5
- orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +5 -4
- tomwer/__init__.py +1 -1
- tomwer/__main__.py +2 -1
- tomwer/app/axis.py +18 -14
- tomwer/app/canvas.py +7 -5
- tomwer/app/canvas_launcher/config.py +8 -6
- tomwer/app/canvas_launcher/environ.py +1 -2
- tomwer/app/canvas_launcher/mainwindow.py +23 -22
- tomwer/app/canvas_launcher/splash.py +1 -0
- tomwer/app/canvas_launcher/widgetsscheme.py +3 -3
- tomwer/app/darkref.py +7 -6
- tomwer/app/darkrefpatch.py +8 -6
- tomwer/app/diffframe.py +6 -4
- tomwer/app/imagekeyeditor.py +10 -10
- tomwer/app/imagekeyupgrader.py +8 -6
- tomwer/app/intensitynormalization.py +8 -8
- tomwer/app/lamino.py +5 -3
- tomwer/app/nabuapp.py +8 -6
- tomwer/app/nxtomoeditor.py +6 -5
- tomwer/app/radiostack.py +8 -6
- tomwer/app/rsync.py +3 -3
- tomwer/app/saaxis.py +22 -23
- tomwer/app/sadeltabeta.py +21 -21
- tomwer/app/samplemoved.py +8 -6
- tomwer/app/scanviewer.py +7 -6
- tomwer/app/sinogramviewer.py +8 -7
- tomwer/app/slicestack.py +8 -6
- tomwer/app/stopdatalistener.py +2 -1
- tomwer/core/futureobject.py +15 -6
- tomwer/core/log/logger.py +4 -3
- tomwer/core/log/processlog.py +0 -1
- tomwer/core/process/conditions/filters.py +3 -3
- tomwer/core/process/control/datadiscovery.py +7 -0
- tomwer/core/process/control/datalistener/datalistener.py +22 -21
- tomwer/core/process/control/datalistener/rpcserver.py +18 -28
- tomwer/core/process/control/datawatcher/datawatcher.py +15 -12
- tomwer/core/process/control/datawatcher/datawatcherobserver.py +11 -8
- tomwer/core/process/control/datawatcher/datawatcherprocess.py +7 -5
- tomwer/core/process/control/datawatcher/edfdwprocess.py +5 -15
- tomwer/core/process/control/datawatcher/hdf5dwprocess.py +3 -1
- tomwer/core/process/control/datawatcher/status.py +2 -0
- tomwer/core/process/control/nxtomomill.py +7 -6
- tomwer/core/process/control/scanlist.py +2 -1
- tomwer/core/process/control/scanselector.py +1 -0
- tomwer/core/process/control/scantransfer.py +12 -12
- tomwer/core/process/control/scanvalidator.py +7 -6
- tomwer/core/process/control/test/test_volume_link.py +5 -4
- tomwer/core/process/control/timer.py +4 -4
- tomwer/core/process/control/volumeselector.py +1 -0
- tomwer/core/process/control/volumesymlink.py +8 -9
- tomwer/core/process/edit/darkflatpatch.py +9 -12
- tomwer/core/process/edit/imagekeyeditor.py +11 -13
- tomwer/core/process/reconstruction/axis/axis.py +36 -38
- tomwer/core/process/reconstruction/axis/mode.py +2 -1
- tomwer/core/process/reconstruction/axis/params.py +23 -28
- tomwer/core/process/reconstruction/darkref/darkrefs.py +23 -27
- tomwer/core/process/reconstruction/darkref/darkrefscopy.py +14 -18
- tomwer/core/process/reconstruction/darkref/params.py +3 -1
- tomwer/core/process/reconstruction/lamino/tofu.py +11 -15
- tomwer/core/process/reconstruction/nabu/castvolume.py +15 -18
- tomwer/core/process/reconstruction/nabu/nabucommon.py +19 -20
- tomwer/core/process/reconstruction/nabu/nabuscores.py +16 -14
- tomwer/core/process/reconstruction/nabu/nabuslices.py +27 -22
- tomwer/core/process/reconstruction/nabu/nabuvolume.py +20 -22
- tomwer/core/process/reconstruction/nabu/utils.py +17 -15
- tomwer/core/process/reconstruction/normalization/__init__.py +1 -3
- tomwer/core/process/reconstruction/normalization/normalization.py +16 -21
- tomwer/core/process/reconstruction/normalization/params.py +2 -2
- tomwer/core/process/reconstruction/saaxis/__init__.py +1 -1
- tomwer/core/process/reconstruction/saaxis/params.py +6 -7
- tomwer/core/process/reconstruction/saaxis/saaxis.py +44 -55
- tomwer/core/process/reconstruction/sadeltabeta/__init__.py +1 -1
- tomwer/core/process/reconstruction/sadeltabeta/params.py +9 -13
- tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +40 -46
- tomwer/core/process/reconstruction/scores/__init__.py +2 -2
- tomwer/core/process/reconstruction/scores/params.py +6 -9
- tomwer/core/process/reconstruction/scores/scores.py +10 -13
- tomwer/core/process/reconstruction/test/test_axis_params.py +4 -2
- tomwer/core/process/reconstruction/test/test_darkref.py +1 -2
- tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -1
- tomwer/core/process/reconstruction/test/test_paramsbase.py +1 -1
- tomwer/core/process/reconstruction/test/test_saaxis.py +11 -7
- tomwer/core/process/reconstruction/test/test_sadeltabeta.py +5 -4
- tomwer/core/process/reconstruction/test/test_utils.py +3 -2
- tomwer/core/process/script/python.py +6 -8
- tomwer/core/process/task.py +11 -12
- tomwer/core/process/test/test_axis.py +12 -9
- tomwer/core/process/test/test_conditions.py +8 -8
- tomwer/core/process/test/test_dark_and_flat.py +9 -8
- tomwer/core/process/test/test_data_listener.py +5 -3
- tomwer/core/process/test/test_data_transfer.py +14 -12
- tomwer/core/process/test/test_data_watcher.py +3 -1
- tomwer/core/process/test/test_lamino.py +3 -1
- tomwer/core/process/test/test_nabu.py +13 -12
- tomwer/core/process/test/test_normalization.py +7 -5
- tomwer/core/process/test/test_timer.py +2 -1
- tomwer/core/process/utils.py +9 -9
- tomwer/core/progress.py +3 -4
- tomwer/core/scan/blissscan.py +4 -2
- tomwer/core/scan/edfscan.py +26 -29
- tomwer/core/scan/futurescan.py +2 -1
- tomwer/core/scan/hdf5scan.py +21 -28
- tomwer/core/scan/scanbase.py +18 -18
- tomwer/core/scan/scanfactory.py +20 -21
- tomwer/core/scan/scantype.py +7 -0
- tomwer/core/scan/test/test_edf.py +2 -1
- tomwer/core/scan/test/test_future_scan.py +2 -1
- tomwer/core/scan/test/test_h5.py +5 -4
- tomwer/core/scan/test/test_process_registration.py +5 -3
- tomwer/core/scan/test/test_scan.py +11 -9
- tomwer/core/settings.py +1 -2
- tomwer/core/test/test_lamino.py +3 -2
- tomwer/core/test/test_scanutils.py +3 -2
- tomwer/core/test/test_utils.py +6 -4
- tomwer/core/utils/__init__.py +8 -6
- tomwer/core/utils/deprecation.py +2 -2
- tomwer/core/utils/image.py +4 -3
- tomwer/core/utils/locker.py +1 -1
- tomwer/core/utils/normalization.py +1 -0
- tomwer/core/utils/nxtomoutils.py +2 -1
- tomwer/core/utils/scanutils.py +9 -6
- tomwer/core/utils/slurm.py +2 -1
- tomwer/core/utils/time.py +2 -4
- tomwer/core/utils/volumeutils.py +2 -1
- tomwer/core/volume/__init__.py +1 -1
- tomwer/core/volume/edfvolume.py +4 -3
- tomwer/core/volume/hdf5volume.py +6 -8
- tomwer/core/volume/jp2kvolume.py +4 -3
- tomwer/core/volume/rawvolume.py +7 -7
- tomwer/core/volume/tiffvolume.py +8 -6
- tomwer/core/volume/volumebase.py +1 -0
- tomwer/core/volume/volumefactory.py +18 -18
- tomwer/gui/cluster/slurm.py +2 -0
- tomwer/gui/cluster/supervisor.py +4 -2
- tomwer/gui/cluster/test/test_cluster.py +5 -4
- tomwer/gui/cluster/test/test_supervisor.py +4 -2
- tomwer/gui/conditions/filter.py +7 -6
- tomwer/gui/control/actions.py +1 -0
- tomwer/gui/control/datadiscovery.py +168 -0
- tomwer/gui/control/datalist.py +29 -28
- tomwer/gui/control/datalistener.py +8 -4
- tomwer/gui/control/datareacheractions.py +2 -1
- tomwer/gui/control/datatransfert.py +3 -1
- tomwer/gui/control/datavalidator.py +11 -12
- tomwer/gui/control/datawatcher/configuration.py +12 -1
- tomwer/gui/control/datawatcher/controlwidget.py +116 -0
- tomwer/gui/control/datawatcher/datawatcher.py +63 -121
- tomwer/gui/control/datawatcher/datawatcherobserver.py +7 -9
- tomwer/gui/control/history.py +3 -1
- tomwer/gui/control/observations.py +7 -7
- tomwer/gui/control/scanselectorwidget.py +4 -2
- tomwer/gui/control/selectorwidgetbase.py +3 -1
- tomwer/gui/control/serie/seriecreator.py +11 -12
- tomwer/gui/control/singletomoobj.py +4 -4
- tomwer/gui/control/test/test_datadiscovery.py +27 -0
- tomwer/gui/control/test/test_datalist.py +7 -6
- tomwer/gui/control/test/test_datalistener.py +4 -4
- tomwer/gui/control/test/test_datavalidator.py +3 -1
- tomwer/gui/control/test/test_inputwidget.py +5 -4
- tomwer/gui/control/test/test_process_manager.py +3 -3
- tomwer/gui/control/test/test_scanselector.py +6 -4
- tomwer/gui/control/test/test_scanvalidator.py +6 -5
- tomwer/gui/control/test/test_single_tomo_obj.py +5 -3
- tomwer/gui/control/test/test_volume_dialog.py +7 -5
- tomwer/gui/control/test/test_volumeselector.py +8 -6
- tomwer/gui/control/volumeselectorwidget.py +2 -1
- tomwer/gui/debugtools/datasetgenerator.py +2 -1
- tomwer/gui/debugtools/objectinspector.py +6 -7
- tomwer/gui/edit/dkrfpatch.py +11 -10
- tomwer/gui/edit/imagekeyeditor.py +12 -12
- tomwer/gui/edit/nxtomoeditor.py +8 -7
- tomwer/gui/edit/test/test_dkrf_patch.py +10 -9
- tomwer/gui/edit/test/test_image_key_editor.py +8 -6
- tomwer/gui/edit/test/test_nx_editor.py +7 -5
- tomwer/gui/icons.py +3 -2
- tomwer/gui/illustrations.py +3 -2
- tomwer/gui/imagefromfile.py +3 -1
- tomwer/gui/qfolderdialog.py +14 -12
- tomwer/gui/reconstruction/axis/CompareImages.py +9 -8
- tomwer/gui/reconstruction/axis/__init__.py +1 -1
- tomwer/gui/reconstruction/axis/axis.py +9 -7
- tomwer/gui/reconstruction/axis/radioaxis.py +30 -32
- tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +6 -5
- tomwer/gui/reconstruction/darkref/darkrefwidget.py +4 -2
- tomwer/gui/reconstruction/lamino/tofu/misc.py +3 -1
- tomwer/gui/reconstruction/lamino/tofu/projections.py +16 -8
- tomwer/gui/reconstruction/lamino/tofu/tofu.py +6 -3
- tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +5 -2
- tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +8 -5
- tomwer/gui/reconstruction/nabu/action.py +1 -0
- tomwer/gui/reconstruction/nabu/castvolume.py +6 -4
- tomwer/gui/reconstruction/nabu/check.py +3 -2
- tomwer/gui/reconstruction/nabu/nabuconfig/base.py +5 -2
- tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -3
- tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +4 -3
- tomwer/gui/reconstruction/nabu/nabuconfig/output.py +7 -5
- tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +8 -6
- tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +7 -7
- tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +40 -33
- tomwer/gui/reconstruction/nabu/nabuflow.py +7 -4
- tomwer/gui/reconstruction/nabu/slices.py +14 -10
- tomwer/gui/reconstruction/nabu/slurm.py +1 -0
- tomwer/gui/reconstruction/nabu/volume.py +5 -3
- tomwer/gui/reconstruction/normalization/intensity.py +14 -13
- tomwer/gui/reconstruction/saaxis/corrangeselector.py +36 -35
- tomwer/gui/reconstruction/saaxis/dimensionwidget.py +5 -4
- tomwer/gui/reconstruction/saaxis/saaxis.py +17 -17
- tomwer/gui/reconstruction/saaxis/sliceselector.py +5 -5
- tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +33 -36
- tomwer/gui/reconstruction/scores/scoreplot.py +19 -18
- tomwer/gui/reconstruction/test/test_axis.py +14 -13
- tomwer/gui/reconstruction/test/test_lamino.py +3 -2
- tomwer/gui/reconstruction/test/test_nabu.py +8 -6
- tomwer/gui/reconstruction/test/test_saaxis.py +17 -15
- tomwer/gui/reconstruction/test/test_sadeltabeta.py +15 -13
- tomwer/gui/samplemoved/__init__.py +8 -7
- tomwer/gui/samplemoved/selectiontable.py +4 -2
- tomwer/gui/stackplot.py +14 -13
- tomwer/gui/stacks.py +11 -9
- tomwer/gui/test/test_axis_gui.py +5 -4
- tomwer/gui/test/test_qfolder_dialog.py +2 -1
- tomwer/gui/utils/__init__.py +5 -5
- tomwer/gui/utils/buttons.py +1 -0
- tomwer/gui/utils/completer.py +1 -0
- tomwer/gui/utils/flow.py +4 -2
- tomwer/gui/utils/illustrations.py +1 -0
- tomwer/gui/utils/inputwidget.py +11 -17
- tomwer/gui/utils/lineselector/lineselector.py +6 -8
- tomwer/gui/utils/qt_utils.py +1 -0
- tomwer/gui/utils/scandescription.py +2 -0
- tomwer/gui/utils/splashscreen.py +1 -1
- tomwer/gui/utils/unitsystem.py +3 -1
- tomwer/gui/utils/vignettes.py +8 -8
- tomwer/gui/utils/waiterthread.py +2 -1
- tomwer/gui/visualization/dataviewer.py +20 -28
- tomwer/gui/visualization/diffviewer/diffviewer.py +17 -20
- tomwer/gui/visualization/diffviewer/shiftwidget.py +3 -1
- tomwer/gui/visualization/nxtomometadata.py +1 -0
- tomwer/gui/visualization/reconstructionparameters.py +13 -12
- tomwer/gui/visualization/scanoverview.py +5 -3
- tomwer/gui/visualization/sinogramviewer.py +3 -2
- tomwer/gui/visualization/test/test_dataviewer.py +3 -1
- tomwer/gui/visualization/test/test_diffviewer.py +8 -6
- tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +5 -3
- tomwer/gui/visualization/test/test_reconstruction_parameters.py +5 -3
- tomwer/gui/visualization/test/test_sinogramviewer.py +10 -9
- tomwer/gui/visualization/test/test_stacks.py +8 -6
- tomwer/gui/visualization/test/test_volumeviewer.py +10 -8
- tomwer/gui/visualization/tomoobjoverview.py +7 -4
- tomwer/gui/visualization/volumeoverview.py +5 -3
- tomwer/gui/visualization/volumeviewer.py +15 -14
- tomwer/io/utils/__init__.py +3 -3
- tomwer/io/utils/h5pyutils.py +2 -1
- tomwer/io/utils/utils.py +17 -21
- tomwer/resources/__init__.py +1 -1
- tomwer/synctools/axis.py +3 -1
- tomwer/synctools/darkref.py +3 -2
- tomwer/synctools/datalistener.py +10 -6
- tomwer/synctools/datatransfert.py +2 -3
- tomwer/synctools/imageloaderthread.py +5 -3
- tomwer/synctools/rsyncmanager.py +3 -2
- tomwer/synctools/saaxis.py +3 -1
- tomwer/synctools/sadeltabeta.py +3 -1
- tomwer/synctools/stacks/control/datalistener.py +9 -12
- tomwer/synctools/stacks/edit/darkflatpatch.py +13 -12
- tomwer/synctools/stacks/edit/imagekeyeditor.py +12 -11
- tomwer/synctools/stacks/processingstack.py +3 -2
- tomwer/synctools/stacks/reconstruction/axis.py +12 -12
- tomwer/synctools/stacks/reconstruction/castvolume.py +8 -5
- tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -9
- tomwer/synctools/stacks/reconstruction/lamino.py +9 -7
- tomwer/synctools/stacks/reconstruction/nabu.py +18 -17
- tomwer/synctools/stacks/reconstruction/normalization.py +12 -16
- tomwer/synctools/stacks/reconstruction/saaxis.py +13 -11
- tomwer/synctools/stacks/reconstruction/sadeltabeta.py +16 -14
- tomwer/synctools/test/test_darkRefs.py +4 -3
- tomwer/synctools/test/test_foldertransfer.py +14 -12
- tomwer/synctools/test/test_scanstages.py +8 -7
- tomwer/synctools/utils/scanstages.py +7 -5
- tomwer/tests/conftest.py +4 -4
- tomwer/tests/test_scripts.py +3 -2
- tomwer/tests/utils/__init__.py +5 -4
- tomwer/tests/utils/utilstest.py +5 -6
- tomwer/third_party/nabu/preproc/phase.py +7 -5
- tomwer/third_party/nabu/utils.py +3 -2
- tomwer/utils.py +12 -12
- tomwer/version.py +4 -4
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/METADATA +2 -2
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/RECORD +353 -345
- /tomwer-1.1.1-py3.8-nspkg.pth → /tomwer-1.2.0a0-py3.8-nspkg.pth +0 -0
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/LICENSE +0 -0
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/WHEEL +0 -0
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/entry_points.txt +0 -0
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/namespace_packages.txt +0 -0
- {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,168 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from silx.gui import qt
|
4
|
+
|
5
|
+
from tomwer.core.scan.scantype import ScanType
|
6
|
+
from tomwer.gui.control import datareacheractions
|
7
|
+
from tomwer.gui.control.datawatcher.controlwidget import ControlWidget
|
8
|
+
|
9
|
+
|
10
|
+
class ScanDiscoveryConfigWidget(qt.QGroupBox):
|
11
|
+
sigScanTypeChanged = qt.Signal()
|
12
|
+
|
13
|
+
def __init__(self, *args, **kwargs):
|
14
|
+
super().__init__(*args, **kwargs)
|
15
|
+
self.setLayout(qt.QVBoxLayout())
|
16
|
+
self._nxtomoQRB = qt.QRadioButton(ScanType.NX_TOMO.value, parent=self)
|
17
|
+
self.layout().addWidget(self._nxtomoQRB)
|
18
|
+
|
19
|
+
self._blissQRB = qt.QRadioButton(ScanType.BLISS.value, parent=self)
|
20
|
+
self.layout().addWidget(self._blissQRB)
|
21
|
+
|
22
|
+
self._specQRB = qt.QRadioButton(ScanType.SPEC.value, parent=self)
|
23
|
+
self.layout().addWidget(self._specQRB)
|
24
|
+
|
25
|
+
# set up
|
26
|
+
self._nxtomoQRB.setChecked(True)
|
27
|
+
# connect signal / slot
|
28
|
+
self._nxtomoQRB.toggled.connect(self._configChanged)
|
29
|
+
self._blissQRB.toggled.connect(self._configChanged)
|
30
|
+
self._specQRB.toggled.connect(self._configChanged)
|
31
|
+
|
32
|
+
def _configChanged(self, *args, **kwargs):
|
33
|
+
self.sigScanTypeChanged.emit()
|
34
|
+
|
35
|
+
def getScanType(self) -> ScanType:
|
36
|
+
if self._specQRB.isChecked():
|
37
|
+
return ScanType.SPEC
|
38
|
+
elif self._blissQRB.isChecked():
|
39
|
+
return ScanType.BLISS
|
40
|
+
elif self._nxtomoQRB.isChecked():
|
41
|
+
return ScanType.NX_TOMO
|
42
|
+
else:
|
43
|
+
raise NotImplementedError
|
44
|
+
|
45
|
+
def setScanType(self, mode: ScanType):
|
46
|
+
mode = ScanType.from_value(mode)
|
47
|
+
if mode is ScanType.SPEC:
|
48
|
+
self._specQRB.setChecked(True)
|
49
|
+
elif mode is ScanType.BLISS:
|
50
|
+
self._blissQRB.setChecked(True)
|
51
|
+
elif mode is ScanType.NX_TOMO:
|
52
|
+
self._nxtomoQRB.setChecked(True)
|
53
|
+
else:
|
54
|
+
raise NotImplementedError
|
55
|
+
|
56
|
+
|
57
|
+
class _MainWidget(qt.QWidget):
|
58
|
+
sigStart = qt.Signal()
|
59
|
+
|
60
|
+
def __init__(self, parent=None) -> None:
|
61
|
+
super().__init__(parent)
|
62
|
+
self.setLayout(qt.QVBoxLayout())
|
63
|
+
self.controlWidget = ControlWidget()
|
64
|
+
self.layout().addWidget(self.controlWidget)
|
65
|
+
self.configWidget = ScanDiscoveryConfigWidget(parent=self)
|
66
|
+
self.layout().addWidget(self.configWidget)
|
67
|
+
|
68
|
+
# set up
|
69
|
+
self.configWidget.setVisible(False)
|
70
|
+
self.controlWidget.setVisible(False)
|
71
|
+
self.controlWidget._qpbstartstop.setText("start discovery")
|
72
|
+
# connect signal / slot
|
73
|
+
self.controlWidget._qpbstartstop.released.connect(self._startDiscovery)
|
74
|
+
# expose api
|
75
|
+
self.sigScanTypeChanged = self.configWidget.sigScanTypeChanged
|
76
|
+
|
77
|
+
def getConfigWindow(self):
|
78
|
+
return self.configWidget
|
79
|
+
|
80
|
+
def _startDiscovery(self):
|
81
|
+
self.sigStart.emit()
|
82
|
+
|
83
|
+
def getFolderObserved(self):
|
84
|
+
return self.controlWidget._qteFolderSelected.text()
|
85
|
+
|
86
|
+
def setFolderObserved(self, dir_):
|
87
|
+
return self.controlWidget._qteFolderSelected.setText(dir_)
|
88
|
+
|
89
|
+
def getLinuxFilePattern(self) -> Optional[str]:
|
90
|
+
text = self.controlWidget._filterQLE.text()
|
91
|
+
if text.replace(" ", "") == "":
|
92
|
+
return None
|
93
|
+
else:
|
94
|
+
return text
|
95
|
+
|
96
|
+
def setLinuxFilePattern(self, pattern: Optional[str]):
|
97
|
+
if pattern is None:
|
98
|
+
pattern = ""
|
99
|
+
self.controlWidget._filterQLE.setText(pattern)
|
100
|
+
|
101
|
+
def setSearchScanType(self, scan_type):
|
102
|
+
self.configWidget.setScanType(scan_type)
|
103
|
+
|
104
|
+
def getSearchScqnType(self):
|
105
|
+
return self.configWidget.getScanType()
|
106
|
+
|
107
|
+
|
108
|
+
class DataDiscoveryWidget(qt.QMainWindow):
|
109
|
+
sigTMStatusChanged = qt.Signal(str)
|
110
|
+
"""Signal emitted when the state changed"""
|
111
|
+
sigScanReady = qt.Signal(object)
|
112
|
+
"""Signal emitted when a scan is considered as ready"""
|
113
|
+
sigFolderObservedChanged = qt.Signal()
|
114
|
+
"""Signal emitted when the user change the observed folder"""
|
115
|
+
sigObservationStart = qt.Signal()
|
116
|
+
"""Signal emitted when the observation starts"""
|
117
|
+
sigObservationEnd = qt.Signal()
|
118
|
+
"""Signal emitted when the observation end"""
|
119
|
+
sigFilterFileNamePatternChanged = qt.Signal(str)
|
120
|
+
"""Signal emut when the filter pattern change"""
|
121
|
+
|
122
|
+
def __init__(self, parent=None, **kwargs) -> None:
|
123
|
+
super().__init__(parent, **kwargs)
|
124
|
+
self.setWindowFlags(qt.Qt.Widget)
|
125
|
+
self._mainWidget = _MainWidget(parent=self)
|
126
|
+
self.setCentralWidget(self.widget)
|
127
|
+
# create toolbar
|
128
|
+
toolbar = qt.QToolBar("", parent=self)
|
129
|
+
toolbar.setIconSize(qt.QSize(32, 32))
|
130
|
+
self._controlAction = datareacheractions.ControlAction(parent=self)
|
131
|
+
self._configurationAction = datareacheractions.ConfigurationAction(parent=self)
|
132
|
+
toolbar.addAction(self._controlAction)
|
133
|
+
toolbar.addAction(self._configurationAction)
|
134
|
+
|
135
|
+
self._actionGroup = qt.QActionGroup(self)
|
136
|
+
self._actionGroup.addAction(self._controlAction)
|
137
|
+
self._actionGroup.addAction(self._configurationAction)
|
138
|
+
|
139
|
+
self.addToolBar(qt.Qt.LeftToolBarArea, toolbar)
|
140
|
+
toolbar.setMovable(False)
|
141
|
+
# connect signal / slot
|
142
|
+
self._controlAction.toggled[bool].connect(
|
143
|
+
self._mainWidget.controlWidget.setVisible
|
144
|
+
)
|
145
|
+
self._configurationAction.toggled[bool].connect(
|
146
|
+
self._mainWidget.configWidget.setVisible
|
147
|
+
)
|
148
|
+
self._controlAction.setChecked(True)
|
149
|
+
|
150
|
+
def getConfiguration(self) -> dict:
|
151
|
+
return {
|
152
|
+
"start_folder": self.widget.getFolderObserved(),
|
153
|
+
"file_filter": self.widget.getLinuxFilePattern(),
|
154
|
+
"scan_type_searched": self.widget.getConfigWindow().getScanType().value,
|
155
|
+
}
|
156
|
+
|
157
|
+
def setConfiguration(self, config: dict):
|
158
|
+
if "start_folder" in config:
|
159
|
+
self.widget.setFolderObserved(config["start_folder"])
|
160
|
+
if "file_filter" in config:
|
161
|
+
self.widget.setLinuxFilePattern(config["file_filter"])
|
162
|
+
type_searched = config.get("scan_type_searched", None)
|
163
|
+
if type_searched is not None:
|
164
|
+
self.widget.getConfigWindow().setScanType(type_searched)
|
165
|
+
|
166
|
+
@property
|
167
|
+
def widget(self) -> qt.QWidget:
|
168
|
+
return self._mainWidget
|
tomwer/gui/control/datalist.py
CHANGED
@@ -30,42 +30,45 @@ __date__ = "12/07/2022"
|
|
30
30
|
import logging
|
31
31
|
import os
|
32
32
|
from collections import OrderedDict
|
33
|
+
from typing import Any, Optional, Union
|
34
|
+
|
35
|
+
from nxtomomill import converter as nxtomomill_converter
|
36
|
+
from nxtomomill.io import generate_default_edf_config, generate_default_h5_config
|
37
|
+
from nxtomomill.io.config import TomoEDFConfig as EDFConfig
|
38
|
+
from nxtomomill.io.config import TomoHDF5Config as HDF5Config
|
33
39
|
from silx.gui import qt
|
34
40
|
from tomoscan.esrf.identifier.edfidentifier import EDFVolumeIdentifier
|
35
41
|
from tomoscan.esrf.identifier.hdf5Identifier import (
|
36
|
-
HDF5VolumeIdentifier,
|
37
42
|
HDF5TomoScanIdentifier,
|
43
|
+
HDF5VolumeIdentifier,
|
38
44
|
)
|
45
|
+
from tomoscan.esrf.identifier.jp2kidentifier import JP2KVolumeIdentifier
|
46
|
+
from tomoscan.esrf.identifier.rawidentifier import RawVolumeIdentifier
|
39
47
|
from tomoscan.esrf.identifier.tiffidentifier import (
|
40
|
-
TIFFVolumeIdentifier,
|
41
48
|
MultiTiffVolumeIdentifier,
|
49
|
+
TIFFVolumeIdentifier,
|
42
50
|
)
|
43
|
-
from tomoscan.esrf.
|
44
|
-
from tomoscan.
|
51
|
+
from tomoscan.esrf.volume.utils import guess_volumes
|
52
|
+
from tomoscan.identifier import BaseIdentifier
|
53
|
+
|
54
|
+
from tomwer.core.scan.blissscan import BlissScan
|
45
55
|
from tomwer.core.scan.edfscan import EDFTomoScan
|
56
|
+
from tomwer.core.scan.hdf5scan import HDF5TomoScan
|
46
57
|
from tomwer.core.scan.scanfactory import ScanFactory
|
47
58
|
from tomwer.core.tomwer_object import TomwerObject
|
48
59
|
from tomwer.core.volume.edfvolume import EDFVolume
|
49
60
|
from tomwer.core.volume.hdf5volume import HDF5Volume
|
50
|
-
from tomwer.core.volume.tiffvolume import MultiTIFFVolume, TIFFVolume
|
51
|
-
from tomwer.core.volume.rawvolume import RawVolume
|
52
61
|
from tomwer.core.volume.jp2kvolume import JP2KVolume
|
53
|
-
from tomwer.
|
54
|
-
from tomwer.
|
55
|
-
from tomwer.gui.control.actions import CFGFileActiveLabel
|
56
|
-
from tomwer.gui.utils.inputwidget import EDFConfigFileSelector, HDF5ConfigFileSelector
|
57
|
-
from tomwer.gui.utils.inputwidget import NXTomomillOutputDirSelector
|
62
|
+
from tomwer.core.volume.rawvolume import RawVolume
|
63
|
+
from tomwer.core.volume.tiffvolume import MultiTIFFVolume, TIFFVolume
|
58
64
|
from tomwer.core.volume.volumefactory import VolumeFactory
|
59
|
-
from
|
60
|
-
from
|
61
|
-
from tomwer.
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
from nxtomomill.io.config import TomoEDFConfig as EDFConfig
|
67
|
-
from nxtomomill.io import generate_default_edf_config
|
68
|
-
from nxtomomill.io import generate_default_h5_config
|
65
|
+
from tomwer.gui.control.actions import CFGFileActiveLabel, NXTomomillParamsAction
|
66
|
+
from tomwer.gui.qfolderdialog import QDataDialog, QVolumeDialog
|
67
|
+
from tomwer.gui.utils.inputwidget import (
|
68
|
+
EDFConfigFileSelector,
|
69
|
+
HDF5ConfigFileSelector,
|
70
|
+
NXTomomillOutputDirSelector,
|
71
|
+
)
|
69
72
|
from tomwer.gui.utils.qt_utils import block_signals
|
70
73
|
|
71
74
|
logger = logging.getLogger(__name__)
|
@@ -851,17 +854,15 @@ class BlissScanList(_TomwerObjectList):
|
|
851
854
|
|
852
855
|
if HDF5TomoScan.is_nexus_nxtomo_file(data):
|
853
856
|
text = (
|
854
|
-
"The input file `{}` seems to contain `NXTomo` entries. "
|
857
|
+
f"The input file `{data}` seems to contain `NXTomo` entries. "
|
855
858
|
"and no valid `Bliss` valid entry. \n"
|
856
|
-
"This is probably not a Bliss file. Do you still want to "
|
857
|
-
"translate ?".format(data)
|
859
|
+
"This is probably not a Bliss file. Do you still want to translate ?"
|
858
860
|
)
|
859
861
|
else:
|
860
862
|
text = (
|
861
|
-
"The input file `{}` does not seems to contain any "
|
863
|
+
f"The input file `{data}` does not seems to contain any "
|
862
864
|
"valid `Bliss` entry. \n"
|
863
|
-
"This is probably not a Bliss file. Do you still want to "
|
864
|
-
"translate ?".format(data)
|
865
|
+
"This is probably not a Bliss file. Do you still want to translate ?"
|
865
866
|
)
|
866
867
|
msg.setText(text)
|
867
868
|
if msg.exec_() != qt.QMessageBox.Ok:
|
@@ -873,7 +874,7 @@ class BlissScanList(_TomwerObjectList):
|
|
873
874
|
):
|
874
875
|
possible_entries.append(entry)
|
875
876
|
except Exception:
|
876
|
-
logger.error("Faild to find entries for {}"
|
877
|
+
logger.error(f"Faild to find entries for {data}")
|
877
878
|
return
|
878
879
|
else:
|
879
880
|
file_path = data
|
@@ -29,19 +29,23 @@ __date__ = "16/03/2020"
|
|
29
29
|
|
30
30
|
|
31
31
|
import os
|
32
|
-
import weakref
|
33
32
|
import socket
|
33
|
+
import weakref
|
34
|
+
|
34
35
|
from silx.gui import qt
|
36
|
+
|
35
37
|
from tomwer.core import settings
|
36
38
|
from tomwer.core.process.utils import LastReceivedScansDict
|
39
|
+
from tomwer.core.scan.blissscan import BlissScan
|
37
40
|
from tomwer.gui import icons as tomwericons
|
38
41
|
from tomwer.gui.control import datareacheractions as actions
|
39
42
|
from tomwer.gui.control.history import ScanHistory
|
40
43
|
from tomwer.gui.control.observations import ScanObservation
|
41
|
-
from tomwer.
|
44
|
+
from tomwer.gui.utils.inputwidget import (
|
45
|
+
HDF5ConfigFileSelector,
|
46
|
+
NXTomomillOutputDirSelector,
|
47
|
+
)
|
42
48
|
from tomwer.synctools.rsyncmanager import BlissSequenceRSyncWorker
|
43
|
-
from tomwer.gui.utils.inputwidget import HDF5ConfigFileSelector
|
44
|
-
from tomwer.gui.utils.inputwidget import NXTomomillOutputDirSelector
|
45
49
|
|
46
50
|
|
47
51
|
class DataListenerWidget(qt.QMainWindow):
|
@@ -28,18 +28,19 @@ __license__ = "MIT"
|
|
28
28
|
__date__ = "23/07/2020"
|
29
29
|
|
30
30
|
|
31
|
+
import logging
|
32
|
+
import time
|
33
|
+
import weakref
|
34
|
+
from contextlib import AbstractContextManager
|
35
|
+
|
31
36
|
from silx.gui import qt
|
32
|
-
|
37
|
+
|
33
38
|
from tomwer.core.process.control.scanvalidator import ScanValidator as BaseDataValidator
|
34
|
-
from tomwer.
|
35
|
-
from tomwer.core.scan.scanbase import TomwerScanBase
|
36
|
-
from tomwer.core.scan.scanbase import _TomwerBaseDock
|
37
|
-
from tomwer.gui.qfolderdialog import QDataDialog
|
39
|
+
from tomwer.core.scan.scanbase import TomwerScanBase, _TomwerBaseDock
|
38
40
|
from tomwer.core.scan.scanfactory import ScanFactory
|
39
|
-
import
|
40
|
-
from
|
41
|
-
import
|
42
|
-
import time
|
41
|
+
from tomwer.gui.qfolderdialog import QDataDialog
|
42
|
+
from tomwer.gui.utils.waiterthread import QWaiterThread
|
43
|
+
from tomwer.gui.visualization.dataviewer import DataViewer
|
43
44
|
|
44
45
|
_logger = logging.getLogger(__file__)
|
45
46
|
|
@@ -240,9 +241,7 @@ class DataValidator(qt.QMainWindow, BaseDataValidator):
|
|
240
241
|
scans = ScanFactory.create_scan_objects(scan_path=folder)
|
241
242
|
except Exception as e:
|
242
243
|
_logger.error(
|
243
|
-
"cannot create scan instances from {}. Error is {}"
|
244
|
-
folder, e
|
245
|
-
)
|
244
|
+
f"cannot create scan instances from {folder}. Error is {e}"
|
246
245
|
)
|
247
246
|
else:
|
248
247
|
for scan in scans:
|
@@ -29,10 +29,11 @@ __date__ = "18/02/2018"
|
|
29
29
|
|
30
30
|
|
31
31
|
import functools
|
32
|
+
|
32
33
|
from silx.gui import qt
|
33
34
|
|
34
|
-
from tomwer.core.process.control.datawatcher.datawatcher import _DataWatcher
|
35
35
|
from tomwer.core.process.control.datawatcher import status
|
36
|
+
from tomwer.core.process.control.datawatcher.datawatcher import _DataWatcher
|
36
37
|
|
37
38
|
|
38
39
|
class _DWConfigurationWidget(qt.QWidget):
|
@@ -157,6 +158,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
|
|
157
158
|
self.layout().addWidget(self._qrbXml)
|
158
159
|
self._qrbInfo = qt.QRadioButton(status.PARSE_INFO_FILE, parent=self)
|
159
160
|
self.layout().addWidget(self._qrbInfo)
|
161
|
+
self._qrbAnyEDF = qt.QRadioButton(status.EDF_SCAN_END, parent=self)
|
162
|
+
self.layout().addWidget(self._qrbAnyEDF)
|
160
163
|
|
161
164
|
self._qwUserEntry = qt.QWidget(parent=self)
|
162
165
|
self.layout().addWidget(self._qwUserEntry)
|
@@ -188,10 +191,14 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
|
|
188
191
|
spacer.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Expanding)
|
189
192
|
self.layout().addWidget(spacer)
|
190
193
|
|
194
|
+
# set up
|
195
|
+
self._qrbAnyEDF.hide() # by default for the DataWatcher compatibility this one is hidded
|
196
|
+
|
191
197
|
# deal with connections
|
192
198
|
self._qrbUserEntry.toggled.connect(self.widgetFilePtrn.setVisible)
|
193
199
|
self._qrbXml.toggled.connect(self._selectionChanged)
|
194
200
|
self._qrbInfo.toggled.connect(self._selectionChanged)
|
201
|
+
self._qrbAnyEDF.toggled.connect(self._selectionChanged)
|
195
202
|
self._qrbUserEntry.toggled.connect(self._selectionChanged)
|
196
203
|
self._qleFilePattern.editingFinished.connect(self._selectionChanged)
|
197
204
|
|
@@ -223,6 +230,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
|
|
223
230
|
return (status.DET_END_XML,)
|
224
231
|
elif self._qrbInfo.isChecked():
|
225
232
|
return (status.PARSE_INFO_FILE,)
|
233
|
+
elif self._qrbAnyEDF.isChecked():
|
234
|
+
return (status.EDF_SCAN_END,)
|
226
235
|
elif self._qrbUserEntry.isChecked():
|
227
236
|
return (status.DET_END_USER_ENTRY, {"pattern": self._qleFilePattern.text()})
|
228
237
|
else:
|
@@ -233,6 +242,8 @@ class _SpecEDFObservationMethodSelector(qt.QGroupBox):
|
|
233
242
|
self._qrbXml.setChecked(True)
|
234
243
|
elif mode[0] == status.PARSE_INFO_FILE:
|
235
244
|
self._qrbInfo.setChecked(True)
|
245
|
+
elif mode[0] == status.EDF_SCAN_END:
|
246
|
+
self._qrbAnyEDF.setChecked(True)
|
236
247
|
elif mode[0] == status.DET_END_USER_ENTRY:
|
237
248
|
self._qrbUserEntry.setChecked(True)
|
238
249
|
if mode[1] not in (None, ""):
|
@@ -0,0 +1,116 @@
|
|
1
|
+
import os
|
2
|
+
from tomwer.gui.qlefilesystem import QLFileSystem
|
3
|
+
from silx.gui import qt, icons as silxicons
|
4
|
+
from tomwer.io.utils import get_default_directory
|
5
|
+
|
6
|
+
|
7
|
+
class ControlWidget(qt.QWidget):
|
8
|
+
_TXT_STOP_OBS = "Stop observation"
|
9
|
+
_TXT_START_OBS = "Start observation"
|
10
|
+
|
11
|
+
def __init__(self, parent=None, **kwargs) -> None:
|
12
|
+
super().__init__(parent, **kwargs)
|
13
|
+
self.setLayout(qt.QVBoxLayout())
|
14
|
+
layout = self.layout()
|
15
|
+
|
16
|
+
self.mystatusBar = qt.QStatusBar(parent=self)
|
17
|
+
self._qlInfo = qt.QLabel(parent=self)
|
18
|
+
|
19
|
+
layout.addWidget(self._getFolderSelection())
|
20
|
+
layout.addWidget(self._qlInfo)
|
21
|
+
layout.addWidget(self._buildFilterWidget())
|
22
|
+
layout.addWidget(self._buildStartStopButton())
|
23
|
+
layout.addWidget(self.mystatusBar)
|
24
|
+
|
25
|
+
spacer = qt.QWidget(self)
|
26
|
+
spacer.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Expanding)
|
27
|
+
layout.addWidget(spacer)
|
28
|
+
|
29
|
+
def _getFolderSelection(self):
|
30
|
+
"""
|
31
|
+
Return the widget used for the folder selection
|
32
|
+
"""
|
33
|
+
widget = qt.QWidget(self)
|
34
|
+
layout = qt.QHBoxLayout()
|
35
|
+
|
36
|
+
self._qtbSelectFolder = qt.QPushButton("Select folder", parent=widget)
|
37
|
+
self._qtbSelectFolder.setAutoDefault(True)
|
38
|
+
self._qtbSelectFolder.clicked.connect(self._setFolderPath)
|
39
|
+
|
40
|
+
self._qteFolderSelected = QLFileSystem("", parent=widget)
|
41
|
+
|
42
|
+
layout.setContentsMargins(0, 0, 0, 0)
|
43
|
+
layout.setSpacing(0)
|
44
|
+
|
45
|
+
layout.addWidget(self._qteFolderSelected)
|
46
|
+
layout.addWidget(self._qtbSelectFolder)
|
47
|
+
|
48
|
+
self.animated_icon = silxicons.getWaitIcon()
|
49
|
+
self._stateLabel = qt.QLabel(parent=widget)
|
50
|
+
self.animated_icon.register(self._stateLabel)
|
51
|
+
|
52
|
+
self._stateLabel.setFixedWidth(30)
|
53
|
+
layout.addWidget(self._stateLabel)
|
54
|
+
|
55
|
+
widget.setLayout(layout)
|
56
|
+
return widget
|
57
|
+
|
58
|
+
def _buildFilterWidget(self):
|
59
|
+
widget = qt.QWidget(self)
|
60
|
+
layout = qt.QHBoxLayout()
|
61
|
+
widget.setLayout(layout)
|
62
|
+
widget.layout().addWidget(qt.QLabel("filter"))
|
63
|
+
self._filterQLE = qt.QLineEdit("", self)
|
64
|
+
self._filterQLE.setToolTip(
|
65
|
+
"You can provide a Linux Regular Expression that will insure only file fitting the expression will be discovered"
|
66
|
+
)
|
67
|
+
self._filterQLE.setPlaceholderText("*file_pattern*")
|
68
|
+
widget.layout().addWidget(self._filterQLE)
|
69
|
+
|
70
|
+
return widget
|
71
|
+
|
72
|
+
def _buildStartStopButton(self):
|
73
|
+
"""
|
74
|
+
Build the start/stop button in a QHLayout with one spacer on the left
|
75
|
+
and one on the right
|
76
|
+
"""
|
77
|
+
widget = qt.QWidget(self)
|
78
|
+
layout = qt.QHBoxLayout()
|
79
|
+
widget.setLayout(layout)
|
80
|
+
|
81
|
+
# left spacer
|
82
|
+
spacerL = qt.QWidget(widget)
|
83
|
+
spacerL.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Minimum)
|
84
|
+
layout.addWidget(spacerL)
|
85
|
+
|
86
|
+
# button
|
87
|
+
self._qpbstartstop = qt.QPushButton(self._TXT_START_OBS)
|
88
|
+
self._qpbstartstop.setAutoDefault(True)
|
89
|
+
layout.addWidget(self._qpbstartstop)
|
90
|
+
|
91
|
+
# right spacer
|
92
|
+
spacerR = qt.QWidget(widget)
|
93
|
+
spacerR.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Minimum)
|
94
|
+
layout.addWidget(spacerR)
|
95
|
+
|
96
|
+
return widget
|
97
|
+
|
98
|
+
def _setFolderPath(self): # pragma: no cover
|
99
|
+
"""
|
100
|
+
Ask the user the path to the folder to observe
|
101
|
+
"""
|
102
|
+
defaultDirectory = self.getFolderObserved()
|
103
|
+
if defaultDirectory is None or not os.path.isdir(defaultDirectory):
|
104
|
+
if os.path.isdir(self.DEFAULT_DIRECTORY):
|
105
|
+
defaultDirectory = self.DEFAULT_DIRECTORY
|
106
|
+
if defaultDirectory is None:
|
107
|
+
defaultDirectory = get_default_directory()
|
108
|
+
|
109
|
+
dialog = qt.QFileDialog(self, directory=defaultDirectory)
|
110
|
+
dialog.setFileMode(qt.QFileDialog.DirectoryOnly)
|
111
|
+
|
112
|
+
if not dialog.exec_():
|
113
|
+
dialog.close()
|
114
|
+
return
|
115
|
+
|
116
|
+
self.setFolderObserved(dialog.selectedFiles()[0])
|