Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
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")
Esempio n. 4
0
    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()
Esempio n. 5
0
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)
Esempio n. 6
0
    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)