Addon Manager: Add person editor

This commit is contained in:
Chris Hennes
2022-09-09 13:00:10 -05:00
parent ea45af3a80
commit aabf887e1e
5 changed files with 256 additions and 27 deletions
+69 -20
View File
@@ -23,22 +23,28 @@
""" Classes to manage "Developer Mode" """
import os
from typing import Optional
import FreeCAD
import FreeCADGui
from PySide2.QtWidgets import QFileDialog, QTableWidgetItem, QDialog
from PySide2.QtGui import QIcon, QValidator, QRegularExpressionValidator, QPixmap, QDesktopServices
from PySide2.QtCore import QRegularExpression, QUrl, QFile, QIODevice
from PySide2.QtWidgets import QFileDialog, QTableWidgetItem
from PySide2.QtGui import (
QIcon,
QValidator,
QRegularExpressionValidator,
QPixmap,
)
from PySide2.QtCore import QRegularExpression, Qt
from addonmanager_git import GitManager
from addonmanager_devmode_license_selector import LicenseSelector
from addonmanager_devmode_person_editor import PersonEditor
translate = FreeCAD.Qt.translate
# pylint: disable=too-few-public-methods
class AddonGitInterface:
"""Wrapper to handle the git calls needed by this class"""
@@ -153,6 +159,13 @@ class DeveloperMode:
"""The main Developer Mode dialog, for editing package.xml metadata graphically."""
def __init__(self):
# In the UI we want to show a translated string for the person type, but the underlying
# string must be the one expected by the metadata parser, in English
self.person_type_translation = {
"maintainer": translate("AddonsInstaller", "Maintainer"),
"author": translate("AddonsInstaller", "Author"),
}
self.dialog = FreeCADGui.PySideUic.loadUi(
os.path.join(os.path.dirname(__file__), "developer_mode.ui")
)
@@ -246,22 +259,12 @@ class DeveloperMode:
for maintainer in metadata.Maintainer:
name = maintainer["name"]
email = maintainer["email"]
self.dialog.peopleTableWidget.insertRow(row)
self.dialog.peopleTableWidget.setItem(
row, 0, QTableWidgetItem(translate("AddonsInstaller", "Maintainer"))
)
self.dialog.peopleTableWidget.setItem(row, 1, QTableWidgetItem(name))
self.dialog.peopleTableWidget.setItem(row, 2, QTableWidgetItem(email))
self._add_person_row(row, "maintainer", name, email)
row += 1
for author in metadata.Author:
name = author["name"]
email = author["email"]
self.dialog.peopleTableWidget.insertRow(row)
self.dialog.peopleTableWidget.setItem(
row, 0, QTableWidgetItem(translate("AddonsInstaller", "Author"))
)
self.dialog.peopleTableWidget.setItem(row, 1, QTableWidgetItem(name))
self.dialog.peopleTableWidget.setItem(row, 2, QTableWidgetItem(email))
self._add_person_row(row, "author", name, email)
row += 1
if row == 0:
@@ -273,6 +276,15 @@ class DeveloperMode:
+ "\n"
)
def _add_person_row(self, row, person_type, name, email):
"""Add this person to the peopleTableWidget at row given"""
self.dialog.peopleTableWidget.insertRow(row)
item = QTableWidgetItem(self.person_type_translation[person_type])
item.setData(Qt.UserRole, person_type)
self.dialog.peopleTableWidget.setItem(row, 0, item)
self.dialog.peopleTableWidget.setItem(row, 1, QTableWidgetItem(name))
self.dialog.peopleTableWidget.setItem(row, 2, QTableWidgetItem(email))
def _populate_licenses_from_metadata(self, metadata):
"""Use the passed metadata object to populate the licenses"""
self.dialog.licensesTableWidget.setRowCount(0)
@@ -432,12 +444,22 @@ class DeveloperMode:
self.dialog.pathToAddonComboBox.editTextChanged.connect(
self._addon_combo_text_changed
)
self.dialog.addLicenseToolButton.clicked.connect(self._add_license_clicked)
self.dialog.removeLicenseToolButton.clicked.connect(self._remove_license_clicked)
self.dialog.removeLicenseToolButton.clicked.connect(
self._remove_license_clicked
)
self.dialog.licensesTableWidget.itemSelectionChanged.connect(
self._license_selection_changed
)
self.dialog.licensesTableWidget.itemDoubleClicked.connect(self._edit_license)
self.dialog.addPersonToolButton.clicked.connect(self._add_person_clicked)
self.dialog.removePersonToolButton.clicked.connect(self._remove_person_clicked)
self.dialog.peopleTableWidget.itemSelectionChanged.connect(self._person_selection_changed)
self.dialog.licensesTableWidget.itemSelectionChanged.connect(self._license_selection_changed)
self.dialog.peopleTableWidget.itemSelectionChanged.connect(
self._person_selection_changed
)
self.dialog.peopleTableWidget.itemDoubleClicked.connect(self._edit_person)
# Finally, populate the combo boxes, etc.
self._populate_combo()
@@ -552,8 +574,21 @@ class DeveloperMode:
# the first entry
self.dialog.licensesTableWidget.removeRow(items[0].row())
def _edit_license(self, item):
row = item.row()
short_code = self.dialog.licensesTableWidget.item(row, 0).text()
path = self.dialog.licensesTableWidget.item(row, 1).text()
license_selector = LicenseSelector(self.current_mod)
short_code, path = license_selector.exec(short_code, path)
if short_code:
self.dialog.licensesTableWidget.removeRow(row)
self._add_license_row(row, short_code, path)
def _add_person_clicked(self):
pass
dlg = PersonEditor()
person_type, name, email = dlg.exec()
if person_type and name:
self._add_person_row(row, person_type, name, email)
def _remove_person_clicked(self):
items = self.dialog.peopleTableWidget.selectedIndexes()
@@ -562,3 +597,17 @@ class DeveloperMode:
# the first entry
self.dialog.peopleTableWidget.removeRow(items[0].row())
def _edit_person(self, item):
row = item.row()
person_type = self.dialog.peopleTableWidget.item(row, 0).data(Qt.UserRole)
name = self.dialog.peopleTableWidget.item(row, 1).text()
email = self.dialog.peopleTableWidget.item(row, 2).text()
dlg = PersonEditor()
dlg.setup(person_type, name, email)
person_type, name, email = dlg.exec()
if person_type and name:
self.dialog.peopleTableWidget.removeRow(row)
self._add_person_row(row, person_type, name, email)
self.dialog.peopleTableWidget.selectRow(row)