def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        if not os.path.exists(self.plugin_dir + '/project'):
            os.mkdir(self.plugin_dir + "/project/")
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(self.plugin_dir, 'i18n',
                                   'PlantMap_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference
        self.dlg = PlantMapDialog(self.iface)

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&PlantMap : Map Generator')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'PlantMap')
        self.toolbar.setObjectName(u'PlantMap')
    def test_remove_board(self):
        #load shape test
        print "\n"
        print "---- debut test ----- "
        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        iterationField = self.dialog.UI_iterationField.currentText()

        #Add one taxon to the board
        self.dialog.add_Taxon_To_Board("1234", "test", "OK")
        self.dialog.validate_remove_all()

        self.assertEqual(self.dialog.UI_taxonTab.rowCount(), 0)
	def test_remove_board(self):
		#load shape test
		print "\n"
		print "---- debut test ----- "
		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"
		 
		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)
		

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		iterationField = self.dialog.UI_iterationField.currentText()

		#Add one taxon to the board
		self.dialog.add_Taxon_To_Board("1234","test","OK")
		self.dialog.validate_remove_all()

		self.assertEqual(self.dialog.UI_taxonTab.rowCount(),0)
    def test_description_field(self):
        print "\n"
        print "----- debut test -----"

        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        #Put a value in the combobox of descriptionField
        self.dialog.UI_descriptionField.clear()
        self.dialog.UI_descriptionField.addItem("nom_comple")

        iterationField = self.dialog.UI_iterationField.currentText()
        descriptionField = self.dialog.UI_descriptionField.currentText()

        descriptionFeature = self.dialog.pme.check_taxon_id(
            "88949", layer, iterationField, descriptionField)

        self.assertEqual(descriptionFeature,
                         "Carex viridula Michx. subsp. viridula")

        self.dialog.add_Taxon_To_Board("88949", descriptionFeature, "OK")

        taxonBoard = self.dialog.UI_taxonTab
        cell = taxonBoard.item(0, 1).text()

        self.assertEqual("Carex viridula Michx. subsp. viridula", cell)
        self.assertNotEqual("fazfageaz fage", cell)
    def test_parsing_csv_file(self):
        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)
        testPath = test_data_path('test.csv')
        countRow = 0
        taxonsLocal = []
        with open(testPath, 'r') as csvfile:
            spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
            for row in spamreader:
                countRow += 1
                taxonsLocal.append(row[0])

        taxons = self.dialog.parsing_csv_file(testPath)
        self.assertEqual(len(taxons), countRow)

        compare = lambda x, y: collections.Counter(x) == collections.Counter(y)

        self.assertTrue(compare)
Beispiel #6
0
	def test_export_button_names(self):
		#Name of the button
		self.assertEqual("1","1")
		self.dialog = PlantMapDialog(IFACE)
		
		localExportButton = self.dialog.UI_exportButton
		LOGGER.debug(localExportButton.text())
		#print str("test")
		self.assertEqual(localExportButton.text(),"Exporter")
    def test_add_one_taxon(self):
        #self.dialog = PlantMapDialog(IFACE)

        #load shape test
        print "\n"
        print "---- debut test ----- "
        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        iterationField = self.dialog.UI_iterationField.currentText()

        #Get the taxon board
        taxonBoard = self.dialog.UI_taxonTab

        #Add one taxon to the board
        self.dialog.add_Taxon_To_Board("1234", "test", "OK")

        #Test the tab length with a defined value
        self.assertEqual(taxonBoard.rowCount(), 1)

        #Test the tab with the list which is supposed to be fill with the method
        self.assertEqual(taxonBoard.rowCount(), len(self.dialog.taxonList))
	def test_parsing_csv_file(self):
		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)
		testPath = test_data_path('test.csv') 
		countRow = 0
		taxonsLocal=[]
		with open(testPath, 'r') as csvfile:
			spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
			for row in spamreader:
				countRow+=1
				taxonsLocal.append(row[0])

		taxons = self.dialog.parsing_csv_file(testPath)
		self.assertEqual(len(taxons),countRow)

		compare = lambda x,y:collections.Counter(x) == collections.Counter(y)
		
		self.assertTrue(compare)
	def test_description_field(self):
		print "\n"
		print "----- debut test -----"

		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"

		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		#Put a value in the combobox of descriptionField
		self.dialog.UI_descriptionField.clear()
		self.dialog.UI_descriptionField.addItem("nom_comple")

		iterationField = self.dialog.UI_iterationField.currentText()
		descriptionField = self.dialog.UI_descriptionField.currentText()		

		descriptionFeature = self.dialog.pme.check_taxon_id("88949",layer,iterationField,descriptionField)

		self.assertEqual(descriptionFeature,"Carex viridula Michx. subsp. viridula")

		self.dialog.add_Taxon_To_Board("88949",descriptionFeature,"OK")

		taxonBoard = self.dialog.UI_taxonTab
		cell = taxonBoard.item(0,1).text()
		
		self.assertEqual("Carex viridula Michx. subsp. viridula",cell)
		self.assertNotEqual("fazfageaz fage",cell)
	def test_add_one_taxon(self):
		#self.dialog = PlantMapDialog(IFACE)

		#load shape test
		print "\n"
		print "---- debut test ----- "
		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"
		 
		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)
		

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		iterationField = self.dialog.UI_iterationField.currentText()

		#Get the taxon board		
		taxonBoard = self.dialog.UI_taxonTab;

		#Add one taxon to the board
		self.dialog.add_Taxon_To_Board("1234","test","OK")

		#Test the tab length with a defined value
		self.assertEqual(taxonBoard.rowCount(),1)

		#Test the tab with the list which is supposed to be fill with the method
		self.assertEqual(taxonBoard.rowCount(),len(self.dialog.taxonList))
Beispiel #11
0
    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        if not os.path.exists(self.plugin_dir+'/project'):
            os.mkdir(self.plugin_dir+"/project/")
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(
            self.plugin_dir,
            'i18n',
            'PlantMap_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference
        self.dlg = PlantMapDialog(self.iface)

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&PlantMap : Map Generator')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'PlantMap')
        self.toolbar.setObjectName(u'PlantMap')
Beispiel #12
0
	def test_export_path(self):
		#No path location indicate
		self.dialog = PlantMapDialog(IFACE)
		self.dialog.UI_exportPath.setText("/home/max/.qgis2/python/plugins/plantmap_plugin/")
		localExportPath = self.dialog.UI_exportPath
		self.assertEqual(localExportPath.text(),"/home/max/.qgis2/python/plugins/plantmap_plugin/")
Beispiel #13
0
class PlantMap:
    """QGIS Plugin Implementation."""
    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        if not os.path.exists(self.plugin_dir + '/project'):
            os.mkdir(self.plugin_dir + "/project/")
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(self.plugin_dir, 'i18n',
                                   'PlantMap_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference
        self.dlg = PlantMapDialog(self.iface)

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&PlantMap : Map Generator')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'PlantMap')
        self.toolbar.setObjectName(u'PlantMap')

    # noinspection PyMethodMayBeStatic
    def tr(self, message):
        """Get the translation for a string using Qt translation API.

        We implement this ourselves since we do not inherit QObject.

        :param message: String for translation.
        :type message: str, QString

        :returns: Translated version of message.
        :rtype: QString
        """
        # noinspection PyTypeChecker,PyArgumentList,PyCallByClass
        return QCoreApplication.translate('PlantMap', message)

    def add_action(self,
                   icon_path,
                   text,
                   callback,
                   enabled_flag=True,
                   add_to_menu=True,
                   add_to_toolbar=True,
                   status_tip=None,
                   whats_this=None,
                   parent=None):
        """Add a toolbar icon to the toolbar.

        :param icon_path: Path to the icon for this action. Can be a resource
            path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
        :type icon_path: str

        :param text: Text that should be shown in menu items for this action.
        :type text: str

        :param callback: Function to be called when the action is triggered.
        :type callback: function

        :param enabled_flag: A flag indicating if the action should be enabled
            by default. Defaults to True.
        :type enabled_flag: bool

        :param add_to_menu: Flag indicating whether the action should also
            be added to the menu. Defaults to True.
        :type add_to_menu: bool

        :param add_to_toolbar: Flag indicating whether the action should also
            be added to the toolbar. Defaults to True.
        :type add_to_toolbar: bool

        :param status_tip: Optional text to show in a popup when mouse pointer
            hovers over the action.
        :type status_tip: str

        :param parent: Parent widget for the new action. Defaults None.
        :type parent: QWidget

        :param whats_this: Optional text to show in the status bar when the
            mouse pointer hovers over the action.

        :returns: The action that was created. Note that the action is also
            added to self.actions list.
        :rtype: QAction
        """

        icon = QIcon(icon_path)
        action = QAction(icon, text, parent)
        action.triggered.connect(callback)
        action.setEnabled(enabled_flag)

        if status_tip is not None:
            action.setStatusTip(status_tip)

        if whats_this is not None:
            action.setWhatsThis(whats_this)

        if add_to_toolbar:
            self.toolbar.addAction(action)

        if add_to_menu:
            self.iface.addPluginToMenu(self.menu, action)

        self.actions.append(action)

        return action

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""

        icon_path = ':/plugins/PlantMap/icon.png'
        self.add_action(icon_path,
                        text=self.tr(u''),
                        callback=self.run,
                        parent=self.iface.mainWindow())

        # slots/signals
        ###############
        self.initDone = False

    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(self.tr(u'&PlantMap : Map Generator'),
                                        action)
            self.iface.removeToolBarIcon(action)
        # remove the toolbar
        del self.toolbar

    def run(self):
        """Run method that performs all the real work"""
        #Load the field QComboBox [Layer, fieldLayer, Composer, ...]

        self.dlg.UI_linkExpression.setText(
            '''<a href='https://docs.qgis.org/2.8/en/docs/user_manual/working_with_vector/expression.html'>(Qgis Doc)</a>'''
        )
        self.dlg.UI_linkExpression.setOpenExternalLinks(True)

        self.set_layers_list()  # Add the layer list
        self.set_field_description_layer()  # add the field of selected layer
        self.dlg.UI_taxonLayer.currentIndexChanged.connect(
            self.set_field_description_layer
        )  # Run function if item in qComboBox is selected (This is a signal)
        self.set_composer_list()
        self.dlg.select_project(self.dlg.UI_projectSelection)
        self.dlg.show()
        # Run the dialog event loop
        result = self.dlg.exec_()
        # See if OK was pressed
        if result:
            # Do something useful here - delete the line containing pass and
            # substitute with your code.
            pass

    """
    The next method init all the QComboBox in the UI generateMap
    """

    def set_layers_list(self):
        """
        this method add all current names of layers and the layers objects in a qComboBox.
        The qComboBox is pass in argument
        """
        self.dlg.UI_taxonLayer.clear()
        [
            self.dlg.UI_taxonLayer.addItem(layer.name(), layer)
            for layer in self.iface.legendInterface().layers()
        ]

    def set_field_description_layer(self):
        """
        This method add the field of the selected layer in a qComboBox
        We cannot pass an another argument, this method is a signal.
        """
        self.dlg.UI_iterationField.clear()  # Clean the items of the qComboBox
        self.dlg.UI_descriptionField.clear(
        )  # Clean the items of the qComboBox
        layer_selected = self.dlg.UI_taxonLayer.itemData(
            self.dlg.UI_taxonLayer.currentIndex()
        )  # Get the object layer in the qComboBox
        if (layer_selected != None):
            self.dlg.UI_iterationField.addItems([
                field.name() for field in layer_selected.pendingFields()
            ])  #Added all the field.
            self.dlg.UI_descriptionField.addItems([
                field.name() for field in layer_selected.pendingFields()
            ])  #Added all the field.

    def set_composer_list(self):
        """
        This method add the composer in a qCombox
        The qComboBox is pass in argument
        """
        self.dlg.UI_composerName.clear()
        for composer in self.iface.activeComposers():
            self.dlg.UI_composerName.addItem(
                composer.composerWindow().windowTitle(), composer)

    """
class TestTaxonTab(unittest.TestCase):


	
	#Test if all the value in the combobox iterationField are really in the layer
	#Test if all the layer are present in the combobox taxonLayer

	def test_remove_board(self):
		#load shape test
		print "\n"
		print "---- debut test ----- "
		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"
		 
		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)
		

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		iterationField = self.dialog.UI_iterationField.currentText()

		#Add one taxon to the board
		self.dialog.add_Taxon_To_Board("1234","test","OK")
		self.dialog.validate_remove_all()

		self.assertEqual(self.dialog.UI_taxonTab.rowCount(),0)


	def test_status_field(self):

		print "\n"
		print "----- debut test -----"

		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"

		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		#Put a value in the combobox of descriptionField
		self.dialog.UI_descriptionField.clear()
		self.dialog.UI_descriptionField.addItem("nom_comple")

		iterationField = self.dialog.UI_iterationField.currentText()
		descriptionField = self.dialog.UI_descriptionField.currentText()		

		descriptionFeature = self.dialog.pme.check_taxon_id("222",layer,iterationField,descriptionField)

		self.assertEqual(descriptionFeature,None)

		descriptionFeature = self.dialog.pme.check_taxon_id("88949",layer,iterationField,descriptionField)

		self.assertNotEqual(descriptionFeature,None)


	def test_description_field(self):
		print "\n"
		print "----- debut test -----"

		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"

		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		#Put a value in the combobox of descriptionField
		self.dialog.UI_descriptionField.clear()
		self.dialog.UI_descriptionField.addItem("nom_comple")

		iterationField = self.dialog.UI_iterationField.currentText()
		descriptionField = self.dialog.UI_descriptionField.currentText()		

		descriptionFeature = self.dialog.pme.check_taxon_id("88949",layer,iterationField,descriptionField)

		self.assertEqual(descriptionFeature,"Carex viridula Michx. subsp. viridula")

		self.dialog.add_Taxon_To_Board("88949",descriptionFeature,"OK")

		taxonBoard = self.dialog.UI_taxonTab
		cell = taxonBoard.item(0,1).text()
		
		self.assertEqual("Carex viridula Michx. subsp. viridula",cell)
		self.assertNotEqual("fazfageaz fage",cell)
		


	def test_add_one_taxon(self):
		#self.dialog = PlantMapDialog(IFACE)

		#load shape test
		print "\n"
		print "---- debut test ----- "
		testPath = test_data_path('layer','aesn_simplifie.shp') 
		layer = load_layer(testPath)
		if not layer.isValid():
			print "-/-\- failed -/-\-"
		else:
			print "---- Layer loaded ----"
		 
		#Init a qgis instance
		registry = QgsMapLayerRegistry.instance()
		#Remove all layers
		registry.addMapLayer(layer)

		# Init the qt application to interact with each widget
		self.dialog = PlantMapDialog(IFACE)

		self.dialog.UI_taxonLayer.clear()
		self.dialog.UI_taxonLayer.addItem(layer.name(),layer)
		

		#Put a value of one field 
		self.dialog.UI_iterationField.clear()
		self.dialog.UI_iterationField.addItem("cd_ref_ref")

		iterationField = self.dialog.UI_iterationField.currentText()

		#Get the taxon board		
		taxonBoard = self.dialog.UI_taxonTab;

		#Add one taxon to the board
		self.dialog.add_Taxon_To_Board("1234","test","OK")

		#Test the tab length with a defined value
		self.assertEqual(taxonBoard.rowCount(),1)

		#Test the tab with the list which is supposed to be fill with the method
		self.assertEqual(taxonBoard.rowCount(),len(self.dialog.taxonList))
class TestTaxonTab(unittest.TestCase):

    #Test if all the value in the combobox iterationField are really in the layer
    #Test if all the layer are present in the combobox taxonLayer

    def test_remove_board(self):
        #load shape test
        print "\n"
        print "---- debut test ----- "
        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        iterationField = self.dialog.UI_iterationField.currentText()

        #Add one taxon to the board
        self.dialog.add_Taxon_To_Board("1234", "test", "OK")
        self.dialog.validate_remove_all()

        self.assertEqual(self.dialog.UI_taxonTab.rowCount(), 0)

    def test_status_field(self):

        print "\n"
        print "----- debut test -----"

        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        #Put a value in the combobox of descriptionField
        self.dialog.UI_descriptionField.clear()
        self.dialog.UI_descriptionField.addItem("nom_comple")

        iterationField = self.dialog.UI_iterationField.currentText()
        descriptionField = self.dialog.UI_descriptionField.currentText()

        descriptionFeature = self.dialog.pme.check_taxon_id(
            "222", layer, iterationField, descriptionField)

        self.assertEqual(descriptionFeature, None)

        descriptionFeature = self.dialog.pme.check_taxon_id(
            "88949", layer, iterationField, descriptionField)

        self.assertNotEqual(descriptionFeature, None)

    def test_description_field(self):
        print "\n"
        print "----- debut test -----"

        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        #Put a value in the combobox of descriptionField
        self.dialog.UI_descriptionField.clear()
        self.dialog.UI_descriptionField.addItem("nom_comple")

        iterationField = self.dialog.UI_iterationField.currentText()
        descriptionField = self.dialog.UI_descriptionField.currentText()

        descriptionFeature = self.dialog.pme.check_taxon_id(
            "88949", layer, iterationField, descriptionField)

        self.assertEqual(descriptionFeature,
                         "Carex viridula Michx. subsp. viridula")

        self.dialog.add_Taxon_To_Board("88949", descriptionFeature, "OK")

        taxonBoard = self.dialog.UI_taxonTab
        cell = taxonBoard.item(0, 1).text()

        self.assertEqual("Carex viridula Michx. subsp. viridula", cell)
        self.assertNotEqual("fazfageaz fage", cell)

    def test_add_one_taxon(self):
        #self.dialog = PlantMapDialog(IFACE)

        #load shape test
        print "\n"
        print "---- debut test ----- "
        testPath = test_data_path('layer', 'aesn_simplifie.shp')
        layer = load_layer(testPath)
        if not layer.isValid():
            print "-/-\- failed -/-\-"
        else:
            print "---- Layer loaded ----"

        #Init a qgis instance
        registry = QgsMapLayerRegistry.instance()
        #Remove all layers
        registry.addMapLayer(layer)

        # Init the qt application to interact with each widget
        self.dialog = PlantMapDialog(IFACE)

        self.dialog.UI_taxonLayer.clear()
        self.dialog.UI_taxonLayer.addItem(layer.name(), layer)

        #Put a value of one field
        self.dialog.UI_iterationField.clear()
        self.dialog.UI_iterationField.addItem("cd_ref_ref")

        iterationField = self.dialog.UI_iterationField.currentText()

        #Get the taxon board
        taxonBoard = self.dialog.UI_taxonTab

        #Add one taxon to the board
        self.dialog.add_Taxon_To_Board("1234", "test", "OK")

        #Test the tab length with a defined value
        self.assertEqual(taxonBoard.rowCount(), 1)

        #Test the tab with the list which is supposed to be fill with the method
        self.assertEqual(taxonBoard.rowCount(), len(self.dialog.taxonList))
Beispiel #16
0
class PlantMap:
    """QGIS Plugin Implementation."""

    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        if not os.path.exists(self.plugin_dir+'/project'):
            os.mkdir(self.plugin_dir+"/project/")
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(
            self.plugin_dir,
            'i18n',
            'PlantMap_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference
        self.dlg = PlantMapDialog(self.iface)

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&PlantMap : Map Generator')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'PlantMap')
        self.toolbar.setObjectName(u'PlantMap')

    # noinspection PyMethodMayBeStatic
    def tr(self, message):
        """Get the translation for a string using Qt translation API.

        We implement this ourselves since we do not inherit QObject.

        :param message: String for translation.
        :type message: str, QString

        :returns: Translated version of message.
        :rtype: QString
        """
        # noinspection PyTypeChecker,PyArgumentList,PyCallByClass
        return QCoreApplication.translate('PlantMap', message)


    def add_action(
        self,
        icon_path,
        text,
        callback,
        enabled_flag=True,
        add_to_menu=True,
        add_to_toolbar=True,
        status_tip=None,
        whats_this=None,
        parent=None):
        """Add a toolbar icon to the toolbar.

        :param icon_path: Path to the icon for this action. Can be a resource
            path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
        :type icon_path: str

        :param text: Text that should be shown in menu items for this action.
        :type text: str

        :param callback: Function to be called when the action is triggered.
        :type callback: function

        :param enabled_flag: A flag indicating if the action should be enabled
            by default. Defaults to True.
        :type enabled_flag: bool

        :param add_to_menu: Flag indicating whether the action should also
            be added to the menu. Defaults to True.
        :type add_to_menu: bool

        :param add_to_toolbar: Flag indicating whether the action should also
            be added to the toolbar. Defaults to True.
        :type add_to_toolbar: bool

        :param status_tip: Optional text to show in a popup when mouse pointer
            hovers over the action.
        :type status_tip: str

        :param parent: Parent widget for the new action. Defaults None.
        :type parent: QWidget

        :param whats_this: Optional text to show in the status bar when the
            mouse pointer hovers over the action.

        :returns: The action that was created. Note that the action is also
            added to self.actions list.
        :rtype: QAction
        """

        icon = QIcon(icon_path)
        action = QAction(icon, text, parent)
        action.triggered.connect(callback)
        action.setEnabled(enabled_flag)

        if status_tip is not None:
            action.setStatusTip(status_tip)

        if whats_this is not None:
            action.setWhatsThis(whats_this)

        if add_to_toolbar:
            self.toolbar.addAction(action)

        if add_to_menu:
            self.iface.addPluginToMenu(
                self.menu,
                action)

        self.actions.append(action)

        return action

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""

        icon_path = ':/plugins/PlantMap/icon.png'
        self.add_action(
            icon_path,
            text=self.tr(u''),
            callback=self.run,
            parent=self.iface.mainWindow())

        # slots/signals
        ###############
        self.initDone = False

    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(
                self.tr(u'&PlantMap : Map Generator'),
                action)
            self.iface.removeToolBarIcon(action)
        # remove the toolbar
        del self.toolbar


    def run(self):
        """Run method that performs all the real work"""
        #Load the field QComboBox [Layer, fieldLayer, Composer, ...]

        self.dlg.UI_linkExpression.setText('''<a href='https://docs.qgis.org/2.8/en/docs/user_manual/working_with_vector/expression.html'>(Qgis Doc)</a>''')
        self.dlg.UI_linkExpression.setOpenExternalLinks(True)

        self.set_layers_list() # Add the layer list
        self.set_field_description_layer() # add the field of selected layer
        self.dlg.UI_taxonLayer.currentIndexChanged.connect(self.set_field_description_layer) # Run function if item in qComboBox is selected (This is a signal)
        self.set_composer_list()
        self.dlg.select_project(self.dlg.UI_projectSelection)
        self.dlg.show()
        # Run the dialog event loop
        result = self.dlg.exec_()
        # See if OK was pressed
        if result:
            # Do something useful here - delete the line containing pass and
            # substitute with your code.
            pass

    """
    The next method init all the QComboBox in the UI generateMap
    """
    def set_layers_list(self):
        """
        this method add all current names of layers and the layers objects in a qComboBox.
        The qComboBox is pass in argument
        """
        self.dlg.UI_taxonLayer.clear()
        [self.dlg.UI_taxonLayer.addItem(layer.name(), layer) for layer in self.iface.legendInterface().layers()]

    def set_field_description_layer(self):
        """
        This method add the field of the selected layer in a qComboBox
        We cannot pass an another argument, this method is a signal.
        """
        self.dlg.UI_iterationField.clear() # Clean the items of the qComboBox
        self.dlg.UI_descriptionField.clear() # Clean the items of the qComboBox
        layer_selected = self.dlg.UI_taxonLayer.itemData(self.dlg.UI_taxonLayer.currentIndex()) # Get the object layer in the qComboBox
        if(layer_selected != None):
            self.dlg.UI_iterationField.addItems([field.name() for field in layer_selected.pendingFields()]) #Added all the field.
            self.dlg.UI_descriptionField.addItems([field.name() for field in layer_selected.pendingFields()]) #Added all the field.

    def set_composer_list(self):
        """
        This method add the composer in a qCombox
        The qComboBox is pass in argument
        """
        self.dlg.UI_composerName.clear()
        for composer in self.iface.activeComposers():
            self.dlg.UI_composerName.addItem(composer.composerWindow().windowTitle(), composer)

   

    """