tryton 7.0.9__tar.gz → 7.0.11__tar.gz
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.
Potentially problematic release.
This version of tryton might be problematic. Click here for more details.
- {tryton-7.0.9 → tryton-7.0.11}/CHANGELOG +10 -0
- {tryton-7.0.9 → tryton-7.0.11}/PKG-INFO +1 -1
- {tryton-7.0.9 → tryton-7.0.11}/bin/tryton +2 -1
- {tryton-7.0.9 → tryton-7.0.11}/setup-freeze.py +1 -2
- {tryton-7.0.9 → tryton-7.0.11}/tryton/__init__.py +1 -1
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/common.py +10 -3
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/datetime_.py +3 -1
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/uk/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/model/field.py +48 -18
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/screen/screen.py +60 -36
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +12 -7
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/document.py +9 -10
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/list_gtk/widget.py +21 -1
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/win_form.py +8 -6
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/win_import.py +9 -4
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/wizard.py +2 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/jsonrpc.py +5 -1
- {tryton-7.0.9 → tryton-7.0.11}/tryton/plugins/__init__.py +5 -3
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/PKG-INFO +1 -1
- {tryton-7.0.9 → tryton-7.0.11}/COPYRIGHT +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/MANIFEST.in +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/README.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/catalan.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/darwin/gtk-3.0/gdk-pixbuf.loaders +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/darwin/gtk-3.0/gtk.immodules +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/conf.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/glossary.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/index.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/installation.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/releases.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/requirements-doc.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/doc/usage.rst +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/english.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/farsi.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/french.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/german.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/make-darwin-installer.sh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/make-win32-installer.sh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/portuguese.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/setup.cfg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/setup.nsi +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/setup.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/slovenian.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/spanish.nsh +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tox.ini +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/action/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/action/main.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/bus.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/client.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/button.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrendererbinary.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrendererbutton.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrendererclickablepixbuf.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrenderercombo.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrendererfloat.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrendererinteger.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrenderertext.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/cellrenderertoggle.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/completion.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/domain_inversion.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/domain_parser.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/entry_position.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/environment.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/focus.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/htmltextbuffer.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/number_entry.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/popup_menu.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/richtext.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/underline.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/common/widget_style.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/config.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/bg/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ca/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/cs/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/de/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/es/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/es_419/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/et/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fa/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fi/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/fr/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/hu/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/id/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/it/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/lo/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/lt/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/nl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/pl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/pt/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ro/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/ru/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/sl/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/tr/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/tryton.pot +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/uk/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-add.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-archive.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-arrow-down.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-arrow-left.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-arrow-right.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-arrow-up.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-attach.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-back.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-barcode-scanner.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-bookmark-border.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-bookmark.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-bookmarks.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-cancel.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-clear.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-close.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-copy.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-create.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-date.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-delete.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-download.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-drag.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-email.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-error.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-exit.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-export.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-filter.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-align-center.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-align-justify.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-align-left.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-align-right.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-bold.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-color-text.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-italic.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-format-underline.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-forward.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-history.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-icon.png +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-icon.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-import.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-info.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-launch.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-link.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-log.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-menu.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-note.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-ok.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-open.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-print.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-public.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-question.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-refresh.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-remove.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-save.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-search.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-send.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-sound-off.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-sound-on.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-star-border.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-star.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-switch.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-translate.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-unarchive.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-undo.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton-warning.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton.icns +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton.ico +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/pixmaps/tryton/tryton.svg +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/sounds/LICENSE +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/sounds/danger.wav +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/data/sounds/success.wav +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/device_cookie.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/exceptions.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/fingerprints.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/main.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/about.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/attachment.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/board.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/code_scanner.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/dblogin.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/email_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/form.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/infobar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/limit.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/log.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/nomodal.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/note.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/preference.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/revision.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/tabcontent.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_board/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_board/action.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_board/view_board.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/model/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/model/group.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/model/record.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/screen/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/calendar_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/calendar_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/calendar_gtk/dates_period.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/binary.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/calendar_.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/checkbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/dictionary.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/float.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/image.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/integer.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/many2many.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/many2one.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/multiselection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/one2many.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/one2one.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/progressbar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/pyson.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/reference.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/richtextbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/state_widget.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/textbox.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/url.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/form_gtk/widget.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph_gtk/bar.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph_gtk/graph.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph_gtk/line.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/graph_gtk/pie.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/list.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/list_form.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/list_gtk/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/view_form/view/screen_container.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/win_csv.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/win_export.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/win_search.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/gui/window/window.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/plugins/translation/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/pyson.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/rpc.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/tests/__init__.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/tests/test_common.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/tests/test_common_domain_parser.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/tests/test_common_selection.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/tests/test_common_timedelta.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton/translate.py +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.desktop +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/SOURCES.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/dependency_links.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/not-zip-safe +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/requires.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/tryton.egg-info/top_level.txt +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/win32/gtk-3.0/gdk-pixbuf.loaders +0 -0
- {tryton-7.0.9 → tryton-7.0.11}/win32/gtk-3.0/gtk.immodules +0 -0
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
|
|
2
|
+
Version 7.0.11 - 2024-07-01
|
|
3
|
+
---------------------------
|
|
4
|
+
* Bug fixes (see mercurial logs for details)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Version 7.0.10 - 2024-05-01
|
|
8
|
+
---------------------------
|
|
9
|
+
* Bug fixes (see mercurial logs for details)
|
|
10
|
+
|
|
11
|
+
|
|
2
12
|
Version 7.0.9 - 2024-04-17
|
|
3
13
|
--------------------------
|
|
4
14
|
* Bug fixes (see mercurial logs for details)
|
|
@@ -15,7 +15,8 @@ if hasattr(sys, 'frozen'):
|
|
|
15
15
|
share = os.path.join(prefix, 'share')
|
|
16
16
|
os.environ['GTK_EXE_PREFIX'] = prefix
|
|
17
17
|
os.environ['GTK_DATA_PREFIX'] = prefix
|
|
18
|
-
os.environ['EV_BACKENDS_DIR'] =
|
|
18
|
+
os.environ['EV_BACKENDS_DIR'] = os.path.join(
|
|
19
|
+
prefix, 'lib', 'evince', '4', 'backends')
|
|
19
20
|
os.environ['XDG_DATA_DIRS'] = share
|
|
20
21
|
os.environ['GDK_PIXBUF_MODULE_FILE'] = os.path.join(
|
|
21
22
|
share, 'gtk-3.0', 'gdk-pixbuf.loaders')
|
|
@@ -124,14 +124,13 @@ version = version.strip()
|
|
|
124
124
|
|
|
125
125
|
setup(name='tryton',
|
|
126
126
|
version=version,
|
|
127
|
-
packages=find_packages(),
|
|
128
127
|
options={
|
|
129
128
|
'build_exe': {
|
|
130
129
|
'no_compress': True,
|
|
131
130
|
'include_files': include_files,
|
|
132
131
|
'excludes': ['tkinter'],
|
|
133
132
|
'silent': True,
|
|
134
|
-
'packages': ['gi'],
|
|
133
|
+
'packages': find_packages() + ['gi'],
|
|
135
134
|
'include_msvcr': True,
|
|
136
135
|
},
|
|
137
136
|
'bdist_mac': {
|
|
@@ -229,7 +229,7 @@ class ModelAccess(object):
|
|
|
229
229
|
self._models = rpc.execute('model', 'ir.model', 'list_models',
|
|
230
230
|
rpc.CONTEXT)
|
|
231
231
|
except TrytonServerError:
|
|
232
|
-
|
|
232
|
+
logger.error("Unable to get model list.")
|
|
233
233
|
|
|
234
234
|
def __getitem__(self, model):
|
|
235
235
|
if model in self._access:
|
|
@@ -243,7 +243,14 @@ class ModelAccess(object):
|
|
|
243
243
|
access = rpc.execute('model', 'ir.model.access', 'get_access',
|
|
244
244
|
self._models[to_load], rpc.CONTEXT)
|
|
245
245
|
except TrytonServerError:
|
|
246
|
-
access
|
|
246
|
+
logger.error("Unable to get access for %s.", model)
|
|
247
|
+
access = {
|
|
248
|
+
model: {
|
|
249
|
+
'read': True,
|
|
250
|
+
'write': False,
|
|
251
|
+
'create': False,
|
|
252
|
+
'delete': False},
|
|
253
|
+
}
|
|
247
254
|
self._access.update(access)
|
|
248
255
|
return self._access[model]
|
|
249
256
|
|
|
@@ -1254,7 +1261,7 @@ class RPCProgress(object):
|
|
|
1254
1261
|
|
|
1255
1262
|
def return_():
|
|
1256
1263
|
if self.exception:
|
|
1257
|
-
raise self.exception
|
|
1264
|
+
raise RPCException(self.exception)
|
|
1258
1265
|
else:
|
|
1259
1266
|
return self.res
|
|
1260
1267
|
|
|
@@ -9,7 +9,9 @@ from gi.repository import Gdk, GObject, Gtk
|
|
|
9
9
|
|
|
10
10
|
from .common import IconFactory
|
|
11
11
|
|
|
12
|
-
__all__ = [
|
|
12
|
+
__all__ = [
|
|
13
|
+
'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
|
|
14
|
+
'date_parse']
|
|
13
15
|
|
|
14
16
|
_ = gettext.gettext
|
|
15
17
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -9,6 +9,7 @@ import os
|
|
|
9
9
|
import tempfile
|
|
10
10
|
from decimal import Decimal
|
|
11
11
|
from itertools import chain
|
|
12
|
+
from pathlib import Path
|
|
12
13
|
|
|
13
14
|
import tryton.common as common
|
|
14
15
|
from tryton.common import (
|
|
@@ -1048,26 +1049,56 @@ class ReferenceField(Field):
|
|
|
1048
1049
|
|
|
1049
1050
|
|
|
1050
1051
|
class _FileCache(object):
|
|
1051
|
-
def __init__(self,
|
|
1052
|
-
|
|
1052
|
+
def __init__(self, data=None):
|
|
1053
|
+
_, filename = tempfile.mkstemp(prefix='tryton_')
|
|
1054
|
+
self.path = Path(filename)
|
|
1055
|
+
self.suffixes = {}
|
|
1056
|
+
if data:
|
|
1057
|
+
with open(self.path, 'wb') as fp:
|
|
1058
|
+
fp.write(data)
|
|
1059
|
+
|
|
1060
|
+
@property
|
|
1061
|
+
def data(self):
|
|
1062
|
+
with open(self.path, 'rb') as fp:
|
|
1063
|
+
return fp.read()
|
|
1053
1064
|
|
|
1054
1065
|
def __del__(self):
|
|
1055
1066
|
try:
|
|
1056
1067
|
os.remove(self.path)
|
|
1057
1068
|
except IOError:
|
|
1058
1069
|
pass
|
|
1070
|
+
for path in self.suffixes.values():
|
|
1071
|
+
try:
|
|
1072
|
+
os.remove(path)
|
|
1073
|
+
except IOError:
|
|
1074
|
+
pass
|
|
1075
|
+
|
|
1076
|
+
def with_suffix(self, suffix):
|
|
1077
|
+
if suffix in self.suffixes:
|
|
1078
|
+
return self.suffixes[suffix]
|
|
1079
|
+
_, filename = tempfile.mkstemp(prefix='tryton_', suffix=suffix)
|
|
1080
|
+
self.suffixes[suffix] = path = Path(filename)
|
|
1081
|
+
with open(path, 'wb') as fp:
|
|
1082
|
+
fp.write(self.data)
|
|
1083
|
+
return path
|
|
1059
1084
|
|
|
1060
1085
|
|
|
1061
1086
|
class BinaryField(Field):
|
|
1062
1087
|
|
|
1063
1088
|
_default = None
|
|
1064
1089
|
|
|
1090
|
+
def _set_file_cache(self, record, data):
|
|
1091
|
+
if isinstance(data, str):
|
|
1092
|
+
data = data.encode('utf-8')
|
|
1093
|
+
file_cache = _FileCache(data)
|
|
1094
|
+
self.set(record, file_cache)
|
|
1095
|
+
return file_cache
|
|
1096
|
+
|
|
1065
1097
|
def get(self, record):
|
|
1066
1098
|
result = record.value.get(self.name, self._default)
|
|
1067
1099
|
if isinstance(result, _FileCache):
|
|
1068
1100
|
try:
|
|
1069
|
-
|
|
1070
|
-
result = fp.read()
|
|
1101
|
+
result = result.data
|
|
1071
1102
|
except IOError:
|
|
1072
1103
|
result = self.get_data(record)
|
|
1073
1104
|
return result
|
|
@@ -1076,13 +1107,7 @@ class BinaryField(Field):
|
|
|
1076
1107
|
return self.get(record)
|
|
1077
1108
|
|
|
1078
1109
|
def set_client(self, record, value, force_change=False):
|
|
1079
|
-
|
|
1080
|
-
data = value or b''
|
|
1081
|
-
if isinstance(data, str):
|
|
1082
|
-
data = data.encode('utf-8')
|
|
1083
|
-
with open(filename, 'wb') as fp:
|
|
1084
|
-
fp.write(data)
|
|
1085
|
-
self.set(record, _FileCache(filename))
|
|
1110
|
+
self._set_file_cache(record, value or b'')
|
|
1086
1111
|
self.sig_changed(record)
|
|
1087
1112
|
record.validate(softvalidation=True)
|
|
1088
1113
|
record.set_modified(self.name)
|
|
@@ -1106,15 +1131,20 @@ class BinaryField(Field):
|
|
|
1106
1131
|
[record.id], [self.name], context=context)
|
|
1107
1132
|
except RPCException:
|
|
1108
1133
|
return b''
|
|
1109
|
-
|
|
1110
|
-
data = values[self.name] or b''
|
|
1111
|
-
if isinstance(data, str):
|
|
1112
|
-
data = data.encode('utf-8')
|
|
1113
|
-
with open(filename, 'wb') as fp:
|
|
1114
|
-
fp.write(data)
|
|
1115
|
-
self.set(record, _FileCache(filename))
|
|
1134
|
+
self._set_file_cache(record, values[self.name] or b'')
|
|
1116
1135
|
return self.get(record)
|
|
1117
1136
|
|
|
1137
|
+
def get_filename(self, record, suffix=None):
|
|
1138
|
+
data = self.get_data(record)
|
|
1139
|
+
file_cache = record.value.get(self.name)
|
|
1140
|
+
if not isinstance(file_cache, _FileCache):
|
|
1141
|
+
file_cache = self._set_file_cache(record, data)
|
|
1142
|
+
if suffix:
|
|
1143
|
+
filename = file_cache.with_suffix(suffix)
|
|
1144
|
+
else:
|
|
1145
|
+
filename = file_cache.path
|
|
1146
|
+
return filename
|
|
1147
|
+
|
|
1118
1148
|
|
|
1119
1149
|
class DictField(Field):
|
|
1120
1150
|
|
|
@@ -116,11 +116,10 @@ class Screen:
|
|
|
116
116
|
return child
|
|
117
117
|
|
|
118
118
|
# Remove first level Viewport and ScrolledWindow to fill the Vbox
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
]
|
|
123
|
-
remove_bin(widget)
|
|
119
|
+
remove_bin(self.context_screen.screen_container.viewport)
|
|
120
|
+
if self.context_screen.current_view:
|
|
121
|
+
remove_bin(
|
|
122
|
+
self.context_screen.current_view.widget.get_children()[0])
|
|
124
123
|
|
|
125
124
|
self.screen_container.filter_vbox.pack_start(
|
|
126
125
|
context_widget, expand=False, fill=True, padding=0)
|
|
@@ -520,7 +519,8 @@ class Screen:
|
|
|
520
519
|
self.group.destroy()
|
|
521
520
|
|
|
522
521
|
def default_row_activate(self):
|
|
523
|
-
if (self.current_view
|
|
522
|
+
if (self.current_view
|
|
523
|
+
and self.current_view.view_type == 'tree'
|
|
524
524
|
and int(self.current_view.attributes.get('keyword_open', 0))):
|
|
525
525
|
return Action.exec_keyword('tree_open', {
|
|
526
526
|
'model': self.model_name,
|
|
@@ -642,7 +642,7 @@ class Screen:
|
|
|
642
642
|
|
|
643
643
|
def new(self, default=True, defaults=None):
|
|
644
644
|
previous_view = self.current_view
|
|
645
|
-
if self.current_view.view_type == 'calendar':
|
|
645
|
+
if self.current_view and self.current_view.view_type == 'calendar':
|
|
646
646
|
selected_date = self.current_view.get_selected_date()
|
|
647
647
|
if self.current_view and not self.current_view.creatable:
|
|
648
648
|
self.switch_view(creatable=True)
|
|
@@ -695,16 +695,19 @@ class Screen:
|
|
|
695
695
|
|
|
696
696
|
def save_current(self):
|
|
697
697
|
if not self.current_record:
|
|
698
|
-
if self.current_view
|
|
698
|
+
if (self.current_view
|
|
699
|
+
and self.current_view.view_type == 'tree'
|
|
700
|
+
and len(self.group)):
|
|
699
701
|
self.current_record = self.group[0]
|
|
700
702
|
else:
|
|
701
703
|
return True
|
|
702
|
-
self.current_view.set_value()
|
|
703
704
|
saved = False
|
|
704
705
|
record_id = None
|
|
705
|
-
|
|
706
|
+
if self.current_view:
|
|
707
|
+
self.current_view.set_value()
|
|
708
|
+
fields = self.current_view.get_fields()
|
|
706
709
|
path = self.current_record.get_path(self.group)
|
|
707
|
-
if self.current_view.view_type == 'tree':
|
|
710
|
+
if self.current_view and self.current_view.view_type == 'tree':
|
|
708
711
|
# False value must be not saved
|
|
709
712
|
saved = all((
|
|
710
713
|
x is not False and x >= 0
|
|
@@ -714,7 +717,7 @@ class Screen:
|
|
|
714
717
|
record_id = self.current_record.save(force_reload=True)
|
|
715
718
|
# False value must be not saved
|
|
716
719
|
saved = record_id is not False and record_id >= 0
|
|
717
|
-
|
|
720
|
+
elif self.current_view:
|
|
718
721
|
self.set_cursor()
|
|
719
722
|
self.current_view.display()
|
|
720
723
|
return False
|
|
@@ -742,17 +745,19 @@ class Screen:
|
|
|
742
745
|
def get(self):
|
|
743
746
|
if not self.current_record:
|
|
744
747
|
return None
|
|
745
|
-
self.current_view
|
|
748
|
+
if self.current_view:
|
|
749
|
+
self.current_view.set_value()
|
|
746
750
|
return self.current_record.get()
|
|
747
751
|
|
|
748
752
|
def get_on_change_value(self):
|
|
749
753
|
if not self.current_record:
|
|
750
754
|
return None
|
|
751
|
-
self.current_view
|
|
755
|
+
if self.current_view:
|
|
756
|
+
self.current_view.set_value()
|
|
752
757
|
return self.current_record.get_on_change_value()
|
|
753
758
|
|
|
754
759
|
def modified(self):
|
|
755
|
-
if self.current_view.view_type != 'tree':
|
|
760
|
+
if self.current_view and self.current_view.view_type != 'tree':
|
|
756
761
|
if self.current_record:
|
|
757
762
|
if self.current_record.modified or self.current_record.id < 0:
|
|
758
763
|
return True
|
|
@@ -760,7 +765,7 @@ class Screen:
|
|
|
760
765
|
for record in self.group:
|
|
761
766
|
if record.modified or record.id < 0:
|
|
762
767
|
return True
|
|
763
|
-
if self.current_view.modified:
|
|
768
|
+
if self.current_view and self.current_view.modified:
|
|
764
769
|
return True
|
|
765
770
|
return False
|
|
766
771
|
|
|
@@ -829,6 +834,8 @@ class Screen:
|
|
|
829
834
|
|
|
830
835
|
def set_tree_state(self):
|
|
831
836
|
view = self.current_view
|
|
837
|
+
if not view:
|
|
838
|
+
return
|
|
832
839
|
if view.view_type not in {'tree', 'form', 'list-form'}:
|
|
833
840
|
return
|
|
834
841
|
if id(view) in self.tree_states_done:
|
|
@@ -938,12 +945,13 @@ class Screen:
|
|
|
938
945
|
|
|
939
946
|
def load(self, ids, set_cursor=True, modified=False, position=-1):
|
|
940
947
|
self.group.load(ids, modified=modified, position=position)
|
|
941
|
-
self.current_view
|
|
948
|
+
if self.current_view:
|
|
949
|
+
self.current_view.reset()
|
|
942
950
|
self.current_record = None
|
|
943
951
|
self.display(set_cursor=set_cursor)
|
|
944
952
|
|
|
945
953
|
def display(self, set_cursor=False):
|
|
946
|
-
if self.views:
|
|
954
|
+
if self.views and self.current_view:
|
|
947
955
|
self.search_active(self.current_view.view_type
|
|
948
956
|
in ('tree', 'graph', 'calendar'))
|
|
949
957
|
for view in self.views:
|
|
@@ -975,7 +983,8 @@ class Screen:
|
|
|
975
983
|
|
|
976
984
|
def _get_next_record(self, test=False):
|
|
977
985
|
view = self.current_view
|
|
978
|
-
if (view
|
|
986
|
+
if (view
|
|
987
|
+
and view.view_type in {'tree', 'form'}
|
|
979
988
|
and self.current_record
|
|
980
989
|
and self.current_record.group):
|
|
981
990
|
group = self.current_record.group
|
|
@@ -1003,12 +1012,14 @@ class Screen:
|
|
|
1003
1012
|
record = next
|
|
1004
1013
|
break
|
|
1005
1014
|
return record
|
|
1006
|
-
elif (view
|
|
1015
|
+
elif (view
|
|
1016
|
+
and view.view_type == 'list-form'
|
|
1017
|
+
and len(self.group)
|
|
1007
1018
|
and self.current_record in self.group):
|
|
1008
1019
|
idx = self.group.index(self.current_record)
|
|
1009
1020
|
if 0 <= idx < len(self.group) - 1:
|
|
1010
1021
|
return self.group[idx + 1]
|
|
1011
|
-
elif view.view_type == 'calendar':
|
|
1022
|
+
elif view and view.view_type == 'calendar':
|
|
1012
1023
|
record = self.current_record
|
|
1013
1024
|
goocalendar = view.widgets.get('goocalendar')
|
|
1014
1025
|
if goocalendar:
|
|
@@ -1042,15 +1053,18 @@ class Screen:
|
|
|
1042
1053
|
|
|
1043
1054
|
def display_next(self):
|
|
1044
1055
|
view = self.current_view
|
|
1045
|
-
view
|
|
1056
|
+
if view:
|
|
1057
|
+
view.set_value()
|
|
1046
1058
|
self.set_cursor(reset_view=False)
|
|
1047
1059
|
self.current_record = self._get_next_record()
|
|
1048
1060
|
self.set_cursor(reset_view=False)
|
|
1049
|
-
view
|
|
1061
|
+
if view:
|
|
1062
|
+
view.display()
|
|
1050
1063
|
|
|
1051
1064
|
def _get_prev_record(self, test=False):
|
|
1052
1065
|
view = self.current_view
|
|
1053
|
-
if (view
|
|
1066
|
+
if (view
|
|
1067
|
+
and view.view_type in {'tree', 'form'}
|
|
1054
1068
|
and self.current_record
|
|
1055
1069
|
and self.current_record.group):
|
|
1056
1070
|
group = self.current_record.group
|
|
@@ -1068,7 +1082,7 @@ class Screen:
|
|
|
1068
1082
|
if parent and record.model_name == parent.model_name:
|
|
1069
1083
|
record = parent
|
|
1070
1084
|
return record
|
|
1071
|
-
elif view.view_type == 'calendar':
|
|
1085
|
+
elif view and view.view_type == 'calendar':
|
|
1072
1086
|
record = self.current_record
|
|
1073
1087
|
goocalendar = view.widgets.get('goocalendar')
|
|
1074
1088
|
if goocalendar:
|
|
@@ -1093,7 +1107,9 @@ class Screen:
|
|
|
1093
1107
|
if prev_id >= 0:
|
|
1094
1108
|
return events[prev_id].record
|
|
1095
1109
|
break
|
|
1096
|
-
elif (view
|
|
1110
|
+
elif (view
|
|
1111
|
+
and view.view_type == 'list-form'
|
|
1112
|
+
and len(self.group)
|
|
1097
1113
|
and self.current_record in self.group):
|
|
1098
1114
|
idx = self.group.index(self.current_record)
|
|
1099
1115
|
if 0 < idx <= len(self.group) - 1:
|
|
@@ -1107,11 +1123,13 @@ class Screen:
|
|
|
1107
1123
|
|
|
1108
1124
|
def display_prev(self):
|
|
1109
1125
|
view = self.current_view
|
|
1110
|
-
view
|
|
1126
|
+
if view:
|
|
1127
|
+
view.set_value()
|
|
1111
1128
|
self.set_cursor(reset_view=False)
|
|
1112
1129
|
self.current_record = self._get_prev_record()
|
|
1113
1130
|
self.set_cursor(reset_view=False)
|
|
1114
|
-
view
|
|
1131
|
+
if view:
|
|
1132
|
+
view.display()
|
|
1115
1133
|
|
|
1116
1134
|
def invalid_message(self, record=None):
|
|
1117
1135
|
if record is None:
|
|
@@ -1184,7 +1202,7 @@ class Screen:
|
|
|
1184
1202
|
if not self.selected_records:
|
|
1185
1203
|
return []
|
|
1186
1204
|
|
|
1187
|
-
buttons = self.current_view.get_buttons()
|
|
1205
|
+
buttons = self.current_view.get_buttons() if self.current_view else []
|
|
1188
1206
|
|
|
1189
1207
|
for record in self.selected_records:
|
|
1190
1208
|
buttons = [b for b in buttons if is_active(record, b)]
|
|
@@ -1194,8 +1212,9 @@ class Screen:
|
|
|
1194
1212
|
|
|
1195
1213
|
def button(self, button):
|
|
1196
1214
|
'Execute button on the selected records'
|
|
1197
|
-
self.current_view
|
|
1198
|
-
|
|
1215
|
+
if self.current_view:
|
|
1216
|
+
self.current_view.set_value()
|
|
1217
|
+
fields = self.current_view.get_fields()
|
|
1199
1218
|
for record in self.selected_records:
|
|
1200
1219
|
domain = record.expr_eval(
|
|
1201
1220
|
button.get('states', {})).get('pre_validate', [])
|
|
@@ -1209,7 +1228,8 @@ class Screen:
|
|
|
1209
1228
|
if button.get('confirm', False) and not sur(button['confirm']):
|
|
1210
1229
|
return
|
|
1211
1230
|
if button.get('type', 'class') == 'class':
|
|
1212
|
-
|
|
1231
|
+
record_id = self.current_record.save(force_reload=False)
|
|
1232
|
+
if record_id is False or record_id < 0:
|
|
1213
1233
|
return
|
|
1214
1234
|
if button.get('type', 'class') == 'class':
|
|
1215
1235
|
self._button_class(button)
|
|
@@ -1240,6 +1260,7 @@ class Screen:
|
|
|
1240
1260
|
except RPCException:
|
|
1241
1261
|
action = None
|
|
1242
1262
|
self.reload(ids, written=True)
|
|
1263
|
+
self.record_saved()
|
|
1243
1264
|
if isinstance(action, str):
|
|
1244
1265
|
self.client_action(action)
|
|
1245
1266
|
elif action:
|
|
@@ -1276,7 +1297,9 @@ class Screen:
|
|
|
1276
1297
|
elif action.startswith('switch'):
|
|
1277
1298
|
self.switch_view(*action.split(None, 2)[1:])
|
|
1278
1299
|
elif action == 'reload':
|
|
1279
|
-
if (self.current_view
|
|
1300
|
+
if (self.current_view
|
|
1301
|
+
and self.current_view.view_type in [
|
|
1302
|
+
'tree', 'graph', 'calendar']
|
|
1280
1303
|
and not self.parent):
|
|
1281
1304
|
self.search_filter()
|
|
1282
1305
|
elif action == 'reload menu':
|
|
@@ -1306,7 +1329,7 @@ class Screen:
|
|
|
1306
1329
|
cls=JSONEncoder, separators=(',', ':'))))
|
|
1307
1330
|
path = [CONFIG['login.db'], 'model', self.model_name]
|
|
1308
1331
|
view_ids = [v.view_id for v in self.views] + self.view_ids
|
|
1309
|
-
if self.current_view.view_type != 'form':
|
|
1332
|
+
if self.current_view and self.current_view.view_type != 'form':
|
|
1310
1333
|
if self.search_value:
|
|
1311
1334
|
search_value = self.search_value
|
|
1312
1335
|
else:
|
|
@@ -1318,8 +1341,9 @@ class Screen:
|
|
|
1318
1341
|
separators=(',', ':'))))
|
|
1319
1342
|
elif self.current_record and self.current_record.id > -1:
|
|
1320
1343
|
path.append(str(self.current_record.id))
|
|
1321
|
-
|
|
1322
|
-
|
|
1344
|
+
if self.current_view:
|
|
1345
|
+
i = view_ids.index(self.current_view.view_id)
|
|
1346
|
+
view_ids = view_ids[i:] + view_ids[:i]
|
|
1323
1347
|
if view_ids:
|
|
1324
1348
|
query_string.append(('views', json.dumps(
|
|
1325
1349
|
view_ids, separators=(',', ':'))))
|
|
@@ -67,13 +67,18 @@ class Calendar_(goocalendar.Calendar):
|
|
|
67
67
|
self.current_domain_period.get_dates(True)
|
|
68
68
|
dtstart = self.attrs['dtstart']
|
|
69
69
|
dtend = self.attrs.get('dtend') or dtstart
|
|
70
|
-
domain = [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
['
|
|
74
|
-
(
|
|
75
|
-
|
|
76
|
-
(dtend, '
|
|
70
|
+
domain = [
|
|
71
|
+
(dtstart, '!=', None),
|
|
72
|
+
(dtend, '!=', None),
|
|
73
|
+
['OR',
|
|
74
|
+
['AND', (dtstart, '>=', first_datetime),
|
|
75
|
+
(dtstart, '<', last_datetime)],
|
|
76
|
+
['AND', (dtend, '>=', first_datetime),
|
|
77
|
+
(dtend, '<', last_datetime)],
|
|
78
|
+
['AND', (dtstart, '<', first_datetime),
|
|
79
|
+
(dtend, '>', last_datetime)],
|
|
80
|
+
],
|
|
81
|
+
]
|
|
77
82
|
return domain
|
|
78
83
|
|
|
79
84
|
def get_colors(self, record):
|
|
@@ -171,10 +171,9 @@ class Password(Char):
|
|
|
171
171
|
self.widget.pack_start(
|
|
172
172
|
self.visibility_checkbox, expand=False, fill=True, padding=0)
|
|
173
173
|
|
|
174
|
-
def _readonly_set(self, value):
|
|
175
|
-
super(Char, self)._readonly_set(value)
|
|
176
|
-
self.entry.set_editable(not value)
|
|
177
|
-
self.visibility_checkbox.props.visible = not value
|
|
178
|
-
|
|
179
174
|
def toggle_visibility(self, button):
|
|
180
|
-
|
|
175
|
+
if self.autocomplete:
|
|
176
|
+
entry = self.entry.get_child()
|
|
177
|
+
else:
|
|
178
|
+
entry = self.entry
|
|
179
|
+
entry.props.visibility = not self.entry.props.visibility
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
2
2
|
# this repository contains the full copyright notices and license terms.
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from tempfile import NamedTemporaryFile
|
|
5
4
|
|
|
6
5
|
from gi.repository import Gdk, GLib, Gtk
|
|
7
6
|
|
|
@@ -76,17 +75,17 @@ class Document(BinaryMixin, Widget):
|
|
|
76
75
|
self.image.hide()
|
|
77
76
|
if self.evince_view:
|
|
78
77
|
self.evince_scroll.show()
|
|
78
|
+
suffix = None
|
|
79
79
|
if self.filename_field:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
filename = self.filename_field.get(self.record)
|
|
81
|
+
if filename:
|
|
82
|
+
suffix = Path(filename).suffix
|
|
83
|
+
filename = Path(self.field.get_filename(self.record, suffix))
|
|
83
84
|
try:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
EvinceDocument.Document.factory_get_document(
|
|
89
|
-
path.as_uri()))
|
|
85
|
+
document = (
|
|
86
|
+
EvinceDocument.Document.factory_get_document_full(
|
|
87
|
+
filename.as_uri(),
|
|
88
|
+
EvinceDocument.DocumentLoadFlags.NONE))
|
|
90
89
|
model = EvinceView.DocumentModel()
|
|
91
90
|
model.set_document(document)
|
|
92
91
|
self.evince_view.set_model(model)
|
|
@@ -163,7 +163,8 @@ class EditableTreeView(TreeView):
|
|
|
163
163
|
for renderer in column.get_cells():
|
|
164
164
|
if renderer.props.editing:
|
|
165
165
|
widget = self.view.get_column_widget(column)
|
|
166
|
-
|
|
166
|
+
editable = widget.get_editable(renderer)
|
|
167
|
+
self.on_editing_done(editable, renderer)
|
|
167
168
|
return True
|
|
168
169
|
|
|
169
170
|
def on_keypressed(self, entry, event, renderer):
|