def __init__(self, document_manager): """ Constructor. @param document_manager: The Document Manager. @type document_manager: A DocumentManger object """ super(SearchBar, self).__init__() self.hide() self.search_functions = document_manager.search_functions label = gtk.Label(constants.MESSAGE_0009) self.entry = gtk.Entry() self.search_functions.entry = self.entry next_image = gtk.Image() next_image.set_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU) previous_image = gtk.Image() previous_image.set_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU) #create the bar widgets... self.close_button = CloseButton() close_button_vbox = gtk.VBox() close_button_vbox.pack_start(self.close_button, True, False, 0) self.next_button = gtk.Button() self.next_button.set_image(next_image) self.next_button.set_relief(gtk.RELIEF_NONE) self.next_button.set_focus_on_click(False) self.previous_button = gtk.Button() self.previous_button.set_image(previous_image) self.previous_button.set_relief(gtk.RELIEF_NONE) self.previous_button.set_focus_on_click(False) self.check_regexp = gtk.CheckButton("Regexp") self.check_regexp.set_focus_on_click(False) self.set_spacing(6) self.pack_start(close_button_vbox, False, False, 0) self.pack_start(label, False, False, 0) self.pack_start(self.entry, False, False, 0) self.pack_start(self.previous_button, False, False, 0) self.pack_start(self.next_button, False, False, 0) self.pack_start(self.check_regexp, False, False, 0) self.__set_all_tooltips() self.__set_all_signals()
def __init__(self, document_manager): """ Constructor. @param document_manager: The Document Manager. @type document_manager: A DocumentManger object """ super(SearchReplaceBar, self).__init__() self.hide() self.search_functions = document_manager.search_functions label = gtk.Label(constants.MESSAGE_0009) label.set_alignment(0, 0.5) label_replace = gtk.Label(constants.MESSAGE_0010) label_replace.set_alignment(0, 0.5) #label_vbox = gtk.VBox() #label_vbox.pack_start(label, True, False, 0) #label_vbox.pack_start(label_replace, True, False, 0) self.entry = gtk.Entry() self.entry_replace = gtk.Entry() #entry_vbox = gtk.VBox() #entry_vbox.pack_start(self.entry, False, False, 0) #entry_vbox.pack_start(self.entry_replace, False, False, 0) next_image = gtk.Image() next_image.set_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU) previous_image = gtk.Image() previous_image.set_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU) replace_image = gtk.Image() replace_image.set_from_stock(gtk.STOCK_FIND_AND_REPLACE, gtk.ICON_SIZE_MENU) replace_all_image = gtk.Image() replace_all_image.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_MENU) self.close_button = CloseButton() close_button_vbox = gtk.VBox() #close_button_vbox.pack_start(self.close_button, True, False, 0) self.next_button = gtk.Button() self.next_button.set_image(next_image) self.next_button.set_relief(gtk.RELIEF_NONE) self.next_button.set_focus_on_click(False) self.previous_button = gtk.Button() self.previous_button.set_image(previous_image) self.previous_button.set_relief(gtk.RELIEF_NONE) self.previous_button.set_focus_on_click(False) self.replace_button = gtk.Button() self.replace_button.set_image(replace_image) self.replace_button.set_relief(gtk.RELIEF_NONE) self.replace_button.set_focus_on_click(False) self.replace_all_button = gtk.Button() self.replace_all_button.set_image(replace_all_image) self.replace_all_button.set_relief(gtk.RELIEF_NONE) self.replace_all_button.set_focus_on_click(False) #search_vbox1 = gtk.VBox() #search_vbox1.pack_start(self.previous_button, False, False, 0) #search_vbox1.pack_start(self.replace_button, False, False, 0) #search_vbox2 = gtk.VBox() #search_vbox2.pack_start(self.next_button, False, False, 0) #search_vbox2.pack_start(self.replace_all_button, False, False, 0) self.check_regexp = gtk.CheckButton("Regexp") self.check_regexp.set_focus_on_click(False) self.set_spacing(6) #self.pack_start(close_button_vbox, False, False, 0) #self.pack_start(label_vbox, False, False, 0) #self.pack_start(entry_vbox, False, False, 0) #self.pack_start(search_vbox1, False, False, 0) #self.pack_start(search_vbox2, False, False, 0) #self.pack_start(self.check_regexp, False, False, 0) self.pack_start(self.close_button, False, False, 0) self.pack_start(label, False, False, 0) self.pack_start(self.entry, False, False, 0) self.pack_start(label_replace, False, False, 0) self.pack_start(self.entry_replace, False, False, 0) self.pack_start(self.previous_button, False, False, 0) self.pack_start(self.next_button, False, False, 0) self.pack_start(self.replace_button, False, False, 0) self.pack_start(self.replace_all_button, False, False, 0) self.pack_start(self.check_regexp, False, False, 0) self.__set_all_tooltips() self.__set_all_signals()
class SearchReplaceBar(gtk.HBox): def __init__(self, document_manager): """ Constructor. @param document_manager: The Document Manager. @type document_manager: A DocumentManger object """ super(SearchReplaceBar, self).__init__() self.hide() self.search_functions = document_manager.search_functions label = gtk.Label(constants.MESSAGE_0009) label.set_alignment(0, 0.5) label_replace = gtk.Label(constants.MESSAGE_0010) label_replace.set_alignment(0, 0.5) #label_vbox = gtk.VBox() #label_vbox.pack_start(label, True, False, 0) #label_vbox.pack_start(label_replace, True, False, 0) self.entry = gtk.Entry() self.entry_replace = gtk.Entry() #entry_vbox = gtk.VBox() #entry_vbox.pack_start(self.entry, False, False, 0) #entry_vbox.pack_start(self.entry_replace, False, False, 0) next_image = gtk.Image() next_image.set_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU) previous_image = gtk.Image() previous_image.set_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU) replace_image = gtk.Image() replace_image.set_from_stock(gtk.STOCK_FIND_AND_REPLACE, gtk.ICON_SIZE_MENU) replace_all_image = gtk.Image() replace_all_image.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_MENU) self.close_button = CloseButton() close_button_vbox = gtk.VBox() #close_button_vbox.pack_start(self.close_button, True, False, 0) self.next_button = gtk.Button() self.next_button.set_image(next_image) self.next_button.set_relief(gtk.RELIEF_NONE) self.next_button.set_focus_on_click(False) self.previous_button = gtk.Button() self.previous_button.set_image(previous_image) self.previous_button.set_relief(gtk.RELIEF_NONE) self.previous_button.set_focus_on_click(False) self.replace_button = gtk.Button() self.replace_button.set_image(replace_image) self.replace_button.set_relief(gtk.RELIEF_NONE) self.replace_button.set_focus_on_click(False) self.replace_all_button = gtk.Button() self.replace_all_button.set_image(replace_all_image) self.replace_all_button.set_relief(gtk.RELIEF_NONE) self.replace_all_button.set_focus_on_click(False) #search_vbox1 = gtk.VBox() #search_vbox1.pack_start(self.previous_button, False, False, 0) #search_vbox1.pack_start(self.replace_button, False, False, 0) #search_vbox2 = gtk.VBox() #search_vbox2.pack_start(self.next_button, False, False, 0) #search_vbox2.pack_start(self.replace_all_button, False, False, 0) self.check_regexp = gtk.CheckButton("Regexp") self.check_regexp.set_focus_on_click(False) self.set_spacing(6) #self.pack_start(close_button_vbox, False, False, 0) #self.pack_start(label_vbox, False, False, 0) #self.pack_start(entry_vbox, False, False, 0) #self.pack_start(search_vbox1, False, False, 0) #self.pack_start(search_vbox2, False, False, 0) #self.pack_start(self.check_regexp, False, False, 0) self.pack_start(self.close_button, False, False, 0) self.pack_start(label, False, False, 0) self.pack_start(self.entry, False, False, 0) self.pack_start(label_replace, False, False, 0) self.pack_start(self.entry_replace, False, False, 0) self.pack_start(self.previous_button, False, False, 0) self.pack_start(self.next_button, False, False, 0) self.pack_start(self.replace_button, False, False, 0) self.pack_start(self.replace_all_button, False, False, 0) self.pack_start(self.check_regexp, False, False, 0) self.__set_all_tooltips() self.__set_all_signals() #################### Public Methods #################### def entry_change(self, widget): text = self.entry.get_text() gobject.timeout_add(100, self.incremental, text) def on_entry_key_press(self, entry, event): if event.keyval == gtk.gdk.keyval_from_name('Escape'): self.entry.set_text("") self.hide() self.search_functions.view_focus() return True return False def incremental(self, text): current_text = self.entry.get_text() if (text == current_text): self.search_functions.incremental() def next_search(self, widget): self.search_functions.next() def previous_search(self, widget): self.search_functions.previous() def replace(self, widget): self.search_functions.replace() def replace_all(self, widget): self.search_functions.replace_all() self.search_functions.view_focus() self.hide() def close_searchbar(self, widget): self.hide() def view_focus(self, widget): self.search_functions.view_focus() self.hide() def show_bar(self): self.show_all() self.search_functions.entry = self.entry self.search_functions.entry_replace = self.entry_replace self.entry.grab_focus() def regexp_toggled(self, widget): self.search_functions.regexp = widget.get_active() self.search_functions.incremental() #################### Private Methods #################### def __set_all_signals(self): """ Set all signals. """ self.close_button.connect("clicked", self.close_searchbar) self.next_button.connect("clicked", self.next_search) self.previous_button.connect("clicked", self.previous_search) self.replace_button.connect("clicked", self.replace) self.replace_all_button.connect("clicked", self.replace_all) self.entry.connect("changed", self.entry_change) self.entry.connect("activate", self.view_focus) self.entry.connect('key-press-event', self.on_entry_key_press) self.entry_replace.connect("activate", self.replace) self.entry_replace.connect('key-press-event', self.on_entry_key_press) self.check_regexp.connect("toggled", self.regexp_toggled) def __set_all_tooltips(self): """ Set all tooltips. """ self.next_button.set_tooltip_text("Find next") self.previous_button.set_tooltip_text("Find previous") self.replace_button.set_tooltip_text("Replace") self.replace_all_button.set_tooltip_text("Replace all")
def open_tab(self, file_uri="", encode=""): """ Open a new tab. @param file_uri: The file uri of a text file that will be displayed in the open tab. If it's omited a blank tab will be open. @type file_uri: A String. @param encode: The enconding used to display the text. If it's omited a default enconde will be used. @param encode: A String. """ if file_uri != "": # Verifying if the file is already open tab_number = self.get_n_pages() for number in range(tab_number): if self.get_nth_page(number).file_uri == file_uri: self.set_current_page(number) return # defining tab label text label_text = os.path.basename(file_uri) else: label_text = constants.MESSAGE_0001 #creating label widget tab_box = gtk.HBox(False, 4) tab_label = gtk.Label(label_text) tab_button = CloseButton() tab_box.pack_start(tab_label, True, True, 0) tab_box.pack_start(tab_button, False, False, 0) tab_box.show_all() try: document = self.__create_document(file_uri, encode) except UnicodeDecodeError: encoding = self.__show_encoding_dialog() if encoding is not None: self.open_tab(file_uri, encoding) except IOError: self.__show_error_dialog(constants.MESSAGE_0033 % file_uri, constants.MESSAGE_0034) else: child = self.get_nth_page(0) if self.get_n_pages() == 1: if child.get_file_uri() == "" and child.get_text() == "": if document.get_file_uri() != "": self.__remove_tab(child) if file_uri != "": if self.preferences_manager.get_value("open_save/auto_save"): self.add_to_autosave(document) self.append_page(document, tab_box) self.set_tab_reorderable(document, True) self.set_current_page(-1) #negative number == last tab tab_button.connect('clicked', self.close_tab_button, document) document.view.buffer.connect('changed', self.buffer_change, document, tab_label) self.emit("open-file", document) document.view.grab_focus()
class MainWindow(object): """ This class creates the main window of TextFlow. """ def __init__(self, argv=None, tests=False): """ Constructor. """ self.gladefile = constants.MAIN_WINDOW_GLADE self.widgets_tree = gtk.glade.XML(self.gladefile) self.clipboard = gtk.Clipboard() # self.tooltip = gtk.Tooltips() self.__set_all_widgets() self.__set_all_signals() self.__set_all_accelerators() self.preferences = Preferences(self) self.preferences_manager = tf.app.preferences_manager #################### Public Methods #################### def run(self, argv, tests): """ Run main window. """ arg_path = argv is not None and os.path.isdir(argv[0]) if arg_path: self.last_dir = argv[0] self.preferences_manager.set_value("filebrowser_dir", self.last_dir) else: self.last_dir = constants.HOME self.sidepanel_manager = SidePanelManager(self.side_panel_vbox, self.combobutton) # Set window size w = self.preferences_manager.get_value("interface/width") h = self.preferences_manager.get_value("interface/height") self.main_window.resize(w, h) if self.preferences_manager.get_value("open_save/reopen_tabs") and not arg_path: self.document_manager.open_stored_tabs() if not tests: self.main_window.show() self.side_panel_vbox.show_all() self.main_vbox.show() self.statusbar.show_all() self.document_manager.show() #self.search_bar.hide() self.search_replace_bar.hide() self.goto_bar.hide() self.__apply_preferences() # Open or not a file with TextFlow if argv == None: if self.document_manager.get_n_pages() == 0: self.document_manager.open_tab() elif arg_path: self.document_manager.open_tab() self.show_sidepanel(True) else: for i in argv: self.document_manager.open_tab(i) self.document_manager.get_active_view().grab_focus() def show_toolbar(self, state): """ Define if the toolbar will be showed or not. @param state: True to show the toolbar or False to hide the toolbar. @type state: A boolean. """ if state: self.toolbar.show_all() else: self.toolbar.hide() self.preferences_manager.set_value("interface/show_toolbar", state) def show_sidepanel(self, state): """ Define if the sidepanel will be showed or not. @param state: True to show the toolbar or False to hide the sidepanel. @type state: A boolean. """ if state: self.side_panel_vbox.show_all() else: self.side_panel_vbox.hide() self.preferences_manager.set_value("interface/show_sidepanel", state) def quit(self): can_quit = self.__verify_unsaved_tabs() if can_quit: w, h = self.main_window.get_size() self.preferences_manager.set_value("interface/width", w) self.preferences_manager.set_value("interface/height", h) self.sidepanel_manager.unload() if self.preferences_manager.get_value("open_save/reopen_tabs"): self.document_manager.store_tabs() gtk.main_quit() else: return True #################### Private Methods #################### def __set_all_widgets(self): """ Initialize all widgets used by MainWindow. """ wt = self.widgets_tree self.main_window = wt.get_widget("main_window") self.main_window.set_icon_from_file(constants.SCALABLE_ICON) self.hpaned = wt.get_widget("hpaned") self.toolbar = wt.get_widget("toolbar") self.interface_vbox = wt.get_widget("main_vbox") self.toolbutton_new = wt.get_widget("toolbutton_new") self.toolbutton_open = wt.get_widget("toolbutton_open") self.toolbutton_save = wt.get_widget("toolbutton_save") self.toolbutton_undo = wt.get_widget("toolbutton_undo") self.toolbutton_redo = wt.get_widget("toolbutton_redo") self.toolbutton_search = wt.get_widget("toolbutton_search") #self.toolbutton_replace = wt.get_widget("toolbutton_replace") self.toolbutton_preferences = wt.get_widget("toolbutton_preferences") # self.tooltip.set_tip(self.toolbutton_new, _("New")) # self.tooltip.set_tip(self.toolbutton_open, _("Open")) # self.tooltip.set_tip(self.toolbutton_save, _("Save")) # self.tooltip.set_tip(self.toolbutton_undo, _("Undo")) # self.tooltip.set_tip(self.toolbutton_redo, _("Redo")) # self.tooltip.set_tip(self.toolbutton_search, _("Search")) # self.tooltip.set_tip(self.toolbutton_replace, _("Replace")) # self.tooltip.set_tip(self.toolbutton_preferences, _("Preferences")) self.toolbutton_new.set_tooltip_text(_("New")) self.toolbutton_open.set_tooltip_text(_("Open")) self.toolbutton_save.set_tooltip_text(_("Save")) self.toolbutton_undo.set_tooltip_text(_("Undo")) self.toolbutton_redo.set_tooltip_text(_("Redo")) self.toolbutton_search.set_tooltip_text(_("Search")) #self.toolbutton_replace.set_tooltip_text(_("Replace")) self.toolbutton_preferences.set_tooltip_text(_("Preferences")) self.toolbutton_undo.set_sensitive(False) self.toolbutton_redo.set_sensitive(False) for i in range(self.toolbar.get_n_items() - 1): item = self.toolbar.get_nth_item(i) item.set_homogeneous(False) self.menu_file = wt.get_widget("menu_file") #for item in recent_chooser.get_children(): # self.menu_file.append(item) self.imagemenuitem_closetab = wt.get_widget("imagemenuitem_closetab") self.menuitem_duplicateline = wt.get_widget("menuitem_duplicateline") self.menuitem_deleteline = wt.get_widget("menuitem_deleteline") self.imagemenuitem_save_as = wt.get_widget("imagemenuitem_save_as") self.menuitem_save_all = wt.get_widget("menuitem_save_all") self.imagemenuitem_undo = wt.get_widget("imagemenuitem_undo") self.imagemenuitem_redo = wt.get_widget("imagemenuitem_redo") # Workaround to put pseudo Ctrl+D accelerator deleteline_child = self.menuitem_deleteline.get_child() self.menuitem_deleteline.remove(deleteline_child) hbox_deleteline = gtk.HBox() hbox_deleteline.pack_start(gtk.Label("Delete Line"), False) label_ctrld = gtk.Label("Ctrl+D") label_ctrld.set_alignment(1, 0.5) hbox_deleteline.pack_start(label_ctrld) # End of workaround self.menuitem_deleteline.add(hbox_deleteline) self.menuitem_deleteline.show_all() self.menuitem_uppercase = wt.get_widget("menuitem_uppercase") self.menuitem_lowercase = wt.get_widget("menuitem_lowercase") self.menuitem_tabs_to_spaces = wt.get_widget("menuitem_tabs_to_spaces") self.menuitem_spaces_to_tabs = wt.get_widget("menuitem_spaces_to_tabs") self.checkmenuitem_sidepanel = wt.get_widget("checkmenuitem_sidepanel") self.checkmenuitem_toolbar = wt.get_widget("checkmenuitem_toolbar") self.checkmenuitem_line_numbers = wt.get_widget("checkmenuitem_line_numbers") self.imagemenuitem_search_bar = wt.get_widget("imagemenuitem_search_bar") #self.imagemenuitem_replace_bar = wt.get_widget("imagemenuitem_replace_bar") self.menuitem_search_next = wt.get_widget("menuitem_search_next") self.menuitem_search_previous = wt.get_widget("menuitem_search_previous") self.menuitem_replace = wt.get_widget("menuitem_replace") self.menuitem_replace_all = wt.get_widget("menuitem_replace_all") self.menuitem_goto_bar = wt.get_widget("menuitem_goto_bar") self.menuitem_language = wt.get_widget("menuitem_language") self.document_manager = tf.app.document_manager self.statusbar = StatusBar(self.document_manager) self.combobutton = ComboButton("", True) self.combobutton.set_text_center(False) self.side_panel_vbox = gtk.VBox() combobutton_hbox = gtk.HBox(False, 4) self.main_vbox = gtk.VBox() self.main_vbox.pack_end(self.statusbar, False, False, 0) self.hpaned.add1(self.side_panel_vbox) self.hpaned.add2(self.main_vbox) self.main_vbox.pack_start(self.document_manager) combobutton_hbox.pack_start(self.combobutton, True, True, 0) self.side_panel_vbox.pack_start(combobutton_hbox, False, False, 0) self.close_sidepanel_button = CloseButton() close_button_vbox = gtk.VBox() close_button_vbox.pack_start(self.close_sidepanel_button, True, False, 0) combobutton_hbox.pack_start(close_button_vbox, False, False, 0) combobutton_hbox.set_child_packing(close_button_vbox, False, False, 0, gtk.PACK_END) #self.search_bar = SearchBar(self.document_manager) #self.main_vbox.pack_start(self.search_bar, False, False, 0) self.search_replace_bar = SearchReplaceBar(self.document_manager) self.main_vbox.pack_start(self.search_replace_bar, False, False, 0) self.goto_bar = GotoBar(self.document_manager) self.main_vbox.pack_start(self.goto_bar, False, False, 0) def __set_all_signals(self): """ Set all signals used by MainWindow. """ dic = {"on_toolbutton_new_clicked" : self.on_toolbutton_new_clicked, "on_toolbutton_open_clicked" : self.on_toolbutton_open_clicked, "on_toolbutton_save_clicked" : self.on_toolbutton_save_clicked, "on_toolbutton_undo_clicked" : self.on_toolbutton_undo_clicked, "on_toolbutton_redo_clicked" : self.on_toolbutton_redo_clicked, "on_toolbutton_search_clicked" : self.on_toolbutton_search_clicked, #"on_toolbutton_replace_clicked" : #self.on_toolbutton_replace_clicked, "on_toolbutton_preferences_clicked" : self.on_toolbutton_preferences_clicked, "on_imagemenuitem_new_activate" : self.on_imagemenuitem_new_activate, "on_imagemenuitem_open_activate" : self.on_imagemenuitem_open_activate, "on_imagemenuitem_closetab_activate" : self.on_imagemenuitem_closetab_activate, "on_imagemenuitem_save_activate" : self.on_imagemenuitem_save_activate, "on_imagemenuitem_save_as_activate" : self.on_imagemenuitem_save_as_activate, "on_menuitem_save_all_activate" : self.on_menuitem_save_all_activate, "on_imagemenuitem_quit_activate" : self.on_imagemenuitem_quit_activate, "on_imagemenuitem_undo_activate" : self.on_imagemenuitem_undo_activate, "on_imagemenuitem_redo_activate" : self.on_imagemenuitem_redo_activate, "on_imagemenuitem_cut_activate" : self.on_imagemenuitem_cut_activate, "on_imagemenuitem_copy_activate" : self.on_imagemenuitem_copy_activate, "on_imagemenuitem_paste_activate" : self.on_imagemenuitem_paste_activate, "on_menuitem_duplicateline_activate" : self.on_menuitem_duplicateline_activate, "on_menuitem_deleteline_activate" : self.on_menuitem_deleteline_activate, "on_menuitem_uppercase_activate" : self.on_menuitem_uppercase_activate, "on_menuitem_lowercase_activate" : self.on_menuitem_lowercase_activate, "on_menuitem_tabs_to_spaces_activate" : self.on_menuitem_tabs_to_spaces_activate, "on_menuitem_spaces_to_tabs_activate" : self.on_menuitem_spaces_to_tabs_activate, "on_imagemenuitem_preferences_activate" : self.on_imagemenuitem_preferences_activate, "on_imagemenuitem_about_activate" : self.on_imagemenuitem_about_activate, "on_imagemenuitem_help_activate" : self.on_imagemenuitem_help_activate, "on_checkmenuitem_sidepanel_toggled" : self.on_checkmenuitem_sidepanel_toggled, "on_checkmenuitem_toolbar_toggled" : self.on_checkmenuitem_toolbar_toggled, "on_checkmenuitem_line_numbers_toggled" : self.on_checkmenuitem_line_numbers_toggled, "on_imagemenuitem_search_bar_activate" : self.on_imagemenuitem_search_bar_activate, "on_menuitem_goto_bar_activate" : self.on_menuitem_goto_bar_activate, #"on_imagemenuitem_replace_bar_activate" : #self.on_imagemenuitem_replace_bar_activate, "on_menuitem_search_next_activate" : self.on_menuitem_search_next_activate, "on_menuitem_search_previous_activate" : self.on_menuitem_search_previous_activate, "on_menuitem_replace_activate" : self.on_menuitem_replace_activate, "on_menuitem_replace_all_activate" : self.on_menuitem_replace_all_activate, "on_main_window_delete_event" : self.delete_event } self.widgets_tree.signal_autoconnect(dic) self.close_sidepanel_button.connect("clicked", self.close_sidepanel) def __set_all_accelerators(self): """ Set all Main Window accelerators """ accel_group = gtk.AccelGroup() self.main_window.add_accel_group(accel_group) # Ctrl+J self.menuitem_duplicateline.add_accelerator("activate", accel_group, 106, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+D #self.menuitem_deleteline.add_accelerator("activate", accel_group, 100, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+2 self.menuitem_tabs_to_spaces.add_accelerator("activate", accel_group, 50, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Shift+2 self.menuitem_spaces_to_tabs.add_accelerator("activate", accel_group, 50, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE) # Ctrl+U self.menuitem_uppercase.add_accelerator("activate", accel_group, 117, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Shift+U self.menuitem_lowercase.add_accelerator("activate", accel_group, 117, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE) # F9 to show/hide side panel self.checkmenuitem_sidepanel.add_accelerator("activate", accel_group, 65478, 0, gtk.ACCEL_VISIBLE) # Ctrl+F to show/hide search bar self.imagemenuitem_search_bar.add_accelerator("activate", accel_group, 102, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+H to show/hide goto bar self.menuitem_goto_bar.add_accelerator("activate", accel_group, 104, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+G to search next self.menuitem_search_next.add_accelerator("activate", accel_group, 103, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Shift+Ctrl+G to search previous self.menuitem_search_previous.add_accelerator("activate", accel_group, 103, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE) # Ctrl+R to show/hide replace bar #self.imagemenuitem_replace_bar.add_accelerator("activate", accel_group, # 114, gtk.gdk.CONTROL_MASK, # gtk.ACCEL_VISIBLE) # Ctrl+T to replace self.menuitem_replace.add_accelerator("activate", accel_group, 116, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Alt+T to replace all self.menuitem_replace_all.add_accelerator("activate", accel_group, 116, gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE) # Ctrl+W to close tab self.imagemenuitem_closetab.add_accelerator("activate", accel_group, 119, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Shift+S to save as self.imagemenuitem_save_as.add_accelerator("activate", accel_group, 115, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Alt+S to save all self.menuitem_save_all.add_accelerator("activate", accel_group, 115, gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Z to undo self.imagemenuitem_undo.add_accelerator("activate", accel_group, 122, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) # Ctrl+Shift+Z to redo self.imagemenuitem_redo.add_accelerator("activate", accel_group, 122, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE) def __apply_preferences(self): """ Apply the preferences defined. """ value = self.preferences_manager.get_value("interface/show_toolbar") self.show_toolbar(value) value = self.preferences_manager.get_value("interface/show_sidepanel") self.checkmenuitem_sidepanel.set_active(value) value = self.preferences_manager.get_value("interface/show_toolbar") self.checkmenuitem_toolbar.set_active(value) value = self.preferences_manager.get_value("line_numbers") self.checkmenuitem_line_numbers.set_active(value) def __verify_unsaved_tabs(self): """ This method verifies every tab to know if they are saved. """ num_pages = self.document_manager.get_n_pages() # flag = 0 files = [] for i in range(num_pages): document = self.document_manager.get_nth_page(i) if not document.is_updated(): file_uri = document.get_file_uri() if file_uri == "": file_uri = constants.MESSAGE_0001 files.append(file_uri) if len(files) > 0: dialog = CloseProgramAlertDialog(files) dialog_return = dialog.run() if dialog_return == gtk.RESPONSE_DELETE_EVENT: dialog.destroy() return False elif dialog_return == 1: dialog.destroy() return True elif dialog_return == 2: dialog.destroy() return False elif dialog_return == 3: dialog.destroy() checks = dialog.get_checkboxes() for i in range(len(checks)): if checks[i]: if files[i] != constants.MESSAGE_0001: self.document_manager.save_file_tab(files[i]) else: file_save = SaveFileDialog(constants.MESSAGE_0002, None, "", "*", False) new_file = file_save.run() file_save.destroy() if len(new_file): self.document_manager.save_file_tab(new_file[0]) else: return False # self.save_all() return True return True def __save_all_possible_tabs(self): """ Save all possible tabs. Save tabs without show dialogs. """ num_pages = self.document_manager.get_n_pages() for i in range(num_pages): init_page = self.document_manager.get_current_page() self.document_manager.set_current_page(i) document = self.document_manager.get_active_document() file_uri = document.get_file_uri() if file_uri != "": self.document_manager.save_file_tab(file_uri, False) else: return self.document_manager.set_current_page(init_page) #################### Signals #################### def delete_event(self, event, x): """ This method does some operations when TextFlow quit. """ return self.quit() # Toolbar def on_toolbutton_new_clicked(self, widget): """ Open a new empty tab. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.open_tab() def on_toolbutton_open_clicked(self, widget): """ Open a new file in a tab. @param widget: Reference to a Button. @type widget: A Button object. """ document = self.document_manager.get_active_document() if document == None: direc = self.last_dir elif document.file_uri == "": direc = self.last_dir else: direc = "/".join(document.file_uri.split("/")[:-1]) self.last_dir = direc file_add = ChooseFileDialog(constants.MESSAGE_0003, self.main_window, "", '*', True, direc) files = file_add.run() file_add.destroy() for i in range(len(files)): self.document_manager.open_tab(files[i]) def on_toolbutton_save_clicked(self, widget): """ Save the current tab in a file. @param widget: Reference to a Button. @type widget: A Button object. """ document = self.document_manager.get_active_document() if document is not None: self.document_manager.save_active_tab() file_uri = document.get_file_uri() self.last_dir = "/".join(file_uri.split("/")[:-1]) def on_toolbutton_undo_clicked(self, widget): """ Undo. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.undo() def on_toolbutton_redo_clicked(self, widget): """ Redo. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.redo() def on_toolbutton_search_clicked(self, widget): """ Show search bar. @param widget: Reference to a Button. @type widget: A Button object. """ self.search_replace_bar.show_bar() #self.search_replace_bar.hide() # def on_toolbutton_replace_clicked(self, widget): # """ # Show replace bar. # # @param widget: Reference to a Button. # @type widget: A Button object. # """ # self.search_replace_bar.show_bar() # self.search_bar.hide() def on_toolbutton_preferences_clicked(self, widget): """ Open the preference window. @param widget: Reference to a Button. @type widget: A Button object. """ self.preferences.run() # File Menu def on_imagemenuitem_new_activate(self, widget): """ Open a new empty tab. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.open_tab() def on_imagemenuitem_open_activate(self, widget): """ Open a new file in a tab. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ document = self.document_manager.get_active_document() if document is None: direc = self.last_dir elif document.file_uri == "": direc = self.last_dir else: direc = "/".join(document.file_uri.split("/")[:-1]) self.last_dir = direc file_add = ChooseFileDialog(constants.MESSAGE_0003, self.main_window, "", '*', True, direc) files = file_add.run() file_add.destroy() for i in range(len(files)): self.document_manager.open_tab(files[i]) def on_imagemenuitem_closetab_activate(self, widget): page_num = self.document_manager.get_current_page() if page_num != -1: swindow = self.document_manager.get_nth_page(page_num) self.document_manager.close_tab(swindow) def on_imagemenuitem_save_activate(self, widget): """ Save the current tab in a file. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ document = self.document_manager.get_active_document() if document is not None: self.document_manager.save_active_tab() file_uri = document.get_file_uri() self.last_dir = "/".join(file_uri.split("/")[:-1]) def on_imagemenuitem_save_as_activate(self, widget): """ Save the current tab in a new file. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ document = self.document_manager.get_active_document() if document is not None: self.document_manager.save_as_tab(document) file_uri = document.get_file_uri() self.last_dir = "/".join(file_uri.split("/")[:-1]) def save_all(self, show_error=True): """ Save all tabs. """ self.document_manager.save_all_tabs() def on_menuitem_save_all_activate(self, widget): """ Save all open tabs. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.save_all() def on_imagemenuitem_quit_activate(self, widget): """ Quit TextFlow. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ return self.quit() # Edit Menu def on_imagemenuitem_cut_activate(self, widget): """ Cut selected text. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ focus = self.main_window.focus_widget if isinstance(focus, gtksourceview2.View): focus.buffer.cut_clipboard(self.clipboard, True) elif isinstance(focus, gtk.Entry): focus.cut_clipboard() def on_imagemenuitem_undo_activate(self, widget): """ Undo. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.undo() def on_imagemenuitem_redo_activate(self, widget): """ Undo. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.redo() def on_imagemenuitem_copy_activate(self, widget): """ Copy selected text. @param self: Reference to MainWindow. @type self: A MainWindow object. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ focus = self.main_window.focus_widget if isinstance(focus, gtksourceview2.View): focus.buffer.copy_clipboard(self.clipboard) elif isinstance(focus, gtk.Entry): focus.copy_clipboard() def on_imagemenuitem_paste_activate(self, widget): """ Paste text. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ focus = self.main_window.focus_widget if isinstance(focus, gtksourceview2.View): focus.buffer.paste_clipboard(self.clipboard, None, True) elif isinstance(focus, gtk.Entry): focus.paste_clipboard() def on_menuitem_duplicateline_activate(self, widget): """ Duplicate a line. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.trigger_manager.shortcuts[u'ctrl+j']() def on_menuitem_deleteline_activate(self, widget): """ Delete line. @param widget: Reference to a Button. @type widget: A Button object. """ view = self.document_manager.get_active_view() buffer = view.buffer buffer.begin_user_action() itstart = buffer.get_iter_at_mark(buffer.get_insert()) start_line = itstart.get_line() itstart = buffer.get_iter_at_line(start_line) itend = buffer.get_iter_at_mark(buffer.get_insert()) itend.forward_line() buffer.delete(itstart, itend) buffer.end_user_action() def on_menuitem_uppercase_activate(self, widget): """ Upper case. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.trigger_manager.shortcuts[u'ctrl+u']() def on_menuitem_lowercase_activate(self, widget): """ Lower case. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.trigger_manager.shortcuts[u'ctrl+shift+u']() def on_menuitem_tabs_to_spaces_activate(self, widget): """ Convert tabs to spaces. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.trigger_manager.shortcuts[u'ctrl+2']() def on_menuitem_spaces_to_tabs_activate(self, widget): """ Convert spaces to tabs. @param widget: Reference to a Button. @type widget: A Button object. """ self.document_manager.trigger_manager.shortcuts[u'ctrl+shift+@']() def on_imagemenuitem_preferences_activate(self, widget): """ Open the preference window. @param widget: Reference to a Button. @type widget: A Button object. """ self.preferences.run() # View Menu def on_checkmenuitem_sidepanel_toggled(self, widget): """ Show or hide side panel. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ value = widget.active self.show_sidepanel(value) def on_checkmenuitem_toolbar_toggled(self, widget): """ Show or hide toolbar. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.show_toolbar(widget.get_active()) def on_checkmenuitem_line_numbers_toggled(self, widget): """ Show or hide toolbar. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ value = widget.get_active() pages = self.document_manager.get_n_pages() self.preferences_manager.set_value("line_numbers", value) for i in range(pages): view = self.document_manager.get_nth_page(i).view view.set_show_line_numbers(value) # Search Menu def on_imagemenuitem_search_bar_activate(self, widget): """ Show or hide search bar. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.search_replace_bar.show_bar() #self.search_replace_bar.hide() self.goto_bar.hide() def on_menuitem_search_next_activate(self, widget): """ Find next match. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.search_functions.next() def on_menuitem_search_previous_activate(self, widget): """ Find previous match. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.search_functions.previous() #def on_imagemenuitem_replace_bar_activate(self, widget): # """ # Show or hide replace bar. # # @param widget: Reference to a ImageMenuItem. # @type widget: A ImageMenuItem object. # """ # self.search_replace_bar.show_bar() # self.search_bar.hide() # self.goto_bar.hide() def on_menuitem_replace_activate(self, widget): """ Replace the current current match. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.search_functions.replace() def on_menuitem_replace_all_activate(self, widget): """ Replace all matches. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.document_manager.search_functions.replace_all() # Help Menu def on_imagemenuitem_help_activate(self, widget): """ Open TextFlow documentation in a browser. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ gtk.show_uri(gtk.gdk.Screen(), "http://docs.textflowproject.org", 0) def on_imagemenuitem_about_activate(self, widget): """ Show the about window. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ about = AboutDialog() ret = about.run() about.destroy() return ret def on_menuitem_goto_bar_activate(self, widget): """ Show or hide search bar. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.search_replace_bar.hide() #self.search_bar.hide() self.goto_bar.show_bar() # Close Sidepanel def close_sidepanel(self, widget): """ Hide side panel. @param widget: Reference to a ImageMenuItem. @type widget: A ImageMenuItem object. """ self.show_sidepanel(False) self.checkmenuitem_sidepanel.set_active(False)
def __set_all_widgets(self): """ Initialize all widgets used by MainWindow. """ wt = self.widgets_tree self.main_window = wt.get_widget("main_window") self.main_window.set_icon_from_file(constants.SCALABLE_ICON) self.hpaned = wt.get_widget("hpaned") self.toolbar = wt.get_widget("toolbar") self.interface_vbox = wt.get_widget("main_vbox") self.toolbutton_new = wt.get_widget("toolbutton_new") self.toolbutton_open = wt.get_widget("toolbutton_open") self.toolbutton_save = wt.get_widget("toolbutton_save") self.toolbutton_undo = wt.get_widget("toolbutton_undo") self.toolbutton_redo = wt.get_widget("toolbutton_redo") self.toolbutton_search = wt.get_widget("toolbutton_search") #self.toolbutton_replace = wt.get_widget("toolbutton_replace") self.toolbutton_preferences = wt.get_widget("toolbutton_preferences") # self.tooltip.set_tip(self.toolbutton_new, _("New")) # self.tooltip.set_tip(self.toolbutton_open, _("Open")) # self.tooltip.set_tip(self.toolbutton_save, _("Save")) # self.tooltip.set_tip(self.toolbutton_undo, _("Undo")) # self.tooltip.set_tip(self.toolbutton_redo, _("Redo")) # self.tooltip.set_tip(self.toolbutton_search, _("Search")) # self.tooltip.set_tip(self.toolbutton_replace, _("Replace")) # self.tooltip.set_tip(self.toolbutton_preferences, _("Preferences")) self.toolbutton_new.set_tooltip_text(_("New")) self.toolbutton_open.set_tooltip_text(_("Open")) self.toolbutton_save.set_tooltip_text(_("Save")) self.toolbutton_undo.set_tooltip_text(_("Undo")) self.toolbutton_redo.set_tooltip_text(_("Redo")) self.toolbutton_search.set_tooltip_text(_("Search")) #self.toolbutton_replace.set_tooltip_text(_("Replace")) self.toolbutton_preferences.set_tooltip_text(_("Preferences")) self.toolbutton_undo.set_sensitive(False) self.toolbutton_redo.set_sensitive(False) for i in range(self.toolbar.get_n_items() - 1): item = self.toolbar.get_nth_item(i) item.set_homogeneous(False) self.menu_file = wt.get_widget("menu_file") #for item in recent_chooser.get_children(): # self.menu_file.append(item) self.imagemenuitem_closetab = wt.get_widget("imagemenuitem_closetab") self.menuitem_duplicateline = wt.get_widget("menuitem_duplicateline") self.menuitem_deleteline = wt.get_widget("menuitem_deleteline") self.imagemenuitem_save_as = wt.get_widget("imagemenuitem_save_as") self.menuitem_save_all = wt.get_widget("menuitem_save_all") self.imagemenuitem_undo = wt.get_widget("imagemenuitem_undo") self.imagemenuitem_redo = wt.get_widget("imagemenuitem_redo") # Workaround to put pseudo Ctrl+D accelerator deleteline_child = self.menuitem_deleteline.get_child() self.menuitem_deleteline.remove(deleteline_child) hbox_deleteline = gtk.HBox() hbox_deleteline.pack_start(gtk.Label("Delete Line"), False) label_ctrld = gtk.Label("Ctrl+D") label_ctrld.set_alignment(1, 0.5) hbox_deleteline.pack_start(label_ctrld) # End of workaround self.menuitem_deleteline.add(hbox_deleteline) self.menuitem_deleteline.show_all() self.menuitem_uppercase = wt.get_widget("menuitem_uppercase") self.menuitem_lowercase = wt.get_widget("menuitem_lowercase") self.menuitem_tabs_to_spaces = wt.get_widget("menuitem_tabs_to_spaces") self.menuitem_spaces_to_tabs = wt.get_widget("menuitem_spaces_to_tabs") self.checkmenuitem_sidepanel = wt.get_widget("checkmenuitem_sidepanel") self.checkmenuitem_toolbar = wt.get_widget("checkmenuitem_toolbar") self.checkmenuitem_line_numbers = wt.get_widget("checkmenuitem_line_numbers") self.imagemenuitem_search_bar = wt.get_widget("imagemenuitem_search_bar") #self.imagemenuitem_replace_bar = wt.get_widget("imagemenuitem_replace_bar") self.menuitem_search_next = wt.get_widget("menuitem_search_next") self.menuitem_search_previous = wt.get_widget("menuitem_search_previous") self.menuitem_replace = wt.get_widget("menuitem_replace") self.menuitem_replace_all = wt.get_widget("menuitem_replace_all") self.menuitem_goto_bar = wt.get_widget("menuitem_goto_bar") self.menuitem_language = wt.get_widget("menuitem_language") self.document_manager = tf.app.document_manager self.statusbar = StatusBar(self.document_manager) self.combobutton = ComboButton("", True) self.combobutton.set_text_center(False) self.side_panel_vbox = gtk.VBox() combobutton_hbox = gtk.HBox(False, 4) self.main_vbox = gtk.VBox() self.main_vbox.pack_end(self.statusbar, False, False, 0) self.hpaned.add1(self.side_panel_vbox) self.hpaned.add2(self.main_vbox) self.main_vbox.pack_start(self.document_manager) combobutton_hbox.pack_start(self.combobutton, True, True, 0) self.side_panel_vbox.pack_start(combobutton_hbox, False, False, 0) self.close_sidepanel_button = CloseButton() close_button_vbox = gtk.VBox() close_button_vbox.pack_start(self.close_sidepanel_button, True, False, 0) combobutton_hbox.pack_start(close_button_vbox, False, False, 0) combobutton_hbox.set_child_packing(close_button_vbox, False, False, 0, gtk.PACK_END) #self.search_bar = SearchBar(self.document_manager) #self.main_vbox.pack_start(self.search_bar, False, False, 0) self.search_replace_bar = SearchReplaceBar(self.document_manager) self.main_vbox.pack_start(self.search_replace_bar, False, False, 0) self.goto_bar = GotoBar(self.document_manager) self.main_vbox.pack_start(self.goto_bar, False, False, 0)