Addon Manager: Add GUI for enabling/disabling addons
This commit is contained in:
@@ -364,3 +364,24 @@ class AddonManagerRepo:
|
||||
def set_status(self, status):
|
||||
with self.status_lock:
|
||||
self.update_status = status
|
||||
|
||||
def is_disabled(self):
|
||||
# Check for existence of disabling stopfile:
|
||||
stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED")
|
||||
if os.path.exists(stopfile):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def disable(self):
|
||||
stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED")
|
||||
with open(stopfile,"w") as f:
|
||||
f.write("The existence of this file prevents FreeCAD from loading this Addon. To re-enable, delete the file.")
|
||||
|
||||
def enable(self):
|
||||
stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED")
|
||||
try:
|
||||
os.unlink(stopfile)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ class Ui_ExpandedView(object):
|
||||
|
||||
self.labelVersion = QLabel(ExpandedView)
|
||||
self.labelVersion.setObjectName(u"labelVersion")
|
||||
self.labelVersion.setTextFormat(Qt.RichText)
|
||||
sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
||||
sizePolicy2.setHorizontalStretch(0)
|
||||
sizePolicy2.setVerticalStretch(0)
|
||||
@@ -110,6 +111,7 @@ class Ui_ExpandedView(object):
|
||||
|
||||
self.labelStatus = QLabel(ExpandedView)
|
||||
self.labelStatus.setObjectName(u"labelStatus")
|
||||
self.labelStatus.setTextFormat(Qt.RichText)
|
||||
self.labelStatus.setAlignment(
|
||||
Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter
|
||||
)
|
||||
|
||||
@@ -96,6 +96,8 @@ class PackageDetails(QWidget):
|
||||
lambda: self.check_for_update.emit(self.repo)
|
||||
)
|
||||
self.ui.buttonChangeBranch.clicked.connect(self.change_branch_clicked)
|
||||
self.ui.buttonEnable.clicked.connect(self.enable_clicked)
|
||||
self.ui.buttonDisable.clicked.connect(self.disable_clicked)
|
||||
if HAS_QTWEBENGINE:
|
||||
self.ui.webView.loadStarted.connect(self.load_started)
|
||||
self.ui.webView.loadProgress.connect(self.load_progress)
|
||||
@@ -166,6 +168,7 @@ class PackageDetails(QWidget):
|
||||
def display_repo_status(self, status):
|
||||
repo = self.repo
|
||||
self.set_change_branch_button_state()
|
||||
self.set_disable_button_state()
|
||||
if status != AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
|
||||
|
||||
version = repo.installed_version
|
||||
@@ -361,6 +364,16 @@ class PackageDetails(QWidget):
|
||||
self.ui.labelWarningInfo.setStyleSheet(
|
||||
"color:" + utils.warning_color_string()
|
||||
)
|
||||
elif repo.is_disabled():
|
||||
self.ui.labelWarningInfo.show()
|
||||
self.ui.labelWarningInfo.setText(
|
||||
"<h2>"
|
||||
+ translate("AddonsInstaller", "WARNING: This addon is currently installed, but disabled. Use the 'enable' button to re-enable.")
|
||||
+ "</h2>"
|
||||
)
|
||||
self.ui.labelWarningInfo.setStyleSheet(
|
||||
"color:" + utils.warning_color_string()
|
||||
)
|
||||
|
||||
else:
|
||||
self.ui.labelWarningInfo.hide()
|
||||
@@ -423,6 +436,17 @@ class PackageDetails(QWidget):
|
||||
# branches, if there are any besides the one we are on: show the button
|
||||
self.ui.buttonChangeBranch.show()
|
||||
|
||||
def set_disable_button_state(self):
|
||||
self.ui.buttonEnable.hide()
|
||||
self.ui.buttonDisable.hide()
|
||||
status = self.repo.status()
|
||||
if status != AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
|
||||
disabled = self.repo.is_disabled()
|
||||
if disabled:
|
||||
self.ui.buttonEnable.show()
|
||||
else:
|
||||
self.ui.buttonDisable.show()
|
||||
|
||||
def show_workbench(self, repo: AddonManagerRepo) -> None:
|
||||
"""loads information of a given workbench"""
|
||||
url = utils.get_readme_html_url(repo)
|
||||
@@ -582,6 +606,34 @@ class PackageDetails(QWidget):
|
||||
change_branch_dialog.branch_changed.connect(self.branch_changed)
|
||||
change_branch_dialog.exec()
|
||||
|
||||
def enable_clicked(self) -> None:
|
||||
self.repo.enable()
|
||||
self.set_disable_button_state()
|
||||
self.update_status.emit(self.repo)
|
||||
self.ui.labelWarningInfo.show()
|
||||
self.ui.labelWarningInfo.setText(
|
||||
"<h3>"
|
||||
+ translate("AddonsInstaller", "This Addon will be enabled next time you restart FreeCAD.")
|
||||
+ "</h3>"
|
||||
)
|
||||
self.ui.labelWarningInfo.setStyleSheet(
|
||||
"color:" + utils.bright_color_string()
|
||||
)
|
||||
|
||||
def disable_clicked(self) -> None:
|
||||
self.repo.disable()
|
||||
self.set_disable_button_state()
|
||||
self.update_status.emit(self.repo)
|
||||
self.ui.labelWarningInfo.show()
|
||||
self.ui.labelWarningInfo.setText(
|
||||
"<h3>"
|
||||
+ translate("AddonsInstaller", "This Addon will be disabled next time you restart FreeCAD.")
|
||||
+ "</h3>"
|
||||
)
|
||||
self.ui.labelWarningInfo.setStyleSheet(
|
||||
"color:" + utils.attention_color_string()
|
||||
)
|
||||
|
||||
def branch_changed(self, name: str) -> None:
|
||||
QMessageBox.information(
|
||||
self,
|
||||
@@ -704,6 +756,16 @@ class Ui_PackageDetails(object):
|
||||
|
||||
self.layoutDetailsBackButton.addWidget(self.buttonExecute)
|
||||
|
||||
self.buttonDisable = QPushButton(PackageDetails)
|
||||
self.buttonDisable.setObjectName("buttonDisable")
|
||||
|
||||
self.layoutDetailsBackButton.addWidget(self.buttonDisable)
|
||||
|
||||
self.buttonEnable = QPushButton(PackageDetails)
|
||||
self.buttonEnable.setObjectName("buttonEnable")
|
||||
|
||||
self.layoutDetailsBackButton.addWidget(self.buttonEnable)
|
||||
|
||||
self.verticalLayout_2.addLayout(self.layoutDetailsBackButton)
|
||||
|
||||
self.labelPackageDetails = QLabel(PackageDetails)
|
||||
@@ -795,6 +857,12 @@ class Ui_PackageDetails(object):
|
||||
self.buttonChangeBranch.setText(
|
||||
QCoreApplication.translate("AddonsInstaller", "Change Branch", None)
|
||||
)
|
||||
self.buttonEnable.setText(
|
||||
QCoreApplication.translate("AddonsInstaller", "Enable", None)
|
||||
)
|
||||
self.buttonDisable.setText(
|
||||
QCoreApplication.translate("AddonsInstaller", "Disable", None)
|
||||
)
|
||||
self.buttonBack.setToolTip(
|
||||
QCoreApplication.translate(
|
||||
"AddonsInstaller", "Return to package list", None
|
||||
|
||||
@@ -36,6 +36,8 @@ from AddonManagerRepo import AddonManagerRepo
|
||||
from compact_view import Ui_CompactView
|
||||
from expanded_view import Ui_ExpandedView
|
||||
|
||||
import addonmanager_utilities as utils
|
||||
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
|
||||
@@ -423,6 +425,11 @@ class PackageListItemDelegate(QStyledItemDelegate):
|
||||
result = translate("AddonsInstaller", "Update available")
|
||||
elif repo.status() == AddonManagerRepo.UpdateStatus.PENDING_RESTART:
|
||||
result = translate("AddonsInstaller", "Pending restart")
|
||||
|
||||
if repo.is_disabled():
|
||||
style = "style='color:" + utils.warning_color_string() + "; font-weight:bold;'"
|
||||
result += f"<span {style}> [" + translate("AddonsInstaller","DISABLED") + "]</span>"
|
||||
|
||||
return result
|
||||
|
||||
def get_expanded_update_string(self, repo: AddonManagerRepo) -> str:
|
||||
@@ -434,18 +441,18 @@ class PackageListItemDelegate(QStyledItemDelegate):
|
||||
if repo.status() != AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
|
||||
if repo.installed_version:
|
||||
installed_version_string = (
|
||||
"\n" + translate("AddonsInstaller", "Installed version") + ": "
|
||||
"<br/>" + translate("AddonsInstaller", "Installed version") + ": "
|
||||
)
|
||||
installed_version_string += repo.installed_version
|
||||
else:
|
||||
installed_version_string = "\n" + translate(
|
||||
installed_version_string = "<br/>" + translate(
|
||||
"AddonsInstaller", "Unknown version"
|
||||
)
|
||||
|
||||
installed_date_string = ""
|
||||
if repo.updated_timestamp:
|
||||
installed_date_string = (
|
||||
"\n" + translate("AddonsInstaller", "Installed on") + ": "
|
||||
"<br/>" + translate("AddonsInstaller", "Installed on") + ": "
|
||||
)
|
||||
installed_date_string += (
|
||||
QDateTime.fromTime_t(repo.updated_timestamp)
|
||||
@@ -456,7 +463,7 @@ class PackageListItemDelegate(QStyledItemDelegate):
|
||||
available_version_string = ""
|
||||
if repo.metadata:
|
||||
available_version_string = (
|
||||
"\n" + translate("AddonsInstaller", "Available version") + ": "
|
||||
"<br/>" + translate("AddonsInstaller", "Available version") + ": "
|
||||
)
|
||||
available_version_string += repo.metadata.Version
|
||||
|
||||
@@ -475,6 +482,10 @@ class PackageListItemDelegate(QStyledItemDelegate):
|
||||
result += available_version_string
|
||||
elif repo.status() == AddonManagerRepo.UpdateStatus.PENDING_RESTART:
|
||||
result = translate("AddonsInstaller", "Pending restart")
|
||||
|
||||
if repo.is_disabled():
|
||||
style = "style='color:" + utils.warning_color_string() + "; font-weight:bold;'"
|
||||
result += f"<br/><span {style}>[" + translate("AddonsInstaller","DISABLED") + "]</span>"
|
||||
|
||||
return result
|
||||
|
||||
|
||||
Reference in New Issue
Block a user