Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
beat
beat.editor
Commits
08718bb6
Commit
08718bb6
authored
Nov 08, 2019
by
Flavio TARSETTI
Browse files
[widgets][toolchaineditor] implemented connection edition
parent
eb83d495
Changes
1
Hide whitespace changes
Inline
Side-by-side
beat/editor/widgets/toolchaineditor.py
View file @
08718bb6
...
...
@@ -90,61 +90,61 @@ class BasePin(QGraphicsItem):
painter
.
drawEllipse
(
self
.
boundingRect
())
def
mousePressEvent
(
self
,
event
):
"""Painting connection
process
"""
"""Painting connection
initiated
"""
self
.
new_connection
=
Connection
(
self
.
block_object
.
connection_style
)
self
.
block_object
.
scene
().
addItem
(
self
.
new_connection
)
def
mouseMoveEvent
(
self
,
event
):
"""Painting connection pro
c
ess"""
"""Painting connection
in
pro
gr
ess"""
mouse_position
=
self
.
mapToScene
(
event
.
pos
())
self
.
new_connection
.
set_new_connection_pins_coordinates
(
self
,
mouse_position
)
def
mouseReleaseEvent
(
self
,
event
):
"""Painting connection
process
"""
"""Painting connection
ended - validation required
"""
self
.
block_object
.
scene
().
removeItem
(
self
.
new_connection
)
target
=
self
.
block_object
.
scene
().
itemAt
(
event
.
scenePos
().
toPoint
(),
QTransform
()
)
if
isinstance
(
target
,
BasePin
)
and
target
.
is_valid
(
self
):
# This needs to be refactored and worked on!
connection_settings
=
{}
connection_settings
[
"channel"
]
=
"train"
if
isinstance
(
target
,
BasePin
):
if
isinstance
(
target
,
InputPin
)
and
isinstance
(
self
,
OutputPin
):
connection_settings
[
"from"
]
=
self
.
block
+
"."
+
self
.
pin
connection_settings
[
"to"
]
=
target
.
block
+
"."
+
target
.
pin
if
isinstance
(
self
,
OutputPin
):
start
=
self
end
=
target
else
:
connection_settings
[
"from"
]
=
target
.
block
+
"."
+
target
.
pin
connection_settings
[
"to"
]
=
self
.
block
+
"."
+
self
.
pin
channel_colors
=
self
.
block_object
.
toolchain
.
json_object
[
"representation"
][
"channel_colors"
]
connection
=
Connection
(
self
.
block_object
.
connection_style
)
connection
.
load
(
self
.
block_object
.
toolchain
,
connection_settings
,
channel_colors
)
self
.
block_object
.
toolchain
.
connections
.
append
(
connection
)
self
.
block_object
.
toolchain
.
scene
.
addItem
(
connection
)
self
.
block_object
.
scene
().
addItem
(
connection
)
else
:
self
.
block_object
.
scene
().
removeItem
(
self
.
new_connection
)
def
is_valid
(
self
,
source
):
# remove input-input and output-output connection
if
type
(
source
)
==
type
(
self
):
return
False
# remove connection to same block object
if
source
.
block_object
==
self
.
block_object
:
return
False
return
True
start
=
target
end
=
self
if
Connection
(
self
.
block_object
.
connection_style
).
check_validity
(
start
,
end
):
# Find the corresponding channel
connection_settings
=
{}
if
start
.
block_object
.
type
==
BlockType
.
DATASETS
.
name
:
connection_settings
[
"channel"
]
=
start
.
block_object
.
name
else
:
connection_settings
[
"channel"
]
=
start
.
block_object
.
synchronized_channel
# Create the connection
connection_settings
[
"from"
]
=
start
.
block
+
"."
+
start
.
pin
connection_settings
[
"to"
]
=
end
.
block
+
"."
+
end
.
pin
channel_colors
=
self
.
block_object
.
toolchain
.
json_object
[
"representation"
][
"channel_colors"
]
connection
=
Connection
(
self
.
block_object
.
connection_style
)
connection
.
load
(
self
.
block_object
.
toolchain
,
connection_settings
,
channel_colors
)
self
.
block_object
.
toolchain
.
connections
.
append
(
connection
)
self
.
block_object
.
toolchain
.
scene
.
addItem
(
connection
)
def
get_center_point
(
self
):
"""Get the center coordinates of the Pin(x,y)"""
...
...
@@ -277,6 +277,25 @@ class Connection(QGraphicsPathItem):
self
.
drawCubicBezierCurve
()
def
check_validity
(
self
,
start
,
end
):
# remove input-input and output-output connection
if
type
(
start
)
==
type
(
end
):
return
False
# remove connection to same block object
if
start
.
block_object
==
end
.
block_object
:
return
False
# check if end block pin is free
toolchain
=
end
.
block_object
.
toolchain
for
connection
in
toolchain
.
connections
:
if
connection
.
end_block
==
end
.
block_object
:
if
connection
.
end_pin
==
end
:
return
False
return
True
def
load
(
self
,
toolchain
,
connection_details
,
channel_colors
):
self
.
start_block_name
=
connection_details
[
"from"
].
split
(
"."
)[
0
]
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment