1# -*- coding: utf-8 -*-
2
3# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4#
5
6"""
7Module implementing the Mercurial configuration page.
8"""
9
10from PyQt5.QtCore import pyqtSlot
11
12from Preferences.ConfigurationPages.ConfigurationPageBase import (
13    ConfigurationPageBase
14)
15from .Ui_MercurialPage import Ui_MercurialPage
16
17from Utilities import supportedCodecs
18
19
20class MercurialPage(ConfigurationPageBase, Ui_MercurialPage):
21    """
22    Class implementing the Mercurial configuration page.
23    """
24    def __init__(self, plugin):
25        """
26        Constructor
27
28        @param plugin reference to the plugin object
29        """
30        super().__init__()
31        self.setupUi(self)
32        self.setObjectName("MercurialPage")
33
34        self.__plugin = plugin
35
36        self.encodingComboBox.addItems(sorted(supportedCodecs))
37        self.encodingModeComboBox.addItems(["strict", "ignore", "replace"])
38
39        # set initial values
40        # global options
41        index = self.encodingComboBox.findText(
42            self.__plugin.getPreferences("Encoding"))
43        self.encodingComboBox.setCurrentIndex(index)
44        index = self.encodingModeComboBox.findText(
45            self.__plugin.getPreferences("EncodingMode"))
46        self.encodingModeComboBox.setCurrentIndex(index)
47        self.hiddenChangesetsCheckBox.setChecked(
48            self.__plugin.getPreferences("ConsiderHidden"))
49        # log
50        self.logSpinBox.setValue(
51            self.__plugin.getPreferences("LogLimit"))
52        self.logWidthSpinBox.setValue(
53            self.__plugin.getPreferences("LogMessageColumnWidth"))
54        self.startFullLogCheckBox.setChecked(
55            self.__plugin.getPreferences("LogBrowserShowFullLog"))
56        # commit
57        self.commitSpinBox.setValue(
58            self.__plugin.getPreferences("CommitMessages"))
59        self.commitAuthorsSpinBox.setValue(
60            self.__plugin.getPreferences("CommitAuthorsLimit"))
61        # pull
62        self.pullUpdateCheckBox.setChecked(
63            self.__plugin.getPreferences("PullUpdate"))
64        self.preferUnbundleCheckBox.setChecked(
65            self.__plugin.getPreferences("PreferUnbundle"))
66        # cleanup
67        self.cleanupPatternEdit.setText(
68            self.__plugin.getPreferences("CleanupPatterns"))
69        # revert
70        self.backupCheckBox.setChecked(
71            self.__plugin.getPreferences("CreateBackup"))
72        # merge
73        self.internalMergeCheckBox.setChecked(
74            self.__plugin.getPreferences("InternalMerge"))
75
76    def save(self):
77        """
78        Public slot to save the Mercurial configuration.
79        """
80        # global options
81        self.__plugin.setPreferences(
82            "Encoding", self.encodingComboBox.currentText())
83        self.__plugin.setPreferences(
84            "EncodingMode", self.encodingModeComboBox.currentText())
85        self.__plugin.setPreferences(
86            "ConsiderHidden", self.hiddenChangesetsCheckBox.isChecked())
87        # log
88        self.__plugin.setPreferences(
89            "LogLimit", self.logSpinBox.value())
90        self.__plugin.setPreferences(
91            "LogMessageColumnWidth", self.logWidthSpinBox.value())
92        self.__plugin.setPreferences(
93            "LogBrowserShowFullLog", self.startFullLogCheckBox.isChecked())
94        # commit
95        self.__plugin.setPreferences(
96            "CommitMessages", self.commitSpinBox.value())
97        self.__plugin.setPreferences(
98            "CommitAuthorsLimit", self.commitAuthorsSpinBox.value())
99        # pull
100        self.__plugin.setPreferences(
101            "PullUpdate", self.pullUpdateCheckBox.isChecked())
102        self.__plugin.setPreferences(
103            "PreferUnbundle", self.preferUnbundleCheckBox.isChecked())
104        # cleanup
105        self.__plugin.setPreferences(
106            "CleanupPatterns", self.cleanupPatternEdit.text())
107        # revert
108        self.__plugin.setPreferences(
109            "CreateBackup", self.backupCheckBox.isChecked())
110        # merge
111        self.__plugin.setPreferences(
112            "InternalMerge", self.internalMergeCheckBox.isChecked())
113
114    @pyqtSlot()
115    def on_configButton_clicked(self):
116        """
117        Private slot to edit the (per user) Mercurial configuration file.
118        """
119        from ..HgUserConfigDialog import HgUserConfigDialog
120        from ..HgUtilities import hgVersion
121
122        dlg = HgUserConfigDialog(version=hgVersion(self.__plugin)[1])
123        dlg.exec()
124