Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ simulateEQN.mos
FlowsheetSEQ.csv__pycache__/
*.pyc

graphify-out/
src/main/graphify-out/
.graphify*
.agents*
env/
venv/

Expand Down
82 changes: 81 additions & 1 deletion src/main/python/mainApp.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import pickle
import pickle
import threading
import os
import ctypes
Expand Down Expand Up @@ -68,13 +68,59 @@ def __init__(self):
self.container = Container(self.textBrowser, self.graphicsView)
self.comp = ComponentSelector(self)
self.comp.accepted.connect(self.update_compounds)
self.comp.accepted.connect(self._refresh_selected_compounds)

# Connect real-time compound checkbox changes
self.comp.compounds_changed.connect(self._refresh_selected_compounds)

# Setting up interactive canvas
self.scene = self.container.graphics.get_scene()
self.graphicsView.setScene(self.scene)
self.graphicsView.setMouseTracking(True)
self.graphicsView.keyPressEvent=self.delete_call

# box for selected compounds
self.selectedElementsDock = QDockWidget("Selected Compounds", self)
self.selectedElementsDock.setFeatures(
QDockWidget.DockWidgetFloatable |
QDockWidget.DockWidgetMovable |
QDockWidget.DockWidgetClosable
)
self.selectedElementsDock.setMinimumSize(180, 150)
self.selectedElementsDock.setMaximumWidth(250)

self.selectedElementsList = QListWidget()
self.selectedElementsList.setAlternatingRowColors(True)
self.selectedElementsList.setStyleSheet("""
QListWidget {
background-color: #f7f7f7;
border: none;
font: 10pt 'Microsoft JhengHei';
color: #333;
}
QListWidget::item {
padding: 4px 8px;
}
QListWidget::item:alternate {
background-color: #eaeaea;
}
""")

sel_dock_container = QWidget()
sel_dock_layout = QVBoxLayout(sel_dock_container)
sel_dock_layout.setContentsMargins(4, 4, 4, 4)

sel_label = QLabel("No compounds selected")
sel_label.setStyleSheet("color: #888; font: 9pt 'Microsoft JhengHei'; padding: 2px 4px;")
sel_label.setAlignment(Qt.AlignCenter)
self._sel_status_label = sel_label

sel_dock_layout.addWidget(sel_label)
sel_dock_layout.addWidget(self.selectedElementsList)
self.selectedElementsDock.setWidget(sel_dock_container)

self.addDockWidget(Qt.LeftDockWidgetArea, self.selectedElementsDock)

self.dockWidget.setFeatures(QDockWidget.DockWidgetFloatable |
QDockWidget.DockWidgetMovable |
QDockWidget.DockWidgetClosable)
Expand Down Expand Up @@ -160,6 +206,14 @@ def menu_bar(self):
self.actionBinaryPhaseEnvelope.triggered.connect(self.bin_phase_env)
self.actionViewMessageBrowser.triggered.connect(self.toggle_message_browser_view)
self.actionViewComponentSelector.triggered.connect(self.toggle_component_selector_view)

# View : Selected Compounds
self.actionViewSelectedElements = QAction("Selected Compounds", self)
self.actionViewSelectedElements.setCheckable(True)
self.actionViewSelectedElements.setChecked(True)
self.actionViewSelectedElements.triggered.connect(self.toggle_selected_elements_view)
self.menuView.addAction(self.actionViewSelectedElements)

self.actionSequentialMode.setEnabled(True)
self.actionEquationOriented.setEnabled(True)

Expand Down Expand Up @@ -499,6 +553,7 @@ def new(self):
self.container = Container(self.textBrowser, self.graphicsView)
self.scene = self.container.graphics.get_scene()
self.graphicsView.setScene(self.scene)
self._clear_selected_compounds_panel()

# ✅ Push initial empty snapshot for new project
try:
Expand Down Expand Up @@ -562,6 +617,7 @@ def undo_redo_helper(self):
compound_selected.clear()
self.scene = self.container.graphics.get_scene()
self.graphicsView.setScene(self.scene)
self._clear_selected_compounds_panel()
self.graphicsView.setMouseTracking(True)
self.graphicsView.keyPressEvent = self.delete_call

Expand Down Expand Up @@ -726,6 +782,30 @@ def toggle_message_browser_view(self):
else:
self.dockWidget_2.hide()

# function is used to show the slected ones and hide the unchecked ones
def toggle_selected_elements_view(self):
if self.actionViewSelectedElements.isChecked():
self.selectedElementsDock.show()
else:
self.selectedElementsDock.hide()

# function to refresh the selected compounds box
def _refresh_selected_compounds(self):
self.selectedElementsList.clear()
compounds = list(self.comp.selected_names_list)
print(f"[DEBUG] _refresh_selected_compounds: {len(compounds)} compounds")

if compounds:
self._sel_status_label.setText(f"{len(compounds)} compound(s) selected")
for name in compounds:
self.selectedElementsList.addItem(name)
else:
self._sel_status_label.setText("No compounds selected")

def _clear_selected_compounds_panel(self):
self.selectedElementsList.clear()
self._sel_status_label.setText("No compounds selected")

from python.utils.ComponentSelectorWindow import ComponentSelectorWindow

def select_compounds(self):
Expand Down
5 changes: 4 additions & 1 deletion src/main/python/utils/ComponentSelector.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from PyQt5.QtCore import QThread, pyqtSignal, Qt, QStringListModel
from PyQt5.QtCore import QThread, pyqtSignal, Qt, QStringListModel
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.uic import loadUiType
Expand Down Expand Up @@ -63,6 +63,8 @@ def run(self):
# Main Dialog
# ----------------------------
class ComponentSelector(QDialog, ui_dialog):
# will change the compound dynamically to the selected compounds box
compounds_changed = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
Expand Down Expand Up @@ -197,6 +199,7 @@ def on_checkbox_state_changed(self, name, state):
except ValueError:
pass
self.update_added_compounds()
self.compounds_changed.emit()

def update_added_compounds(self):
text = ", ".join(self.selected_names_list)
Expand Down
Binary file added undo_redo/Undo.pkl
Binary file not shown.