import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class groupChoiceUI(QDialog):
    """
    This class defines the design of a Qt dialog box for Gmesh Plugin
    """
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.checkBoxes = []


    def setupUi(self, VolumeGroupList, AreaGroupList, LineGroupList, MeshGroupList):
        self.setWindowTitle("Select groups")
        self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)

        columnNr = 0
        self.mainLayout = QVBoxLayout()
		
        self.scrollArea = QtWidgets.QScrollArea()
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll_viewWidget = QtWidgets.QWidget()
        self.scroll_viewWidget.setGeometry(QtCore.QRect(0, 0, 600, 400))
        self.scrollArea.setWidget(self.scroll_viewWidget) 
        layout = QGridLayout(self.scroll_viewWidget)
        meshGroupNames = [x.GetName() for x in MeshGroupList]
        # 3D group checkboxes
        if len(VolumeGroupList) !=0:
            vertLayout = QVBoxLayout()
            lb = QLabel("Volume groups")
            lb.setFont(QtGui.QFont("Times", 10, QtGui.QFont.Bold))
            lb.setContentsMargins(0,0,0,10)			
            vertLayout.addWidget(lb)
            for v in VolumeGroupList:
                cb = QCheckBox(v.GetName())
                if v.GetName() in meshGroupNames:
                   cb.setChecked(True)
                else:
                   cb.setChecked(False)
                vertLayout.addWidget(cb)
                self.checkBoxes.append(cb)
            layout.addLayout(vertLayout, 0, columnNr, Qt.AlignTop)
            columnNr = columnNr + 1
			
        # 2D group checkboxes
        if len(AreaGroupList) !=0:
            vertLayout = QVBoxLayout()
            lb = QLabel("Face groups")
            lb.setFont(QtGui.QFont("Times", 10, QtGui.QFont.Bold))
            lb.setContentsMargins(0,0,0,10)		
            vertLayout.addWidget(lb)
            for a in AreaGroupList:
                cb = QCheckBox(a.GetName())
                if a.GetName() in meshGroupNames:
                   cb.setChecked(True)
                else:
                   cb.setChecked(False)
                vertLayout.addWidget(cb)
                self.checkBoxes.append(cb)
            layout.addLayout(vertLayout, 0, columnNr, Qt.AlignTop)
            columnNr = columnNr + 1
			
        # 1D group checkboxes
        if len(LineGroupList) !=0:
            vertLayout = QVBoxLayout()
            lb = QLabel("Line groups")
            lb.setFont(QtGui.QFont("Times", 10, QtGui.QFont.Bold))
            lb.setContentsMargins(0,0,0,10)		
            vertLayout.addWidget(lb)
            for l in LineGroupList:
                cb = QCheckBox(l.GetName())
                if l.GetName() in meshGroupNames:
                   cb.setChecked(True)
                else:
                   cb.setChecked(False)
                vertLayout.addWidget(cb)
                self.checkBoxes.append(cb)
            layout.addLayout(vertLayout, 0, columnNr, Qt.AlignTop)
            columnNr = columnNr + 1

        # buttons select and deselect all   
        btnLayout = QHBoxLayout()

        self.selectAllButton = QtWidgets.QPushButton(self)
        self.selectAllButton.resize(120, 25)
        self.selectAllButton.setObjectName("selectAllButton")
        self.selectAllButton.setText("Select All")
        btnLayout.addWidget(self.selectAllButton)

        self.deselectAllButton = QtWidgets.QPushButton(self)
        self.deselectAllButton.resize(120, 25)
        self.deselectAllButton.setObjectName("deselectAllButton")
        self.deselectAllButton.setText("Deselect All")
        btnLayout.addWidget(self.deselectAllButton)
					
        layout.addLayout(btnLayout, 1, 0, 1, columnNr)
			
        # Mesh To CENOS button 
        self.meshToCenosBtn = QtWidgets.QPushButton(self)
        self.meshToCenosBtn.resize(120, 25)
        self.meshToCenosBtn.setObjectName("meshToCenosBtn")
        self.meshToCenosBtn.setText("Send mesh To CENOS")
        layout.addWidget(self.meshToCenosBtn, 2, 0, 1, columnNr)
		
        layout.setHorizontalSpacing(20)	
        self.mainLayout.addWidget(self.scrollArea)
        self.setLayout(self.mainLayout)

		
#   Unused
class saveGmshFileUI(QDialog):
    """
    This class defines the design of a Qt dialog box for Gmesh Plugin
    """
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.setupUi()

    def setupUi(self):
        self.resize(358, 144)
        self.lineEdit = QtWidgets.QLineEdit(self)
        self.lineEdit.setGeometry(QtCore.QRect(30, 40, 191, 27))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit.setReadOnly(True)
        palette = self.lineEdit.palette()
        palette.setColor(QtGui.QPalette.Base, QtGui.QColor("#f6f6f6"))
        self.lineEdit.setPalette(palette)
        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setGeometry(QtCore.QRect(232, 40, 98, 27))
        self.pushButton.setObjectName("pushButton")
        self.okButton = QtWidgets.QPushButton(self)
        self.okButton.setGeometry(QtCore.QRect(234, 100, 85, 27))
        self.okButton.setObjectName("okButton")
        self.cancelButton = QtWidgets.QPushButton(self)
        self.cancelButton.setGeometry(QtCore.QRect(130, 100, 85, 27))
        self.cancelButton.setObjectName("cancelButton")
        self.setWindowTitle("Dialog")
        self.pushButton.setText("Browse")
        self.okButton.setText("Ok")
        self.cancelButton.setText("Cancel")
        saveFile = QtWidgets.QAction("&Save File", self)
        saveFile.setShortcut("Ctrl+S")
        saveFile.setStatusTip('Save File')


#
# ======================================================================
# Unit test
# ======================================================================
#
def main( args ):
    a = QtGui.QApplication(sys.argv)
    groupChoice = groupChoiceUI()
    sys.exit(groupChoice.exec_())

if __name__=="__main__":
    main(sys.argv)

