diff -r 3fc8dfeb6ebe -r b99e7fd55fd3 src/eric7/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py Thu Jul 07 11:23:56 2022 +0200 @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2022 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the Mercurial configuration page. +""" + +import os + +from PyQt6.QtCore import pyqtSlot + +from EricWidgets.EricApplication import ericApp +from EricWidgets.EricPathPicker import EricPathPickerModes + +from Preferences.ConfigurationPages.ConfigurationPageBase import ( + ConfigurationPageBase +) +from .Ui_MercurialPage import Ui_MercurialPage +from .. import HgUtilities + +import Globals +from Utilities import supportedCodecs + + +class MercurialPage(ConfigurationPageBase, Ui_MercurialPage): + """ + Class implementing the Mercurial configuration page. + """ + def __init__(self, plugin): + """ + Constructor + + @param plugin reference to the plugin object + """ + super().__init__() + self.setupUi(self) + self.setObjectName("MercurialPage") + + self.__plugin = plugin + + self.hgPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) + if Globals.isWindowsPlatform(): + self.hgPicker.setFilters(self.tr( + "Executable Files (*.exe);;" + "All Files (*)" + )) + else: + self.hgPicker.setFilters(self.tr("All Files (*)")) + + self.encodingComboBox.addItems(sorted(supportedCodecs)) + self.encodingModeComboBox.addItems(["strict", "ignore", "replace"]) + + self.installButton.setEnabled(not self.__mercurialInstalled()) + + # set initial values + # executable override + self.hgPicker.setText( + self.__plugin.getPreferences("MercurialExecutablePath")) + + # global options + index = self.encodingComboBox.findText( + self.__plugin.getPreferences("Encoding")) + self.encodingComboBox.setCurrentIndex(index) + index = self.encodingModeComboBox.findText( + self.__plugin.getPreferences("EncodingMode")) + self.encodingModeComboBox.setCurrentIndex(index) + self.hiddenChangesetsCheckBox.setChecked( + self.__plugin.getPreferences("ConsiderHidden")) + # log + self.logSpinBox.setValue( + self.__plugin.getPreferences("LogLimit")) + self.logWidthSpinBox.setValue( + self.__plugin.getPreferences("LogMessageColumnWidth")) + self.startFullLogCheckBox.setChecked( + self.__plugin.getPreferences("LogBrowserShowFullLog")) + # commit + self.commitAuthorsSpinBox.setValue( + self.__plugin.getPreferences("CommitAuthorsLimit")) + # pull + self.pullUpdateCheckBox.setChecked( + self.__plugin.getPreferences("PullUpdate")) + self.preferUnbundleCheckBox.setChecked( + self.__plugin.getPreferences("PreferUnbundle")) + # cleanup + self.cleanupPatternEdit.setText( + self.__plugin.getPreferences("CleanupPatterns")) + # revert + self.backupCheckBox.setChecked( + self.__plugin.getPreferences("CreateBackup")) + # merge + self.internalMergeCheckBox.setChecked( + self.__plugin.getPreferences("InternalMerge")) + + def save(self): + """ + Public slot to save the Mercurial configuration. + """ + # executable override + self.__plugin.setPreferences( + "MercurialExecutablePath", self.hgPicker.text()) + # global options + self.__plugin.setPreferences( + "Encoding", self.encodingComboBox.currentText()) + self.__plugin.setPreferences( + "EncodingMode", self.encodingModeComboBox.currentText()) + self.__plugin.setPreferences( + "ConsiderHidden", self.hiddenChangesetsCheckBox.isChecked()) + # log + self.__plugin.setPreferences( + "LogLimit", self.logSpinBox.value()) + self.__plugin.setPreferences( + "LogMessageColumnWidth", self.logWidthSpinBox.value()) + self.__plugin.setPreferences( + "LogBrowserShowFullLog", self.startFullLogCheckBox.isChecked()) + # commit + self.__plugin.setPreferences( + "CommitAuthorsLimit", self.commitAuthorsSpinBox.value()) + # pull + self.__plugin.setPreferences( + "PullUpdate", self.pullUpdateCheckBox.isChecked()) + self.__plugin.setPreferences( + "PreferUnbundle", self.preferUnbundleCheckBox.isChecked()) + # cleanup + self.__plugin.setPreferences( + "CleanupPatterns", self.cleanupPatternEdit.text()) + # revert + self.__plugin.setPreferences( + "CreateBackup", self.backupCheckBox.isChecked()) + # merge + self.__plugin.setPreferences( + "InternalMerge", self.internalMergeCheckBox.isChecked()) + + @pyqtSlot() + def on_configButton_clicked(self): + """ + Private slot to edit the (per user) Mercurial configuration file. + """ + from ..HgUserConfigDialog import HgUserConfigDialog + from ..HgUtilities import hgVersion + + dlg = HgUserConfigDialog(version=hgVersion(self.__plugin)[1]) + dlg.exec() + + @pyqtSlot() + def on_installButton_clicked(self): + """ + Private slot to install Mercurial alongside eric7. + """ + pip = ericApp().getObject("Pip") + pip.installPackages(["mercurial"], + interpreter=Globals.getPythonExecutable()) + self.installButton.setEnabled(not self.__mercurialInstalled()) + + def __mercurialInstalled(self): + """ + Private method to check, if Mercurial is installed alongside eric7. + + @return flag indicating an installed Mercurial executable + @rtype bool + """ + hg = HgUtilities.getHgExecutable() + # assume local installation, if the path is absolute + return os.path.isabs(hg)