Explorar o código

菜单栏显示和隐藏 StatusBar、 Console(Log、History、Message)、ToolBar、Sidebar
底部状态栏 StatusBar新增 Ready和Busy

mrh %!s(int64=3) %!d(string=hai) anos
pai
achega
479b3ac945
Modificáronse 5 ficheiros con 126 adicións e 85 borrados
  1. 16 1
      GuiShell.py
  2. 9 6
      gui.py
  3. 13 2
      main_windows.py
  4. 56 47
      ui/MainWindows.ui
  5. 32 29
      ui/ui_MainWindows.py

+ 16 - 1
GuiShell.py

@@ -45,10 +45,12 @@ class _GuiMain():
         return gui.signale('stop')
 
     def Log_Print(self):                   # test: _GUI.Log_Print()
+        gui.signale("Busy")
         print(1)
         time.sleep(1)
         print(2)
         time.sleep(1)
+        gui.signale("Ready")
         return ""
 
     # test: _GUI.Shell_IsCmdFinished("print(1,")
@@ -80,6 +82,7 @@ class _GuiMain():
 
     def Analyze(self, type_paths):
         assert isinstance(type_paths, list)
+        gui.signale("Busy")
         for tp in type_paths:
             assert tp[0] in ("Filelist", "Netlist", "V2001",
                                 "V2005", "SV2005", "SV2009", "SV2012", "SearchPath")
@@ -87,11 +90,13 @@ class _GuiMain():
             print("Analyze:", tp[0], tp[1])
             time.sleep(0.1)
         print("Analyze Done")
+        gui.signale("Ready")
         return
 
     def Elaborate(self, top, bbox):
         assert isinstance(top, str)
         assert isinstance(bbox, bool)
+        gui.signale("Busy")
         if top == "":
             print("Elaborate: Auto Top, ", end='')
         else:
@@ -109,18 +114,23 @@ class _GuiMain():
                     _GuiTreeRow([                                       ], "SubRow2",    ["1","2"]),
             ], "DemoDesign", ["123", "2"]),]))
         print("Elaborate Done")
+        gui.signale("Ready")
         return gui.signale(self.SideBar)
     
     def ReloadDesign(self):
+        gui.signale("Busy")
         time.sleep(1)
         print("Reload Design Done")
+        gui.signale("Ready")
         return
     
     def ReadTimingConstraint(self, filename):
         assert isinstance(filename, str)
         print("Reading Timing Constraint: "+filename)
+        gui.signale("Busy")
         time.sleep(1)
         print("Read Timing Constraint Done")
+        gui.signale("Ready")
         return
 
     def ReportExceptions(self, mcp, fp, mdp, limit):
@@ -128,6 +138,7 @@ class _GuiMain():
         assert isinstance(fp,  bool)
         assert isinstance(mdp, bool)
         assert isinstance(limit, int)
+        gui.signale("Busy")
         print("Reporting Exception: ", end='')
         if mcp:
             print("MultiCycle Path, ", end='')
@@ -153,6 +164,7 @@ class _GuiMain():
             [["MCP", form_mcp], ["FP", form_fp], ["MDP", form_mdp]])
         # return _GuiWinFormMulti(title, forms)
         print("Names:", forms.Names)
+        gui.signale("Ready")
         return gui.signale(_GuiWinFormMulti(title, forms))
 
     def ReportClocks(self, start, end, exclude, autogen, include_async):
@@ -161,6 +173,7 @@ class _GuiMain():
         assert isinstance(exclude, str)
         assert isinstance(autogen, bool)
         assert isinstance(include_async, bool)
+        gui.signale("Busy")
         print("Reporting Clocks: Startpoints",
                 start, "Endpoints", end, end='')
         if exclude:
@@ -172,6 +185,7 @@ class _GuiMain():
         print()
         time.sleep(1)
         print("Report Clocks Done")
+        gui.signale("Ready")
         self.WindowCount += 1
         title = "Report "+str(self.WindowCount)
         fixed_row = ["Startpoint Clock", "Startpoint",
@@ -190,6 +204,7 @@ class _GuiMain():
         assert isinstance(to, str)
         assert isinstance(flat, bool)
         assert isinstance(limit, int)
+        gui.signale("Busy")
         print("Reporting Virtual Timing: From", from_type, from_,
                 "Through", thru_type, thru, "To", to_type, to, end='')
         if flat:
@@ -202,6 +217,7 @@ class _GuiMain():
             print("No Path Limit")
         time.sleep(1)
         print("Report Virtual Timing Done")
+        gui.signale("Ready")
         self.WindowCount += 1
         title = "Report "+str(self.WindowCount)
         text = "Virtual Timing:\nFrom "+from_type+" "+from_ + \
@@ -215,7 +231,6 @@ class _GuiMain():
         # sys.stdout.stdout_bak.flush()
 
     def run(self):
-        self.Elaborate("top", True)
         shell_loop()
     
     def Exit(self):                        # File - Exit

+ 9 - 6
gui.py

@@ -24,6 +24,7 @@ def run_forever(GUI):
     app = QApplication(sys.argv)
     mainWindows = MainWindow(GUI)
     mainWindows.sig.connect(handle_signal)
+    GUI.Elaborate("top", True)
     app.exec_()
     
 def run_in_thread(GUI:QObject):
@@ -41,12 +42,14 @@ def signale(dat):
 def handle_signal(dat):
     if isinstance(dat, str):
         dat = dat.lower()
-        if dat == 'start':
-            mainWindows.show()
-        elif dat == 'stop':
-            mainWindows.hide()
-        elif dat == 'exit':
-            mainWindows.close()
+        sig_call = {'start':mainWindows.show, 'stop':mainWindows.hide, 'exit':mainWindows.close,
+                    'busy': lambda: mainWindows.statusbar.showMessage("Busy"), 
+                    "ready": lambda: mainWindows.statusbar.showMessage("Ready"), 
+                    }
+        call = sig_call.get(dat)
+        print("sig:", dat)
+        if call:
+            call()
     else:
         mainWindows.sub_win.sig.emit(dat)
     

+ 13 - 2
main_windows.py

@@ -94,7 +94,7 @@ class MainWindow(Ui_MainWindow, QMainWindow):
         self.tableHistory.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
         self.tableHistory.customContextMenuRequested.connect(self.history_right_click_menu)
         self.MessageTreeView.customContextMenuRequested.connect(self.message_right_click_menu)
-        
+        self.statusbar.showMessage("Ready")
         self.loader = QUiLoader()
         self.actionCopy.triggered.connect(self.action_copy)
         self.actionPast.triggered.connect(self.action_paste)
@@ -105,9 +105,20 @@ class MainWindow(Ui_MainWindow, QMainWindow):
         self.actionElaborate.triggered.connect(self.elaborate_window)
         self.actionReload_Design.triggered.connect(GUI.ReloadDesign)
         
-        self.actionReport_Exceptions.triggered.connect(self.about)
+        # MENUE
+        # file
         self.actionStop_GUI.triggered.connect(GUI.Stop)
         self.actionExit.triggered.connect(GUI.Exit)
+        # View
+        self.actionIncr_Font
+        self.actionDecr_Font
+        self.actionToolbar.triggered.connect(lambda: self.toolBar.setHidden(not self.actionToolbar.isChecked()))
+        self.actionSidebar.triggered.connect(lambda: self.sub_win.side_bar.mdisubwin.setHidden(not self.actionSidebar.isChecked()))
+        self.actionConsole.triggered.connect(lambda: self.tabWidget.setHidden(not self.actionConsole.isChecked()))
+        self.actionStatusBar.triggered.connect(lambda: self.statusbar.setHidden(not self.actionStatusBar.isChecked()))
+        self.actionSave_as_Default
+        self.actionPreferences
+        self.actionReport_Exceptions.triggered.connect(self.about)
         self.actionReport_Virtual_Timing.triggered.connect(self.add_sub_win)
         self.actionAbout.triggered.connect(self.about)
         self.textEdit.document().contentsChanged.connect(self.textEdit_change_size)

+ 56 - 47
ui/MainWindows.ui

@@ -15,6 +15,53 @@
   </property>
   <widget class="QWidget" name="centralwidget">
    <layout class="QGridLayout" name="gridLayout">
+    <item row="1" column="0">
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QPushButton" name="btn_shell">
+        <property name="text">
+         <string>nc_shell-p&gt;</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QTextEdit" name="textEdit">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>25</height>
+         </size>
+        </property>
+        <property name="font">
+         <font>
+          <pointsize>12</pointsize>
+         </font>
+        </property>
+        <property name="verticalScrollBarPolicy">
+         <enum>Qt::ScrollBarAlwaysOff</enum>
+        </property>
+        <property name="horizontalScrollBarPolicy">
+         <enum>Qt::ScrollBarAlwaysOff</enum>
+        </property>
+        <property name="lineWrapMode">
+         <enum>QTextEdit::NoWrap</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
     <item row="0" column="0">
      <widget class="QSplitter" name="splitter">
       <property name="orientation">
@@ -113,53 +160,6 @@
       </widget>
      </widget>
     </item>
-    <item row="1" column="0">
-     <layout class="QHBoxLayout" name="horizontalLayout_2">
-      <item>
-       <widget class="QPushButton" name="btn_shell">
-        <property name="text">
-         <string>nc_shell-p&gt;</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QTextEdit" name="textEdit">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>0</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>25</height>
-         </size>
-        </property>
-        <property name="font">
-         <font>
-          <pointsize>12</pointsize>
-         </font>
-        </property>
-        <property name="verticalScrollBarPolicy">
-         <enum>Qt::ScrollBarAlwaysOff</enum>
-        </property>
-        <property name="horizontalScrollBarPolicy">
-         <enum>Qt::ScrollBarAlwaysOff</enum>
-        </property>
-        <property name="lineWrapMode">
-         <enum>QTextEdit::NoWrap</enum>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </item>
    </layout>
   </widget>
   <widget class="QMenuBar" name="menubar">
@@ -333,6 +333,9 @@
    <property name="checkable">
     <bool>true</bool>
    </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
    <property name="text">
     <string>Toolbar</string>
    </property>
@@ -341,6 +344,9 @@
    <property name="checkable">
     <bool>true</bool>
    </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
    <property name="text">
     <string>Sidebar</string>
    </property>
@@ -349,6 +355,9 @@
    <property name="checkable">
     <bool>true</bool>
    </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
    <property name="text">
     <string>Console</string>
    </property>

+ 32 - 29
ui/ui_MainWindows.py

@@ -49,12 +49,15 @@ class Ui_MainWindow(object):
         self.actionToolbar = QAction(MainWindow)
         self.actionToolbar.setObjectName(u"actionToolbar")
         self.actionToolbar.setCheckable(True)
+        self.actionToolbar.setChecked(True)
         self.actionSidebar = QAction(MainWindow)
         self.actionSidebar.setObjectName(u"actionSidebar")
         self.actionSidebar.setCheckable(True)
+        self.actionSidebar.setChecked(True)
         self.actionConsole = QAction(MainWindow)
         self.actionConsole.setObjectName(u"actionConsole")
         self.actionConsole.setCheckable(True)
+        self.actionConsole.setChecked(True)
         self.actionStatusBar = QAction(MainWindow)
         self.actionStatusBar.setObjectName(u"actionStatusBar")
         self.actionStatusBar.setCheckable(True)
@@ -121,6 +124,34 @@ class Ui_MainWindow(object):
         self.centralwidget.setObjectName(u"centralwidget")
         self.gridLayout = QGridLayout(self.centralwidget)
         self.gridLayout.setObjectName(u"gridLayout")
+        self.horizontalLayout_2 = QHBoxLayout()
+        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+        self.btn_shell = QPushButton(self.centralwidget)
+        self.btn_shell.setObjectName(u"btn_shell")
+
+        self.horizontalLayout_2.addWidget(self.btn_shell)
+
+        self.textEdit = QTextEdit(self.centralwidget)
+        self.textEdit.setObjectName(u"textEdit")
+        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth())
+        self.textEdit.setSizePolicy(sizePolicy)
+        self.textEdit.setMinimumSize(QSize(0, 0))
+        self.textEdit.setMaximumSize(QSize(16777215, 25))
+        font1 = QFont()
+        font1.setPointSize(12)
+        self.textEdit.setFont(font1)
+        self.textEdit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.textEdit.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.textEdit.setLineWrapMode(QTextEdit.NoWrap)
+
+        self.horizontalLayout_2.addWidget(self.textEdit)
+
+
+        self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
+
         self.splitter = QSplitter(self.centralwidget)
         self.splitter.setObjectName(u"splitter")
         self.splitter.setOrientation(Qt.Vertical)
@@ -184,34 +215,6 @@ class Ui_MainWindow(object):
 
         self.gridLayout.addWidget(self.splitter, 0, 0, 1, 1)
 
-        self.horizontalLayout_2 = QHBoxLayout()
-        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
-        self.btn_shell = QPushButton(self.centralwidget)
-        self.btn_shell.setObjectName(u"btn_shell")
-
-        self.horizontalLayout_2.addWidget(self.btn_shell)
-
-        self.textEdit = QTextEdit(self.centralwidget)
-        self.textEdit.setObjectName(u"textEdit")
-        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth())
-        self.textEdit.setSizePolicy(sizePolicy)
-        self.textEdit.setMinimumSize(QSize(0, 0))
-        self.textEdit.setMaximumSize(QSize(16777215, 25))
-        font1 = QFont()
-        font1.setPointSize(12)
-        self.textEdit.setFont(font1)
-        self.textEdit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
-        self.textEdit.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
-        self.textEdit.setLineWrapMode(QTextEdit.NoWrap)
-
-        self.horizontalLayout_2.addWidget(self.textEdit)
-
-
-        self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
-
         MainWindow.setCentralWidget(self.centralwidget)
         self.menubar = QMenuBar(MainWindow)
         self.menubar.setObjectName(u"menubar")
@@ -334,12 +337,12 @@ class Ui_MainWindow(object):
         self.actionHistory.setText(QCoreApplication.translate("MainWindow", u"History", None))
         self.actionMessages.setText(QCoreApplication.translate("MainWindow", u"Messages", None))
         self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None))
+        self.btn_shell.setText(QCoreApplication.translate("MainWindow", u"nc_shell-p>", None))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.LogPage), QCoreApplication.translate("MainWindow", u"Log", None))
         ___qtablewidgetitem = self.tableHistory.horizontalHeaderItem(0)
         ___qtablewidgetitem.setText(QCoreApplication.translate("MainWindow", u"\u65b0\u5efa\u5217", None));
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.HistoryPage), QCoreApplication.translate("MainWindow", u"History", None))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.MessagePage), QCoreApplication.translate("MainWindow", u"Message", None))
-        self.btn_shell.setText(QCoreApplication.translate("MainWindow", u"nc_shell-p>", None))
         self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"File", None))
         self.menuEdit.setTitle(QCoreApplication.translate("MainWindow", u"Edit", None))
         self.menuView.setTitle(QCoreApplication.translate("MainWindow", u"View", None))