class Window(Gtk.ApplicationWindow): def __init__(self, app): Gtk.Window.__init__(self, title='ImEditor', application=app) self.set_default_size(700, 500) self.set_position(Gtk.WindowPosition.CENTER) grid = Gtk.Grid() self.add(grid) self.editor = Editor() self.editor.set_win(self) # Menubar: create_menubar(self, app.menu_info) # Toolbar: toolbar = create_toolbar(self) grid.attach(toolbar, 0, 0, 1, 1) # Tabs: self.notebook = Gtk.Notebook() grid.attach(self.notebook, 0, 1, 1, 1) self.root = self.get_root_window() self.default_cursor = Gdk.Cursor(Gdk.CursorType.ARROW) self.draw_cursor = Gdk.Cursor(Gdk.CursorType.PENCIL) self.move_cursor = Gdk.Cursor(Gdk.CursorType.FLEUR) def quit(self, action, parameter): self.root.set_cursor(self.default_cursor) sys.exit() def new_image(self, action, parameter): new_image_dialog = dialog.new_image_dialog(self) values = new_image_dialog.get_values() if values is not None: img = Image.new('RGB', values[0], values[1]) self.editor.add_image(img, 'sans-titre.png', 0, False, True) self.create_tab(img) def open_image(self, action, parameter): filename = dialog.file_dialog(self) if filename is not None: img = Image.open(filename) self.editor.add_image(img, filename, 0, True) self.create_tab(img, path.basename(filename)) def create_tab(self, img, title='Sans titre'): tab = Tab(self, img, title) page_num = self.notebook.get_current_page() + 1 self.notebook.insert_page(tab, tab.get_tab_label(), page_num) self.notebook.show_all() self.notebook.set_current_page(page_num) def on_close_tab_clicked(self, button, box): page_num = self.notebook.page_num(box) self.close_tab(page_num) def close_tab(self, page_num): if not self.editor.images[page_num].get_saved(): dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, 'Enregistrer les modifications du document ' + self.editor.images[page_num].get_filename() + ' avant la fermeture ?') dialog.format_secondary_text( 'Vos modifications seront perdues si vous ne les enregistrez pas.') response = dialog.run() if response == Gtk.ResponseType.YES: self.editor.file_save_as(None, None) self.notebook.remove_page(page_num) self.editor.close_image(page_num) elif response == Gtk.ResponseType.NO: self.notebook.remove_page(page_num) self.editor.close_image(page_num) dialog.destroy() else: self.notebook.remove_page(page_num) self.editor.close_image(page_num) def update_image(self, new_img): page_num = self.notebook.get_current_page() tab = self.notebook.get_nth_page(page_num) tab.update_image(new_img) tab.tab_label.set_icon(new_img) self.notebook.show_all() def set_fullscreen(self, action, parameter): if not self.get_window().get_state() & Gdk.WindowState.FULLSCREEN != 0: self.fullscreen_button.set_icon_name('view-restore') self.fullscreen() else: self.fullscreen_button.set_icon_name('view-fullscreen') self.unfullscreen() def about(self, action, parameter): dialog = Gtk.AboutDialog(transient_for=self) dialog.set_logo(GdkPixbuf.Pixbuf.new_from_file('assets/icons/imeditor.png')) dialog.set_program_name('ImEditor') dialog.set_version('0.1') dialog.set_website('https://github.com/ImEditor') dialog.set_authors(['Nathan Seva', 'Hugo Posnic']) dialog.set_comments('GTK Linux Image Editor ') dialog.set_license('Distributed under the GNU GPL(v3) license. \n\n https://github.com/ImEditor/ImEditor/blob/master/LICENSE') dialog.run() dialog.destroy()
class Window(Gtk.ApplicationWindow): def __init__(self, app): Gtk.Window.__init__(self, title='ImEditor', application=app) self.set_default_size(700, 500) self.set_position(Gtk.WindowPosition.CENTER) grid = Gtk.Grid() self.add(grid) self.editor = Editor() self.editor.set_win(self) # Menubar: create_menubar(self, app.menu_info) # Toolbar: toolbar = create_toolbar(self) grid.attach(toolbar, 0, 0, 1, 1) # Tabs: self.notebook = Gtk.Notebook() grid.attach(self.notebook, 0, 1, 1, 1) self.root = self.get_root_window() self.default_cursor = Gdk.Cursor(Gdk.CursorType.ARROW) self.draw_cursor = Gdk.Cursor(Gdk.CursorType.PENCIL) self.move_cursor = Gdk.Cursor(Gdk.CursorType.FLEUR) def quit(self, action, parameter): self.root.set_cursor(self.default_cursor) sys.exit() def new_image(self, action, parameter): new_image_dialog = dialog.new_image_dialog(self) values = new_image_dialog.get_values() if values is not None: img = Image.new('RGB', values[0], values[1]) self.editor.add_image(img, 'sans-titre.png', 0, False, True) self.create_tab(img) def open_image(self, action, parameter): filename = dialog.file_dialog(self) if filename is not None: img = Image.open(filename) self.editor.add_image(img, filename, 0, True) self.create_tab(img, path.basename(filename)) def create_tab(self, img, title='Sans titre'): tab = Tab(self, img, title) page_num = self.notebook.get_current_page() + 1 self.notebook.insert_page(tab, tab.get_tab_label(), page_num) self.notebook.show_all() self.notebook.set_current_page(page_num) def on_close_tab_clicked(self, button, box): page_num = self.notebook.page_num(box) self.close_tab(page_num) def close_tab(self, page_num): if not self.editor.images[page_num].get_saved(): dialog = Gtk.MessageDialog( self, 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, 'Enregistrer les modifications du document ' + self.editor.images[page_num].get_filename() + ' avant la fermeture ?') dialog.format_secondary_text( 'Vos modifications seront perdues si vous ne les enregistrez pas.' ) response = dialog.run() if response == Gtk.ResponseType.YES: self.editor.file_save_as(None, None) self.notebook.remove_page(page_num) self.editor.close_image(page_num) elif response == Gtk.ResponseType.NO: self.notebook.remove_page(page_num) self.editor.close_image(page_num) dialog.destroy() else: self.notebook.remove_page(page_num) self.editor.close_image(page_num) def update_image(self, new_img): page_num = self.notebook.get_current_page() tab = self.notebook.get_nth_page(page_num) tab.update_image(new_img) tab.tab_label.set_icon(new_img) self.notebook.show_all() def set_fullscreen(self, action, parameter): if not self.get_window().get_state() & Gdk.WindowState.FULLSCREEN != 0: self.fullscreen_button.set_icon_name('view-restore') self.fullscreen() else: self.fullscreen_button.set_icon_name('view-fullscreen') self.unfullscreen() def about(self, action, parameter): dialog = Gtk.AboutDialog(transient_for=self) dialog.set_logo( GdkPixbuf.Pixbuf.new_from_file('assets/icons/imeditor.png')) dialog.set_program_name('ImEditor') dialog.set_version('0.1') dialog.set_website('https://github.com/ImEditor') dialog.set_authors(['Nathan Seva', 'Hugo Posnic']) dialog.set_comments('GTK Linux Image Editor ') dialog.set_license( 'Distributed under the GNU GPL(v3) license. \n\n https://github.com/ImEditor/ImEditor/blob/master/LICENSE' ) dialog.run() dialog.destroy()