def next(self): # update progress bar self.bar.set_fraction( (self.index+1) / float(self.maxindex) ) self.bar.set_text("") while gtk.events_pending(): gtk.main_iteration() try: name = ProgressList.next(self) except StopIteration: self.stop_iteration() raise # update listview text if self.iter is None: self.iter = self.model.get_iter_first() else: self.iter = self.model.iter_next(self.iter) self.model.set_value( self.iter, 1, "IN PROGRESS" ) self.bar.set_text(self.objects[self.index]) while gtk.events_pending(): gtk.main_iteration() return name
def __init__(self, objects): gtk.Window.__init__(self) self.set_modal(True) self.set_size_request(480,320) ProgressList.__init__(self, objects) vbox = gtk.VBox() # set up progressbar bar = gtk.ProgressBar() bar.set_fraction(0.0) bar.show() # set up listview with a model := (filename, status) model = gtk.ListStore(str, str) listview = gtk.TreeView(model) cell = gtk.CellRendererText() column = gtk.TreeViewColumn("filename", cell) column.set_cell_data_func(cell, self.render_filename) listview.append_column(column) column = gtk.TreeViewColumn('Status', cell, text=1) listview.append_column(column) listview.show() sw = uihelper.add_scrollbars(listview) sw.show() # the scrolled window (sw) with the listview is put into an expander widget expander = gtk.Expander("Details") expander.set_expanded(False) expander.add(sw) #expander.connect("notify::expanded", lambda e,p: self.check_resize()) expander.show() # set up button box btn_cancel = gtk.Button(stock=gtk.STOCK_CANCEL) btn_cancel.show() btn_ok = gtk.Button(stock=gtk.STOCK_OK) btn_ok.show() btnbox = gtk.HButtonBox() btnbox.add(btn_cancel) btnbox.add(btn_ok) btnbox.set_layout(gtk.BUTTONBOX_END) btnbox.show() # initially, btn_ok is disables. btn_cancel.connect("clicked", (lambda sender: self.abort())) btn_ok.connect("clicked", (lambda sender: self.destroy())) btn_ok.set_sensitive(False) # stack everything into a vbox. #vbox.pack_start(listview, False, True, padding=5) vbox.pack_start(bar, False, True, padding=5) vbox.pack_start(expander, True, True, padding=5) vbox.pack_start(sw, True, True, padding=5) vbox.pack_end(btnbox,False,True, padding=5) vbox.show() self.add(vbox) self.show() # fill model with string names for object in self.objects: model.append( (object,"") ) self.iter = None while gtk.events_pending(): gtk.main_iteration() # save some variables for further reference self.model = model self.bar = bar self.btn_cancel = btn_cancel self.btn_ok = btn_ok self.expander = expander
def abort(self): ProgressList.abort(self) self.model.set_value( self.iter, 1, "ABORTED" ) self.expander.set_expanded(True) self.stop_iteration()