From f0a249ad4b38b16b45295fc68e99d006d77cb413 Mon Sep 17 00:00:00 2001
From: "Collin A. Schmitz" <caschmitz@aps.anl.gov>
Date: Wed, 15 Mar 2017 21:06:33 +0000
Subject: [PATCH] Converting to PyQt and adding startup tab

---
 .../dm/aps_beamline_tools/gui/daqsTab.py      |  9 ++--
 .../dm/aps_beamline_tools/gui/dmStationUi.py  | 47 +++++++++++--------
 .../aps_beamline_tools/gui/experimentsTab.py  | 13 ++---
 .../dm/aps_beamline_tools/gui/initialTab.py   | 41 ++++++++++++++++
 .../dm/aps_beamline_tools/gui/uploadsTab.py   | 10 ++--
 5 files changed, 83 insertions(+), 37 deletions(-)
 create mode 100644 src/python/dm/aps_beamline_tools/gui/initialTab.py

diff --git a/src/python/dm/aps_beamline_tools/gui/daqsTab.py b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
index 29e5e4ff..7d824749 100644
--- a/src/python/dm/aps_beamline_tools/gui/daqsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/daqsTab.py
@@ -1,12 +1,13 @@
 #!/usr/bin/env python
 
-import wx
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
 from dmApiFactory import DmApiFactory
  
 # Define the DAQs tab content:
-class DaqsTab(wx.ListCtrl):
+class DaqsTab(QObject):
     def __init__(self, stationName, parent, id=-1):
-        wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT)
+        super(DaqsTab, self).__init__(parent)
         self.stationName = stationName
         self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
 
@@ -32,5 +33,5 @@ class DaqsTab(wx.ListCtrl):
                 self.SetItemBackgroundColour(i, '#e6f1f5')
             i += 1
 
- 
+
 
diff --git a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
index bd2926cc..dc53a71b 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
 
 import sys
-import wx
+from PyQt4.QtCore import *
+from PyQt4.QtGui import QMainWindow, QStackedLayout, QApplication, QWidget
 
 from dm.common.constants import dmStatus
 from dm.common.exceptions.dmException import DmException
@@ -12,31 +13,37 @@ from dm.common.utility.configurationManager import ConfigurationManager
 from experimentsTab import ExperimentsTab
 from daqsTab import DaqsTab
 from uploadsTab import UploadsTab
- 
-class DmStationUi(wx.Frame):
+from initialTab import InitialTab
+
+
+class DmStationUi(QMainWindow):
     def __init__(self):
         self.__configure()
         self.logger.debug('Starting UI for DM Station: %s' % self.stationName)
-        wx.Frame.__init__(self, None, title='DM Station: %s' % self.stationName, size=(900,500))
+        super(DmStationUi, self).__init__()
+
+        self.setWindowTitle('DM Station: %s' % self.stationName)
+        self.setGeometry(0, 0, 800, 400)
  
-        # Create a panel and notebook (tabs holder)
-        p = wx.Panel(self)
-        nb = wx.Notebook(p)
+        # Create a stacked layout to connect the various pages
+        self.stackedLayout = QStackedLayout()
  
         # Create the tab windows
-        experimentsTab = ExperimentsTab(self.stationName, nb)
-        daqsTab = DaqsTab(self.stationName, nb)
-        uploadsTab = UploadsTab(self.stationName, nb)
- 
-        # Add the windows to tabs and name them.
-        nb.AddPage(experimentsTab, "Experiments")
-        nb.AddPage(daqsTab, "Real Time DAQs")
-        nb.AddPage(uploadsTab, "Data Uploads")
+        initialTab = InitialTab(self.stationName, self.stackedLayout)
+        experimentsTab = ExperimentsTab(self.stationName, self.stackedLayout)
+        #daqsTab = DaqsTab(self.stationName, self.stackedLayout)
+        #uploadsTab = UploadsTab(self.stationName, self.stackedLayout)
  
-        # Set noteboook in a sizer to create the layout
-        sizer = wx.BoxSizer()
-        sizer.Add(nb, 1, wx.EXPAND)
-        p.SetSizer(sizer)
+        # Add the windows to the stack.
+        self.stackedLayout.addWidget(initialTab)
+        self.stackedLayout.addWidget(experimentsTab)
+        #self.stackedLayout.addWidget(daqsTab)
+        #self.stackedLayout.addWidget(uploadsTab)
+
+        # Set a central widget to hold everything
+        self.centralWidget = QWidget()
+        self.centralWidget.setLayout(self.stackedLayout)
+        self.setCentralWidget(self.centralWidget)
 
     def __configure(self):
         self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
@@ -47,7 +54,7 @@ class DmStationUi(wx.Frame):
  
 if __name__ == "__main__":
     try:
-        app = wx.App()
+        app = QApplication(sys.argv)
         DmStationUi().Show()
         app.MainLoop()
     except DmException, ex:
diff --git a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
index a4b28474..d925fbc4 100644
--- a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py
@@ -1,22 +1,17 @@
 #!/usr/bin/env python
 
-import wx
+from PyQt4.QtGui import *
+from PyQt4.QtCore import QObject
 from dmApiFactory import DmApiFactory
  
 # Define the experiments tab content:
-class ExperimentsTab(wx.ListCtrl):
+class ExperimentsTab(QObject):
     def __init__(self, stationName, parent, id=-1):
-        wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT)
+        super(ExperimentsTab, self).__init__(parent)
         self.stationName = stationName
         self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
 
-        self.InsertColumn(0, 'Name')
-        self.InsertColumn(1, 'Description')
-        self.InsertColumn(2, 'Start Date')
 
-        self.SetColumnWidth(0, 150)
-        self.SetColumnWidth(1, 500)
-        self.SetColumnWidth(2, 250)
 
         self.updateList()
 
diff --git a/src/python/dm/aps_beamline_tools/gui/initialTab.py b/src/python/dm/aps_beamline_tools/gui/initialTab.py
new file mode 100644
index 00000000..7fca1d8f
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/initialTab.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+
+from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, QFont, QLabel
+from PyQt4.QtCore import QObject, Qt
+
+
+# Define the experiments tab content:
+class InitialTab(QObject):
+    def __init__(self, stationName, parent, id=-1):
+        super(InitialTab, self).__init__(parent)
+        self.stationName = stationName
+        self.parent = parent
+
+    def initialTabLayout(self):
+        grid = QGridLayout()
+
+        labelFont = QFont("Arial", 18, QFont.Bold)
+        lbl = QLabel(self.stationName + " DM Tool", self)
+        lbl.setAlignment(Qt.AlignCenter)
+        lbl.setFont(labelFont)
+        grid.addWidget(lbl, 1, 1, 1, 3)
+
+        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 2, 1)
+
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 1)
+        manageBtn = QPushButton("Manage Experiments", self)
+        manageBtn.clicked.connect(self.setTab(1))
+        grid.addWidget(manageBtn, 3, 2)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 3)
+        viewBtn = QPushButton("View Experiments", self)
+        viewBtn.clicked.connect(self.setTab(2))
+        grid.addWidget(viewBtn, 3, 4)
+        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 5)
+
+        grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 4, 1)
+
+        self.initialTabWidget = QWidget()
+        self.initialTabWidget.setLayout(grid)
+
+    def setTab(self, tab):
+        self.parent.setCurrentIndex(tab)
diff --git a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
index 1ed425d1..a5654bac 100644
--- a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
+++ b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py
@@ -1,12 +1,13 @@
 #!/usr/bin/env python
 
-import wx
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
 from dmApiFactory import DmApiFactory
  
 # Define the experiments tab content:
-class UploadsTab(wx.ListCtrl):
+class UploadsTab(QObject):
     def __init__(self, stationName, parent, id=-1):
-        wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT)
+        super(UploadsTab, self).__init__(parent)
         self.stationName = stationName
         self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
 
@@ -31,5 +32,6 @@ class UploadsTab(wx.ListCtrl):
             if (i % 2) == 0:
                 self.SetItemBackgroundColour(i, '#e6f1f5')
             i += 1
- 
+
+
 
-- 
GitLab