Scenario: Add context menu with add scenario and select senario action.

scenarios
Pierre-Antoine Rouby 2024-09-03 09:52:49 +02:00
parent 4ff81a0b63
commit cc84b96024
3 changed files with 55 additions and 71 deletions

View File

@ -47,44 +47,22 @@ class AbstractMenu(object):
class DefaultMenu(AbstractMenu):
def run(self):
add_node = self._menu.addAction(self._trad["menu_add_node"])
add_node = self._menu.addAction(self._trad["menu_add_scenario"])
action = self._exec()
if action == add_node:
self._parent.add_node(self._pos)
self._parent.new_scenario(self._pos)
class NodeMenu(AbstractMenu):
class ScenarioMenu(AbstractMenu):
def run(self):
item = self._items[0]
node = item.node
delete = self._menu.addAction(self._trad["menu_del_node"])
is_internal = self._graph.is_internal_node(node)
if is_internal:
res = self._graph.reservoir.get_assoc_to_node(node)
if res is not None:
edt_res = self._menu.addAction(
self._trad["menu_edit_res_node"]
)
del_res = self._menu.addAction(
self._trad["menu_del_res_node"]
)
res_edit = True
else:
add_res = self._menu.addAction(self._trad["menu_add_res_node"])
res_edit = False
select = self._menu.addAction(self._trad["menu_select_scenario"])
# delete = self._menu.addAction(self._trad["menu_del_scenario"])
action = self._exec()
if action == delete:
self._parent.del_node(item)
elif is_internal:
if res_edit:
if action == edt_res:
self._parent.edit_node_reservoir(node)
elif action == del_res:
self._parent.del_node_reservoir(node)
else:
if action == add_res:
self._parent.add_node_reservoir(node)
if action == select:
self._parent.select_scenario(item)
# if action == delete:
# self._parent.del_node(item)

View File

@ -36,7 +36,7 @@ from PyQt5.QtWidgets import (
from View.Scenarios.UndoCommand import *
from View.Scenarios.ContextMenu import (
DefaultMenu, NodeMenu,
DefaultMenu, ScenarioMenu,
)
logger = logging.getLogger()
@ -85,7 +85,7 @@ class ScenarioItem(QGraphicsTextItem):
extra = 2
pcolor = QColor(Qt.black)
color = QColor("#aac3d7")
if self.graph.graph.status.scenario is self.scenario:
if self.graph._study.status.scenario is self.scenario:
color = QColor("#eeaba5")
elif self.scenario.id == 0:
color = QColor("#d3c1d8")
@ -210,27 +210,23 @@ class GraphWidget(QGraphicsView):
changeEdge = pyqtSignal(object)
changeNode = pyqtSignal(object)
def __init__(self, graph, parent=None,
def __init__(self, study, parent=None,
min_size=(400, 400), max_size=None,
size=None, undo=None, trad=None):
super(GraphWidget, self).__init__(parent=parent)
self._study = study
self.parent = parent
self._undo = undo
self._trad = trad
self.graph = graph
self._selected_item = None
self._current_moved_node = None
self.m_origin_x = 0.0
self.m_origin_y = 0.0
self.scenarios_items = {}
self.edge_items = []
self.m_origin_x = 0.0
self.m_origin_y = 0.0
self.clicked = False
self.setup_scene(min_size, max_size, size)
def setup_scene(self, min_size, max_size, size):
@ -267,7 +263,7 @@ class GraphWidget(QGraphicsView):
self.scenarios_items = {}
self.edge_items = []
for scenar in self.graph.scenarios.lst:
for scenar in self._study.scenarios.lst:
iscenar = ScenarioItem(scenar, self)
self.scene().addItem(iscenar)
self.scenarios_items[scenar] = iscenar
@ -295,7 +291,7 @@ class GraphWidget(QGraphicsView):
self.create_items()
def scenario_has_child(self, scenario):
for scenar in self.graph.scenarios.lst:
for scenar in self._study.scenarios.lst:
if scenar.parent is scenario:
return True
@ -346,8 +342,8 @@ class GraphWidget(QGraphicsView):
items = self.items(event.pos())
selectable_items = list(
filter(
lambda i: (type(i) is ScenarioItem
or type(i) is EdgeItem),
lambda i: (type(i) is ScenarioItem or
type(i) is EdgeItem),
items
)
)
@ -356,7 +352,8 @@ class GraphWidget(QGraphicsView):
if len(selectable_items) == 0:
if event.buttons() & Qt.LeftButton:
old_p = self.mapToScene(
int(self.m_origin_x), int(self.m_origin_y)
int(self.m_origin_x),
int(self.m_origin_y)
)
new_p = self.mapToScene(event.pos())
translation = new_p - old_p
@ -376,26 +373,35 @@ class GraphWidget(QGraphicsView):
pos = self.mapToScene(event.pos())
items = self.items(event.pos())
# # Select current menu
# while len(items) > 0:
# if type(items[0]) in [NodeItem, EdgeItem]:
# break
# else:
# items = items[1:]
items = list(
filter(
lambda i: (type(i) is ScenarioItem or
type(i) is EdgeItem),
items
)
)
# if len(items) == 0:
# m_type = DefaultMenu
# elif type(items[0]) is NodeItem:
# m_type = NodeMenu
# elif type(items[0]) is EdgeItem:
# m_type = EdgeMenu
# else:
# m_type = DefaultMenu
m_type = DefaultMenu
if len(items) != 0:
if type(items[0]) is ScenarioItem:
m_type = ScenarioMenu
# # Create and exec menu
# m = m_type(
# event=event, pos=pos, items=items,
# graph=self.graph, trad=self._trad, parent=self
# )
# m.run()
# self.clicked = False
# Create and exec menu
m = m_type(
event=event, pos=pos, items=items,
graph=self._study, trad=self._trad, parent=self
)
m.run()
def select_scenario(self, item):
if type(item) is not ScenarioItem:
return
self._study.reload_from_scenario(item.scenario)
self.display_update()
def new_scenario(self, pos):
scenario = self._study.new_scenario_from_current()
scenario.set_pos(pos.x(), pos.y())
self.display_update()

View File

@ -31,11 +31,11 @@ class ScenariosTranslate(MainTranslate):
"Scenarios", "Scenarios"
)
self._dict["menu_del_scenario"] = _translate(
"Scenarios", "Delete the scenario"
self._dict["menu_select_scenario"] = _translate(
"Scenarios", "Select this scenario"
)
self._dict["menu_add_scenario"] = _translate(
"Scenarios", "Create new derived scenario"
"Scenarios", "Create new scenario from current scenario"
)
self._sub_dict["table_headers_scenarios"] = {