def root(self):
     '''
     Override of base class method.
     '''
     adminSUSet = AdminSpatialUnitSet()
     #Get top-level items
     adminUnits = adminSUSet.queryObject().filter(AdminSpatialUnitSet.Parent == None).order_by(AdminSpatialUnitSet.Name)
     
     for aus in adminUnits:
         nodeData = self._extractAdminUnitSetInfo(aus)
         ausNode = BaseSTRNode(nodeData,self.rootNode)
         self._populateAUSChildren(ausNode, aus)
     
     return self.rootNode
示例#2
0
    def root(self):
        '''
        Override of base class method.
        '''
        adminSUSet = AdminSpatialUnitSet()
        #Get top-level items
        adminUnits = adminSUSet.queryObject().filter(
            AdminSpatialUnitSet.Parent == None).order_by(
                AdminSpatialUnitSet.Name)

        for aus in adminUnits:
            nodeData = self._extractAdminUnitSetInfo(aus)
            ausNode = BaseSTRNode(nodeData, self.rootNode)
            self._populateAUSChildren(ausNode, aus)

        return self.rootNode
示例#3
0
    def onDeleteSelection(self):
        '''
        Slot raised to delete current selection of administrative unit.
        '''
        self._notifBar.clear()
        #Get current row selection
        selIndexes = self.tvAdminUnits.selectionModel().selectedRows(2)

        if len(selIndexes) == 0:
            msg = QApplication.translate(
                "AdminUnitManager",
                "Please select the administrative unit to delete.")
            self._notifBar.insertWarningNotification(msg)

        else:
            delmsg = QApplication.translate("AdminUnitManager",
                                         "This action will delete the selected administrative unit plus any " \
                                         "existing children under it. It cannot be undone.\nClick Yes to " \
                                         "delete or No to cancel.")
            selOption = QMessageBox.warning(
                self,
                QApplication.translate("AdminUnitManager", "Confirm deletion"),
                delmsg, QMessageBox.Yes | QMessageBox.No)

            if selOption == QMessageBox.Yes:
                #Get the node in the current selection
                delIndex = selIndexes[0]
                ausNode = self._adminUnitTreeModel._getNode(delIndex)
                ausId = ausNode.data(2)
                ausHandler = AdminSpatialUnitSet()
                ausObj = ausHandler.queryObject().filter(
                    AdminSpatialUnitSet.id == ausId).first()

                if not ausObj is None:
                    ausObj.delete()

                    #Remove item in tree view
                    self._adminUnitTreeModel.removeRows(
                        delIndex.row(), 1, delIndex.parent())

                    #Notify user
                    self._notifBar.clear()
                    successmsg = QApplication.translate(
                        "AdminUnitManager",
                        "Administrative unit successfully deleted.")
                    self._notifBar.insertInfoNotification(successmsg)
示例#4
0
 def selectedAdministrativeUnit(self):
     '''
     Returns the selected administrative unit object otherwise, if there is no
     selection then it returns None.
     '''
     selIndexes = self.tvAdminUnits.selectionModel().selectedRows(2)
     
     if len(selIndexes) == 0:
         selAdminUnit = None
         
     else:
         selIndex = selIndexes[0]
         ausNode = self._adminUnitTreeModel._getNode(selIndex)
         ausId = ausNode.data(2)
         ausHandler = AdminSpatialUnitSet()
         selAdminUnit = ausHandler.queryObject().filter(AdminSpatialUnitSet.id == ausId).first() 
         
     return selAdminUnit
示例#5
0
 def onModelDataChanged(self,oldindex,newindex):
     '''
     Slot raised when the model data is changed.
     '''
     #Get model index containing ID property
     refNode = self._adminUnitTreeModel._getNode(newindex)
     ausID = refNode.data(2)
     
     ausHandler = AdminSpatialUnitSet()
     ausObj = ausHandler.queryObject().filter(AdminSpatialUnitSet.id == ausID).first()
     
     if ausObj != None:
         attrColumn = newindex.column()
         if attrColumn == 0:
             ausObj.Name = refNode.data(0)
         elif attrColumn == 1:
             ausObj.Code = refNode.data(1)
             
         ausObj.update()
示例#6
0
    def selectedAdministrativeUnit(self):
        '''
        Returns the selected administrative unit object otherwise, if there is no
        selection then it returns None.
        '''
        selIndexes = self.tvAdminUnits.selectionModel().selectedRows(2)

        if len(selIndexes) == 0:
            selAdminUnit = None

        else:
            selIndex = selIndexes[0]
            ausNode = self._adminUnitTreeModel._getNode(selIndex)
            ausId = ausNode.data(2)
            ausHandler = AdminSpatialUnitSet()
            selAdminUnit = ausHandler.queryObject().filter(
                AdminSpatialUnitSet.id == ausId).first()

        return selAdminUnit
示例#7
0
    def onModelDataChanged(self, oldindex, newindex):
        '''
        Slot raised when the model data is changed.
        '''
        #Get model index containing ID property
        refNode = self._adminUnitTreeModel._getNode(newindex)
        ausID = refNode.data(2)

        ausHandler = AdminSpatialUnitSet()
        ausObj = ausHandler.queryObject().filter(
            AdminSpatialUnitSet.id == ausID).first()

        if ausObj != None:
            attrColumn = newindex.column()
            if attrColumn == 0:
                ausObj.Name = refNode.data(0)
            elif attrColumn == 1:
                ausObj.Code = refNode.data(1)

            ausObj.update()
示例#8
0
 def onDeleteSelection(self):
     '''
     Slot raised to delete current selection of administrative unit.
     '''
     self._notifBar.clear()
     #Get current row selection
     selIndexes = self.tvAdminUnits.selectionModel().selectedRows(2)
     
     if len(selIndexes) == 0:
         msg = QApplication.translate("AdminUnitManager",
                                      "Please select the administrative unit to delete.")
         self._notifBar.insertWarningNotification(msg)
         
     else:
         delmsg = QApplication.translate("AdminUnitManager",
                                      "This action will delete the selected administrative unit plus any " \
                                      "existing children under it. It cannot be undone.\nClick Yes to " \
                                      "delete or No to cancel.")
         selOption = QMessageBox.warning(self,QApplication.translate("AdminUnitManager","Confirm deletion"),delmsg,
                                         QMessageBox.Yes|QMessageBox.No)
         
         if selOption == QMessageBox.Yes:         
             #Get the node in the current selection
             delIndex = selIndexes[0]
             ausNode = self._adminUnitTreeModel._getNode(delIndex)
             ausId = ausNode.data(2)
             ausHandler = AdminSpatialUnitSet()
             ausObj = ausHandler.queryObject().filter(AdminSpatialUnitSet.id == ausId).first() 
             
             if not ausObj is None:
                 ausObj.delete()     
                 
                 #Remove item in tree view
                 self._adminUnitTreeModel.removeRows(delIndex.row(), 1, delIndex.parent())
                 
                 #Notify user
                 self._notifBar.clear()
                 successmsg = QApplication.translate("AdminUnitManager",
                                      "Administrative unit successfully deleted.") 
                 self._notifBar.insertInfoNotification(successmsg)
示例#9
0
 def onCreateAdminUnit(self):
     '''
     Slot raised on clicking to add a new administrative unit.
     '''
     self._notifBar.clear()
     
     if self.txtUnitName.text() == "":
         msg = QApplication.translate("AdminUnitManager","Name of the administrative unit cannot be empty.")
         self._notifBar.insertErrorNotification(msg)
         self.txtUnitName.setFocus()
         return
     
     if not self.txtUnitName.validate():
         return
         
     if self.txtUnitCode.text() == "":
         msg = QApplication.translate("AdminUnitManager","Code of the administrative unit cannot be empty.")
         self._notifBar.insertErrorNotification(msg)
         self.txtUnitCode.setFocus()
         return
     
     if not self.txtUnitCode.validate():
         return
     
     #Get current row selection
     selIndexes = self.tvAdminUnits.selectionModel().selectedRows(0)
     
     if len(selIndexes) == 0:
         #Get the number of items in the tree view
         rootIndex = self.tvAdminUnits.rootIndex()
         rowCount = self._adminUnitTreeModel.rowCount(rootIndex)
         
         if rowCount > 0:
             msg = QApplication.translate("AdminUnitManager",
                                          "You have not selected any parent node for the new administrative unit. Do " \
                                          "you want to add it as one of the topmost administrative units?\nClick Yes to " \
                                          "proceed or No to cancel.")
             selOption = QMessageBox.warning(self,QApplication.translate("AdminUnitManager","No Parent Node Selected"),msg,
                                             QMessageBox.Yes|QMessageBox.No)
             
             if selOption == QMessageBox.Yes:
                 parentNode = self._rtNode
                 #We are interested in the model index of the root node
                 parentModelIndex = rootIndex
                 parentModel = None
                 
             else:
                 return
             
         #Do not prompt user and immediately add the administrative unit to the root node.
         else:
             parentNode = self._rtNode
             parentModelIndex = rootIndex
             parentModel = None
         
     else:
         #Get model index for the first column as this is where the new node will be added as the child
         parentModelIndex = selIndexes[0]
         parentNode = self._adminUnitTreeModel._getNode(parentModelIndex)
                   
         parentID = parentNode.data(2)
         ausModel = AdminSpatialUnitSet()
         parentModel = ausModel.queryObject().filter(AdminSpatialUnitSet.id == parentID).first()
         
     adminUnitModel = AdminSpatialUnitSet(self.txtUnitName.text(), self.txtUnitCode.text(), parentModel)
         
     #Commit transaction to the database
     adminUnitModel.save()
     
     #Extract properties from the model
     ausProps = self._adminUnitNodeFormatter._extractAdminUnitSetInfo(adminUnitModel)
     
     childNode = BaseSTRNode(ausProps, parentNode)
     
     #Insert row into the view
     self._adminUnitTreeModel.insertRows(parentNode.childCount(), 1, parentModelIndex)
     
     self.clearInputs()
示例#10
0
    def onCreateAdminUnit(self):
        '''
        Slot raised on clicking to add a new administrative unit.
        '''
        self._notifBar.clear()

        if self.txtUnitName.text() == "":
            msg = QApplication.translate(
                "AdminUnitManager",
                "Name of the administrative unit cannot be empty.")
            self._notifBar.insertErrorNotification(msg)
            self.txtUnitName.setFocus()
            return

        if not self.txtUnitName.validate():
            return

        if self.txtUnitCode.text() == "":
            msg = QApplication.translate(
                "AdminUnitManager",
                "Code of the administrative unit cannot be empty.")
            self._notifBar.insertErrorNotification(msg)
            self.txtUnitCode.setFocus()
            return

        if not self.txtUnitCode.validate():
            return

        #Get current row selection
        selIndexes = self.tvAdminUnits.selectionModel().selectedRows(0)

        if len(selIndexes) == 0:
            #Get the number of items in the tree view
            rootIndex = self.tvAdminUnits.rootIndex()
            rowCount = self._adminUnitTreeModel.rowCount(rootIndex)

            if rowCount > 0:
                msg = QApplication.translate("AdminUnitManager",
                                             "You have not selected any parent node for the new administrative unit. Do " \
                                             "you want to add it as one of the topmost administrative units?\nClick Yes to " \
                                             "proceed or No to cancel.")
                selOption = QMessageBox.warning(
                    self,
                    QApplication.translate("AdminUnitManager",
                                           "No Parent Node Selected"), msg,
                    QMessageBox.Yes | QMessageBox.No)

                if selOption == QMessageBox.Yes:
                    parentNode = self._rtNode
                    #We are interested in the model index of the root node
                    parentModelIndex = rootIndex
                    parentModel = None

                else:
                    return

            #Do not prompt user and immediately add the administrative unit to the root node.
            else:
                parentNode = self._rtNode
                parentModelIndex = rootIndex
                parentModel = None

        else:
            #Get model index for the first column as this is where the new node will be added as the child
            parentModelIndex = selIndexes[0]
            parentNode = self._adminUnitTreeModel._getNode(parentModelIndex)

            parentID = parentNode.data(2)
            ausModel = AdminSpatialUnitSet()
            parentModel = ausModel.queryObject().filter(
                AdminSpatialUnitSet.id == parentID).first()

        adminUnitModel = AdminSpatialUnitSet(self.txtUnitName.text(),
                                             self.txtUnitCode.text(),
                                             parentModel)

        #Commit transaction to the database
        adminUnitModel.save()

        #Extract properties from the model
        ausProps = self._adminUnitNodeFormatter._extractAdminUnitSetInfo(
            adminUnitModel)

        childNode = BaseSTRNode(ausProps, parentNode)

        #Insert row into the view
        self._adminUnitTreeModel.insertRows(parentNode.childCount(), 1,
                                            parentModelIndex)

        self.clearInputs()