tryton 6.0.38__tar.gz → 6.0.39__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-6.0.38 → tryton-6.0.39}/CHANGELOG +5 -0
- {tryton-6.0.38 → tryton-6.0.39}/PKG-INFO +1 -1
- {tryton-6.0.38 → tryton-6.0.39}/setup-freeze.py +1 -2
- {tryton-6.0.38 → tryton-6.0.39}/tryton/__init__.py +1 -1
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/common.py +10 -3
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/datetime_.py +3 -1
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/screen/screen.py +58 -36
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/char.py +5 -6
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -1
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/widget.py +21 -1
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/wizard.py +2 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/jsonrpc.py +5 -1
- {tryton-6.0.38 → tryton-6.0.39}/tryton/plugins/__init__.py +5 -3
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/PKG-INFO +1 -1
- {tryton-6.0.38 → tryton-6.0.39}/COPYRIGHT +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/LICENSE +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/MANIFEST.in +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/README.rst +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/bin/tryton +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/catalan.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/darwin/gtk-3.0/gdk-pixbuf.loaders +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/darwin/gtk-3.0/gtk.immodules +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/doc/conf.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/doc/glossary.rst +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/doc/index.rst +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/doc/installation.rst +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/doc/usage.rst +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/english.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/farsi.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/french.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/german.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/make-darwin-installer.sh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/make-win32-installer.sh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/portuguese.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/setup.cfg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/setup.nsi +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/setup.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/slovenian.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/spanish.nsh +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tox.ini +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/action/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/action/main.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/bus.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/client.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/button.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrendererbinary.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrendererbutton.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrendererclickablepixbuf.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrenderercombo.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrendererfloat.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrendererinteger.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrenderertext.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/cellrenderertoggle.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/completion.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/domain_inversion.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/domain_parser.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/entry_position.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/environment.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/focus.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/htmltextbuffer.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/number_entry.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/popup_menu.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/richtext.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/selection.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/timedelta.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/treeviewcontrol.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/underline.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/common/widget_style.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/config.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/bg/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ca/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/cs/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/de/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/es/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/es_419/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/et/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fa/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fi/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/fr/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/hu/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/id/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/it/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ja_JP/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/lo/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/lt/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/nl/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/pl/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/pt/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ro/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/ru/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/sl/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/tr/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/tryton.pot +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/LICENSE +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-add.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-archive.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-down.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-left.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-right.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-arrow-up.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-attach.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-back.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmark-border.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmark.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-bookmarks.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-cancel.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-clear.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-close.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-copy.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-create.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-date.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-delete.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-drag.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-email.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-error.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-exit.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-export.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-filter.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-center.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-justify.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-left.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-align-right.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-bold.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-color-text.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-italic.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-format-underline.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-forward.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-history.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-icon.png +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-import.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-info.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-launch.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-link.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-log.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-menu.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-note.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-ok.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-open.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-print.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-public.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-question.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-refresh.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-remove.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-save.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-search.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-send.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-star-border.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-star.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-switch.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-translate.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-unarchive.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-undo.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton-warning.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.icns +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.ico +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/data/pixmaps/tryton/tryton.svg +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/device_cookie.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/exceptions.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/fingerprints.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/main.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/about.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/attachment.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/board.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/dblogin.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/email_.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/form.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/infobar.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/limit.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/nomodal.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/note.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/preference.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/revision.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/tabcontent.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_board/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_board/action.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_board/view_board.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/model/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/model/field.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/model/group.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/model/record.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/screen/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/dates_period.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/binary.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/calendar_.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/checkbox.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/dictionary.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/document.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/float.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/image.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/integer.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/many2many.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/many2one.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/multiselection.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/one2many.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/one2one.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/progressbar.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/pyson.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/reference.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/richtextbox.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/selection.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/state_widget.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/textbox.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/timedelta.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/url.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/form_gtk/widget.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/bar.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/graph.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/line.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/graph_gtk/pie.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/list.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_form.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/list_gtk/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/view_form/view/screen_container.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/win_csv.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/win_export.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/win_form.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/win_import.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/win_search.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/gui/window/window.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/plugins/translation/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/pyson.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/rpc.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/signal_event.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/tests/__init__.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/tests/test_common_domain_parser.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/tests/test_common_selection.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/tests/test_common_timedelta.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton/translate.py +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.desktop +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/SOURCES.txt +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/dependency_links.txt +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/not-zip-safe +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/requires.txt +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/tryton.egg-info/top_level.txt +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/win32/gtk-3.0/gdk-pixbuf.loaders +0 -0
- {tryton-6.0.38 → tryton-6.0.39}/win32/gtk-3.0/gtk.immodules +0 -0
|
@@ -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': {
|
|
@@ -219,7 +219,7 @@ class ModelAccess(object):
|
|
|
219
219
|
self._models = rpc.execute('model', 'ir.model', 'list_models',
|
|
220
220
|
rpc.CONTEXT)
|
|
221
221
|
except TrytonServerError:
|
|
222
|
-
|
|
222
|
+
logger.error("Unable to get model list.")
|
|
223
223
|
|
|
224
224
|
def __getitem__(self, model):
|
|
225
225
|
if model in self._access:
|
|
@@ -233,7 +233,14 @@ class ModelAccess(object):
|
|
|
233
233
|
access = rpc.execute('model', 'ir.model.access', 'get_access',
|
|
234
234
|
self._models[to_load], rpc.CONTEXT)
|
|
235
235
|
except TrytonServerError:
|
|
236
|
-
access
|
|
236
|
+
logger.error("Unable to get access for %s.", model)
|
|
237
|
+
access = {
|
|
238
|
+
model: {
|
|
239
|
+
'read': True,
|
|
240
|
+
'write': False,
|
|
241
|
+
'create': False,
|
|
242
|
+
'delete': False},
|
|
243
|
+
}
|
|
237
244
|
self._access.update(access)
|
|
238
245
|
return self._access[model]
|
|
239
246
|
|
|
@@ -1135,7 +1142,7 @@ class RPCProgress(object):
|
|
|
1135
1142
|
|
|
1136
1143
|
def return_():
|
|
1137
1144
|
if self.exception:
|
|
1138
|
-
raise self.exception
|
|
1145
|
+
raise RPCException(self.exception)
|
|
1139
1146
|
else:
|
|
1140
1147
|
return self.res
|
|
1141
1148
|
|
|
@@ -10,7 +10,9 @@ from dateutil.parser import parse
|
|
|
10
10
|
|
|
11
11
|
from .common import IconFactory
|
|
12
12
|
|
|
13
|
-
__all__ = [
|
|
13
|
+
__all__ = [
|
|
14
|
+
'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime',
|
|
15
|
+
'date_parse']
|
|
14
16
|
|
|
15
17
|
_ = gettext.gettext
|
|
16
18
|
|
|
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
|
|
@@ -113,11 +113,10 @@ class Screen(SignalEvent):
|
|
|
113
113
|
return child
|
|
114
114
|
|
|
115
115
|
# Remove first level Viewport and ScrolledWindow to fill the Vbox
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
]
|
|
120
|
-
remove_bin(widget)
|
|
116
|
+
remove_bin(self.context_screen.screen_container.viewport)
|
|
117
|
+
if self.context_screen.current_view:
|
|
118
|
+
remove_bin(
|
|
119
|
+
self.context_screen.current_view.widget.get_children()[0])
|
|
121
120
|
|
|
122
121
|
self.screen_container.filter_vbox.pack_start(
|
|
123
122
|
context_widget, expand=False, fill=True, padding=0)
|
|
@@ -490,7 +489,8 @@ class Screen(SignalEvent):
|
|
|
490
489
|
self.group.destroy()
|
|
491
490
|
|
|
492
491
|
def default_row_activate(self):
|
|
493
|
-
if (self.current_view
|
|
492
|
+
if (self.current_view
|
|
493
|
+
and self.current_view.view_type == 'tree'
|
|
494
494
|
and int(self.current_view.attributes.get('keyword_open', 0))):
|
|
495
495
|
return Action.exec_keyword('tree_open', {
|
|
496
496
|
'model': self.model_name,
|
|
@@ -611,7 +611,7 @@ class Screen(SignalEvent):
|
|
|
611
611
|
|
|
612
612
|
def new(self, default=True, rec_name=None):
|
|
613
613
|
previous_view = self.current_view
|
|
614
|
-
if self.current_view.view_type == 'calendar':
|
|
614
|
+
if self.current_view and self.current_view.view_type == 'calendar':
|
|
615
615
|
selected_date = self.current_view.get_selected_date()
|
|
616
616
|
if self.current_view and not self.current_view.editable:
|
|
617
617
|
self.switch_view('form', display=False)
|
|
@@ -664,16 +664,19 @@ class Screen(SignalEvent):
|
|
|
664
664
|
|
|
665
665
|
def save_current(self):
|
|
666
666
|
if not self.current_record:
|
|
667
|
-
if self.current_view
|
|
667
|
+
if (self.current_view
|
|
668
|
+
and self.current_view.view_type == 'tree'
|
|
669
|
+
and len(self.group)):
|
|
668
670
|
self.current_record = self.group[0]
|
|
669
671
|
else:
|
|
670
672
|
return True
|
|
671
|
-
self.current_view.set_value()
|
|
672
673
|
saved = False
|
|
673
674
|
record_id = None
|
|
674
|
-
|
|
675
|
+
if self.current_view:
|
|
676
|
+
self.current_view.set_value()
|
|
677
|
+
fields = self.current_view.get_fields()
|
|
675
678
|
path = self.current_record.get_path(self.group)
|
|
676
|
-
if self.current_view.view_type == 'tree':
|
|
679
|
+
if self.current_view and self.current_view.view_type == 'tree':
|
|
677
680
|
# False value must be not saved
|
|
678
681
|
saved = all((
|
|
679
682
|
x is not False and x >= 0
|
|
@@ -683,7 +686,7 @@ class Screen(SignalEvent):
|
|
|
683
686
|
record_id = self.current_record.save(force_reload=True)
|
|
684
687
|
# False value must be not saved
|
|
685
688
|
saved = record_id is not False and record_id >= 0
|
|
686
|
-
|
|
689
|
+
elif self.current_view:
|
|
687
690
|
self.set_cursor()
|
|
688
691
|
self.current_view.display()
|
|
689
692
|
return False
|
|
@@ -711,17 +714,19 @@ class Screen(SignalEvent):
|
|
|
711
714
|
def get(self):
|
|
712
715
|
if not self.current_record:
|
|
713
716
|
return None
|
|
714
|
-
self.current_view
|
|
717
|
+
if self.current_view:
|
|
718
|
+
self.current_view.set_value()
|
|
715
719
|
return self.current_record.get()
|
|
716
720
|
|
|
717
721
|
def get_on_change_value(self):
|
|
718
722
|
if not self.current_record:
|
|
719
723
|
return None
|
|
720
|
-
self.current_view
|
|
724
|
+
if self.current_view:
|
|
725
|
+
self.current_view.set_value()
|
|
721
726
|
return self.current_record.get_on_change_value()
|
|
722
727
|
|
|
723
728
|
def modified(self):
|
|
724
|
-
if self.current_view.view_type != 'tree':
|
|
729
|
+
if self.current_view and self.current_view.view_type != 'tree':
|
|
725
730
|
if self.current_record:
|
|
726
731
|
if self.current_record.modified or self.current_record.id < 0:
|
|
727
732
|
return True
|
|
@@ -729,7 +734,7 @@ class Screen(SignalEvent):
|
|
|
729
734
|
for record in self.group:
|
|
730
735
|
if record.modified or record.id < 0:
|
|
731
736
|
return True
|
|
732
|
-
if self.current_view.modified:
|
|
737
|
+
if self.current_view and self.current_view.modified:
|
|
733
738
|
return True
|
|
734
739
|
return False
|
|
735
740
|
|
|
@@ -807,6 +812,8 @@ class Screen(SignalEvent):
|
|
|
807
812
|
|
|
808
813
|
def set_tree_state(self):
|
|
809
814
|
view = self.current_view
|
|
815
|
+
if not view:
|
|
816
|
+
return
|
|
810
817
|
if view.view_type not in ('tree', 'form'):
|
|
811
818
|
return
|
|
812
819
|
if id(view) in self.tree_states_done:
|
|
@@ -909,8 +916,10 @@ class Screen(SignalEvent):
|
|
|
909
916
|
|
|
910
917
|
def load(self, ids, set_cursor=True, modified=False, position=-1):
|
|
911
918
|
self.group.load(ids, modified=modified, position=position)
|
|
912
|
-
self.current_view
|
|
913
|
-
|
|
919
|
+
if self.current_view:
|
|
920
|
+
self.current_view.reset()
|
|
921
|
+
if (ids and self.current_view
|
|
922
|
+
and self.current_view.view_type != 'calendar'):
|
|
914
923
|
self.display(ids[0])
|
|
915
924
|
else:
|
|
916
925
|
self.current_record = None
|
|
@@ -929,7 +938,7 @@ class Screen(SignalEvent):
|
|
|
929
938
|
self.current_record = self.group[0]
|
|
930
939
|
else:
|
|
931
940
|
self.current_record = None
|
|
932
|
-
if self.views:
|
|
941
|
+
if self.views and self.current_view:
|
|
933
942
|
self.search_active(self.current_view.view_type
|
|
934
943
|
in ('tree', 'graph', 'calendar'))
|
|
935
944
|
for view in self.views:
|
|
@@ -974,7 +983,8 @@ class Screen(SignalEvent):
|
|
|
974
983
|
model = view.treeview.get_model()
|
|
975
984
|
iter_ = model.get_iter(end)
|
|
976
985
|
self.current_record = model.get_value(iter_, 0)
|
|
977
|
-
elif (view
|
|
986
|
+
elif (view
|
|
987
|
+
and view.view_type == 'form'
|
|
978
988
|
and self.current_record
|
|
979
989
|
and self.current_record.group):
|
|
980
990
|
group = self.current_record.group
|
|
@@ -1002,12 +1012,14 @@ class Screen(SignalEvent):
|
|
|
1002
1012
|
record = next
|
|
1003
1013
|
break
|
|
1004
1014
|
self.current_record = record
|
|
1005
|
-
elif (view
|
|
1015
|
+
elif (view
|
|
1016
|
+
and view.view_type == 'list-form'
|
|
1017
|
+
and len(self.group)
|
|
1006
1018
|
and self.current_record in self.group):
|
|
1007
1019
|
idx = self.group.index(self.current_record)
|
|
1008
1020
|
if 0 <= idx < len(self.group) - 1:
|
|
1009
1021
|
self.current_record = self.group[idx + 1]
|
|
1010
|
-
elif view.view_type == 'calendar':
|
|
1022
|
+
elif view and view.view_type == 'calendar':
|
|
1011
1023
|
record = self.current_record
|
|
1012
1024
|
goocalendar = view.widgets.get('goocalendar')
|
|
1013
1025
|
if goocalendar:
|
|
@@ -1039,9 +1051,10 @@ class Screen(SignalEvent):
|
|
|
1039
1051
|
|
|
1040
1052
|
def display_prev(self):
|
|
1041
1053
|
view = self.current_view
|
|
1042
|
-
view
|
|
1054
|
+
if view:
|
|
1055
|
+
view.set_value()
|
|
1043
1056
|
self.set_cursor(reset_view=False)
|
|
1044
|
-
if view.view_type == 'tree' and len(self.group):
|
|
1057
|
+
if view and view.view_type == 'tree' and len(self.group):
|
|
1045
1058
|
range_ = view.treeview.get_visible_range()
|
|
1046
1059
|
if range_:
|
|
1047
1060
|
start, end = range_
|
|
@@ -1052,7 +1065,8 @@ class Screen(SignalEvent):
|
|
|
1052
1065
|
model = view.treeview.get_model()
|
|
1053
1066
|
iter_ = model.get_iter(start)
|
|
1054
1067
|
self.current_record = model.get_value(iter_, 0)
|
|
1055
|
-
elif (view
|
|
1068
|
+
elif (view
|
|
1069
|
+
and view.view_type == 'form'
|
|
1056
1070
|
and self.current_record
|
|
1057
1071
|
and self.current_record.group):
|
|
1058
1072
|
group = self.current_record.group
|
|
@@ -1070,7 +1084,7 @@ class Screen(SignalEvent):
|
|
|
1070
1084
|
if parent and record.model_name == parent.model_name:
|
|
1071
1085
|
record = parent
|
|
1072
1086
|
self.current_record = record
|
|
1073
|
-
elif view.view_type == 'calendar':
|
|
1087
|
+
elif view and view.view_type == 'calendar':
|
|
1074
1088
|
record = self.current_record
|
|
1075
1089
|
goocalendar = view.widgets.get('goocalendar')
|
|
1076
1090
|
if goocalendar:
|
|
@@ -1095,7 +1109,9 @@ class Screen(SignalEvent):
|
|
|
1095
1109
|
if prev_id >= 0:
|
|
1096
1110
|
self.current_record = events[prev_id].record
|
|
1097
1111
|
break
|
|
1098
|
-
elif (view
|
|
1112
|
+
elif (view
|
|
1113
|
+
and view.view_type == 'list-form'
|
|
1114
|
+
and len(self.group)
|
|
1099
1115
|
and self.current_record in self.group):
|
|
1100
1116
|
idx = self.group.index(self.current_record)
|
|
1101
1117
|
if 0 < idx <= len(self.group) - 1:
|
|
@@ -1103,7 +1119,8 @@ class Screen(SignalEvent):
|
|
|
1103
1119
|
else:
|
|
1104
1120
|
self.current_record = self.group[-1] if len(self.group) else None
|
|
1105
1121
|
self.set_cursor(reset_view=False)
|
|
1106
|
-
view
|
|
1122
|
+
if view:
|
|
1123
|
+
view.display()
|
|
1107
1124
|
|
|
1108
1125
|
def invalid_message(self, record=None):
|
|
1109
1126
|
if record is None:
|
|
@@ -1174,7 +1191,7 @@ class Screen(SignalEvent):
|
|
|
1174
1191
|
if not self.selected_records:
|
|
1175
1192
|
return []
|
|
1176
1193
|
|
|
1177
|
-
buttons = self.current_view.get_buttons()
|
|
1194
|
+
buttons = self.current_view.get_buttons() if self.current_view else []
|
|
1178
1195
|
|
|
1179
1196
|
for record in self.selected_records:
|
|
1180
1197
|
buttons = [b for b in buttons if is_active(record, b)]
|
|
@@ -1184,8 +1201,9 @@ class Screen(SignalEvent):
|
|
|
1184
1201
|
|
|
1185
1202
|
def button(self, button):
|
|
1186
1203
|
'Execute button on the selected records'
|
|
1187
|
-
self.current_view
|
|
1188
|
-
|
|
1204
|
+
if self.current_view:
|
|
1205
|
+
self.current_view.set_value()
|
|
1206
|
+
fields = self.current_view.get_fields()
|
|
1189
1207
|
for record in self.selected_records:
|
|
1190
1208
|
domain = record.expr_eval(
|
|
1191
1209
|
button.get('states', {})).get('pre_validate', [])
|
|
@@ -1199,7 +1217,8 @@ class Screen(SignalEvent):
|
|
|
1199
1217
|
if button.get('confirm', False) and not sur(button['confirm']):
|
|
1200
1218
|
return
|
|
1201
1219
|
if button.get('type', 'class') == 'class':
|
|
1202
|
-
|
|
1220
|
+
record_id = self.current_record.save(force_reload=False)
|
|
1221
|
+
if record_id is False or record_id < 0:
|
|
1203
1222
|
return
|
|
1204
1223
|
if button.get('type', 'class') == 'class':
|
|
1205
1224
|
self._button_class(button)
|
|
@@ -1266,7 +1285,9 @@ class Screen(SignalEvent):
|
|
|
1266
1285
|
elif action.startswith('switch'):
|
|
1267
1286
|
self.switch_view(*action.split(None, 2)[1:])
|
|
1268
1287
|
elif action == 'reload':
|
|
1269
|
-
if (self.current_view
|
|
1288
|
+
if (self.current_view
|
|
1289
|
+
and self.current_view.view_type in [
|
|
1290
|
+
'tree', 'graph', 'calendar']
|
|
1270
1291
|
and not self.parent):
|
|
1271
1292
|
self.search_filter()
|
|
1272
1293
|
elif action == 'reload menu':
|
|
@@ -1296,7 +1317,7 @@ class Screen(SignalEvent):
|
|
|
1296
1317
|
cls=JSONEncoder, separators=(',', ':'))))
|
|
1297
1318
|
path = [CONFIG['login.db'], 'model', self.model_name]
|
|
1298
1319
|
view_ids = [v.view_id for v in self.views] + self.view_ids
|
|
1299
|
-
if self.current_view.view_type != 'form':
|
|
1320
|
+
if self.current_view and self.current_view.view_type != 'form':
|
|
1300
1321
|
if self.search_value:
|
|
1301
1322
|
search_value = self.search_value
|
|
1302
1323
|
else:
|
|
@@ -1308,8 +1329,9 @@ class Screen(SignalEvent):
|
|
|
1308
1329
|
separators=(',', ':'))))
|
|
1309
1330
|
elif self.current_record and self.current_record.id > -1:
|
|
1310
1331
|
path.append(str(self.current_record.id))
|
|
1311
|
-
|
|
1312
|
-
|
|
1332
|
+
if self.current_view:
|
|
1333
|
+
i = view_ids.index(self.current_view.view_id)
|
|
1334
|
+
view_ids = view_ids[i:] + view_ids[:i]
|
|
1313
1335
|
if view_ids:
|
|
1314
1336
|
query_string.append(('views', json.dumps(
|
|
1315
1337
|
view_ids, separators=(',', ':'))))
|
|
@@ -170,10 +170,9 @@ class Password(Char):
|
|
|
170
170
|
self.widget.pack_start(
|
|
171
171
|
self.visibility_checkbox, expand=False, fill=True, padding=0)
|
|
172
172
|
|
|
173
|
-
def _readonly_set(self, value):
|
|
174
|
-
super(Char, self)._readonly_set(value)
|
|
175
|
-
self.entry.set_editable(not value)
|
|
176
|
-
self.visibility_checkbox.props.visible = not value
|
|
177
|
-
|
|
178
173
|
def toggle_visibility(self, button):
|
|
179
|
-
|
|
174
|
+
if self.autocomplete:
|
|
175
|
+
entry = self.entry.get_child()
|
|
176
|
+
else:
|
|
177
|
+
entry = self.entry
|
|
178
|
+
entry.props.visibility = not self.entry.props.visibility
|
|
@@ -153,7 +153,8 @@ class EditableTreeView(TreeView):
|
|
|
153
153
|
for renderer in column.get_cells():
|
|
154
154
|
if renderer.props.editing:
|
|
155
155
|
widget = self.view.get_column_widget(column)
|
|
156
|
-
|
|
156
|
+
editable = widget.get_editable(renderer)
|
|
157
|
+
self.on_editing_done(editable, renderer)
|
|
157
158
|
return True
|
|
158
159
|
|
|
159
160
|
def on_keypressed(self, entry, event, renderer):
|
|
@@ -28,7 +28,8 @@ from tryton.common import data2pixbuf
|
|
|
28
28
|
from tryton.common.completion import get_completion, update_completion
|
|
29
29
|
from tryton.common.selection import (
|
|
30
30
|
SelectionMixin, PopdownMixin, selection_shortcuts)
|
|
31
|
-
from tryton.common.datetime_ import
|
|
31
|
+
from tryton.common.datetime_ import (
|
|
32
|
+
CellRendererDate, CellRendererTime, date_parse)
|
|
32
33
|
from tryton.common.domain_parser import quote
|
|
33
34
|
from tryton.config import CONFIG
|
|
34
35
|
|
|
@@ -358,6 +359,14 @@ class GenericText(Cell):
|
|
|
358
359
|
editable.connect('remove-widget', remove)
|
|
359
360
|
return False
|
|
360
361
|
|
|
362
|
+
def get_editable(self, renderer):
|
|
363
|
+
if self.renderer == renderer:
|
|
364
|
+
return self.editable
|
|
365
|
+
for cell in self.prefixes + self.suffixes:
|
|
366
|
+
editable = cell.get_editable(renderer)
|
|
367
|
+
if editable:
|
|
368
|
+
return editable
|
|
369
|
+
|
|
361
370
|
|
|
362
371
|
class Char(GenericText):
|
|
363
372
|
|
|
@@ -474,6 +483,17 @@ class Date(GenericText):
|
|
|
474
483
|
else:
|
|
475
484
|
return ''
|
|
476
485
|
|
|
486
|
+
def value_from_text(self, record, text, callback=None):
|
|
487
|
+
if isinstance(text, str):
|
|
488
|
+
field = record[self.attrs['name']]
|
|
489
|
+
try:
|
|
490
|
+
# Use a datetime instance and rely on field to convert to the
|
|
491
|
+
# proper type
|
|
492
|
+
text = date_parse(text, self.get_format(record, field))
|
|
493
|
+
except (ValueError, OverflowError):
|
|
494
|
+
text = None
|
|
495
|
+
return super().value_from_text(record, text, callback=callback)
|
|
496
|
+
|
|
477
497
|
|
|
478
498
|
class Time(Date):
|
|
479
499
|
|
|
@@ -130,7 +130,6 @@ class JSONUnmarshaller(object):
|
|
|
130
130
|
class Transport(xmlrpc.client.SafeTransport):
|
|
131
131
|
|
|
132
132
|
accept_gzip_encoding = True
|
|
133
|
-
encode_threshold = 1400 # common MTU
|
|
134
133
|
|
|
135
134
|
def __init__(
|
|
136
135
|
self, fingerprints=None, ca_certs=None, session=None):
|
|
@@ -233,6 +232,11 @@ class Transport(xmlrpc.client.SafeTransport):
|
|
|
233
232
|
self._connection[1].sock.settimeout(DEFAULT_TIMEOUT)
|
|
234
233
|
return self._connection[1]
|
|
235
234
|
|
|
235
|
+
@property
|
|
236
|
+
def encode_threshold(self):
|
|
237
|
+
if self.session:
|
|
238
|
+
return 1400 # common MTU
|
|
239
|
+
|
|
236
240
|
|
|
237
241
|
class ServerProxy(xmlrpc.client.ServerProxy):
|
|
238
242
|
__id = 0
|
|
@@ -24,9 +24,11 @@ def register():
|
|
|
24
24
|
imported = set()
|
|
25
25
|
for path in paths:
|
|
26
26
|
finder = importlib.machinery.FileFinder(
|
|
27
|
-
path,
|
|
28
|
-
|
|
29
|
-
importlib.machinery.SOURCE_SUFFIXES)
|
|
27
|
+
path,
|
|
28
|
+
(importlib.machinery.SourceFileLoader,
|
|
29
|
+
importlib.machinery.SOURCE_SUFFIXES),
|
|
30
|
+
(importlib.machinery.SourcelessFileLoader,
|
|
31
|
+
importlib.machinery.BYTECODE_SUFFIXES))
|
|
30
32
|
for plugin in os.listdir(path):
|
|
31
33
|
module = os.path.splitext(plugin)[0]
|
|
32
34
|
if (module.startswith('_') or module in imported):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|