author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Mon, 17 Jan 2022 15:17:47 +0100 | |
changeset 3407 | 2f5c30054d50 |
parent 3279 | 5615e062a77d |
child 3303 | 0ffb41625592 |
child 3454 | 0b5ab53007a9 |
permissions | -rw-r--r-- |
2745 | 1 |
#!/usr/bin/env python |
2 |
# -*- coding: utf-8 -*- |
|
3 |
||
4 |
# This file is part of Beremiz |
|
3197
0f41c1e2c121
SVGHMI: split svghmi.py into hmi_tree.py + svghmi.py
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3193
diff
changeset
|
5 |
# Copyright (C) 2021: Edouard TISSERANT |
2745 | 6 |
# |
7 |
# See COPYING file for copyrights details. |
|
8 |
||
9 |
from __future__ import absolute_import |
|
10 |
import os |
|
2789 | 11 |
import hashlib |
2816 | 12 |
import weakref |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
13 |
import re |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
14 |
from threading import Thread, Lock |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
15 |
from functools import reduce |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
16 |
from itertools import izip |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
17 |
from operator import or_ |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
18 |
from tempfile import NamedTemporaryFile |
2745 | 19 |
|
20 |
import wx |
|
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
21 |
from wx.lib.scrolledpanel import ScrolledPanel |
2816 | 22 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
23 |
from lxml import etree |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
24 |
from lxml.etree import XSLTApplyError |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
25 |
from XSLTransform import XSLTransform |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
26 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
27 |
import util.paths as paths |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
28 |
from IDEFrame import EncodeFileSystemPath, DecodeFileSystemPath |
3201
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
29 |
from docutil import get_inkscape_path |
2745 | 30 |
|
2756
f94bc35a023e
SVGHMI: added extraction of SVG bounding boxes, obtained from "inkscape -S", and passed to XSLT transform as variable.
Edouard Tisserant
parents:
2753
diff
changeset
|
31 |
from util.ProcessLogger import ProcessLogger |
2816 | 32 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
33 |
ScriptDirectory = paths.AbsDir(__file__) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
34 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
35 |
HMITreeDndMagicWord = "text/beremiz-hmitree" |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
36 |
|
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
37 |
class HMITreeSelector(wx.TreeCtrl): |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
38 |
def __init__(self, parent): |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
39 |
|
3177
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
40 |
wx.TreeCtrl.__init__(self, parent, style=( |
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
41 |
wx.TR_MULTIPLE | |
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
42 |
wx.TR_HAS_BUTTONS | |
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
43 |
wx.SUNKEN_BORDER | |
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
44 |
wx.TR_LINES_AT_ROOT)) |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
45 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
46 |
self.ordered_items = [] |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
47 |
self.parent = parent |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
48 |
|
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
49 |
self.MakeTree() |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
50 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
51 |
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeNodeSelection) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
52 |
self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
53 |
|
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
54 |
def _recurseTree(self, current_hmitree_root, current_tc_root): |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
55 |
for c in current_hmitree_root.children: |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
56 |
if hasattr(c, "children"): |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
57 |
display_name = ('{} (class={})'.format(c.name, c.hmiclass)) \ |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
58 |
if c.hmiclass is not None else c.name |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
59 |
tc_child = self.AppendItem(current_tc_root, display_name) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
60 |
self.SetPyData(tc_child, c) |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
61 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
62 |
self._recurseTree(c,tc_child) |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
63 |
else: |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
64 |
display_name = '{} {}'.format(c.nodetype[4:], c.name) |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
65 |
tc_child = self.AppendItem(current_tc_root, display_name) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
66 |
self.SetPyData(tc_child, c) |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
67 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
68 |
def OnTreeNodeSelection(self, event): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
69 |
items = self.GetSelections() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
70 |
items_pydata = [self.GetPyData(item) for item in items] |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
71 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
72 |
# append new items to ordered item list |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
73 |
for item_pydata in items_pydata: |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
74 |
if item_pydata not in self.ordered_items: |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
75 |
self.ordered_items.append(item_pydata) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
76 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
77 |
# filter out vanished items |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
78 |
self.ordered_items = [ |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
79 |
item_pydata |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
80 |
for item_pydata in self.ordered_items |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
81 |
if item_pydata in items_pydata] |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
82 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
83 |
self.parent.OnHMITreeNodeSelection(self.ordered_items) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
84 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
85 |
def OnTreeBeginDrag(self, event): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
86 |
""" |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
87 |
Called when a drag is started in tree |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
88 |
@param event: wx.TreeEvent |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
89 |
""" |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
90 |
if self.ordered_items: |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
91 |
# Just send a recognizable mime-type, drop destination |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
92 |
# will get python data from parent |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
93 |
data = wx.CustomDataObject(HMITreeDndMagicWord) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
94 |
dragSource = wx.DropSource(self) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
95 |
dragSource.SetData(data) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
96 |
dragSource.DoDragDrop() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
97 |
|
3201
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
98 |
def MakeTree(self, hmi_tree_root=None): |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
99 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
100 |
self.Freeze() |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
101 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
102 |
self.root = None |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
103 |
self.DeleteAllItems() |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
104 |
|
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
105 |
root_display_name = _("Please build to see HMI Tree") \ |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
106 |
if hmi_tree_root is None else "HMI" |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
107 |
self.root = self.AddRoot(root_display_name) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
108 |
self.SetPyData(self.root, hmi_tree_root) |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
109 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
110 |
if hmi_tree_root is not None: |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
111 |
self._recurseTree(hmi_tree_root, self.root) |
3177
5a8abd549aa8
SVGHMI: Lighter display of HMI Tree, no more icons and use buttons. Auto expand root. Fix loading of HMI tree XML backup (hmiclass attribute wasn't kept).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3176
diff
changeset
|
112 |
self.Expand(self.root) |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
113 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
114 |
self.Thaw() |
2816 | 115 |
|
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
116 |
class WidgetPicker(wx.TreeCtrl): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
117 |
def __init__(self, parent, initialdir=None): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
118 |
wx.TreeCtrl.__init__(self, parent, style=( |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
119 |
wx.TR_MULTIPLE | |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
120 |
wx.TR_HAS_BUTTONS | |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
121 |
wx.SUNKEN_BORDER | |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
122 |
wx.TR_LINES_AT_ROOT)) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
123 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
124 |
self.MakeTree(initialdir) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
125 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
126 |
def _recurseTree(self, current_dir, current_tc_root, dirlist): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
127 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
128 |
recurse through subdirectories, but creates tree nodes |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
129 |
only when (sub)directory conbtains .svg file |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
130 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
131 |
res = [] |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
132 |
for f in sorted(os.listdir(current_dir)): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
133 |
p = os.path.join(current_dir,f) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
134 |
if os.path.isdir(p): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
135 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
136 |
r = self._recurseTree(p, current_tc_root, dirlist + [f]) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
137 |
if len(r) > 0 : |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
138 |
res = r |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
139 |
dirlist = [] |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
140 |
current_tc_root = res.pop() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
141 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
142 |
elif os.path.splitext(f)[1].upper() == ".SVG": |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
143 |
if len(dirlist) > 0 : |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
144 |
res = [] |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
145 |
for d in dirlist: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
146 |
current_tc_root = self.AppendItem(current_tc_root, d) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
147 |
res.append(current_tc_root) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
148 |
self.SetPyData(current_tc_root, None) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
149 |
dirlist = [] |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
150 |
res.pop() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
151 |
tc_child = self.AppendItem(current_tc_root, f) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
152 |
self.SetPyData(tc_child, p) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
153 |
return res |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
154 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
155 |
def MakeTree(self, lib_dir = None): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
156 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
157 |
self.Freeze() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
158 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
159 |
self.root = None |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
160 |
self.DeleteAllItems() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
161 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
162 |
root_display_name = _("Please select widget library directory") \ |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
163 |
if lib_dir is None else os.path.basename(lib_dir) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
164 |
self.root = self.AddRoot(root_display_name) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
165 |
self.SetPyData(self.root, None) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
166 |
|
3253
9233e60a8317
SVGHMI: fix exception when stored widget library path does not exist anymore
Edouard Tisserant
parents:
3251
diff
changeset
|
167 |
if lib_dir is not None and os.path.exists(lib_dir): |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
168 |
self._recurseTree(lib_dir, self.root, []) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
169 |
self.Expand(self.root) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
170 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
171 |
self.Thaw() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
172 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
173 |
class PathDropTarget(wx.DropTarget): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
174 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
175 |
def __init__(self, parent): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
176 |
data = wx.CustomDataObject(HMITreeDndMagicWord) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
177 |
wx.DropTarget.__init__(self, data) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
178 |
self.ParentWindow = parent |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
179 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
180 |
def OnDrop(self, x, y): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
181 |
self.ParentWindow.OnHMITreeDnD() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
182 |
return True |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
183 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
184 |
class ParamEditor(wx.Panel): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
185 |
def __init__(self, parent, paramdesc): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
186 |
wx.Panel.__init__(self, parent.main_panel) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
187 |
label = paramdesc.get("name")+ ": " + paramdesc.get("accepts") |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
188 |
if paramdesc.text: |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
189 |
label += "\n\"" + paramdesc.text + "\"" |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
190 |
self.desc = wx.StaticText(self, label=label) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
191 |
self.valid_bmp = wx.ArtProvider.GetBitmap(wx.ART_TICK_MARK, wx.ART_TOOLBAR, (16,16)) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
192 |
self.invalid_bmp = wx.ArtProvider.GetBitmap(wx.ART_CROSS_MARK, wx.ART_TOOLBAR, (16,16)) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
193 |
self.validity_sbmp = wx.StaticBitmap(self, -1, self.invalid_bmp) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
194 |
self.edit = wx.TextCtrl(self) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
195 |
self.edit_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
196 |
self.edit_sizer.AddGrowableCol(0) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
197 |
self.edit_sizer.AddGrowableRow(0) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
198 |
self.edit_sizer.Add(self.edit, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
199 |
self.edit_sizer.Add(self.validity_sbmp, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
200 |
self.main_sizer = wx.BoxSizer(wx.VERTICAL) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
201 |
self.main_sizer.Add(self.desc, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
202 |
self.main_sizer.Add(self.edit_sizer, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
203 |
self.SetSizer(self.main_sizer) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
204 |
self.main_sizer.Fit(self) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
205 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
206 |
def GetValue(self): |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
207 |
return self.edit.GetValue() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
208 |
|
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
209 |
def setValidity(self, validity): |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
210 |
if validity is not None: |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
211 |
bmp = self.valid_bmp if validity else self.invalid_bmp |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
212 |
self.validity_sbmp.SetBitmap(bmp) |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
213 |
self.validity_sbmp.Show(True) |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
214 |
else : |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
215 |
self.validity_sbmp.Show(False) |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
216 |
|
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
217 |
models = { typename: re.compile(regex) for typename, regex in [ |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
218 |
("string", r".*"), |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
219 |
("int", r"^-?([1-9][0-9]*|0)$"), |
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
220 |
("real", r"^-?([1-9][0-9]*|0)(\.[0-9]+)?$")]} |
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
221 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
222 |
class ArgEditor(ParamEditor): |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
223 |
def __init__(self, parent, argdesc, prefillargdesc): |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
224 |
ParamEditor.__init__(self, parent, argdesc) |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
225 |
self.ParentObj = parent |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
226 |
self.argdesc = argdesc |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
227 |
self.Bind(wx.EVT_TEXT, self.OnArgChanged, self.edit) |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
228 |
prefill = "" if prefillargdesc is None else prefillargdesc.get("value") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
229 |
self.edit.SetValue(prefill) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
230 |
# TODO add a button to add more ArgEditror instance |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
231 |
# when ordinality is multiple |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
232 |
|
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
233 |
def OnArgChanged(self, event): |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
234 |
txt = self.edit.GetValue() |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
235 |
accepts = self.argdesc.get("accepts").split(',') |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
236 |
self.setValidity( |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
237 |
reduce(or_, |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
238 |
map(lambda typename: |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
239 |
models[typename].match(txt) is not None, |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
240 |
accepts), |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
241 |
False) |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
242 |
if accepts and txt else None) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
243 |
self.ParentObj.RegenSVGLater() |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
244 |
event.Skip() |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
245 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
246 |
class PathEditor(ParamEditor): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
247 |
def __init__(self, parent, pathdesc): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
248 |
ParamEditor.__init__(self, parent, pathdesc) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
249 |
self.ParentObj = parent |
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
250 |
self.pathdesc = pathdesc |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
251 |
DropTarget = PathDropTarget(self) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
252 |
self.edit.SetDropTarget(DropTarget) |
3265
f3cb352048b6
SVGHMI: DnD UI: Add hint instructing user to Drag HMI tree items to text field.
Edouard Tisserant
parents:
3263
diff
changeset
|
253 |
self.edit.SetHint(_("Drag'n'drop HMI variable here")) |
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
254 |
self.Bind(wx.EVT_TEXT, self.OnPathChanged, self.edit) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
255 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
256 |
def OnHMITreeDnD(self): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
257 |
self.ParentObj.GotPathDnDOn(self) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
258 |
|
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
259 |
def SetPath(self, hmitree_node): |
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
260 |
self.edit.ChangeValue(hmitree_node.hmi_path()) |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
261 |
self.setValidity( |
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
262 |
hmitree_node.nodetype in self.pathdesc.get("accepts").split(",")) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
263 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
264 |
def OnPathChanged(self, event): |
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
265 |
# TODO : find corresponding hmitre node and type to update validity |
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
266 |
# Lazy way : hide validity |
3252
352b2111ca66
SVGHMI: added checking of widget literal argument in DnD UI according to type given in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3251
diff
changeset
|
267 |
self.setValidity(None) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
268 |
self.ParentObj.RegenSVGLater() |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
269 |
event.Skip() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
270 |
|
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
271 |
def KeepDoubleNewLines(txt): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
272 |
return "\n\n".join(map( |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
273 |
lambda s:re.sub(r'\s+',' ',s), |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
274 |
txt.split("\n\n"))) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
275 |
|
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
276 |
_conf_key = "SVGHMIWidgetLib" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
277 |
_preview_height = 200 |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
278 |
_preview_margin = 5 |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
279 |
class WidgetLibBrowser(wx.SplitterWindow): |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
280 |
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
281 |
size=wx.DefaultSize): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
282 |
|
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
283 |
wx.SplitterWindow.__init__(self, parent, |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
284 |
style=wx.SUNKEN_BORDER | wx.SP_3D) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
285 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
286 |
self.bmp = None |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
287 |
self.msg = None |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
288 |
self.hmitree_nodes = [] |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
289 |
self.selected_SVG = None |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
290 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
291 |
self.Config = wx.ConfigBase.Get() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
292 |
self.libdir = self.RecallLibDir() |
3274
16066300b254
SVGHMI: default library path, default page when starting a SVGHMI project, error page when no SVG present
Edouard Tisserant
parents:
3265
diff
changeset
|
293 |
if self.libdir is None: |
16066300b254
SVGHMI: default library path, default page when starting a SVGHMI project, error page when no SVG present
Edouard Tisserant
parents:
3265
diff
changeset
|
294 |
self.libdir = os.path.join(ScriptDirectory, "widgetlib") |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
295 |
|
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
296 |
self.picker_desc_splitter = wx.SplitterWindow(self, style=wx.SUNKEN_BORDER | wx.SP_3D) |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
297 |
|
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
298 |
self.picker_panel = wx.Panel(self.picker_desc_splitter) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
299 |
self.picker_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
300 |
self.picker_sizer.AddGrowableCol(0) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
301 |
self.picker_sizer.AddGrowableRow(1) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
302 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
303 |
self.widgetpicker = WidgetPicker(self.picker_panel, self.libdir) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
304 |
self.libbutton = wx.Button(self.picker_panel, -1, _("Select SVG widget library")) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
305 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
306 |
self.picker_sizer.Add(self.libbutton, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
307 |
self.picker_sizer.Add(self.widgetpicker, flag=wx.GROW) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
308 |
self.picker_sizer.Layout() |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
309 |
self.picker_panel.SetAutoLayout(True) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
310 |
self.picker_panel.SetSizer(self.picker_sizer) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
311 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
312 |
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnWidgetSelection, self.widgetpicker) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
313 |
self.Bind(wx.EVT_BUTTON, self.OnSelectLibDir, self.libbutton) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
314 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
315 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
316 |
|
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
317 |
self.main_panel = ScrolledPanel(parent=self, |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
318 |
name='MiscellaneousPanel', |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
319 |
style=wx.TAB_TRAVERSAL) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
320 |
|
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
321 |
self.main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
322 |
self.main_sizer.AddGrowableCol(0) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
323 |
self.main_sizer.AddGrowableRow(2) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
324 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
325 |
self.staticmsg = wx.StaticText(self, label = _("Drag selected Widget from here to Inkscape")) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
326 |
self.preview = wx.Panel(self.main_panel, size=(-1, _preview_height + _preview_margin*2)) |
3237
d000a91d1e95
SVGHMI: Intermediate state while updating UI, preparing for displaying widget description and multiple variables selections
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3235
diff
changeset
|
327 |
self.signature_sizer = wx.BoxSizer(wx.VERTICAL) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
328 |
self.args_box = wx.StaticBox(self.main_panel, -1, |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
329 |
_("Widget's arguments"), |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
330 |
style = wx.ALIGN_CENTRE_HORIZONTAL) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
331 |
self.args_sizer = wx.StaticBoxSizer(self.args_box, wx.VERTICAL) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
332 |
self.paths_box = wx.StaticBox(self.main_panel, -1, |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
333 |
_("Widget's variables"), |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
334 |
style = wx.ALIGN_CENTRE_HORIZONTAL) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
335 |
self.paths_sizer = wx.StaticBoxSizer(self.paths_box, wx.VERTICAL) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
336 |
self.signature_sizer.Add(self.args_sizer, flag=wx.GROW) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
337 |
self.signature_sizer.AddSpacer(5) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
338 |
self.signature_sizer.Add(self.paths_sizer, flag=wx.GROW) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
339 |
self.main_sizer.Add(self.staticmsg, flag=wx.GROW) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
340 |
self.main_sizer.Add(self.preview, flag=wx.GROW) |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
341 |
self.main_sizer.Add(self.signature_sizer, flag=wx.GROW) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
342 |
self.main_sizer.Layout() |
3243
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
343 |
self.main_panel.SetAutoLayout(True) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
344 |
self.main_panel.SetSizer(self.main_sizer) |
92cc21f88bf8
SVGHMI: WIP: Widget Library UI: Reworking widget selection and binding.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3241
diff
changeset
|
345 |
self.main_sizer.Fit(self.main_panel) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
346 |
self.preview.Bind(wx.EVT_PAINT, self.OnPaint) |
3213
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
347 |
self.preview.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
348 |
|
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
349 |
self.desc = wx.TextCtrl(self.picker_desc_splitter, size=wx.Size(-1, 160), |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
350 |
style=wx.TE_READONLY | wx.TE_MULTILINE) |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
351 |
|
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
352 |
self.picker_desc_splitter.SplitHorizontally(self.picker_panel, self.desc, 400) |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
353 |
self.SplitVertically(self.main_panel, self.picker_desc_splitter, 300) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
354 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
355 |
self.tempf = None |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
356 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
357 |
self.RegenSVGThread = None |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
358 |
self.RegenSVGLock = Lock() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
359 |
self.RegenSVGTimer = wx.Timer(self, -1) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
360 |
self.RegenSVGParams = None |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
361 |
self.Bind(wx.EVT_TIMER, |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
362 |
self.RegenSVG, |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
363 |
self.RegenSVGTimer) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
364 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
365 |
self.args_editors = [] |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
366 |
self.paths_editors = [] |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
367 |
|
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
368 |
def SetMessage(self, msg): |
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
369 |
self.staticmsg.SetLabel(msg) |
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
370 |
self.main_sizer.Layout() |
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
371 |
|
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
372 |
def ResetSignature(self): |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
373 |
self.args_sizer.Clear() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
374 |
for editor in self.args_editors: |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
375 |
editor.Destroy() |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
376 |
self.args_editors = [] |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
377 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
378 |
self.paths_sizer.Clear() |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
379 |
for editor in self.paths_editors: |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
380 |
editor.Destroy() |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
381 |
self.paths_editors = [] |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
382 |
|
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
383 |
def AddArgToSignature(self, arg, prefillarg): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
384 |
new_editor = ArgEditor(self, arg, prefillarg) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
385 |
self.args_editors.append(new_editor) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
386 |
self.args_sizer.Add(new_editor, flag=wx.GROW) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
387 |
|
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
388 |
def AddPathToSignature(self, path): |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
389 |
new_editor = PathEditor(self, path) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
390 |
self.paths_editors.append(new_editor) |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
391 |
self.paths_sizer.Add(new_editor, flag=wx.GROW) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
392 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
393 |
def GotPathDnDOn(self, target_editor): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
394 |
dndindex = self.paths_editors.index(target_editor) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
395 |
|
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
396 |
for hmitree_node,editor in zip(self.hmitree_nodes, |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
397 |
self.paths_editors[dndindex:]): |
3251
6d4ff271ebf1
SVGHMI: UI Updates validity indicator when DnD HMI tree node in text field, according to node type
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3250
diff
changeset
|
398 |
editor.SetPath(hmitree_node) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
399 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
400 |
self.RegenSVGNow() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
401 |
|
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
402 |
def RecallLibDir(self): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
403 |
conf = self.Config.Read(_conf_key) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
404 |
if len(conf) == 0: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
405 |
return None |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
406 |
else: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
407 |
return DecodeFileSystemPath(conf) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
408 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
409 |
def RememberLibDir(self, path): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
410 |
self.Config.Write(_conf_key, |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
411 |
EncodeFileSystemPath(path)) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
412 |
self.Config.Flush() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
413 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
414 |
def DrawPreview(self): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
415 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
416 |
Refresh preview panel |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
417 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
418 |
# Init preview panel paint device context |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
419 |
dc = wx.PaintDC(self.preview) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
420 |
dc.Clear() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
421 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
422 |
if self.bmp: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
423 |
# Get Preview panel size |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
424 |
sz = self.preview.GetClientSize() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
425 |
w = self.bmp.GetWidth() |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
426 |
dc.DrawBitmap(self.bmp, (sz.width - w)/2, _preview_margin) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
427 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
428 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
429 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
430 |
def OnSelectLibDir(self, event): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
431 |
defaultpath = self.RecallLibDir() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
432 |
if defaultpath == None: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
433 |
defaultpath = os.path.expanduser("~") |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
434 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
435 |
dialog = wx.DirDialog(self, _("Choose a widget library"), defaultpath, |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
436 |
style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
437 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
438 |
if dialog.ShowModal() == wx.ID_OK: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
439 |
self.libdir = dialog.GetPath() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
440 |
self.RememberLibDir(self.libdir) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
441 |
self.widgetpicker.MakeTree(self.libdir) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
442 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
443 |
dialog.Destroy() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
444 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
445 |
def OnPaint(self, event): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
446 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
447 |
Called when Preview panel needs to be redrawn |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
448 |
@param event: wx.PaintEvent |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
449 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
450 |
self.DrawPreview() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
451 |
event.Skip() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
452 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
453 |
def GenThumbnail(self, svgpath, thumbpath): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
454 |
inkpath = get_inkscape_path() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
455 |
if inkpath is None: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
456 |
self.msg = _("Inkscape is not installed.") |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
457 |
return False |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
458 |
# TODO: spawn a thread, to decouple thumbnail gen |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
459 |
status, result, _err_result = ProcessLogger( |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
460 |
None, |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
461 |
'"' + inkpath + '" "' + svgpath + '" -e "' + thumbpath + |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
462 |
'" -D -h ' + str(_preview_height)).spin() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
463 |
if status != 0: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
464 |
self.msg = _("Inkscape couldn't generate thumbnail.") |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
465 |
return False |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
466 |
return True |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
467 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
468 |
def OnWidgetSelection(self, event): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
469 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
470 |
Called when tree item is selected |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
471 |
@param event: wx.TreeEvent |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
472 |
""" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
473 |
item_pydata = self.widgetpicker.GetPyData(event.GetItem()) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
474 |
if item_pydata is not None: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
475 |
svgpath = item_pydata |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
476 |
dname = os.path.dirname(svgpath) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
477 |
fname = os.path.basename(svgpath) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
478 |
hasher = hashlib.new('md5') |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
479 |
with open(svgpath, 'rb') as afile: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
480 |
while True: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
481 |
buf = afile.read(65536) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
482 |
if len(buf) > 0: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
483 |
hasher.update(buf) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
484 |
else: |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
485 |
break |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
486 |
digest = hasher.hexdigest() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
487 |
thumbfname = os.path.splitext(fname)[0]+"_"+digest+".png" |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
488 |
thumbdir = os.path.join(dname, ".svghmithumbs") |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
489 |
thumbpath = os.path.join(thumbdir, thumbfname) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
490 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
491 |
have_thumb = os.path.exists(thumbpath) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
492 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
493 |
try: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
494 |
if not have_thumb: |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
495 |
if not os.path.exists(thumbdir): |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
496 |
os.mkdir(thumbdir) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
497 |
have_thumb = self.GenThumbnail(svgpath, thumbpath) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
498 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
499 |
self.bmp = wx.Bitmap(thumbpath) if have_thumb else None |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
500 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
501 |
self.selected_SVG = svgpath if have_thumb else None |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
502 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
503 |
self.AnalyseWidgetAndUpdateUI(fname) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
504 |
|
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
505 |
self.SetMessage(self.msg) |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
506 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
507 |
except IOError: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
508 |
self.msg = _("Widget library must be writable") |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
509 |
|
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
510 |
self.Refresh() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
511 |
event.Skip() |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
512 |
|
3231
5243c2a2f7f8
SVGHMI: keep track of order of selection in HMI tree, so that variable can be passed in same order to DnD widget
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3228
diff
changeset
|
513 |
def OnHMITreeNodeSelection(self, hmitree_nodes): |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
514 |
self.hmitree_nodes = hmitree_nodes |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
515 |
|
3213
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
516 |
def OnLeftDown(self, evt): |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
517 |
if self.tempf is not None: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
518 |
filename = self.tempf.name |
3213
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
519 |
data = wx.FileDataObject() |
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
520 |
data.AddFile(filename) |
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
521 |
dropSource = wx.DropSource(self) |
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
522 |
dropSource.SetData(data) |
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
523 |
dropSource.DoDragDrop(wx.Drag_AllowMove) |
afef7011f475
SVGHMI: Add file type drag'n'drop to widget picker, for now drops widget's original SVG.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3208
diff
changeset
|
524 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
525 |
def RegenSVGLater(self, when=1): |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
526 |
self.SetMessage(_("SVG generation pending")) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
527 |
self.RegenSVGTimer.Start(milliseconds=when*1000, oneShot=True) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
528 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
529 |
def RegenSVGNow(self): |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
530 |
self.RegenSVGLater(when=0) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
531 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
532 |
def RegenSVG(self, event): |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
533 |
self.SetMessage(_("Generating SVG...")) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
534 |
args = [arged.GetValue() for arged in self.args_editors] |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
535 |
while args and not args[-1]: args.pop(-1) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
536 |
paths = [pathed.GetValue() for pathed in self.paths_editors] |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
537 |
while paths and not paths[-1]: paths.pop(-1) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
538 |
if self.RegenSVGLock.acquire(True): |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
539 |
self.RegenSVGParams = (args, paths) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
540 |
if self.RegenSVGThread is None: |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
541 |
self.RegenSVGThread = \ |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
542 |
Thread(target=self.RegenSVGProc, |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
543 |
name="RegenSVGThread").start() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
544 |
self.RegenSVGLock.release() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
545 |
event.Skip() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
546 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
547 |
def RegenSVGProc(self): |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
548 |
self.RegenSVGLock.acquire(True) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
549 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
550 |
newparams = self.RegenSVGParams |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
551 |
self.RegenSVGParams = None |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
552 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
553 |
while newparams is not None: |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
554 |
self.RegenSVGLock.release() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
555 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
556 |
res = self.GenDnDSVG(newparams) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
557 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
558 |
self.RegenSVGLock.acquire(True) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
559 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
560 |
newparams = self.RegenSVGParams |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
561 |
self.RegenSVGParams = None |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
562 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
563 |
self.RegenSVGThread = None |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
564 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
565 |
self.RegenSVGLock.release() |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
566 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
567 |
wx.CallAfter(self.DoneRegenSVG) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
568 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
569 |
def DoneRegenSVG(self): |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
570 |
self.SetMessage(self.msg if self.msg else _("SVG ready for drag'n'drop")) |
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
571 |
|
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
572 |
def AnalyseWidgetAndUpdateUI(self, fname): |
3235
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
573 |
self.msg = "" |
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
574 |
self.ResetSignature() |
3235
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
575 |
|
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
576 |
try: |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
577 |
if self.selected_SVG is None: |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
578 |
raise Exception(_("No widget selected")) |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
579 |
|
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
580 |
transform = XSLTransform( |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
581 |
os.path.join(ScriptDirectory, "analyse_widget.xslt"),[]) |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
582 |
|
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
583 |
svgdom = etree.parse(self.selected_SVG) |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
584 |
|
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
585 |
signature = transform.transform(svgdom) |
3235
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
586 |
|
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
587 |
for entry in transform.get_error_log(): |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
588 |
self.msg += "XSLT: " + entry.message + "\n" |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
589 |
|
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
590 |
except Exception as e: |
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
591 |
self.msg += str(e) |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
592 |
return |
3235
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
593 |
except XSLTApplyError as e: |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
594 |
self.msg += "Widget " + fname + " analysis error: " + e.message |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
595 |
return |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3237
diff
changeset
|
596 |
|
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
597 |
self.msg += "Widget " + fname + ": OK" |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
598 |
|
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
599 |
widgets = signature.getroot() |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
600 |
widget = widgets.find("widget") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
601 |
defs = widget.find("defs") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
602 |
# Keep double newlines (to mark paragraphs) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
603 |
widget_desc = widget.find("desc") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
604 |
self.desc.SetValue( |
3279
5615e062a77d
SVGHMI: DnD UI: Use widget's short description, initially forgoten.
Edouard Tisserant
parents:
3274
diff
changeset
|
605 |
fname + ":\n\n" + ( |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
606 |
_("No description given") if widget_desc is None else |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
607 |
KeepDoubleNewLines(widget_desc.text) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
608 |
) + "\n\n" + |
3279
5615e062a77d
SVGHMI: DnD UI: Use widget's short description, initially forgoten.
Edouard Tisserant
parents:
3274
diff
changeset
|
609 |
defs.find("type").text + " Widget: "+defs.find("shortdesc").text+"\n\n" + |
3259
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
610 |
KeepDoubleNewLines(defs.find("longdesc").text)) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
611 |
prefillargs = widget.findall("arg") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
612 |
args = defs.findall("arg") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
613 |
# extend args description in prefilled args in longer |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
614 |
# (case of variable list of args) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
615 |
if len(prefillargs) < len(args): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
616 |
prefillargs += [None]*(len(args)-len(prefillargs)) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
617 |
if args and len(prefillargs) > len(args): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
618 |
# TODO: check ordinality of last arg |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
619 |
# TODO: check that only last arg has multiple ordinality |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
620 |
args += [args[-1]]*(len(prefillargs)-len(args)) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
621 |
self.args_box.Show(len(args)!=0) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
622 |
for arg, prefillarg in izip(args,prefillargs): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
623 |
self.AddArgToSignature(arg, prefillarg) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
624 |
paths = defs.findall("path") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
625 |
self.paths_box.Show(len(paths)!=0) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
626 |
for path in paths: |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
627 |
self.AddPathToSignature(path) |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
628 |
|
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
629 |
for widget in widgets: |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
630 |
widget_type = widget.get("type") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
631 |
for path in widget.iterchildren("path"): |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
632 |
path_value = path.get("value") |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
633 |
path_accepts = map( |
76da573569a6
SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3255
diff
changeset
|
634 |
str.strip, path.get("accepts", '')[1:-1].split(',')) |
3235
b2b6bf45aa2d
SVGHMI: Add analyse_widget stylesheet and python code to execute it, in order to obtain widget signature independently of DnD SVG file generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3234
diff
changeset
|
635 |
|
3245
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
636 |
self.main_panel.SetupScrolling(scroll_x=False) |
c441181247cf
SVGHMI: DnD UI : changed layout again, moved description in a vertical splitter, added scrollbar for preview and signature, fixed flickering description
Edouard Tisserant
parents:
3244
diff
changeset
|
637 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
638 |
def GetWidgetParams(self, _context): |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
639 |
args,paths = self.GenDnDSVGParams |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
640 |
root = etree.Element("params") |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
641 |
for arg in args: |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
642 |
etree.SubElement(root, "arg", value=arg) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
643 |
for path in paths: |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
644 |
etree.SubElement(root, "path", value=path) |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
645 |
return root |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
646 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
647 |
|
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
648 |
def GenDnDSVG(self, newparams): |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
649 |
self.msg = "" |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
650 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
651 |
self.GenDnDSVGParams = newparams |
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
652 |
|
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
653 |
if self.tempf is not None: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
654 |
os.unlink(self.tempf.name) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
655 |
self.tempf = None |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
656 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
657 |
try: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
658 |
if self.selected_SVG is None: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
659 |
raise Exception(_("No widget selected")) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
660 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
661 |
transform = XSLTransform( |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
662 |
os.path.join(ScriptDirectory, "gen_dnd_widget_svg.xslt"), |
3263
1205b2d0acf2
SVGHMI: DnD UI: Fix SVG gen that was dropping widget name and making XSLTExceptions plus some UX enhancements.
Edouard Tisserant
parents:
3261
diff
changeset
|
663 |
[("GetWidgetParams", self.GetWidgetParams)]) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
664 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
665 |
svgdom = etree.parse(self.selected_SVG) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
666 |
|
3261
06ea7a1152af
SVGHMI: DnD UI: SVG for DnD now generated again based on paths and args entries filled by user.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3259
diff
changeset
|
667 |
result = transform.transform(svgdom) |
3221
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
668 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
669 |
for entry in transform.get_error_log(): |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
670 |
self.msg += "XSLT: " + entry.message + "\n" |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
671 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
672 |
self.tempf = NamedTemporaryFile(suffix='.svg', delete=False) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
673 |
result.write(self.tempf, encoding="utf-8") |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
674 |
self.tempf.close() |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
675 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
676 |
except Exception as e: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
677 |
self.msg += str(e) |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
678 |
except XSLTApplyError as e: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
679 |
self.msg += "Widget transform error: " + e.message |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
680 |
|
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
681 |
def __del__(self): |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
682 |
if self.tempf is not None: |
3d307ad803ea
SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3213
diff
changeset
|
683 |
os.unlink(self.tempf.name) |
2816 | 684 |
|
3201
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
685 |
class SVGHMI_UI(wx.SplitterWindow): |
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
686 |
|
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
687 |
def __init__(self, parent, register_for_HMI_tree_updates): |
2818
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
688 |
wx.SplitterWindow.__init__(self, parent, |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
689 |
style=wx.SUNKEN_BORDER | wx.SP_3D) |
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
690 |
|
65f32c94d7ec
SVGHMI: re-implemented tree view with classic wxTreeCtl
Edouard Tisserant
parents:
2817
diff
changeset
|
691 |
self.SelectionTree = HMITreeSelector(self) |
3193
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
692 |
self.Staging = WidgetLibBrowser(self) |
8006bb60a4dd
SVGHMI: Added SVG widget library browser. Supports browsing and previewing widgets. Widget validation and drag'n'drop are still to be implemented.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3180
diff
changeset
|
693 |
self.SplitVertically(self.SelectionTree, self.Staging, 300) |
3201
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
694 |
register_for_HMI_tree_updates(weakref.ref(self)) |
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
695 |
|
6dadc1690284
SVGHMI: split svghmi.py into svghmi.py (Config Tree Node + code gen) and ui.py (UI for HMI tree and Widget picking)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3197
diff
changeset
|
696 |
def HMITreeUpdate(self, hmi_tree_root): |
3247
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
697 |
self.SelectionTree.MakeTree(hmi_tree_root) |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
698 |
|
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
699 |
def OnHMITreeNodeSelection(self, hmitree_nodes): |
7282b40374b0
SVGHMI: UI now have multiple HMI tree variables DnD to widget paths. Still no type checking, WIP.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3245
diff
changeset
|
700 |
self.Staging.OnHMITreeNodeSelection(hmitree_nodes) |