diff --git a/src/View/Scenarios/ContextMenu.py b/src/View/Scenarios/ContextMenu.py index e4462fd2..4090f85d 100644 --- a/src/View/Scenarios/ContextMenu.py +++ b/src/View/Scenarios/ContextMenu.py @@ -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) diff --git a/src/View/Scenarios/GraphWidget.py b/src/View/Scenarios/GraphWidget.py index 375ee327..4a024a35 100644 --- a/src/View/Scenarios/GraphWidget.py +++ b/src/View/Scenarios/GraphWidget.py @@ -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() diff --git a/src/View/Scenarios/translate.py b/src/View/Scenarios/translate.py index 101cf377..8c827b66 100644 --- a/src/View/Scenarios/translate.py +++ b/src/View/Scenarios/translate.py @@ -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"] = {