class MultiGameProgress(QWidget): def __init__(self, parent, action, name='MultiGameProgress'): QWidget.__init__(self, parent, name) self.app = get_application_pointer() self.fhandler = self.app.make_new_fileshandler() self.action = action self.game_progressBar = KProgress(self) self.file_progressBar = KProgress(self) self.file_progressBarLbl = QLabel(self) self.game_progressBarLbl = QLabel(self) self.grid = QGridLayout(self, 4, 1, 5, 7) self.grid.addWidget(self.file_progressBarLbl, 0, 0) self.grid.addWidget(self.file_progressBar, 1, 0) self.grid.addWidget(self.game_progressBarLbl, 2, 0) self.grid.addWidget(self.game_progressBar, 3, 0) if action == 'prepare_game': self.game_action = 'Prepare' self.fhandler._report_extract_from_installed_archive = self.report_file_extracted else: self.game_action = 'Clean up' self.fhandler.archivehelper.report_installed_file_handled = self.report_file_handled def set_game_label(self, game): message = '%s game <b>%s</b>' % (self.game_action, game) self.game_progressBarLbl.setText(message) def report_file_handled(self, filename, count): msg = 'File %s handled.' % filename self.file_progressBarLbl.setText(msg) self.file_progressBar.setProgress(count) self.app.processEvents() def report_file_extracted(self, filenamee, count, total): if count == 1: self.file_progressBar.setTotalSteps(total) msg = '%s extracted.' % filenamee self.file_progressBarLbl.setText(msg) self.file_progressBar.setProgress(count) self.app.processEvents() def report_action_on_game(self, game, title): progress = self.game_progressBar.progress() print 'game progress', progress self.set_game_label(title) progress += 1 self.game_progressBar.setProgress(progress) if self.action == 'cleanup_game': total = len(self.fhandler.datahandler.get_installed_files(game)) self.file_progressBar.setTotalSteps(total) self.file_progressBar.setProgress(0) self.app.processEvents() def act_on_games(self, gamelist, titles): num_games = len(gamelist) action_method = getattr(self.fhandler, self.action) self.game_progressBar.setTotalSteps(num_games) for game in gamelist: self.report_action_on_game(game, titles[game]) action_method(game)