Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py

branch
Py2 comp.
changeset 2847
1843ef6e2656
parent 2821
459cc954bea8
child 3057
10516539f238
equal deleted inserted replaced
2846:b852fe4d153a 2847:1843ef6e2656
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to enter the archive data.
8 """
9
10 from __future__ import unicode_literals # __IGNORE_WARNING__
11
12 from PyQt4.QtCore import pyqtSlot, QFileInfo
13 from PyQt4.QtGui import QDialog, QDialogButtonBox
14
15 from E5Gui.E5Completers import E5FileCompleter, E5DirCompleter
16 from E5Gui import E5FileDialog
17
18 from .Ui_HgArchiveDialog import Ui_HgArchiveDialog
19
20 import Utilities
21
22
23 class HgArchiveDialog(QDialog, Ui_HgArchiveDialog):
24 """
25 Class implementing a dialog to enter the archive data.
26 """
27 def __init__(self, vcs, parent=None):
28 """
29 Constructor
30
31 @param vcs reference to the Mercurial object (Hg)
32 @param parent reference to the parent widget (QWidget)
33 """
34 super(HgArchiveDialog, self).__init__(parent)
35 self.setupUi(self)
36
37 self.__archiveFileCompleter = E5FileCompleter()
38 self.__archiveDirCompleter = E5DirCompleter()
39 self.__activeCompleter = self.__archiveFileCompleter
40 self.archiveEdit.setCompleter(self.__activeCompleter)
41 self.__activeCompleter.model().setNameFilters([])
42
43 self.typeComboBox.addItem(self.trUtf8("Detect Automatically"), "")
44 self.typeComboBox.addItem(self.trUtf8("Directory of Files"), "files")
45 self.typeComboBox.addItem(self.trUtf8("Uncompressed TAR-Archive"), "tar")
46 self.typeComboBox.addItem(self.trUtf8("Bzip2 compressed TAR-Archive"), "tbz2")
47 self.typeComboBox.addItem(self.trUtf8("Gzip compressed TAR-Archive"), "tgz")
48 self.typeComboBox.addItem(self.trUtf8("Uncompressed ZIP-Archive"), "uzip")
49 self.typeComboBox.addItem(self.trUtf8("Compressed ZIP-Archive"), "zip")
50
51 self.__unixFileFilters = [
52 self.trUtf8("Bzip2 compressed TAR-Archive (*.tar.bz2)"),
53 self.trUtf8("Gzip compressed TAR-Archive (*.tar.gz)"),
54 self.trUtf8("Uncompressed TAR-Archive (*.tar)"),
55 ]
56 self.__windowsFileFilters = [
57 self.trUtf8("Compressed ZIP-Archive (*.zip)"),
58 self.trUtf8("Uncompressed ZIP-Archive (*.uzip)")
59 ]
60 if Utilities.isWindowsPlatform():
61 self.__fileFilters = ";;".join(
62 self.__windowsFileFilters + self.__unixFileFilters)
63 else:
64 self.__fileFilters = ";;".join(
65 self.__unixFileFilters + self.__windowsFileFilters)
66 self.__fileFilters += ";;" + self.trUtf8("All Files (*)")
67
68 self.__typeFilters = {
69 "tar": ["*.tar"],
70 "tbz2": ["*.tar.bz2", "*.tbz2"],
71 "tgz": ["*.tar.gz", "*.tgz"],
72 "uzip": ["*.uzip", "*.zip"],
73 "zip": ["*.zip"],
74 }
75
76 self.subReposCheckBox.setEnabled(vcs.hasSubrepositories())
77
78 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
79
80 self.__projectPath = \
81 vcs.getPlugin().getProjectHelper().getProject().getProjectPath()
82
83 @pyqtSlot(str)
84 def on_archiveEdit_textChanged(self, archive):
85 """
86 Private slot to handle changes of the archive name.
87 """
88 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(archive != "")
89
90 @pyqtSlot()
91 def on_archiveButton_clicked(self):
92 """
93 Private slot to select the archive name via a file selection dialog.
94 """
95 type_ = self.typeComboBox.itemData(self.typeComboBox.currentIndex())
96
97 archive = Utilities.fromNativeSeparators(self.archiveEdit.text())
98 if not archive:
99 archive = self.__projectPath
100
101 if type_ == "files":
102 archive = E5FileDialog.getExistingDirectory(
103 self,
104 self.trUtf8("Select Archive Directory"),
105 archive,
106 E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
107 else:
108 archive, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
109 self,
110 self.trUtf8("Select Archive File"),
111 archive,
112 self.__fileFilters,
113 None,
114 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
115 if archive:
116 ext = QFileInfo(archive).suffix()
117 if not ext:
118 ex = selectedFilter.split("(*")[1].split(")")[0]
119 if ex:
120 archive += ex
121
122 if archive:
123 self.archiveEdit.setText(Utilities.toNativeSeparators(archive))
124
125 @pyqtSlot(int)
126 def on_typeComboBox_activated(self, index):
127 """
128 Private slot to react on changes of the selected archive type.
129
130 @param index index of the selected type (integer)
131 """
132 type_ = self.typeComboBox.itemData(index)
133 if type_ == "files":
134 if self.__activeCompleter != self.__archiveDirCompleter:
135 self.__activeCompleter = self.__archiveDirCompleter
136 self.archiveEdit.setCompleter(self.__activeCompleter)
137 else:
138 if self.__activeCompleter != self.__archiveFileCompleter:
139 self.__activeCompleter = self.__archiveFileCompleter
140 self.archiveEdit.setCompleter(self.__activeCompleter)
141 if type_ in self.__typeFilters:
142 self.__activeCompleter.model().setNameFilters(self.__typeFilters[type_])
143 else:
144 self.__activeCompleter.model().setNameFilters([])
145
146 def getData(self):
147 """
148 Public method to retrieve the data.
149
150 @return tuple giving the archive name (string), the archive type (string),
151 the directory prefix 8string) and a flag indicating to recurse into
152 subrepositories (boolean)
153 """
154 return (
155 self.archiveEdit.text(),
156 self.typeComboBox.itemData(self.typeComboBox.currentIndex()),
157 self.prefixEdit.text(),
158 self.subReposCheckBox.isChecked(),
159 )

eric ide

mercurial