VirtualEnv/VirtualenvAddEditDialog.py

changeset 6338
104ee21d765d
child 6341
a00e63f6d766
equal deleted inserted replaced
6337:c6af560e0039 6338:104ee21d765d
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to enter the data of a virtual environment.
8 """
9
10 from __future__ import unicode_literals
11
12 import os
13 import sys
14
15 from PyQt5.QtCore import pyqtSlot
16 from PyQt5.QtWidgets import QDialog, QDialogButtonBox
17
18 from E5Gui.E5PathPicker import E5PathPickerModes
19
20 from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog
21
22 import Utilities
23
24
25 class VirtualenvAddEditDialog(QDialog, Ui_VirtualenvAddEditDialog):
26 """
27 Class implementing a dialog to enter the data of a virtual environment.
28 """
29 def __init__(self, manager, venvName="", venvDirectory="",
30 venvInterpreter="", parent=None):
31 """
32 Constructor
33
34 @param manager reference to the virtual environment manager
35 @type VirtualenvManager
36 @param venvName logical name of a virtual environment for editing
37 @type str
38 @param venvDirectory directory of the virtual environment
39 @type str
40 @param venvInterpreter Python interpreter of the virtual environment
41 @type str
42 @param parent reference to the parent widget
43 @type QWidget
44 """
45 super(VirtualenvAddEditDialog, self).__init__(parent)
46 self.setupUi(self)
47
48 self.__venvName = venvName
49 self.__manager = manager
50 self.__editMode = bool(venvName)
51
52 self.targetDirectoryPicker.setMode(E5PathPickerModes.DirectoryMode)
53 self.targetDirectoryPicker.setWindowTitle(
54 self.tr("Virtualenv Target Directory"))
55 self.targetDirectoryPicker.setDefaultDirectory(Utilities.getHomeDir())
56
57 self.pythonExecPicker.setMode(E5PathPickerModes.OpenFileMode)
58 self.pythonExecPicker.setWindowTitle(
59 self.tr("Python Interpreter"))
60 self.pythonExecPicker.setDefaultDirectory(
61 sys.executable.replace("w.exe", ".exe"))
62
63 self.nameEdit.setText(venvName)
64 self.targetDirectoryPicker.setText(venvDirectory)
65 self.pythonExecPicker.setText(venvInterpreter)
66
67 self.__updateOk()
68
69 def __updateOk(self):
70 """
71 Private slot to update the state of the OK button.
72 """
73 if self.__editMode:
74 enable = (
75 bool(self.nameEdit.text()) and
76 (self.nameEdit.text() == self.__venvName or
77 self.__manager.isUnique(self.nameEdit.text()))
78 )
79 else:
80 enable = (
81 bool(self.nameEdit.text()) and
82 self.__manager.isUnique(self.nameEdit.text())
83 )
84
85 enable = (
86 enable and
87 bool(self.targetDirectoryPicker.text()) and
88 os.path.exists(self.targetDirectoryPicker.text()) and
89 bool(self.pythonExecPicker.text()) and
90 os.access(self.pythonExecPicker.text(), os.X_OK)
91 )
92
93 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable)
94
95 @pyqtSlot(str)
96 def on_nameEdit_textChanged(self, txt):
97 """
98 Private slot to handle changes of the logical name.
99
100 @param txt current logical name
101 @type str
102 """
103 self.__updateOk()
104
105 @pyqtSlot(str)
106 def on_targetDirectoryPicker_textChanged(self, txt):
107 """
108 Private slot to handle changes of the virtual environment directory.
109
110 @param txt virtual environment directory
111 @type str
112 """
113 self.__updateOk()
114
115 if txt:
116 self.pythonExecPicker.setDefaultDirectory(txt)
117 else:
118 self.pythonExecPicker.setDefaultDirectory(
119 sys.executable.replace("w.exe", ".exe"))
120
121 @pyqtSlot(str)
122 def on_pythonExecPicker_textChanged(self, txt):
123 """
124 Private slot to handle changes of the virtual environment interpreter.
125
126 @param txt virtual environment interpreter
127 @type str
128 """
129 self.__updateOk()
130
131 def getData(self):
132 """
133 Public method to retrieve the entered data.
134
135 @return tuple containing the logical name, the directory and the
136 interpreter of the virtual environment
137 @rtype tuple of (str, str, str)
138 """
139 return (
140 self.nameEdit.text(),
141 self.targetDirectoryPicker.text(),
142 self.pythonExecPicker.text(),
143 )

eric ide

mercurial