ScolaSync: Fichier source de src/copyToDialog1.py

ScolaSync 5.1 |

copyToDialog1.py
Aller à la documentation de ce fichier.
1 # $Id: copyToDialog1.py 47 2011-06-13 10:20:14Z georgesk $
2
3 licenceEn="""
4 file copyToDialog1.py
5 this file is part of the project scolasync
6
7 Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
8
9 This program is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 """
22
23 from PyQt5.QtCore import *
24 from PyQt5.QtWidgets import *
25 from PyQt5.QtGui import *
26 import os.path, subprocess
27
28 import Ui_copyToDialog1
29
30 ##
31 #
32 # Un dialogue pour choisir un ensemble de fichiers à transférer vers
33 # une collection de clés USB.
34 # @param parent un widget
35 # @param workdir un répertoire cible sur les baladeurs
36 #
37 class copyToDialog1(QDialog):
38 ##
39 #
40 # Le constructeur
41 # @param parent un QWidget
42 #
43 def __init__(self,parent = None, workdir=""):
44 QDialog.__init__(self,parent)
45 self.mainWindow=parent
46 self._ui=Ui_copyToDialog1.Ui_Dialog()
47 self._ui.setupUi(self)
48 self._ui.travailEdit.setText(workdir)
49 self.setupFromListe()
50 self._fromDir=QDir.home()
51 self.setFromListeDir(self._fromDir)
52 self.setupToListe()
53 ##
54 # \var ok vrai si on a cliqué sur Continuer ...
55 self.ok="False"
56 self._ui.selectButton.clicked.connect(self.select)
57 self._ui.removeButton.clicked.connect(self.remove)
58 self._ui.cancelButton.clicked.connect(self.cancel)
59 self._ui.continueButton.clicked.connect(self.cont)
60 self._ui.travailEdit.editingFinished.connect(self.changeWd)
61
62 ##
63 #
64 # changement du répertoire de travail
65 #
66 def changeWd(self):
67 newDir=self._ui.travailEdit.text()
68 self.mainWindow.changeWd(newDir)
69
70 ##
71 #
72 # L'action provoquée par le bouton d'échappement : fermeture du dialogue
73 #
74 def cancel(self):
75 self.close()
76
77 ##
78 #
79 # L'action provoquée par le bouton de continuation : fermeture du dialogue
80 # et self.ok devient vrai.
81 #
82 def cont(self):
83 self.ok=True
84 self.close()
85
86 ##
87 #
88 # Met en place un visionneur de fichiers dans la liste source
89 #
90 def setupFromListe(self):
91 self._model1 = QDirModel()
92 self._model1.setFilter(QDir.AllEntries)
93 self._ui.listViewFrom.setModel(self._model1)
94 self._ui.listViewFrom.doubleClicked.connect(self.cd)
95
96 ##
97 #
98 # Choisit un répertoire pour la liste source
99 # @param directory une instance de QDir
100 #
101 def setFromListeDir(self,directory):
102 path=directory.path()
103 cwdIndex = self._model1.index(path)
104 self._ui.listViewFrom.setRootIndex(cwdIndex)
105 self._ui.lineEdit.setText(path)
106
107 ##
108 #
109 # Change le répertoire courant si possible
110 # @param ev un évènement
111 #
112 def cd(self,index):
113 d= "%s" %index.data()
114 p= "%s" %self._fromDir.path()
115 j=os.path.abspath(os.path.join(p,d))
116 if os.path.isdir(j):
117 self._fromDir=QDir(j)
118 self.setFromListeDir(self._fromDir)
119
120 ##
121 #
122 # Met en place un visionneur de fichierspour les fichiers reçus
123 #
124 def setupToListe(self):
125 self._model2 = QStandardItemModel()
126 ### on connecte la liste d'items standard via un
127 ### proxy qui autorise le tri alphabétique
128 self._proxyModel = QSortFilterProxyModel()
129 self._proxyModel.setSourceModel(self._model2)
130 self._ui.listViewTo.setModel(self._proxyModel)
131 self._proxyModel.setDynamicSortFilter(True)
132 ###### apparemment les drops venus de la liste voisine
133 ###### ne fonctionnent pas et c'est bien dommage !!!
134 ## self._ui.listViewTo.setDragEnabled(True)
135 ## self._ui.listViewTo.setAcceptDrops(True)
136 ## self._ui.listViewTo.setDropIndicatorShown(True);
137
138 ##
139 #
140 # Ajoute le répertoire ou le fichier sélectionné dans le
141 # navigateur de fichiers à la liste de sélections.
142 #
143 def select(self):
144 sel=self._ui.listViewFrom.selectedIndexes()
145 if len(sel)>0:
146 index=sel[0]
147 d= "%s" %index.data()
148 p= "%s" %self._fromDir.path()
149 j=os.path.abspath(os.path.join(p,d))
150 f=self._model2.findItems(j)
151 if len(f)==0:
152 self._model2.appendRow(QStandardItem(j))
153 self._proxyModel.sort(0)
154 # on lance un calcul à nouveau pour la taille totale occupée
155 self.displaySize()
156 else:
157 print ("%s est déjà sélectionné" %j)
158
159 ##
160 #
161 # Affiche la taille de la sélection courante
162 #
163 def displaySize(self):
164 total=0
165 for path in self.selectedList():
166 p=subprocess.Popen("du -s '%s' | awk '{print $1}'" %path,
167 shell=True, stdout=subprocess.PIPE)
168 size=p.communicate()[0]
169 try:
170 total+= int(size)
171 except:
172 pass
173 unit="%s" %QApplication.translate("Dialog","%s kilo-octets",None)
174 if total>1024:
175 total= 0.1*int(10*total/1024)
176 unit="%s" %QApplication.translate("Dialog","%s méga-octets",None)
177 if total>1024:
178 total= 0.1*int(10*total/1024)
179 unit="%s" %QApplication.translate("Dialog","%s giga-octets",None)
180 self._ui.lineEdit_size.setText(unit %total)
181
182 ##
183 #
184 # Supprime le répertoire ou le fichier sélectionné dans la
185 # liste de sélections.
186 #
187 def remove(self):
188 sel=self._ui.listViewTo.selectedIndexes()
189 if len(sel)>0:
190 index=sel[0]
191 sourceIndex=self._proxyModel.mapToSource(index)
192 self._model2.removeRow(sourceIndex.row())
193 self._proxyModel.sort(0)
194 # on lance un calcul à nouveau pour la taille totale occupée
195 self.displaySize()
196
197 ##
198 #
199 # Renvoie une liste de répertoires et de fichiers qui ont été
200 # sélectionnés pour la copie sur clé USB.
201 # @return une liste de QStrings
202 #
203 def selectedList(self):
204 sl=self._model2.findItems("*",Qt.MatchWildcard)
205 return map(lambda x: ("%s" %x.text()), sl)
206
207 if __name__=="__main__":
208 import sys
209 app = QApplication(sys.argv)
210 windows = copyToDialog1()
211 windows.show()
212 sys.exit(app.exec_())
src.copyToDialog1.copyToDialog1.selectedList
def selectedList(self)
Renvoie une liste de répertoires et de fichiers qui ont été sélectionnés pour la copie sur clé USB...
Definition: copyToDialog1.py:203
src.copyToDialog1.copyToDialog1.setFromListeDir
def setFromListeDir(self, directory)
Choisit un répertoire pour la liste source.
Definition: copyToDialog1.py:101
src.copyToDialog1.copyToDialog1.cd
def cd(self, index)
Change le répertoire courant si possible.
Definition: copyToDialog1.py:112
QtCore
QtWidgets
QDialog
src.copyToDialog1.copyToDialog1.setupFromListe
def setupFromListe(self)
Met en place un visionneur de fichiers dans la liste source.
Definition: copyToDialog1.py:90
src.copyToDialog1.copyToDialog1._fromDir
_fromDir
Definition: copyToDialog1.py:50
src.copyToDialog1.copyToDialog1.cancel
def cancel(self)
L'action provoquée par le bouton d'échappement : fermeture du dialogue.
Definition: copyToDialog1.py:74
src.copyToDialog1.copyToDialog1
Un dialogue pour choisir un ensemble de fichiers à transférer vers une collection de clés USB...
Definition: copyToDialog1.py:37
src.copyToDialog1.copyToDialog1.setupToListe
def setupToListe(self)
Met en place un visionneur de fichierspour les fichiers reçus.
Definition: copyToDialog1.py:124
src.copyToDialog1.copyToDialog1.changeWd
def changeWd(self)
changement du répertoire de travail
Definition: copyToDialog1.py:66
src.copyToDialog1.copyToDialog1.cont
def cont(self)
L'action provoquée par le bouton de continuation : fermeture du dialogue et self.ok devient vrai...
Definition: copyToDialog1.py:82
src.copyToDialog1.copyToDialog1._ui
_ui
Definition: copyToDialog1.py:46
src.copyToDialog1.copyToDialog1.mainWindow
mainWindow
Definition: copyToDialog1.py:45
src.copyToDialog1.copyToDialog1.ok
ok
Definition: copyToDialog1.py:83
src.copyToDialog1.copyToDialog1.displaySize
def displaySize(self)
Affiche la taille de la sélection courante.
Definition: copyToDialog1.py:163
src.copyToDialog1.copyToDialog1.select
def select(self)
Ajoute le répertoire ou le fichier sélectionné dans le navigateur de fichiers à la liste de sélection...
Definition: copyToDialog1.py:143
src.copyToDialog1.copyToDialog1._proxyModel
_proxyModel
on connecte la liste d'items standard via un proxy qui autorise le tri alphabétique ...
Definition: copyToDialog1.py:128
src.copyToDialog1.copyToDialog1._model2
_model2
Definition: copyToDialog1.py:125
QtGui
src.copyToDialog1.copyToDialog1.remove
def remove(self)
Supprime le répertoire ou le fichier sélectionné dans la liste de sélections.
Definition: copyToDialog1.py:187
src.copyToDialog1.copyToDialog1._model1
_model1
Definition: copyToDialog1.py:91