Exemple #1
0
class ImportWidget(QDialog):
	def __init__(self, db_path, parent = None):
		QWidget.__init__(self)
		self.setParent(parent)
		self.setWindowFlags(Qt.Dialog)
		self.setWindowTitle(self.tr('Import'))
		self.setModal(1)

		self.startButton = QPushButton(self)
		self.startButton.setText('&start')
		self.connect( self.startButton, SIGNAL('clicked()'), self.onStart )

		self.stopButton = QPushButton(self)
		self.stopButton.setText('&cancel')
		self.stopButton.setEnabled( False )
		self.connect( self.stopButton, SIGNAL('clicked()'), self.onStop )

		self.okButton = QPushButton(self)
		self.okButton.setText('&done')
		self.okButton.setEnabled( False )
		self.connect( self.okButton, SIGNAL('clicked()'), self.onOk )

		self.statusBar = QProgressBar(self)
		self.statusBar.setRange(0, 100)
		self.statusLabel = QLabel(self)

		self.worker = ImportWorker(db_path, self)
		self.connect( self.worker, SIGNAL('statusChanged'), self.statusBar.setValue )
		self.connect( self.worker, SIGNAL('done'), self.onDone )
		self.connect( self.worker, SIGNAL('message'), self.statusLabel.setText )
		self.connect( self.worker, SIGNAL('range'), self.statusBar.setRange )
	
		self.layout = QGridLayout(self)
		self.layout.addWidget( self.startButton, 0, 0 )
		self.layout.addWidget( self.stopButton, 0, 1 )
		self.layout.addWidget( self.okButton, 0, 2 )
		self.layout.addWidget( self.statusBar, 1, 0, 1, 3 )
		self.layout.addWidget( self.statusLabel, 2, 0, 1, 3 )

	def onStart(self):
		self.startButton.setEnabled( False )
		self.stopButton.setEnabled( True )
		self.statusBar.setEnabled( True )
		self.statusLabel.setEnabled( True )
		Thread(target=self.worker.run).start()

	def onDone(self):
		self.okButton.setEnabled( True )
		self.stopButton.setEnabled( False )

	def onStop(self):
		self.worker.term()
		self.statusBar.setEnabled( False )
		self.statusLabel.setEnabled( False )
		self.startButton.setEnabled( True )
		self.stopButton.setEnabled( False )
	
	def onOk(self):
		self.accept()

	def closeEvent(self,event):
		if self.worker.running:
			event.ignore()
		else:
			event.accept()