|
|
@@ -7,8 +7,11 @@ from PySide2.QtUiTools import QUiLoader
|
|
|
from ui.ui_TimingAnalyze import Ui_TimingWindow
|
|
|
from ui.ui_Form import Ui_Form
|
|
|
from ui.ui_SideBar import Ui_SideBar
|
|
|
+from ui.lineNumberWidget import LineNumberWidget
|
|
|
+from ui.ui_LineEdit import Ui_LineEdit
|
|
|
import GuiType
|
|
|
|
|
|
+
|
|
|
class MultiFormWin(Ui_Form,QMainWindow):
|
|
|
def __init__(self, mdiArea) -> None:
|
|
|
super().__init__()
|
|
|
@@ -51,6 +54,42 @@ class TreeWidgetItem(QTreeWidgetItem):
|
|
|
super().__init__(parent)
|
|
|
self.tree_row = tree_row
|
|
|
|
|
|
+class LineEditWin(Ui_LineEdit, QMainWindow):
|
|
|
+ def __init__(self, mdiArea:QMdiArea, instance:GuiType._GuiWinLinedText) -> None:
|
|
|
+ super().__init__()
|
|
|
+ self.setupUi(self)
|
|
|
+ self.setWindowTitle(instance.Title)
|
|
|
+
|
|
|
+ self.textBrowser.textChanged.connect(self.__line_widget_line_count_changed)
|
|
|
+ self.lineWidget = LineNumberWidget(self.textBrowser)
|
|
|
+ self.horizontalLayout.insertWidget(0,self.lineWidget)
|
|
|
+ self.instance = instance
|
|
|
+ self.set_text(instance)
|
|
|
+
|
|
|
+ self.mdisubwin = mdiArea.addSubWindow(self)
|
|
|
+ self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
+ self.mdisubwin.resize(self.width(), mdiArea.height())
|
|
|
+ self.mdisubwin.show()
|
|
|
+
|
|
|
+ self.go_to_line(self.instance.GotoLine)
|
|
|
+
|
|
|
+ def set_text(self, instance:GuiType._GuiWinLinedText):
|
|
|
+ for text in instance.LinedText:
|
|
|
+ self.textBrowser.append(text)
|
|
|
+
|
|
|
+ def go_to_line(self, line):
|
|
|
+ if line > self.lineWidget.line_count():
|
|
|
+ line = self.lineWidget.line_count()
|
|
|
+ cur = self.textBrowser.textCursor()
|
|
|
+ position = self.textBrowser.document().findBlockByLineNumber(line-1).position()
|
|
|
+ cur.setPosition(position, QTextCursor.MoveAnchor)
|
|
|
+ self.textBrowser.setTextCursor(cur)
|
|
|
+
|
|
|
+ def __line_widget_line_count_changed(self):
|
|
|
+ if self.lineWidget:
|
|
|
+ n = int(self.textBrowser.document().lineCount())
|
|
|
+ self.lineWidget.changeLineCount(n)
|
|
|
+
|
|
|
class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
def __init__(self, ui, instance:GuiType._GuiSideBar) -> None:
|
|
|
super().__init__()
|
|
|
@@ -68,8 +107,46 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
self.treeWidget.itemExpanded.connect(self.expand_tree)
|
|
|
self.treeWidget.itemCollapsed.connect(self.collapse_tree)
|
|
|
self.treeWidget.currentItemChanged.connect(self.item_change)
|
|
|
+ self.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
|
+ self.treeWidget.customContextMenuRequested.connect(self.right_click_menu)
|
|
|
self.sheets.activated.connect(self.activate_table_sheet)
|
|
|
-
|
|
|
+ self.tableView.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
|
+ self.tableView.setSelectionMode(QAbstractItemView.SingleSelection)
|
|
|
+ self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
|
|
+ self.tableView.customContextMenuRequested.connect(self.right_click_menu)
|
|
|
+
|
|
|
+ def right_click_menu(self, pos):
|
|
|
+ sender = self.sender()
|
|
|
+ pop_menu = QMenu()
|
|
|
+ pop_menu.addAction(QAction('Crossprobe', pop_menu))
|
|
|
+ pop_menu.addAction(QAction('Properties', pop_menu))
|
|
|
+ pop_menu.triggered.connect(lambda action: self.right_click_menu_action(action, sender))
|
|
|
+ pop_menu.exec_(QCursor.pos())
|
|
|
+
|
|
|
+ def add_crossprobe_win(self, sender):
|
|
|
+ item = self.treeWidget.currentItem()
|
|
|
+ tree_names = self.get_tree_names(item)
|
|
|
+ if type(sender) is QTreeWidget:
|
|
|
+ formname = None
|
|
|
+ formrow = []
|
|
|
+ elif type(sender) is QTableView:
|
|
|
+ formname = self.sheets.currentText()
|
|
|
+ formrow = []
|
|
|
+ for column in range(self.tableView.model().columnCount()):
|
|
|
+ data = self.tableView.model().index(self.tableView.currentIndex().row(), column).data()
|
|
|
+ formrow.append(data)
|
|
|
+ line_text = self.instance.CrossProbe(tree_names, formname, formrow)
|
|
|
+ self.lineEdit_win = LineEditWin(self.ui.mdiArea, line_text)
|
|
|
+
|
|
|
+ def add_properties_win(self, sender):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def right_click_menu_action(self, action:QAction, sender):
|
|
|
+ if action.text() == 'Crossprobe':
|
|
|
+ self.add_crossprobe_win(sender)
|
|
|
+ elif action.text() == 'Properties':
|
|
|
+ self.add_properties_win(sender)
|
|
|
+
|
|
|
# 侧边栏只有一个,只需要 update 即可
|
|
|
def init_win_data(self, instance:GuiType._GuiSideBar):
|
|
|
if self.treeWidget.topLevelItemCount():
|
|
|
@@ -82,8 +159,9 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
self.setWindowTitle(self.instance.Title)
|
|
|
self.set_tree(self.instance.Tree)
|
|
|
self.mdisubwin.update()
|
|
|
+
|
|
|
|
|
|
- # 添加一行树节点,改节点包含 n 列数据
|
|
|
+ # 添加一行树节点,该节点包含 n 列数据
|
|
|
def add_tree_row(self, parent, tree_row:GuiType._GuiTreeRow):
|
|
|
item = TreeWidgetItem(parent, tree_row)
|
|
|
item.setText(0,tree_row.Name)
|
|
|
@@ -91,16 +169,19 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
item.setText(i+1,tree_row.Row[i])
|
|
|
return item
|
|
|
|
|
|
- def item_change(self, item:TreeWidgetItem, column):
|
|
|
- tree_names = [item.text(0)]
|
|
|
- parent = item.parent()
|
|
|
+ def get_tree_names(self, tree_item:TreeWidgetItem):
|
|
|
+ tree_names = [tree_item.text(0)]
|
|
|
+ parent = tree_item.parent()
|
|
|
while 1:
|
|
|
if parent:
|
|
|
tree_names.append(parent.text(0))
|
|
|
parent = parent.parent()
|
|
|
else:
|
|
|
break
|
|
|
- self.form_multi_temp = self.instance.GetForms(tree_names[::-1])
|
|
|
+ return tree_names[::-1]
|
|
|
+
|
|
|
+ def item_change(self, item:TreeWidgetItem, column):
|
|
|
+ self.form_multi_temp = self.instance.GetForms(self.get_tree_names(item))
|
|
|
self.set_form_multi(self.form_multi_temp)
|
|
|
|
|
|
def collapse_tree(self, item:TreeWidgetItem):
|
|
|
@@ -208,6 +289,7 @@ class SubWindows(QObject):
|
|
|
elif isinstance(instance, GuiType._GuiSideBar):
|
|
|
|
|
|
self.side_bar.init_win_data(instance)
|
|
|
+
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
m = GuiType._GuiWinFormMulti('multi', 1)
|