FreeCAD

Форк
0
/
addonmanager_devmode_people_table.py 
153 строки · 6.7 Кб
1
# SPDX-License-Identifier: LGPL-2.1-or-later
2
# ***************************************************************************
3
# *                                                                         *
4
# *   Copyright (c) 2022 FreeCAD Project Association                        *
5
# *                                                                         *
6
# *   This file is part of FreeCAD.                                         *
7
# *                                                                         *
8
# *   FreeCAD is free software: you can redistribute it and/or modify it    *
9
# *   under the terms of the GNU Lesser General Public License as           *
10
# *   published by the Free Software Foundation, either version 2.1 of the  *
11
# *   License, or (at your option) any later version.                       *
12
# *                                                                         *
13
# *   FreeCAD is distributed in the hope that it will be useful, but        *
14
# *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
15
# *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
16
# *   Lesser General Public License for more details.                       *
17
# *                                                                         *
18
# *   You should have received a copy of the GNU Lesser General Public      *
19
# *   License along with FreeCAD. If not, see                               *
20
# *   <https://www.gnu.org/licenses/>.                                      *
21
# *                                                                         *
22
# ***************************************************************************
23

24
""" Contains a wrapper class for a table listing authors and maintainers """
25

26
import os
27

28
from PySide.QtWidgets import QTableWidgetItem
29
from PySide.QtGui import QIcon
30
from PySide.QtCore import Qt
31

32
import FreeCAD
33
import FreeCADGui
34

35
from addonmanager_devmode_person_editor import PersonEditor
36

37
translate = FreeCAD.Qt.translate
38

39
# pylint: disable=too-few-public-methods
40

41

42
class PeopleTable:
43
    """A QTableWidget and associated buttons for managing the list of authors and maintainers."""
44

45
    def __init__(self):
46
        self.widget = FreeCADGui.PySideUic.loadUi(
47
            os.path.join(os.path.dirname(__file__), "developer_mode_people_table.ui")
48
        )
49

50
        self.widget.addButton.setIcon(QIcon.fromTheme("add", QIcon(":/icons/list-add.svg")))
51
        self.widget.removeButton.setIcon(
52
            QIcon.fromTheme("remove", QIcon(":/icons/list-remove.svg"))
53
        )
54

55
        self.widget.addButton.clicked.connect(self._add_clicked)
56
        self.widget.removeButton.clicked.connect(self._remove_clicked)
57
        self.widget.tableWidget.itemSelectionChanged.connect(self._selection_changed)
58
        self.widget.tableWidget.itemDoubleClicked.connect(self._edit)
59
        self.metadata = None
60

61
    def show(self, metadata):
62
        """Set up the widget based on incoming metadata"""
63
        self.metadata = metadata
64
        self._populate_from_metadata()
65
        self.widget.removeButton.setDisabled(True)
66
        self.widget.show()
67

68
    def _populate_from_metadata(self):
69
        """Use the passed metadata object to populate the maintainers and authors"""
70
        self.widget.tableWidget.setRowCount(0)
71
        row = 0
72
        for maintainer in self.metadata.Maintainer:
73
            name = maintainer["name"]
74
            email = maintainer["email"]
75
            self._add_row(row, "maintainer", name, email)
76
            row += 1
77
        for author in self.metadata.Author:
78
            name = author["name"]
79
            email = author["email"]
80
            self._add_row(row, "author", name, email)
81
            row += 1
82

83
    def _add_row(self, row, person_type, name, email):
84
        """Add this person to the tableWidget at row given"""
85
        person_type_translation = {
86
            "maintainer": translate("AddonsInstaller", "Maintainer"),
87
            "author": translate("AddonsInstaller", "Author"),
88
        }
89
        self.widget.tableWidget.insertRow(row)
90
        item = QTableWidgetItem(person_type_translation[person_type])
91
        item.setData(Qt.UserRole, person_type)
92
        self.widget.tableWidget.setItem(row, 0, item)
93
        self.widget.tableWidget.setItem(row, 1, QTableWidgetItem(name))
94
        self.widget.tableWidget.setItem(row, 2, QTableWidgetItem(email))
95

96
    def _add_clicked(self):
97
        """Callback: the Add Person button was clicked"""
98
        dlg = PersonEditor()
99
        person_type, name, email = dlg.exec()
100
        if person_type and name:
101
            self._add_row(self.widget.tableWidget.rowCount(), person_type, name, email)
102
            if person_type == "maintainer":
103
                self.metadata.addMaintainer(name, email)
104
            else:
105
                self.metadata.addAuthor(name, email)
106

107
    def _remove_clicked(self):
108
        """Callback: the Remove Person button was clicked"""
109
        items = self.widget.tableWidget.selectedIndexes()
110
        if items:
111
            # We only support single-selection, so can just pull the row # from
112
            # the first entry
113
            row = items[0].row()
114
            person_type = self.widget.tableWidget.item(row, 0).data(Qt.UserRole)
115
            name = self.widget.tableWidget.item(row, 1).text()
116
            email = self.widget.tableWidget.item(row, 2).text()
117
            self.widget.tableWidget.removeRow(row)
118
            if person_type == "maintainer":
119
                self.metadata.removeMaintainer(name, email)
120
            else:
121
                self.metadata.removeAuthor(name, email)
122

123
    def _edit(self, item):
124
        """Callback: a row in the tableWidget was double-clicked"""
125
        row = item.row()
126
        person_type = self.widget.tableWidget.item(row, 0).data(Qt.UserRole)
127
        name = self.widget.tableWidget.item(row, 1).text()
128
        email = self.widget.tableWidget.item(row, 2).text()
129

130
        dlg = PersonEditor()
131
        dlg.setup(person_type, name, email)
132
        new_person_type, new_name, new_email = dlg.exec()
133

134
        if new_person_type and new_name:
135
            self.widget.tableWidget.removeRow(row)
136
            if person_type == "maintainer":
137
                self.metadata.removeMaintainer(name, email)
138
            else:
139
                self.metadata.removeAuthor(name, email)
140
            self._add_row(row, new_person_type, new_name, email)
141
            if new_person_type == "maintainer":
142
                self.metadata.addMaintainer(new_name, new_email)
143
            else:
144
                self.metadata.addAuthor(new_name, new_email)
145
            self.widget.tableWidget.selectRow(row)
146

147
    def _selection_changed(self):
148
        """Callback: the current selection in the tableWidget changed"""
149
        items = self.widget.tableWidget.selectedItems()
150
        if items:
151
            self.widget.removeButton.setDisabled(False)
152
        else:
153
            self.widget.removeButton.setDisabled(True)
154

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.