def __init__(self, *parameters, **kwargs): debug.mainthreadTest() # A title for the dialog box can be specified by a REQUIRED # 'title' keyword argument. A WidgetScope can be specified # with a 'scope' keyword. If a parent window is specified # with the 'parentwindow' argument, the dialog will be brought # up as a transient window for it. try: scope = kwargs['scope'] except KeyError: scope = None widgetscope.WidgetScope.__init__(self, scope) try: data_dict = kwargs['dialog_data'] except KeyError: pass else: self.__dict__.update(data_dict) try: parentwindow = kwargs['parentwindow'] except KeyError: parentwindow = None try: scopedata = kwargs['data'] except KeyError: pass else: for key, value in scopedata.items(): self.setData(key, value) self.parameters = parameters self.dialog = gtklogger.Dialog(parent=parentwindow, flags=gtk.DIALOG_MODAL) self.dialog.set_keep_above(True) try: title = kwargs['title'] except KeyError: raise ooferror.ErrPyProgrammingError("Untitled dialog!") gtklogger.newTopLevelWidget(self.dialog, 'Dialog-' + kwargs['title']) self.dialog.set_title(title) hbox = gtk.HBox() self.dialog.vbox.pack_start(hbox, expand=0, fill=0, padding=5) hbox.pack_start(gtk.Label(title), expand=1, fill=1, padding=10) self._button_hook() self.table = ParameterTable(parameters, scope=self) self.sbcallback = switchboard.requestCallbackMain( ('validity', self.table), self.validityCB) self.dialog.vbox.pack_start(self.table.gtk, expand=self.table.expandable, fill=True) self.response = None self.sensitize()
def __init__(self, parent=None): debug.mainthreadTest() self.dialog = gtklogger.Dialog(title="OOF2 Font Selector", parent=parent) gtklogger.newTopLevelWidget(self.dialog, "FontSelector") self.dialog.add_button(gtk.STOCK_OK, self.OK) self.dialog.add_button(gtk.STOCK_CANCEL, self.CANCEL) self.fontselector = gtk.FontSelection() self.dialog.vbox.pack_start(self.fontselector, expand=1, fill=1)
def __init__(self, question, *answers, **kwargs): debug.mainthreadTest() if len(answers) == 0: raise ooferror.ErrSetupError( "Questioner must have at least one possible answer.") self.answers = answers self.gtk = gtklogger.Dialog() self.gtk.set_keep_above(True) gtklogger.newTopLevelWidget(self.gtk, "Questioner") hbox = gtk.HBox() self.gtk.vbox.pack_start(hbox, padding=15) hbox.pack_start(gtk.Label(question), padding=15) self.defaultbutton = None try: self.default = kwargs['default'] except KeyError: self.default = None else: if not self.default in answers: self.answers = (self.default, ) + answers self.answerdict = {} count = 1 for answer in self.answers: #TODO:Replace the try except block with this #stock = answer["stock"] #choice = answer["choice"] #icon = gtk.stock_lookup(stock) #if icon is None: # debug.fmsg('no gtk stock icon for id: ', stock) # self.gtk.add_button(choice, count) #else: # button = self.gtk.add_button(icon, count) # label = gtkutils.findChild(gtk.Label, button) # label.set_text(choice) #if answer["stock"] == self.default["stock"]: # self.gtk.set_default_response(count) try: stock = _stock[answer] button = self.gtk.add_button(stock, count) # Replace the label on the stock button with the answer text. label = gtkutils.findChild(gtk.Label, button) label.set_text(answer) except KeyError: debug.fmsg('no stock icon for', answer) self.gtk.add_button(answer, count) self.answerdict[count] = answer if answer == self.default: self.gtk.set_default_response(count) count += 1 hbox.show_all()
def __init__(self, message): debug.mainthreadTest() self.gtk = gtklogger.Dialog() gtklogger.newTopLevelWidget(self.gtk, "Warning") self.gtk.set_title("%s Warning" % subWindow.oofname()) self.gtk.vbox.set_spacing(3) self.gtk.vbox.pack_start(gtk.Label("WARNING")) self.gtk.vbox.pack_start(gtk.Label(message)) self.gtk.add_button("OK", self.OK) disable_button = self.gtk.add_button("Disable warnings", self.NO_MORE) tooltips.set_tooltip_text( disable_button, "Warnings can be re-enabled in the Help menu of the main window.") self.gtk.vbox.show_all()
def __init__(self, question, *answers, **kwargs): debug.mainthreadTest() if len(answers)==0: raise ooferror.ErrSetupError( "Questioner must have at least one possible answer.") self.answers = answers self.gtk = gtklogger.Dialog(parent=guitop.top().gtk) gtklogger.newTopLevelWidget(self.gtk, "Questioner") hbox = gtk.HBox() self.gtk.vbox.pack_start(hbox, padding=15) hbox.pack_start(gtk.Label(question), padding=15) self.defaultbutton = None try: self.default = kwargs['default'] except KeyError: self.default=None else: if not self.default in answers: self.answers = (self.default,)+answers self.answerdict = {} count = 1 for answer in self.answers: try: stock = _stock[answer] button = self.gtk.add_button(stock, count) # Replace the label on the stock button with the answer text. label = gtkutils.findChild(gtk.Label, button) label.set_text(answer) except KeyError: debug.fmsg('no stock icon for', answer) self.gtk.add_button(answer, count) self.answerdict[count] = answer if answer == self.default: self.gtk.set_default_response(count) count += 1 hbox.show_all()
def __init__(self, e_type, value, tbacklist): debug.mainthreadTest() errorstrings = [] # list of strings self.tracebacks = [] # list of lists of \n-terminated strings # If there are previous unprocessed exceptions, print them # too. The oldest exception is the first in the # _savedExceptions list. global _savedExceptions _savedExceptions.append((e_type, value, tbacklist)) for e_type, value, tbacklist in _savedExceptions: # format_exception_only returns a list of string, each # terminated whith a newline. The list has length 1, # except for syntax errors. errorstrings.extend([ line.rstrip() for line in traceback.format_exception_only(e_type, value) ]) if isinstance(value, ooferror.ErrErrorPtr): moreinfo = value.details() if moreinfo: errorstrings.append(moreinfo) errorstrings.append("") # blank line if tbacklist: self.tracebacks.append(traceback.format_list(tbacklist)) _savedExceptions = [] self.answer = None self.datestampstring = time.strftime("%Y %b %d %H:%M:%S %Z") self.gtk = gtklogger.Dialog() self.gtk.set_keep_above(True) # self.gtk = gtk.Dialog() gtklogger.newTopLevelWidget(self.gtk, "Error") self.gtk.set_title("%s Error" % subWindow.oofname()) self.gtk.vbox.set_spacing(3) classname = string.split(str(e_type), '.')[-1] self.gtk.vbox.pack_start(gtk.Label("ERROR"), expand=0, fill=0) self.errframe = gtk.Frame() self.errframe.set_border_width(6) self.errframe.set_shadow_type(gtk.SHADOW_IN) self.gtk.vbox.pack_start(self.errframe, expand=1, fill=1) fd = pango.FontDescription(mainmenuGUI.getFixedFont()) errscroll = gtk.ScrolledWindow() gtklogger.logScrollBars(errscroll, "ErrorScroll") errscroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.errframe.add(errscroll) self.errbox = gtk.TextView() # error text goes here gtklogger.setWidgetName(self.errbox, "ErrorText") errscroll.add(self.errbox) self.errbox.set_editable(0) self.errbox.set_wrap_mode(gtk.WRAP_WORD) self.errbox.get_buffer().set_text("\n".join(errorstrings)) self.errbox.modify_font(fd) self.gtk.add_button(gtk.STOCK_OK, self.OK) self.gtk.add_button("Abort", self.ABORT) self.gtk.set_default_response(self.OK) self.reportbutton = gtk.Button("Report") gtklogger.setWidgetName(self.reportbutton, "ReportFromError") gtklogger.connect(self.reportbutton, "clicked", self.report) self.gtk.action_area.add(self.reportbutton) self.tracebutton = gtk.Button("View Traceback") gtklogger.setWidgetName(self.tracebutton, "ViewTraceback") gtklogger.connect(self.tracebutton, "clicked", self.trace) self.gtk.action_area.add(self.tracebutton) self.savebutton = gtkutils.StockButton(gtk.STOCK_SAVE, "Save Traceback") gtklogger.setWidgetName(self.savebutton, "SaveTraceback") gtklogger.connect(self.savebutton, "clicked", self.savetrace) self.gtk.action_area.add(self.savebutton) self.scroll = gtk.ScrolledWindow() gtklogger.logScrollBars(self.scroll, "TraceScroll") self.scroll.set_border_width(3) self.scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scroll.set_shadow_type(gtk.SHADOW_IN) self.tracepane = gtk.TextView() self.tracepane.set_editable(0) self.tracepane.set_wrap_mode(gtk.WRAP_WORD) self.tracepane.modify_font(fd) self.traceframe = gtk.Frame() self.traceframe.set_shadow_type(gtk.SHADOW_NONE) self.gtk.vbox.pack_start(self.traceframe, expand=0, fill=0) # Scroll is not added to the frame until the traceback button # is pressed. self.scroll.add(self.tracepane) if self.tracebacks: tbtext = "" for err, tb in zip(errorstrings, self.tracebacks): if tbtext: tbtext += '\n----------\n\n' tbtext += err + '\n' tbtext += "".join(tb) self.tracepane.get_buffer().set_text(tbtext) else: self.savebutton.set_sensitive(0) self.tracebutton.set_sensitive(0) self.gtk.show_all()
def __init__(self, mode, title=None, filename=None, params=None, pattern=False): debug.mainthreadTest() widgetscope.WidgetScope.__init__(self, None) self.dialog = gtklogger.Dialog() self.set_title(title) gtklogger.newTopLevelWidget(self.dialog, self.dialog.get_title()) self.filechooser = gtk.FileChooserWidget(action=_modes[mode]) self.dialog.set_default_size(500, 300) self.filechooser.show() self.dialog.vbox.pack_start(self.filechooser, expand=1, fill=1) gtklogger.setWidgetName(self.filechooser, "FileChooser") gtklogger.connect(self.filechooser, 'selection-changed', self.selectionchangedCB) self.dialog.add_button(gtk.STOCK_OK, self.OK) self.dialog.add_button(gtk.STOCK_CANCEL, self.CANCEL) self.dialog.set_default_response(self.OK) self.pattern = (pattern and (mode == 'r')) if self.pattern: # TODO: Fix aesthetics of the widgets. self.filechooser.set_select_multiple(True) self.patternrow = gtk.HBox() self.patternrow.pack_start(gtk.Label("Pattern: "), expand=0, fill=0, padding=5) self.pattern_entry = gtk.Entry() self.pattern_entry.set_editable(1) self.pattern_entry.set_text("*") gtklogger.connect(self.pattern_entry, 'changed', self.patternchangedCB) self.patternrow.pack_start(self.pattern_entry, expand=1, fill=1, padding=5) self.patternrow.show_all() if params is None: self.table = None if self.pattern: self.filechooser.set_extra_widget(self.patternrow) else: self.table = parameterwidgets.ParameterTable(params, scope=self, name="Parameters") self.sbcallback = switchboard.requestCallbackMain( ('validity', self.table), self.validityCB) if not self.pattern: self.filechooser.set_extra_widget(self.table.gtk) else: vbox = gtk.VBox() vbox.pack_start(self.patternrow) vbox.pack_start(self.table.gtk) vbox.show() self.filechooser.set_extra_widget(vbox) if filename is not None: self.filechooser.set_current_name(filename)