https://github.com/minorua/Qgis2threejs
Revision 96476af712037e4ab4bd9eeb6756d89036974e72 authored by Minoru Akagi on 12 October 2018, 07:03:11 UTC, committed by Minoru Akagi on 12 October 2018, 07:31:13 UTC
1 parent 5908c24
Raw File
Tip revision: 96476af712037e4ab4bd9eeb6756d89036974e72 authored by Minoru Akagi on 12 October 2018, 07:03:11 UTC
remove redundant characters in data filename
Tip revision: 96476af
pluginsettings.py
# -*- coding: utf-8 -*-
"""
/***************************************************************************
 SettingsDialog
                             -------------------
        begin                : 2014-01-10
        copyright            : (C) 2014 Minoru Akagi
        email                : akaginch@gmail.com
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
"""
import configparser
import os
from PyQt5.QtCore import Qt, QDir, QSettings
from PyQt5.QtWidgets import QDialog, QFileDialog, QAbstractItemView, QHeaderView, QTableWidgetItem

from .qgis2threejstools import logMessage, pluginDir
from .ui.settingsdialog import Ui_SettingsDialog


class SettingsDialog(QDialog):

  def __init__(self, parent):
    QDialog.__init__(self, parent)

    # Set up the user interface from Designer.
    self.ui = ui = Ui_SettingsDialog()
    ui.setupUi(self)
    ui.lineEdit_BrowserPath.setPlaceholderText("Leave this empty to use your default browser")
    ui.pushButton_Browse.clicked.connect(self.browseClicked)

    # load settings
    settings = QSettings()
    ui.lineEdit_BrowserPath.setText(settings.value("/Qgis2threejs/browser", "", type=str))
    enabled_plugins = QSettings().value("/Qgis2threejs/plugins", "", type=str).split(",")

    # initialize plugin table widget
    plugin_dir = QDir(pluginDir("plugins"))
    plugins = plugin_dir.entryList(QDir.Dirs | QDir.NoSymLinks | QDir.NoDotAndDotDot)

    tableWidget = ui.tableWidget_Plugins
    tableWidget.setColumnCount(1)
    tableWidget.setHorizontalHeaderLabels(["Name"])
    tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
    headerView = tableWidget.horizontalHeader()
    headerView.setSectionResizeMode(QHeaderView.Stretch)

    self.plugin_metadata = []
    for i, name in enumerate(plugins):
      if name[0] == "_":    # skip __pycache__ dir.
        continue

      parser = configparser.SafeConfigParser()
      try:
        with open(os.path.join(plugin_dir.absoluteFilePath(name), "metadata.txt"), "r", encoding="UTF-8") as f:
          parser.readfp(f)

        metadata = dict(parser.items("general"))
        self.plugin_metadata.append(metadata)
      except Exception as e:
        logMessage("Unable to read metadata of plugin: {} ({})".format(name, e))

    tableWidget.setRowCount(len(self.plugin_metadata))
    for i, metadata in enumerate(self.plugin_metadata):
      item = QTableWidgetItem(metadata.get("name", name))
      item.setCheckState(Qt.Checked if name in enabled_plugins else Qt.Unchecked)
      tableWidget.setItem(i, 0, item)

    tableWidget.selectionModel().currentRowChanged.connect(self.pluginSelectionChanged)

  def pluginSelectionChanged(self, current, previous):
    metadata = self.plugin_metadata[current.row()]
    self.ui.textBrowser_Plugin.setHtml(metadata.get("description"))

  def accept(self):
    settings = QSettings()

    # general settings
    settings.setValue("/Qgis2threejs/browser", self.ui.lineEdit_BrowserPath.text())

    # plugins
    enabled_plugins = []
    for i, metadata in enumerate(self.plugin_metadata):
      item = self.ui.tableWidget_Plugins.item(i, 0)
      if item.checkState() == Qt.Checked:
        enabled_plugins.append(metadata["id"])

    settings.setValue("/Qgis2threejs/plugins", ",".join(enabled_plugins))

    QDialog.accept(self)

  def browseClicked(self):
    filename, _ = QFileDialog.getOpenFileName(self, self.tr("Select browser"))
    if filename != "":
      self.ui.lineEdit_BrowserPath.setText(filename)
back to top