class quickFinder(QObject): name = u"&Quick Finder" actions = None toolbar = None finders = {} loadingIcon = None def __init__(self, iface): QObject.__init__(self) self.iface = iface self.actions = {} self.finders = {} self.settings = MySettings() self._initFinders() self.iface.projectRead.connect(self._reloadFinders) self.iface.newProjectCreated.connect(self._reloadFinders) # translation environment self.plugin_dir = os.path.dirname(__file__) locale = QSettings().value("locale/userLocale")[0:2] localePath = os.path.join(self.plugin_dir, 'i18n', 'quickfinder_{0}.qm'.format(locale)) if os.path.exists(localePath): self.translator = QTranslator() self.translator.load(localePath) QCoreApplication.installTranslator(self.translator) def initGui(self): self.actions['showSettings'] = QAction( QIcon(":/plugins/quickfinder/icons/settings.svg"), self.tr(u"&Settings"), self.iface.mainWindow()) self.actions['showSettings'].triggered.connect(self.showSettings) self.iface.addPluginToMenu(self.name, self.actions['showSettings']) self.actions['help'] = QAction( QIcon(":/plugins/quickfinder/icons/help.svg"), self.tr("Help"), self.iface.mainWindow()) self.actions['help'].triggered.connect( lambda: QDesktopServices().openUrl( QUrl("http://3nids.github.io/quickfinder"))) self.iface.addPluginToMenu(self.name, self.actions['help']) self._initToolbar() self.rubber = QgsRubberBand(self.iface.mapCanvas()) self.rubber.setColor(QColor(255, 255, 50, 200)) self.rubber.setIcon(self.rubber.ICON_CIRCLE) self.rubber.setIconSize(15) self.rubber.setWidth(4) self.rubber.setBrushStyle(Qt.NoBrush) def unload(self): """ Unload plugin """ for key in self.finders.keys(): self.finders[key].close() for action in self.actions.itervalues(): self.iface.removePluginMenu(self.name, action) if self.toolbar: del self.toolbar if self.rubber: self.iface.mapCanvas().scene().removeItem(self.rubber) del self.rubber def _initToolbar(self): """setup the plugin toolbar.""" self.toolbar = self.iface.addToolBar(self.name) self.toolbar.setObjectName('mQuickFinderToolBar') self.searchAction = QAction(QIcon(":/plugins/quickfinder/icons/magnifier13.svg"), self.tr("Search"), self.toolbar) self.stopAction = QAction( QIcon(":/plugins/quickfinder/icons/wrong2.svg"), self.tr("Cancel"), self.toolbar) self.finderBox = FinderBox(self.finders, self.iface, self.toolbar) self.finderBox.searchStarted.connect(self.searchStarted) self.finderBox.searchFinished.connect(self.searchFinished) self.finderBoxAction = self.toolbar.addWidget(self.finderBox) self.finderBoxAction.setVisible(True) self.searchAction.triggered.connect(self.finderBox.search) self.toolbar.addAction(self.searchAction) self.stopAction.setVisible(False) self.stopAction.triggered.connect(self.finderBox.stop) self.toolbar.addAction(self.stopAction) self.toolbar.setVisible(True) def _initFinders(self): self.finders['geomapfish'] = GeomapfishFinder(self) self.finders['osm'] = OsmFinder(self) self.finders['project'] = ProjectFinder(self) for key in self.finders.keys(): self.finders[key].message.connect(self.displayMessage) self.refreshProject() def _reloadFinders(self): for key in self.finders.keys(): self.finders[key].close() self.finders[key].reload() self.refreshProject() @pyqtSlot(str, QgsMessageBar.MessageLevel) def displayMessage(self, message, level): self.iface.messageBar().pushMessage("QuickFinder", message, level) def showSettings(self): if ConfigurationDialog().exec_(): self._reloadFinders() def searchStarted(self): self.searchAction.setVisible(False) self.stopAction.setVisible(True) def searchFinished(self): self.searchAction.setVisible(True) self.stopAction.setVisible(False) def refreshProject(self): if not self.finders['project'].activated: return if not self.settings.value("refreshAuto"): return nDays = self.settings.value("refreshDelay") # do not ask more ofen than 3 days askLimit = min(3, nDays) recentlyAsked = self.settings.value("refreshLastAsked") >= nDaysAgoIsoDate(askLimit) if recentlyAsked: return threshDate = nDaysAgoIsoDate(nDays) uptodate = True for search in self.finders['project'].searches.values(): if search.dateEvaluated <= threshDate: uptodate = False break if uptodate: return self.settings.setValue("refreshLastAsked", nDaysAgoIsoDate(0)) ret = QMessageBox(QMessageBox.Warning, "Quick Finder", QCoreApplication.translate("Auto Refresh", "Some searches are outdated. Do you want to refresh them ?"), QMessageBox.Cancel | QMessageBox.Yes).exec_() if ret == QMessageBox.Yes: RefreshDialog(self.finders['project']).exec_()
class quickFinder(QObject): name = u"&Quick Finder" actions = None toolbar = None finders = {} loadingIcon = None def __init__(self, iface): QObject.__init__(self) self.iface = iface self.actions = {} self.finders = {} self.settings = MySettings() self._initFinders() self.iface.projectRead.connect(self._reloadFinders) self.iface.newProjectCreated.connect(self._reloadFinders) # translation environment self.plugin_dir = os.path.dirname(__file__) locale = QSettings().value("locale/userLocale")[0:2] localePath = os.path.join(self.plugin_dir, 'i18n', 'quickfinder_{0}.qm'.format(locale)) if os.path.exists(localePath): self.translator = QTranslator() self.translator.load(localePath) QCoreApplication.installTranslator(self.translator) def initGui(self): self.actions['showSettings'] = QAction( QIcon(":/plugins/quickfinder/icons/settings.svg"), self.tr(u"&Settings"), self.iface.mainWindow()) self.actions['showSettings'].triggered.connect(self.showSettings) self.iface.addPluginToMenu(self.name, self.actions['showSettings']) self.actions['help'] = QAction( QIcon(":/plugins/quickfinder/icons/help.svg"), self.tr("Help"), self.iface.mainWindow()) self.actions['help'].triggered.connect(lambda: QDesktopServices( ).openUrl(QUrl("http://3nids.github.io/quickfinder"))) self.iface.addPluginToMenu(self.name, self.actions['help']) self._initToolbar() self.rubber = QgsRubberBand(self.iface.mapCanvas()) self.rubber.setColor(QColor(255, 255, 50, 200)) self.rubber.setIcon(self.rubber.ICON_CIRCLE) self.rubber.setIconSize(15) self.rubber.setWidth(4) self.rubber.setBrushStyle(Qt.NoBrush) def unload(self): """ Unload plugin """ for key in self.finders.keys(): self.finders[key].close() for action in self.actions.itervalues(): self.iface.removePluginMenu(self.name, action) if self.toolbar: del self.toolbar if self.rubber: self.iface.mapCanvas().scene().removeItem(self.rubber) del self.rubber def _initToolbar(self): """setup the plugin toolbar.""" self.toolbar = self.iface.addToolBar(self.name) self.toolbar.setObjectName('mQuickFinderToolBar') self.searchAction = QAction( QIcon(":/plugins/quickfinder/icons/magnifier13.svg"), self.tr("Search"), self.toolbar) self.stopAction = QAction( QIcon(":/plugins/quickfinder/icons/wrong2.svg"), self.tr("Cancel"), self.toolbar) self.finderBox = FinderBox(self.finders, self.iface, self.toolbar) self.finderBox.searchStarted.connect(self.searchStarted) self.finderBox.searchFinished.connect(self.searchFinished) self.finderBoxAction = self.toolbar.addWidget(self.finderBox) self.finderBoxAction.setVisible(True) self.searchAction.triggered.connect(self.finderBox.search) self.toolbar.addAction(self.searchAction) self.stopAction.setVisible(False) self.stopAction.triggered.connect(self.finderBox.stop) self.toolbar.addAction(self.stopAction) self.toolbar.setVisible(True) def _initFinders(self): self.finders['geomapfish'] = GeomapfishFinder(self) self.finders['osm'] = OsmFinder(self) self.finders['project'] = ProjectFinder(self) for key in self.finders.keys(): self.finders[key].message.connect(self.displayMessage) self.refreshProject() def _reloadFinders(self): for key in self.finders.keys(): self.finders[key].close() self.finders[key].reload() self.refreshProject() @pyqtSlot(str, QgsMessageBar.MessageLevel) def displayMessage(self, message, level): self.iface.messageBar().pushMessage("QuickFinder", message, level) def showSettings(self): if ConfigurationDialog().exec_(): self._reloadFinders() def searchStarted(self): self.searchAction.setVisible(False) self.stopAction.setVisible(True) def searchFinished(self): self.searchAction.setVisible(True) self.stopAction.setVisible(False) def refreshProject(self): if not self.finders['project'].activated: return if not self.settings.value("refreshAuto"): return nDays = self.settings.value("refreshDelay") # do not ask more ofen than 3 days askLimit = min(3, nDays) recentlyAsked = self.settings.value( "refreshLastAsked") >= nDaysAgoIsoDate(askLimit) if recentlyAsked: return threshDate = nDaysAgoIsoDate(nDays) uptodate = True for search in self.finders['project'].searches.values(): if search.dateEvaluated <= threshDate: uptodate = False break if uptodate: return self.settings.setValue("refreshLastAsked", nDaysAgoIsoDate(0)) ret = QMessageBox( QMessageBox.Warning, "Quick Finder", QCoreApplication.translate( "Auto Refresh", "Some searches are outdated. Do you want to refresh them ?"), QMessageBox.Cancel | QMessageBox.Yes).exec_() if ret == QMessageBox.Yes: RefreshDialog(self.finders['project']).exec_()