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): class DefaultMenu(AbstractMenu):
def run(self): 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() action = self._exec()
if action == add_node: 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): def run(self):
item = self._items[0] item = self._items[0]
node = item.node
delete = self._menu.addAction(self._trad["menu_del_node"]) select = self._menu.addAction(self._trad["menu_select_scenario"])
# delete = self._menu.addAction(self._trad["menu_del_scenario"])
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
action = self._exec() action = self._exec()
if action == delete: if action == select:
self._parent.del_node(item) self._parent.select_scenario(item)
elif is_internal: # if action == delete:
if res_edit: # self._parent.del_node(item)
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)

View File

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