def __init__(self, plugin): QDialog.__init__(self, plugin.iface.mainWindow()) self.plugin = plugin # set up the user interface self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.pushButton_Add.clicked.connect(self.accept) self.ui.pushButton_Close.clicked.connect(self.reject) self.ui.pushButton_Settings.clicked.connect(self.settingsClicked) self.ui.treeView.doubleClicked.connect(self.treeItemDoubleClicked) self.setupTreeView()
def __init__(self, iface): QDialog.__init__(self, iface.mainWindow()) settings = QSettings() self.extDir = settings.value("/TileLayerPlugin/extDir", "", type=unicode) # set up the user interface self.ui = Ui_Dialog() self.ui.setupUi(self) extDirText = self.extDir if self.extDir != "" else self.tr("Not set") self.ui.label_externalDirectory.setText(extDirText) self.ui.pushButton_Add.clicked.connect(self.accept) self.ui.pushButton_Close.clicked.connect(self.reject) self.ui.toolButton_externalDirectory.clicked.connect( self.selectExternalDirectory) self.setupTreeView()
class AddLayerDialog(QDialog): def __init__(self, plugin): QDialog.__init__(self, plugin.iface.mainWindow()) self.plugin = plugin # set up the user interface self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.pushButton_Add.clicked.connect(self.accept) self.ui.pushButton_Close.clicked.connect(self.reject) self.ui.pushButton_Settings.clicked.connect(self.settingsClicked) self.ui.treeView.doubleClicked.connect(self.treeItemDoubleClicked) self.setupTreeView() def setupTreeView(self): # tree view header labels headers = [self.tr("Title"), self.tr("Credit"), self.tr("Url"), self.tr("Zoom"), self.tr("Extent"), self.tr("yOrigin")] + ["index"] self.indexColumn = len(headers) - 1 self.model = QStandardItemModel(0, len(headers)) self.model.setHorizontalHeaderLabels(headers) self.serviceInfoList = [] # import layer definitions from external layer definition directory, and append it into the tree extDir = QSettings().value("/TileLayerPlugin/extDir", "", type=unicode) if extDir: self.importFromDirectory(extDir) # import layer definitions from TileLayerPlugin/layers directory, and append it into the tree pluginDir = os.path.dirname(QFile.decodeName(__file__)) self.importFromDirectory(os.path.join(pluginDir, "layers")) # model and style settings self.ui.treeView.setModel(self.model) self.ui.treeView.header().setResizeMode(QHeaderView.ResizeToContents) self.ui.treeView.expandAll() def importFromDirectory(self, path): d = QDir(path) d.setFilter(QDir.Files | QDir.Hidden) #d.setSorting(QDir.Size | QDir.Reversed) for fileInfo in d.entryInfoList(): if debug_mode == 0 and fileInfo.fileName() == "debug.tsv": continue if fileInfo.suffix().lower() == "tsv": self.importFromTsv(fileInfo.filePath()) # Line Format is: # title credit url [yOriginTop [zmin zmax [xmin ymin xmax ymax ]]] def importFromTsv(self, filename): # append file item rootItem = self.model.invisibleRootItem() basename = os.path.basename(filename) parent = QStandardItem(os.path.splitext(basename)[0]) rootItem.appendRow([parent]) # load service info from tsv file try: with codecs.open(filename, "r", "utf-8") as f: lines = f.readlines() except Exception as e: QgsMessageLog.logMessage(self.tr("Fail to read {0}: {1}").format(basename, unicode(e)), self.tr("TileLayerPlugin")) return False for i, line in enumerate(lines): if line.startswith("#"): continue vals = line.rstrip().split("\t") nvals = len(vals) try: if nvals < 3: raise title, credit, url = vals[0:3] if not url: raise if nvals < 4: serviceInfo = TileServiceInfo(title, credit, url) else: yOriginTop = int(vals[3]) if nvals < 6: serviceInfo = TileServiceInfo(title, credit, url, yOriginTop) else: zmin, zmax = map(int, vals[4:6]) if nvals < 10: serviceInfo = TileServiceInfo(title, credit, url, yOriginTop, zmin, zmax) else: bbox = BoundingBox.fromString(",".join(vals[6:10])) serviceInfo = TileServiceInfo(title, credit, url, yOriginTop, zmin, zmax, bbox) except: QgsMessageLog.logMessage(self.tr("Invalid line format: {} line {}").format(basename, i + 1), self.tr("TileLayerPlugin")) continue # append the service info into the tree vals = serviceInfo.toArrayForTreeView() + [len(self.serviceInfoList)] rowItems = map(QStandardItem, map(unicode, vals)) parent.appendRow(rowItems) self.serviceInfoList.append(serviceInfo) return True def selectedServiceInfoList(self): list = [] for idx in self.ui.treeView.selectionModel().selection().indexes(): if idx.column() == self.indexColumn and idx.data() is not None: list.append(self.serviceInfoList[int(idx.data())]) return list def settingsClicked(self): if self.plugin.settings(): self.setupTreeView() def treeItemDoubleClicked(self, index): if len(self.selectedServiceInfoList()) > 0: self.accept()