eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2002 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Subversion Options Dialog for a new project from the
8 repository.
9 """
10
11 import os
12
13 from PyQt5.QtCore import QDir, pyqtSlot
14 from PyQt5.QtWidgets import QDialog, QDialogButtonBox
15
16 from E5Gui.E5PathPicker import E5PathPickerModes
17
18 from .Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
19 from .Config import ConfigSvnProtocols
20
21 import Utilities
22 import Preferences
23
24
25 class SvnNewProjectOptionsDialog(QDialog, Ui_SvnNewProjectOptionsDialog):
26 """
27 Class implementing the Options Dialog for a new project from the
28 repository.
29 """
30 def __init__(self, vcs, parent=None):
31 """
32 Constructor
33
34 @param vcs reference to the version control object
35 @param parent parent widget (QWidget)
36 """
37 super().__init__(parent)
38 self.setupUi(self)
39
40 self.vcsProjectDirPicker.setMode(E5PathPickerModes.DirectoryMode)
41 self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode)
42
43 self.protocolCombo.addItems(ConfigSvnProtocols)
44
45 hd = Utilities.toNativeSeparators(QDir.homePath())
46 hd = os.path.join(hd, 'subversionroot')
47 self.vcsUrlPicker.setText(hd)
48
49 self.vcs = vcs
50
51 self.localPath = hd
52 self.networkPath = "localhost/"
53 self.localProtocol = True
54
55 ipath = (
56 Preferences.getMultiProject("Workspace") or
57 Utilities.getHomeDir()
58 )
59 self.__initPaths = [
60 Utilities.fromNativeSeparators(ipath),
61 Utilities.fromNativeSeparators(ipath) + "/",
62 ]
63 self.vcsProjectDirPicker.setText(self.__initPaths[0])
64
65 self.resize(self.width(), self.minimumSizeHint().height())
66
67 self.buttonBox.button(
68 QDialogButtonBox.StandardButton.Ok).setEnabled(False)
69
70 msh = self.minimumSizeHint()
71 self.resize(max(self.width(), msh.width()), msh.height())
72
73 @pyqtSlot(str)
74 def on_vcsProjectDirPicker_textChanged(self, txt):
75 """
76 Private slot to handle a change of the project directory.
77
78 @param txt name of the project directory (string)
79 """
80 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
81 bool(txt) and
82 Utilities.fromNativeSeparators(txt) not in self.__initPaths)
83
84 @pyqtSlot()
85 def on_vcsUrlPicker_pickerButtonClicked(self):
86 """
87 Private slot to display a repository browser dialog.
88 """
89 from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
90 dlg = SvnRepoBrowserDialog(self.vcs, mode="select", parent=self)
91 dlg.start(
92 self.protocolCombo.currentText() + self.vcsUrlPicker.text())
93 if dlg.exec() == QDialog.DialogCode.Accepted:
94 url = dlg.getSelectedUrl()
95 if url:
96 protocol = url.split("://")[0]
97 path = url.split("://")[1]
98 self.protocolCombo.setCurrentIndex(
99 self.protocolCombo.findText(protocol + "://"))
100 self.vcsUrlPicker.setText(path)
101
102 def on_layoutCheckBox_toggled(self, checked):
103 """
104 Private slot to handle the change of the layout checkbox.
105
106 @param checked flag indicating the state of the checkbox (boolean)
107 """
108 self.vcsTagLabel.setEnabled(checked)
109 self.vcsTagEdit.setEnabled(checked)
110 if not checked:
111 self.vcsTagEdit.clear()
112
113 @pyqtSlot(int)
114 def on_protocolCombo_activated(self, index):
115 """
116 Private slot to switch the status of the directory selection button.
117
118 @param index index of the selected entry
119 @type int
120 """
121 protocol = self.protocolCombo.itemText(index)
122 if protocol == "file://":
123 self.networkPath = self.vcsUrlPicker.text()
124 self.vcsUrlPicker.setText(self.localPath)
125 self.vcsUrlLabel.setText(self.tr("Pat&h:"))
126 self.localProtocol = True
127 self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode)
128 else:
129 if self.localProtocol:
130 self.localPath = self.vcsUrlPicker.text()
131 self.vcsUrlPicker.setText(self.networkPath)
132 self.vcsUrlLabel.setText(self.tr("&URL:"))
133 self.localProtocol = False
134 self.vcsUrlPicker.setMode(E5PathPickerModes.CustomMode)
135
136 @pyqtSlot(str)
137 def on_vcsUrlPicker_textChanged(self, txt):
138 """
139 Private slot to handle changes of the URL.
140
141 @param txt current text of the line edit (string)
142 """
143 enable = "://" not in txt
144 self.buttonBox.button(
145 QDialogButtonBox.StandardButton.Ok).setEnabled(enable)
146
147 def getData(self):
148 """
149 Public slot to retrieve the data entered into the dialog.
150
151 @return a tuple of a string (project directory) and a dictionary
152 containing the data entered.
153 """
154 scheme = self.protocolCombo.currentText()
155 url = self.vcsUrlPicker.text()
156 vcsdatadict = {
157 "url": '{0}{1}'.format(scheme, url),
158 "tag": self.vcsTagEdit.text(),
159 "standardLayout": self.layoutCheckBox.isChecked(),
160 }
161 return (self.vcsProjectDirPicker.text(), vcsdatadict)

eric ide

mercurial