def _initGui(self):
     """setup the user interface"""
     self.ui = Ui_settingsDlg()
     self.ui.setupUi(self)
     
     self.setup()
     
     self.ui.connectionCbx.currentIndexChanged.connect(self.connectionChanged)
     self.ui.dbSchemaCbx.currentIndexChanged.connect(self.schemaChanged)
     self.ui.polygonLayerCbx.currentIndexChanged.connect(self.polygonLayerChanged)
     self.ui.buttonBox.helpRequested.connect(self.help)
     self.accepted.connect(self.commit)
class settingsDlg(QtGui.QDialog):
    # noinspection PyArgumentList
    def __init__(self, iface,  parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowFlags( self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint )
        #self.setWindowFlags( self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)

        # initialize locale
        locale = QtCore.QSettings().value("locale/userLocale", "en")[0:2] 
        if not locale in ['en','nl'] : locale = 'en'
        
        localePath = os.path.join(os.path.dirname(__file__), 'i18n', '{}.qm'.format(locale))
        if os.path.exists(localePath):
            self.translator = QtCore.QTranslator()
            self.translator.load(localePath)
            QtCore.QCoreApplication.installTranslator(self.translator)

        self.iface = iface
        self.helpUrl = "https://github.com/milieuinfo/Spatial-Subset-Query-Tool/blob/master/README_NL.md" if locale == 'nl' \
            else "https://github.com/milieuinfo/Spatial-Subset-Query-Tool/blob/master/README.md"
        self.pg = None
        self._initGui()

    def _initGui(self):
        """setup the user interface"""
        self.ui = Ui_settingsDlg()
        self.ui.setupUi(self)
        
        self.setup()
        
        self.ui.connectionCbx.currentIndexChanged.connect(self.connectionChanged)
        self.ui.dbSchemaCbx.currentIndexChanged.connect(self.schemaChanged)
        self.ui.polygonLayerCbx.currentIndexChanged.connect(self.polygonLayerChanged)
        self.ui.buttonBox.helpRequested.connect(self.help)
        self.accepted.connect(self.commit)

    def setup(self):
        self.s = settings()
        self.ui.connectionCbx.clear()
        self.ui.connectionCbx.addItems( [""] + self.s.connections.keys() )
        self.initDBsettings()

    def initDBsettings(self):
        cons = self.s.connections.keys() 
        if self.s.conName in cons:
          try:
            self.ui.connectionCbx.setCurrentIndex(cons.index(self.s.conName) +1)
            self.pg = pgHelper(self.s.dbhost, self.s.dbport, self.s.database, self.s.dbuser, self.s.dbpassw)
          except:
            return
          
          schemas = self.pg.listSchemas()
          self.ui.dbSchemaCbx.clear()
          if self.s.schema in schemas:
             self.ui.dbSchemaCbx.addItems( [""] + schemas )
             self.ui.dbSchemaCbx.setCurrentIndex( schemas.index(self.s.schema) + 1)
          
             geoLayers = self.pg.listGeoLayers(self.s.schema)
             self.ui.polygonLayerCbx.clear()
             if self.s.polyLayer in geoLayers:
                self.ui.polygonLayerCbx.addItems( [""] + geoLayers )
                self.ui.polygonLayerCbx.setCurrentIndex(geoLayers.index(self.s.polyLayer) + 1)
                
                colNames = self.pg.listTableNames(self.s.polyLayer, self.s.schema)
                self.ui.nameColCbx.clear()
                if self.s.polyLayerName in colNames: 
                   self.ui.nameColCbx.addItems( [""] + colNames )
                   self.ui.nameColCbx.setCurrentIndex(colNames.index(self.s.polyLayerName) + 1)    
                   self.ui.geomColEdit.setText( self.s.polyLayerGeom )

    def help(self):
        webbrowser.open_new_tab(self.helpUrl)

    def connectionChanged(self):
        conName = self.ui.connectionCbx.currentText()
        self.ui.dbSchemaCbx.clear()
        
        if conName <> "":
          con = self.s.connections[conName]
          self.pg = pgHelper( con["host"], con["port"], con["database"], con["username"], con["password"] )
          schemas = self.pg.listSchemas()
          self.ui.dbSchemaCbx.clear()
          self.ui.dbSchemaCbx.addItems( [""] + schemas )
        else:
          self.pg = None
          
    def schemaChanged(self):
        if not self.pg: return
        
        schema = self.ui.dbSchemaCbx.currentText()
        self.ui.polygonLayerCbx.clear()
        
        if schema <> "":
           self.ui.polygonLayerCbx.clear()
           self.ui.polygonLayerCbx.addItems([""] + self.pg.listGeoLayers(schema) )
        
    def polygonLayerChanged(self):
        if not self.pg: return
      
        schema = self.ui.dbSchemaCbx.currentText()
        polygonLayer = self.ui.polygonLayerCbx.currentText()
        
        self.ui.nameColCbx.clear()
        self.ui.geomColEdit.setText("")
        
        if polygonLayer <> "":
           colNames = self.pg.listTableNames(polygonLayer, schema)
           self.ui.nameColCbx.clear()
           self.ui.nameColCbx.addItems(colNames) 
           geomName = self.pg.getGeomName(polygonLayer, schema) 
           if geomName: self.ui.geomColEdit.setText(geomName)

    def commit(self):
        if not self.pg: return
          
        self.s.conName = self.ui.connectionCbx.currentText()
        self.s.dbhost = self.pg.host
        self.s.database = self.pg.database
        self.s.dbport = self.pg.port
        self.s.dbuser = self.pg.user
        self.s.dbpassw = self.pg.passw

        self.s.schema =  self.ui.dbSchemaCbx.currentText()
        self.s.polyLayer = self.ui.polygonLayerCbx.currentText()
        self.s.polyLayerName = self.ui.nameColCbx.currentText()
        self.s.polyLayerGeom = self.ui.geomColEdit.text()

        self.s.saveSettings()