# Version 3.1

## Version 3.1.1

🛠️ Bug fixes:

- ‘Apply’ button state is now correctly updated when modifying one of the following items:

  - `dataset.MultipleChoiceItem`

  - `dataset.dataitems.DictItem`

  - `dataset.dataitems.FloatArrayItem`

- Fixed minor deprecation and other issues related to locale

💥 Changes:

- Removed `--unattended` command line option for `pytest`:

  - Before: `pytest --unattended guidata` (to run tests without Qt event loop)

  - Now: `pytest guidata` (there is no use case for running tests with Qt event loop, so the `--unattended` option was removed and the unattended mode is now the default)

- Removed CHM documentation (obsolete format)

## Version 3.1.0

⚠ Exceptionally, this release contains the following API breaking changes:

- Moved `utils.update_dataset` to `dataset.conv.update_dataset`

- Moved `utils.restore_dataset` to `dataset.conv.restore_dataset`

✔ API simplification (backward compatible):

- Dataset items may now be imported from `guidata.dataset` instead of `guidata.dataset.dataitems`

- Dataset types may now be imported from `guidata.dataset` instead of `guidata.dataset.datatypes`

- Examples:

  - `from guidata.dataset.dataitems import FloatItem` becomes `from guidata.dataset import FloatItem`

  - `from guidata.dataset.datatypes import DataSet` becomes `from guidata.dataset import DataSet`

  - Or you may now write:

        import guidata.dataset as gds

        class MyParameters(gds.DataSet):
            """My parameters"""
            freq = gds.FloatItem("Frequency", default=1.0, min=0.0, nonzero=True)
            amp = gds.FloatItem("Amplitude", default=1.0, min=0.0)

💥 New features:

- New `dataset.create_dataset_from_dict`: create a dataset from a dictionary, using keys and values to create the dataset items

- New `dataset.create_dataset_from_func`: create a dataset from a function signature, using type annotations and default values to create the dataset items

- `dataset.dataitems.StringItem`:

  - Added argument `password` to hide text (useful for passwords)

  - Added argument `regexp` to validate text using a regular expression

- `dataset.dataitems.FileSaveItem`, `dataset.dataitems.FileOpenItem`, `dataset.dataitems.FilesOpenItem` and `dataset.dataitems.DirectoryItem`: added argument `regexp` to validate file/dir name using a regular expression

- `dataset.dataitems.DictItem`: added support for HDF5 and JSON serialization

- `dataset.io.h5fmt` and `dataset.io.jsonfmt`: added support for lists and dictionnaries serialization

♻ New PlotPyStack internal features:

- `widgets.about`: handle about dialog box informations (Python, Qt, Qt bindings, …)

- Renamed development environment variable `GUIDATA_PYTHONEXE` to `PPSTACK_PYTHONEXE`

🧹 Bug fixes:

- Fixed Qt6 compatibility issue with `QFontDatabase`