class AddSource(tk.Frame): def __init__(self, parent): super().__init__(parent) container = tk.Frame(self) container.pack(fill='both', expand=1, padx=5, pady=5) tk.Grid.columnconfigure(container, 0, weight=1) tk.Grid.rowconfigure(container, 0, weight=1) self.sourceview = SourceView(container) self.sourceview.grid(row=0, column=0, sticky='nesw') tk.Button(container, text='Add source', command=self.add_source).grid(row=1, column=0, sticky='nesw', pady=(2, 0)) def add_source(self): source = db.Source() self.sourceview.update_source(source) if db.contains(source): dialog.duplicate(self) return db.session.add(source) db.session.commit()
def __init__(self, parent, source): super().__init__(parent) self.geometry(settings.get('view_window_geometry')) container = tk.Frame(self) container.pack(fill='both', expand=1, padx=5, pady=5) tk.Grid.columnconfigure(container, 0, weight=1) tk.Grid.rowconfigure(container, 0, weight=1) self.sourceview = SourceView(container) self.sourceview.grid(row=0, column=0, sticky='nesw') button_frame = tk.Frame(container) button_frame.grid(row=1, column=0, sticky='nesw') for x in range(0, 4): tk.Grid.columnconfigure(button_frame, x, weight=1, uniform='equal') tk.Button(button_frame, text='Save changes', command=self.save_changes).grid(row=0, column=0, sticky='nesw') tk.Button(button_frame, text='View PDF', command=self.view_pdf).grid(row=0, column=1, sticky='nesw') tk.Button(button_frame, text='Remove entry', command=self.delete).grid(row=0, column=2, sticky='nesw') tk.Button(button_frame, text='Close', command=self.destroy).grid(row=0, column=3, sticky='nesw') self.source = source self.load_values()
def __init__(self, exc_info, parent=None): QWidget.__init__(self, parent) etype, value, tb = exc_info self.tb = tb self.entries = traceback.extract_tb(tb) self.setWindowTitle('Python Error') msg = unicode(value).replace("\n", "<br>").replace(" ", " ") self.error = QLabel("<h1>" + etype.__name__ + "</h1><b>" + msg + "</b>") self.error.setTextInteractionFlags(Qt.TextSelectableByMouse) self.frames = FramesView() self.frames.setTraceback(tb) self.frames.selectionModel().currentChanged.connect( self.current_frame_changed) self.source = SourceView() self.splitterSrc = QSplitter(Qt.Horizontal) self.splitterSrc.addWidget(self.frames) self.splitterSrc.addWidget(self.source) self.splitterSrc.setStretchFactor(0, 1) self.splitterSrc.setStretchFactor(1, 2) self.variables = VariablesView() self.console = ConsoleWidget(exc_info) self.splitterMain = QSplitter(Qt.Vertical) self.splitterMain.addWidget(self.splitterSrc) self.splitterMain.addWidget(self.variables) self.splitterMain.addWidget(self.console) l = QVBoxLayout() l.addWidget(self.error) l.addWidget(self.splitterMain) self.setLayout(l) self.resize(800, 600) s = QSettings() self.splitterSrc.restoreState(s.value("/FirstAid/splitterSrc", "")) self.splitterMain.restoreState(s.value("/FirstAid/splitterMain", "")) self.restoreGeometry(s.value("/FirstAid/geometry", "")) # select the last frame self.frames.setCurrentIndex( self.frames.model().index(len(self.entries) - 1))
def __init__(self, parent): super().__init__(parent) container = tk.Frame(self) container.pack(fill='both', expand=1, padx=5, pady=5) tk.Grid.columnconfigure(container, 0, weight=1) tk.Grid.rowconfigure(container, 0, weight=1) self.sourceview = SourceView(container) self.sourceview.grid(row=0, column=0, sticky='nesw') tk.Button(container, text='Add source', command=self.add_source).grid(row=1, column=0, sticky='nesw', pady=(2, 0))
def __init__(self, exc_info, parent=None): QWidget.__init__(self, parent) etype, value, tb = exc_info self.tb = tb self.entries = traceback.extract_tb(tb) self.setWindowTitle('Python Error') msg = unicode(value).replace("\n", "<br>").replace(" ", " ") self.error = QLabel("<h1>"+etype.__name__+"</h1><b>"+msg+"</b>") self.error.setTextInteractionFlags(Qt.TextSelectableByMouse) self.frames = FramesView() self.frames.setTraceback(tb) self.frames.selectionModel().currentChanged.connect(self.current_frame_changed) self.source = SourceView() self.splitterSrc = QSplitter(Qt.Horizontal) self.splitterSrc.addWidget(self.frames) self.splitterSrc.addWidget(self.source) self.splitterSrc.setStretchFactor(0, 1) self.splitterSrc.setStretchFactor(1, 2) self.variables = VariablesView() self.console = ConsoleWidget(exc_info) self.splitterMain = QSplitter(Qt.Vertical) self.splitterMain.addWidget(self.splitterSrc) self.splitterMain.addWidget(self.variables) self.splitterMain.addWidget(self.console) l = QVBoxLayout() l.addWidget(self.error) l.addWidget(self.splitterMain) self.setLayout(l) self.resize(800,600) s = QSettings() self.splitterSrc.restoreState(s.value("/FirstAid/splitterSrc", "")) self.splitterMain.restoreState(s.value("/FirstAid/splitterMain", "")) self.restoreGeometry(s.value("/FirstAid/geometry", "")) # select the last frame self.frames.setCurrentIndex(self.frames.model().index(len(self.entries)-1))
def build_editor(self): self.h = gtk.HPaned() self.tree = FileViewer(".") self.tree.connect("file-selected", self.open_file) self.tree.show() self.h.pack1(self.tree) self.editor = SourceView() scroller = gtk.ScrolledWindow() scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroller.add(self.editor) self.h.pack2(scroller) self.h.show_all()
class ViewSource(tk.Toplevel): def __init__(self, parent, source): super().__init__(parent) self.geometry(settings.get('view_window_geometry')) container = tk.Frame(self) container.pack(fill='both', expand=1, padx=5, pady=5) tk.Grid.columnconfigure(container, 0, weight=1) tk.Grid.rowconfigure(container, 0, weight=1) self.sourceview = SourceView(container) self.sourceview.grid(row=0, column=0, sticky='nesw') button_frame = tk.Frame(container) button_frame.grid(row=1, column=0, sticky='nesw') for x in range(0, 4): tk.Grid.columnconfigure(button_frame, x, weight=1, uniform='equal') tk.Button(button_frame, text='Save changes', command=self.save_changes).grid(row=0, column=0, sticky='nesw') tk.Button(button_frame, text='View PDF', command=self.view_pdf).grid(row=0, column=1, sticky='nesw') tk.Button(button_frame, text='Remove entry', command=self.delete).grid(row=0, column=2, sticky='nesw') tk.Button(button_frame, text='Close', command=self.destroy).grid(row=0, column=3, sticky='nesw') self.source = source self.load_values() def load_values(self): self.title(self.source.list_entry()) self.pdf_path = os.path.abspath( os.path.join('pdfs', self.source.pdf_file_name())) self.sourceview.clear() self.sourceview.fill(self.pdf_path, self.source.bibtex(), self.source.summary, self.source.keywords) def save_changes(self): if self.sourceview.update_source(self.source) == -1: return db.session.commit() self.load_values() def view_pdf(self): system = platform.system() if system == 'Linux': subprocess.call(['xdg-open', self.pdf_path], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) elif system == 'Windows': os.startfile(self.pdf_path) elif system == 'Darwin': subprocess.call(['open', self.pdf_path]) def delete(self): confirmed = dialog.confirm_deletion(self, 1) if confirmed == 'no': return db.session.delete(self.source) db.session.commit() self.destroy() def destroy(self): settings.set('view_window_geometry', super().geometry()) settings.save() super().destroy()
class Activity(sugar.activity.activity.Activity): def __init__(self, handle): super(Activity, self).__init__(handle) self.build_toolbar() self.build_editor() self.p = gtk.VPaned() self.set_canvas(self.p) self.p.pack2(self.h) self.console = gtk.Notebook() self.init_interpreter() self.console.append_page(self.interpreter) self.p.pack1(self.console) self.fugit = Fugit(".") self.console.append_page(self.fugit.widget) self.show_all() def alert(self, title=None, text=None, delay=5): alert = NotifyAlert(delay) alert.props.title = title alert.props.msg = text self.add_alert(alert) alert.connect('response', self._alert_ok) alert.show() def _alert_ok(self, alert, *args): self.remove_alert(alert) def init_interpreter(self): frame = self.get_frame() self.interpreter = GTKInterpreterConsole(frame) self.interpreter.text.connect('button-press-event', self.focus_interpreter) return False def focus_interpreter(self, widget, event): self.interpreter.text.grab_focus() return True def get_frame(self): # esto es necesario para que la consola funcione try: raise None except: frame = sys.exc_info()[2].tb_frame return frame def open_file(self, widget, path): if path: if not os.path.isdir(path): self.editor.open_file(widget, path) def save_file(self, widget): if self.editor.modificado(): self.editor.save_file() filename = self.editor.current_file() self.alert(filename, "Archivo guardado.") def build_editor(self): self.h = gtk.HPaned() self.tree = FileViewer(".") self.tree.connect("file-selected", self.open_file) self.tree.show() self.h.pack1(self.tree) self.editor = SourceView() scroller = gtk.ScrolledWindow() scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroller.add(self.editor) self.h.pack2(scroller) self.h.show_all() def build_reader(self): self.reader = webkit.WebView() curdir = os.getcwd() self.reader.load_uri("file://%s/docs/index.html" % curdir) self.box.append_page(self.reader, gtk.Label("Lector")) self.reader.show() def build_toolbar(self): toolbar_box = ToolbarBox() self.set_toolbar_box(toolbar_box) toolbar_box.show() activity_button = ActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, -1) activity_button.show() tool_group = None self.game_button = RadioToolButton() self.game_button.props.icon_name = 'gamecanvas' self.game_button.set_tooltip(_('Juego')) self.game_button.accelerator = "<Ctrl>1" self.game_button.props.group = tool_group #self.game_button.connect('clicked', self.show_game) toolbar_box.toolbar.insert(self.game_button, -1) self.game_button.show() tool_group = self.game_button button = RadioToolButton() button.props.icon_name = 'view-source' button.set_tooltip(_('Editor')) button.accelerator = "<Ctrl>2" button.props.group = tool_group #button.connect('clicked', self.show_editor) toolbar_box.toolbar.insert(button, -1) button.show() self.save_button = ToolButton('dialog-ok') self.save_button.set_tooltip(_('Guardar')) self.save_button.accelerator = "<Ctrl>s" self.save_button.connect('clicked', self.save_file) toolbar_box.toolbar.insert(self.save_button, -1) self.save_button.show() separator = gtk.SeparatorToolItem() toolbar_box.toolbar.insert(separator, -1) separator.show() self.editor_button = ToolButton('sources') self.editor_button.set_tooltip(_('Consola')) self.editor_button.accelerator = "<Ctrl>grave" self.editor_button.connect('clicked', self.toggle_console) toolbar_box.toolbar.insert(self.editor_button, -1) self.editor_button.show() separator = gtk.SeparatorToolItem() toolbar_box.toolbar.insert(separator, -1) separator.show() button = helpbutton.HelpButton(self) toolbar_box.toolbar.insert(button, -1) button.show() # Blank space (separator) and Stop button at the end: separator = gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) toolbar_box.toolbar.insert(stop_button, -1) stop_button.show() def read_file(self, file_path): pass def write_file(self, file_path): pass def can_close(self): if self.editor: self.editor.close() return True def toggle_console(self, e): if self.console.props.visible: self.console.hide() else: self.p.set_position(160) self.console.show() self.console.text.grab_focus()
class DebugWidget(QWidget): def __init__(self, exc_info, parent=None): QWidget.__init__(self, parent) etype, value, tb = exc_info self.tb = tb self.entries = traceback.extract_tb(tb) self.setWindowTitle('Python Error') msg = unicode(value).replace("\n", "<br>").replace(" ", " ") self.error = QLabel("<h1>" + etype.__name__ + "</h1><b>" + msg + "</b>") self.error.setTextInteractionFlags(Qt.TextSelectableByMouse) self.frames = FramesView() self.frames.setTraceback(tb) self.frames.selectionModel().currentChanged.connect( self.current_frame_changed) self.source = SourceView() self.splitterSrc = QSplitter(Qt.Horizontal) self.splitterSrc.addWidget(self.frames) self.splitterSrc.addWidget(self.source) self.splitterSrc.setStretchFactor(0, 1) self.splitterSrc.setStretchFactor(1, 2) self.variables = VariablesView() self.console = ConsoleWidget(exc_info) self.splitterMain = QSplitter(Qt.Vertical) self.splitterMain.addWidget(self.splitterSrc) self.splitterMain.addWidget(self.variables) self.splitterMain.addWidget(self.console) l = QVBoxLayout() l.addWidget(self.error) l.addWidget(self.splitterMain) self.setLayout(l) self.resize(800, 600) s = QSettings() self.splitterSrc.restoreState(s.value("/FirstAid/splitterSrc", "")) self.splitterMain.restoreState(s.value("/FirstAid/splitterMain", "")) self.restoreGeometry(s.value("/FirstAid/geometry", "")) # select the last frame self.frames.setCurrentIndex( self.frames.model().index(len(self.entries) - 1)) def closeEvent(self, event): s = QSettings() s.setValue("/FirstAid/splitterSrc", self.splitterSrc.saveState()) s.setValue("/FirstAid/splitterMain", self.splitterMain.saveState()) s.setValue("/FirstAid/geometry", self.saveGeometry()) QWidget.closeEvent(self, event) def current_frame_changed(self, current, previous): row = current.row() if row >= 0 and row < len(self.entries): self.go_to_frame(row) def go_to_frame(self, index): filename = self.entries[index][0] lineno = self.entries[index][1] self.source.openFile(filename) self.source.jumpToLine(lineno) local_vars = frame_from_traceback(self.tb, index).f_locals self.variables.setVariables(local_vars) self.console.go_to_frame(index)
class DebugWidget(QWidget): def __init__(self, exc_info, parent=None): QWidget.__init__(self, parent) etype, value, tb = exc_info self.tb = tb self.entries = traceback.extract_tb(tb) self.setWindowTitle('Python Error') msg = unicode(value).replace("\n", "<br>").replace(" ", " ") self.error = QLabel("<h1>"+etype.__name__+"</h1><b>"+msg+"</b>") self.error.setTextInteractionFlags(Qt.TextSelectableByMouse) self.frames = FramesView() self.frames.setTraceback(tb) self.frames.selectionModel().currentChanged.connect(self.current_frame_changed) self.source = SourceView() self.splitterSrc = QSplitter(Qt.Horizontal) self.splitterSrc.addWidget(self.frames) self.splitterSrc.addWidget(self.source) self.splitterSrc.setStretchFactor(0, 1) self.splitterSrc.setStretchFactor(1, 2) self.variables = VariablesView() self.console = ConsoleWidget(exc_info) self.splitterMain = QSplitter(Qt.Vertical) self.splitterMain.addWidget(self.splitterSrc) self.splitterMain.addWidget(self.variables) self.splitterMain.addWidget(self.console) l = QVBoxLayout() l.addWidget(self.error) l.addWidget(self.splitterMain) self.setLayout(l) self.resize(800,600) s = QSettings() self.splitterSrc.restoreState(s.value("/FirstAid/splitterSrc", "")) self.splitterMain.restoreState(s.value("/FirstAid/splitterMain", "")) self.restoreGeometry(s.value("/FirstAid/geometry", "")) # select the last frame self.frames.setCurrentIndex(self.frames.model().index(len(self.entries)-1)) def closeEvent(self, event): s = QSettings() s.setValue("/FirstAid/splitterSrc", self.splitterSrc.saveState()) s.setValue("/FirstAid/splitterMain", self.splitterMain.saveState()) s.setValue("/FirstAid/geometry", self.saveGeometry()) QWidget.closeEvent(self, event) def current_frame_changed(self, current, previous): row = current.row() if row >= 0 and row < len(self.entries): self.go_to_frame(row) def go_to_frame(self, index): filename = self.entries[index][0] lineno = self.entries[index][1] self.source.openFile(filename) self.source.jumpToLine(lineno) local_vars = frame_from_traceback(self.tb, index).f_locals self.variables.setVariables(local_vars) self.console.go_to_frame(index)