1# -*- coding: utf-8 -*-
2
3# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4#
5
6"""
7Module implementing a dialog to get the data for a submodule deinit operation.
8"""
9
10from PyQt5.QtCore import pyqtSlot
11from PyQt5.QtWidgets import QDialog, QDialogButtonBox
12
13from .Ui_GitSubmodulesDeinitDialog import Ui_GitSubmodulesDeinitDialog
14
15
16class GitSubmodulesDeinitDialog(QDialog, Ui_GitSubmodulesDeinitDialog):
17    """
18    Class implementing a dialog to get the data for a submodule deinit
19    operation.
20    """
21    def __init__(self, submodulePaths, parent=None):
22        """
23        Constructor
24
25        @param submodulePaths list of submodule paths
26        @type list of str
27        @param parent reference to the parent widget
28        @type QWidget
29        """
30        super().__init__(parent)
31        self.setupUi(self)
32
33        self.submodulesList.addItems(sorted(submodulePaths))
34
35        self.buttonBox.button(
36            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
37
38    def __updateOK(self):
39        """
40        Private slot to update the state of the OK button.
41        """
42        enable = (
43            self.allCheckBox.isChecked() or
44            len(self.submodulesList.selectedItems()) > 0
45        )
46        self.buttonBox.button(
47            QDialogButtonBox.StandardButton.Ok).setEnabled(enable)
48
49    @pyqtSlot(bool)
50    def on_allCheckBox_toggled(self, checked):
51        """
52        Private slot to react on changes of the all checkbox.
53
54        @param checked state of the checkbox
55        @type bool
56        """
57        self.__updateOK()
58
59    @pyqtSlot()
60    def on_submodulesList_itemSelectionChanged(self):
61        """
62        Private slot to react on changes of the submodule selection.
63        """
64        self.__updateOK()
65
66    def getData(self):
67        """
68        Public method to get the entered data.
69
70        @return tuple containing a flag to indicate all submodules, a list of
71            selected submodules and a flag indicating an enforced operation
72        @rtype tuple of (bool, list of str, bool)
73        """
74        submodulePaths = []
75        deinitAll = self.allCheckBox.isChecked()
76        if not deinitAll:
77            for itm in self.submodulesList.selectedItems():
78                submodulePaths.append(itm.text())
79
80        return all, submodulePaths, self.forceCheckBox.isChecked()
81