class CoordinateCaptureDockWidget(QDockWidget): closingPlugin = pyqtSignal() def __init__(self, parent=None): """Constructor.""" super(CoordinateCaptureDockWidget, self).__init__(parent) self.setWindowTitle(self.tr("Coordinate Capture")) self.setGeometry(0, 0, 300, 228) self.dockWidgetContents = QWidget(self) self.setWidget(self.dockWidgetContents) self.gridLayout = QGridLayout() self.dockWidgetContents.setLayout(self.gridLayout) self.dockWidgetContents.layout().setColumnMinimumWidth(0, 36) self.userCrsToolButton = QToolButton(self.dockWidgetContents) self.userCrsToolButton.setIcon( QIcon(":/plugins/coordinate_capture/mIconProjectionEnabled.svg")) self.userCrsToolButton.setToolTip( self.tr("Click to select the CRS to use for coordinate display")) self.userCrsLabel = QLabel(self.dockWidgetContents) self.userCrsLabel.setPixmap( QPixmap(":/plugins/coordinate_capture/transformed.svg")) self.userCrsLabel.setGeometry(self.userCrsToolButton.geometry()) self.userCrsEdit = QLineEdit(self.dockWidgetContents) self.userCrsEdit.setReadOnly(True) self.userCrsEdit.setToolTip( self.tr("Coordinate in your selected CRS (lat,lon or east,north)")) self.copyUserCrsCoordinatesAction = self.userCrsEdit.addAction( QIcon(":/plugins/coordinate_capture/mActionEditCopy.svg"), QLineEdit.TrailingPosition) self.copyUserCrsCoordinatesAction.triggered.connect( self.copyUserCrsCoordinates) self.canvasCrsEdit = QLineEdit(self.dockWidgetContents) self.canvasCrsEdit.setReadOnly(True) self.canvasCrsEdit.setToolTip( self. tr("Coordinate in map canvas coordinate reference system (lat,lon or east,north)" )) self.copyCanvasCrsCoordinatesAction = self.canvasCrsEdit.addAction( QIcon(":/plugins/coordinate_capture/mActionEditCopy.svg"), QLineEdit.TrailingPosition) self.copyCanvasCrsCoordinatesAction.triggered.connect( self.copyCanvasCrsCoordinates) self.trackMouseButton = QToolButton(self.dockWidgetContents) self.trackMouseButton.setIcon( QIcon(":/plugins/coordinate_capture/tracking.svg")) self.trackMouseButton.setCheckable(True) self.trackMouseButton.setToolTip( self.tr( "Click to enable mouse tracking. Click the canvas to stop")) self.trackMouseButton.setChecked(False) # Create the action for tool self.captureButton = QPushButton(self.dockWidgetContents) self.captureButton.setText(self.tr("Start Capture")) self.captureButton.setToolTip( self.tr("Click to enable coordinate capture")) self.captureButton.setIcon( QIcon(":/plugins/coordinate_capture/coordinate_capture.png")) self.captureButton.setWhatsThis( self. tr("Click on the map to view coordinates and capture to clipboard." )) # // Set the icons # setCurrentTheme(QString()); self.dockWidgetContents.layout().addWidget(self.userCrsToolButton, 0, 0) self.dockWidgetContents.layout().addWidget(self.userCrsEdit, 0, 1) self.dockWidgetContents.layout().addWidget(self.userCrsLabel, 1, 0) self.dockWidgetContents.layout().addWidget(self.canvasCrsEdit, 1, 1) self.dockWidgetContents.layout().addWidget(self.trackMouseButton, 2, 0) self.dockWidgetContents.layout().addWidget(self.captureButton, 2, 1) def copyUserCrsCoordinates(self): self.userCrsEdit.selectAll() self.userCrsEdit.copy() def copyCanvasCrsCoordinates(self): self.canvasCrsEdit.selectAll() self.canvasCrsEdit.copy() def closeEvent(self, event): self.closingPlugin.emit() event.accept()
class searchBar(): def __init__(self, iface, TOMsSearchBar, proposalsManager): TOMsMessageLog.logMessage("In searchBar", level=Qgis.Info) # Save reference to the QGIS interface self.iface = iface self.canvas = self.iface.mapCanvas() self.TOMsSearchBar = TOMsSearchBar self.proposalsManager = proposalsManager self.tool = TOMsInstantPrintTool(self.iface, self.proposalsManager) self.initSearchBar() # https: // gis.stackexchange.com / questions / 244584 / adding - textbox - to - qgis - plugin - toolbar def initSearchBar(self): TOMsMessageLog.logMessage("In initSearchBox:", level=Qgis.Info) self.initialPass = True self.gazetteerStringList = [] # Create & add a textbox self.searchTextbox = QLineEdit(self.iface.mainWindow()) # Set width self.searchTextbox.setFixedWidth(250) # Add textbox to toolbar self.txtEntry = self.TOMsSearchBar.addWidget(self.searchTextbox) #self.txtEntry.setToolTip(self.tr(u'Enter Street Name')) self.searchTextbox.textChanged.connect(self.doLookupItem) self.actionGoToItem = QAction(QIcon(":/plugins/TOMs/resources/magnifyingGlass.png"), QCoreApplication.translate("MyPlugin", "Start TOMs"), self.iface.mainWindow()) self.TOMsSearchBar.addAction(self.actionGoToItem) self.actionGoToItem.triggered.connect(self.doGoToItem) self.actionGoToItem.setCheckable(True) # Add in details of the Instant Print plugin self.toolButton = QToolButton(self.iface.mainWindow()) self.toolButton.setIcon(QIcon(":/plugins/TOMs/InstantPrint/icons/icon.png")) #self.toolButton.setToolTip(self.tr("Instant Print")) self.toolButton.setCheckable(True) self.printButtonAction = self.TOMsSearchBar.addWidget(self.toolButton) """self.actionInstantPrint = QAction(QIcon(":/plugins/TOMs/InstantPrint/icons/icon.png"), QCoreApplication.translate("Print", "Print"), self.iface.mainWindow())""" self.toolButton.toggled.connect(self.__enablePrintTool) self.iface.mapCanvas().mapToolSet.connect(self.__onPrintToolSet) def enableSearchBar(self): TOMsMessageLog.logMessage("In enableSearchBar", level=Qgis.Info) self.actionGoToItem.setEnabled(True) self.toolButton.setEnabled(True) self.searchTextbox.textChanged.connect(self.doLookupItem) def disableSearchBar(self): TOMsMessageLog.logMessage("In disableSearchBar", level=Qgis.Info) self.initialPass = True self.actionGoToItem.setEnabled(False) self.toolButton.setEnabled(False) self.searchTextbox.textChanged.disconnect(self.doLookupItem) def doLookupItem(self): TOMsMessageLog.logMessage("In doLookupItem:", level=Qgis.Info) # TODO: Check whether or not a project has been opened #https: // gis.stackexchange.com / questions / 246339 / drop - down - list - qgis - plugin - based - on - keyword - search / 246347 if self.initialPass: self.setupCompleter() self.initialPass = False searchText = self.searchTextbox.text() TOMsMessageLog.logMessage("In doLookupItem: searchText " + str(searchText), level=Qgis.Info) #search_in = txt #query = "SELECT myfield1, myfield2 FROM my_table WHERE '%s' LIKE '%' || search_field || '%';" % (search_in) # access your db and run the query # run the query with while query.next() and store values in a list # feed list to resiver (combox.addItems(myList) def setupCompleter(self): # set up string list for completer TOMsMessageLog.logMessage("In setupCompleter:", level=Qgis.Info) lookupStringSet = set() # https://gis.stackexchange.com/questions/155805/qstringlist-error-in-plugin-of-qgis-2-10 self.GazetteerLayer = QgsProject.instance().mapLayersByName("StreetGazetteerRecords")[0] for row in self.GazetteerLayer.getFeatures(): streetName = row.attribute("Descriptor_") locality = row.attribute("Locality") nameString = streetName if locality: nameString = nameString + ", " + locality if nameString: TOMsMessageLog.logMessage("In setupCompleter: nameString: " + nameString, level=Qgis.Info) lookupStringSet.add(nameString) # self.gazetteerStringList.append((nameString)) completer = QCompleter() completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setFilterMode(Qt.MatchContains) self.searchTextbox.setCompleter(completer) model = QStringListModel() completer.setModel(model) model.setStringList(self.gazetteerStringList) model.setStringList(sorted(lookupStringSet)) def doGoToItem(self): TOMsMessageLog.logMessage("In doGoToItem:", level=Qgis.Info) searchText = self.searchTextbox.text() TOMsMessageLog.logMessage("In doGoToItem: searchText " + str(searchText), level=Qgis.Info) # Split out the components of the text streetName, localityName = searchText.split(',') #amendedStreetName = streetName.replace("'", "\'\'") #amendedLocalityName = localityName.replace("'", "\'\'") TOMsMessageLog.logMessage("In doGoToItem: streetName: " + str(streetName.replace("'", "\'\'")) + " locality: + " + str(localityName.replace("'", "\'\'")), level=Qgis.Info) # Now search for the street queryString = "\"Descriptor_\" = \'" + streetName.replace("'", "\'\'") + "\'" if localityName: queryString = queryString + " AND \"Locality\" = \'" + localityName.replace("'", "\'\'").lstrip() + "\'" TOMsMessageLog.logMessage("In doGoToItem: queryString: " + str(queryString), level=Qgis.Info) it = self.GazetteerLayer.selectByExpression(queryString, QgsVectorLayer.SetSelection) self.canvas.zoomToSelected(self.GazetteerLayer) """box = layer.boundingBoxOfSelected() iface.mapCanvas().setExtent(box) iface.mapCanvas().refresh()""" def unload(self): self.tool.setEnabled(False) self.tool = None self.iface.TOMsSearchBar().removeAction(self.printButtonAction) self.iface.TOMsSearchBar().removeAction(self.actionGoToItem) def __enablePrintTool(self, active): self.tool.setEnabled(active) def __onPrintToolSet(self, tool): if tool != self.tool: self.toolButton.setChecked(False)