Ejemplo n.º 1
0
 def show_book(self, *a):
     n = self.parent.viewerbook.get_n_pages()
     for s in range(n):
         ch = self.parent.viewerbook.get_nth_page(s)
         if self.parent.viewerbook.get_tab_label(ch).nm == self.nm_book:
             self.parent.viewerbook.get_tab_label(ch).close_tab()
     sr = OpenBook(self.parent, self.book, self.id_book)
     self.parent.viewerbook.append_page(sr, TabLabel(sr, self.nm_book))
     self.parent.viewerbook.set_current_page(-1)
     self.parent.notebook.set_current_page(1)
     sr.set_index()
Ejemplo n.º 2
0
 def open_book(self, my_book, nm_book, id_book):
     n = self.parent.viewerbook.get_n_pages()
     for s in range(n):
         ch = self.parent.viewerbook.get_nth_page(s)
         if self.parent.viewerbook.get_tab_label(ch).nm == nm_book:
             self.parent.viewerbook.set_current_page(s)
             self.parent.notebook.set_current_page(1)
             return
     sr = OpenBook(self.parent, my_book, id_book)
     self.parent.viewerbook.append_page(sr, TabLabel(sr, nm_book))
     self.parent.viewerbook.set_current_page(-1)
     self.parent.notebook.set_current_page(1)
     sr.set_index()
Ejemplo n.º 3
0
 def start_session(self, *a):
     session = eval(asm_config.getv('start_session'))
     if asm_config.getn('saved_session') == 0: return
     if session[1][-1] == 1:
         if len(session[0][0]) == 0:
             self.notebook.set_current_page(session[1][-2])
         else:
             self.notebook.set_current_page(1)
     elif session[1][-1] in [0, 2, 3, 4, 5, 6, 8]:
         self.notebook.set_current_page(session[1][-1])
     else:
         self.notebook.set_current_page(session[1][-2])
     if session[0] == []: return
     for id_book in session[0][0]:
         book = self.db.file_book(id_book)
         sr = OpenBook(self, book, id_book)
         self.viewerbook.append_page(
             sr, TabLabel(sr,
                          self.db.tit_book(id_book)[1]))
         sr.set_index()
         sr.scroll_search.hide()
     self.viewerbook.set_current_page(session[0][1])
Ejemplo n.º 4
0
 def __init__(self, *a):
     self.full = 0
     self.opened = [0]
     self.db = listDB()
     self.entry_search = Gtk.SearchEntry()
     Gtk.Window.__init__(self)
     self.axl = Gtk.AccelGroup()
     self.add_accel_group(self.axl)
     self.theme = MyTheme(self)
     self.search_win = Searcher(self)
     self.list_books = ListBooks(self)
     self.viewerbook = ViewerBooks(self)
     self.tafsirpage = Tafsir(self)
     self.warakapage = Warakat(self)
     self.editbook = EditBook(self)
     self.help_book = OpenBook(self, asm_path.DALIL_DB, -1)
     self.winspage = OtherWins(self)
     self.help_book.set_border_width(3)
     self.help_book.comment_btn.set_sensitive(False)
     self.help_book.set_index()
     self.moshafpage = ViewerMoshaf(self)
     self.organize = Organize(self)
     self.mepref = Preference(self)
     self.build()
Ejemplo n.º 5
0
 def open_new_tab(self, *a):
     if self.tree_results.get_selection().count_selected_rows() == 1:
         n = self.parent.viewerbook.get_n_pages()
         for s in range(n):
             ch = self.parent.viewerbook.get_nth_page(s)
             if self.parent.viewerbook.get_tab_label(ch).nm == self.nm_book:
                 self.parent.viewerbook.set_current_page(s)
                 self.parent.notebook.set_current_page(1)
                 return
         sr = OpenBook(self.parent, self.book, self.id_book)
         self.parent.viewerbook.append_page(sr, TabLabel(sr, self.nm_book))
         self.parent.viewerbook.set_current_page(-1)
         self.parent.notebook.set_current_page(1)
         sr.set_index()
         sr.show_page(self.all_in_page[1])
Ejemplo n.º 6
0
 def ok_m(self, *a):
     (model, i) = self.tree_sav.get_selection().get_selected()
     if i:
         self.destroy()
         id_page = model.get_value(i, 0)
         id_book = model.get_value(i, 2)
         book = listDB().file_book(id_book)
         nm_book = model.get_value(i, 1)
         n = self.parent.viewerbook.get_n_pages()
         for s in range(n):
             ch = self.parent.viewerbook.get_nth_page(s)
             if self.parent.viewerbook.get_tab_label(ch).nm == nm_book:
                 self.parent.viewerbook.set_current_page(s)
                 self.parent.notebook.set_current_page(1)
                 return
         sr = OpenBook(self.parent, book, id_book)
         sr.show_page(id_page)
         self.parent.viewerbook.append_page(sr, TabLabel(sr, nm_book))
         self.parent.viewerbook.set_current_page(-1)
         self.parent.notebook.set_current_page(1)
         sr.set_index()
Ejemplo n.º 7
0
class AsmaaApp(Gtk.Window):
    def __init__(self, *a):
        self.full = 0
        self.opened = [0]
        self.db = listDB()
        self.entry_search = Gtk.SearchEntry()
        Gtk.Window.__init__(self)
        self.axl = Gtk.AccelGroup()
        self.add_accel_group(self.axl)
        self.theme = MyTheme(self)
        self.search_win = Searcher(self)
        self.list_books = ListBooks(self)
        self.viewerbook = ViewerBooks(self)
        self.tafsirpage = Tafsir(self)
        self.warakapage = Warakat(self)
        self.editbook = EditBook(self)
        self.help_book = OpenBook(self, asm_path.DALIL_DB, -1)
        self.winspage = OtherWins(self)
        self.help_book.set_border_width(3)
        self.help_book.comment_btn.set_sensitive(False)
        self.help_book.set_index()
        self.moshafpage = ViewerMoshaf(self)
        self.organize = Organize(self)
        self.mepref = Preference(self)
        self.build()

    def refresh(self, *a):
        self.theme.refresh()
        self.change_font()
        n = self.notebook.get_n_pages()
        for a in range(n):
            try:
                ch = self.notebook.get_nth_page(a)
                ch.change_font()
            except:
                pass
        n = self.viewerbook.get_n_pages()
        for a in range(n):
            try:
                ch = self.viewerbook.get_nth_page(a)
                ch.change_font()
                ch.build(self.theme.font_text_poem)
            except:
                pass

    def change_font(self, *a):
        ls = [self.list_books.tree_parts, self.organize.tree_group]
        for a in ls:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_lists_parts)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            }
            #Tree:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_selected) + ''';
            }
            #Tree:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_hover) + ''';
            }
            #Tree {
            color: ''' + asm_customs.rgb(self.theme.color_lists_parts) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_lists_parts) + ''';
            }'''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls = [self.list_books.tree_books, self.organize.tree_books]
        for a in ls:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_lists_books)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            }
            #Tree:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_selected) + ''';
            }
            #Tree:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_hover) + ''';
            }
            #Tree {
            color: ''' + asm_customs.rgb(self.theme.color_lists_books) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_lists_books) + ''';
            }'''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls = [self.list_books.iconview_parts]
        for a in ls:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_lists_parts)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(self.theme.color_lists_parts) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_lists_parts) + ''';
            }
            #iconview:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_selected) + ''';
            }
            #iconview:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_hover) + ''';
            }
            '''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls = [self.list_books.iconview_books]
        for a in ls:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_lists_books)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(self.theme.color_lists_books) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_lists_books) + ''';
            }
            #iconview:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_selected) + ''';
            }
            #iconview:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_hover) + ''';
            }
            '''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls0 = [
            self.list_books.tree_favorite, self.list_books.tree_last,
            self.winspage.authorpage.tree_author, self.warakapage.tree_waraka,
            self.winspage.dictpage.tree_dict, self.tafsirpage.tree_search,
            self.winspage.tarjamapage.tree_tarjama, self.moshafpage.tree_index
        ]
        for a in ls0:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_lists_titles)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            }
            #Tree:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_selected) + ''';
            }
            #Tree:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_hover) + ''';
            }
            #Tree {
            color: ''' + asm_customs.rgb(self.theme.color_lists_titles) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_lists_titles) + ''';
            }'''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls1 = [self.list_books.view_info]
        for a in ls1:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_nasse_others)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(self.theme.color_nasse_others) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_nasse_others) + ''';
            }
            #View text selection, #View:selected  {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_selected) + ''';
            }
            '''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls2 = [
            self.winspage.authorpage.view_author,
            self.winspage.dictpage.view_dict,
            self.winspage.tarjamapage.view_tarjama, self.tafsirpage.view_tafsir
        ]
        for a in ls2:
            szfont, fmfont = asm_customs.split_font(
                self.theme.font_nasse_books)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(self.theme.color_nasse_books) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_nasse_books) + ''';
            }
            #View text selection, #View:selected  {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_selected) + ''';
            }
            '''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #-----------------------------------------
        ls3 = []
        for a in ls3:
            szfont, fmfont = asm_customs.split_font(self.theme.font_lists_side)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            }
            #Tree:selected {
            color: ''' + asm_customs.rgb(self.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                self.theme.background_selected) + ''';
            }
            #Tree:hover {
            color: ''' + asm_customs.rgb(self.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.theme.background_hover) + ''';
            }
            #Tree {
            color: ''' + asm_customs.rgb(self.theme.color_lists_side) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.theme.background_lists_side) + ''';
            }
            '''
            css_provider = Gtk.CssProvider()
            context = a.get_style_context()
            css_provider.load_from_data(data.encode('utf8'))
            context.add_provider(css_provider,
                                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        #----------------------------------------
        self.winspage.authorpage.view_author_tag.set_property(
            'foreground', self.theme.color_anawin)
        self.winspage.authorpage.view_author_tag.set_property(
            'background', self.theme.background_anawin)
        self.winspage.authorpage.view_author_tag.set_property(
            'font', self.theme.font_anawin)
        self.winspage.dictpage.search_tag.set_property(
            'foreground', self.theme.color_searched)
        self.winspage.dictpage.search_tag.set_property(
            'background', self.theme.background_searched)
        self.winspage.tarjamapage.view_tarjama_tag.set_property(
            'foreground', self.theme.color_anawin)
        self.winspage.tarjamapage.view_tarjama_tag.set_property(
            'background', self.theme.background_anawin)
        self.winspage.tarjamapage.view_tarjama_tag.set_property(
            'font', self.theme.font_anawin)

    # a البحث في النافذة الحالية----------------------------------

    def search_on_page(self, *a):
        text = self.entry_search.get_text()
        if len(text) == 1 or text == "ال": return
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.search_on_page(text)

    def search_on_active(self, *a):
        text = self.entry_search.get_text()
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.search_on_active(text)

    # a تغيير طريقة عرض قائمة الكتب--------------------------

    def change_view(self, *a):
        if self.list_books.nb.get_current_page() in [0, 1]:
            self.list_books.nb.set_current_page(2)
            asm_config.setv('view_books', 1)
            self.show_icons.set_label("عرض بالأيقونات")
        elif self.list_books.nb.get_current_page() in [2, 3]:
            self.list_books.nb.set_current_page(0)
            asm_config.setv('view_books', 0)
            self.show_icons.set_label("عرض بالقائمة")
        self.go_parts.hide()

    # a إظهار وإخفاء اللوح الجانبي--------------------------

    def show_side(self, *a):
        if asm_config.getn('show_side') == 0:
            self.list_books.vbox_side.hide()
            asm_config.setv('show_side', 1)
        else:
            self.list_books.vbox_side.show_all()
            asm_config.setv('show_side', 0)

    # a حفظ موضع من كتاب----------------------------------

    def site_in_book(self, *a):
        list_marks = eval(asm_config.getv('marks'))
        if self.notebook.get_current_page() == 1:
            n = self.viewerbook.get_current_page()
            ch = self.viewerbook.get_nth_page(n)
            list_marks.append([ch.all_in_page[1], ch.nm_book, ch.id_book])
            marks = repr(list_marks)
            asm_config.setv('marks', marks)
            asm_customs.info(self, 'تم تعليم هذا الموضع')

    # a  إضافة الكتاب المفتوح إلى المفضلة--------------------

    def add_to_favory(self, *a):
        if asm_path.can_modify(self):
            if self.notebook.get_current_page() == 1:
                n = self.viewerbook.get_current_page()
                ch = self.viewerbook.get_nth_page(n)
                check = ch.db_list.to_favorite(ch.id_book)
                if check == None:
                    asm_customs.info(
                        self,
                        'تم إضافة كتاب "{}" للمفضلة'.format(ch.nm_book, ))
                self.list_books.load_fav()

    # a عند التبديل بين نوافذ المكتبة-------------------------------

    def back_to_previous_page(self, *a):
        if len(self.opened) == 1: return
        del self.opened[-1]
        if self.opened[-1] == 7:
            del self.opened[-1]
        self.notebook.set_current_page(self.opened[-1])

    def switch_page(self, widget, page, n):
        if n in self.opened:
            self.opened.remove(n)
        self.opened.append(n)
        self.btn_action_edit.hide()
        self.btn_action_other.hide()
        self.btn_action_book.hide()
        self.btn_action_list.hide()
        if n == 0:
            self.btn_action_list.show_all()
            self.entry_search.set_placeholder_text('بحث عن كتاب')
            if self.list_books.nb.get_current_page() in [1, 3]:
                self.go_parts.show_all()
            else:
                self.go_parts.hide()
        elif n == 8:
            self.entry_search.set_placeholder_text('بحث عن كتاب')
            self.btn_action_other.show_all()
        elif n == 1:
            self.btn_action_book.show_all()
            self.entry_search.set_placeholder_text('بحث في النّصّ')
        elif n == 7:
            self.btn_action_edit.show_all()
            self.entry_search.set_placeholder_text('بحث في النّصّ')
        elif n == 3:
            self.btn_action_other.show_all()
            ss = ["بحث عن كلمة", "بحث عن راوٍ", "بحث عن مؤلف"]
            text = ss[self.winspage.get_current_page()]
            self.entry_search.set_placeholder_text(text)
        elif n == 2:
            self.btn_action_other.show_all()
            self.entry_search.set_placeholder_text('بحث في القرآن')
        else:
            self.btn_action_other.show_all()
            self.entry_search.set_placeholder_text('بحث في النّصّ')
        if n in [1, 2, 4, 5, 7]: self.btnbox_pages.show_all()
        else: self.btnbox_pages.hide()
        if n != 0: self.go_parts.hide()
        else: self.btnbox_pages.hide()
#        self.pref_btn.set_active(False)

# a التصفح--------------------------------------------

    def back_to_old(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.back_to_old()

    def advance_to_new(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.advance_to_new()

    def first_page(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.first_page()

    def previous_page(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.previous_page()

    def next_page(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.next_page()

    def last_page(self, *a):
        n = self.notebook.get_current_page()
        ch = self.notebook.get_nth_page(n)
        ch.last_page()

    def opened_book(self, *a):
        if self.viewerbook.get_n_pages() == 0:
            return
        else:
            self.notebook.set_current_page(1)

    def full_screen(self, *a):
        if self.full == 1:
            self.unfullscreen()
            self.full = 0
        else:
            self.fullscreen()
            self.full = 1

    def delete_event_cb(self, *a):
        asm_config.setv('quran_pos', self.moshafpage.page_id)
        session = []
        session.append(self.viewerbook.session)
        session.append(self.opened)
        saved = repr(session)
        asm_config.setv('start_session', saved)
        n = self.viewerbook.get_n_pages()
        for a in range(n):
            ch = self.viewerbook.get_nth_page(a)
            try:
                ch.db_list.set_last(ch.all_in_page[1], ch.id_book)
            except:
                pass
        Gtk.main_quit()

    def start_session(self, *a):
        session = eval(asm_config.getv('start_session'))
        if asm_config.getn('saved_session') == 0: return
        if session[1][-1] == 1:
            if len(session[0][0]) == 0:
                self.notebook.set_current_page(session[1][-2])
            else:
                self.notebook.set_current_page(1)
        elif session[1][-1] in [0, 2, 3, 4, 5, 6, 8]:
            self.notebook.set_current_page(session[1][-1])
        else:
            self.notebook.set_current_page(session[1][-2])
        if session[0] == []: return
        for id_book in session[0][0]:
            book = self.db.file_book(id_book)
            sr = OpenBook(self, book, id_book)
            self.viewerbook.append_page(
                sr, TabLabel(sr,
                             self.db.tit_book(id_book)[1]))
            sr.set_index()
            sr.scroll_search.hide()
        self.viewerbook.set_current_page(session[0][1])

    def set_tashkil(self, *a):
        if asm_config.getn('tashkil') == 0:
            asm_config.setv('tashkil', 1)
            self.del_tashkil.set_label("حذف التّشكيل")
        else:
            asm_config.setv('tashkil', 0)
            self.del_tashkil.set_label("إعادة التّشكيل")
        self.viewerbook.set_tashkil()

    def organize_page(self, *a):
        if asm_path.can_modify(self):
            self.notebook.set_current_page(8)

# a البناء--------------------------------------------------------------------

    def build(self, *a):
        self.set_title("مكتبة أسماء")
        self.set_icon_name('asmaa')
        self.set_default_size(1200, 700)
        self.maximize()
        self.connect("delete_event", self.delete_event_cb)
        self.connect("destroy", self.delete_event_cb)
        self.box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL)

        hb_bar = Gtk.HeaderBar()
        hb_bar.set_show_close_button(True)
        self.set_titlebar(hb_bar)

        menu_wins = Gtk.Menu()
        win_quran = Gtk.ImageMenuItem.new_with_label("القرآن الكريم")
        win_quran.add_accelerator("activate", self.axl, Gdk.KEY_F1, 0,
                                  Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Quran-16.png'))
        win_quran.set_image(img)
        win_quran.connect('activate',
                          lambda *a: self.notebook.set_current_page(2))
        win_tafsir = Gtk.ImageMenuItem.new_with_label("التفاسير")
        win_tafsir.add_accelerator("activate", self.axl, Gdk.KEY_F2, 0,
                                   Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Tafsir-16.png'))
        win_tafsir.set_image(img)
        win_tafsir.connect('activate',
                           lambda *a: self.notebook.set_current_page(4))
        win_list = Gtk.ImageMenuItem.new_with_label("قائمة الكتب")
        win_list.add_accelerator("activate", self.axl, Gdk.KEY_F3, 0,
                                 Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Books-16.png'))
        win_list.set_image(img)
        win_list.connect('activate',
                         lambda *a: self.notebook.set_current_page(0))
        win_opened = Gtk.ImageMenuItem.new_with_label("الكتب المفتوحة")
        win_opened.add_accelerator("activate", self.axl, Gdk.KEY_F4, 0,
                                   Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Book-Open-16.png'))
        win_opened.set_image(img)
        win_opened.connect('activate', self.opened_book)
        win_waraka = Gtk.ImageMenuItem.new_with_label("أوراق البحث")
        win_waraka.add_accelerator("activate", self.axl, Gdk.KEY_F5, 0,
                                   Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Papers-16.png'))
        win_waraka.set_image(img)
        win_waraka.connect('activate',
                           lambda *a: self.notebook.set_current_page(6))
        win_special = Gtk.ImageMenuItem.new_with_label("نوافذ خاصة")
        win_special.add_accelerator("activate", self.axl, Gdk.KEY_F6, 0,
                                    Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Wins-16.png'))
        win_special.set_image(img)
        win_special.connect('activate',
                            lambda *a: self.notebook.set_current_page(3))
        win_help = Gtk.ImageMenuItem.new_with_label("صفحة المساعدة")
        win_help.add_accelerator("activate", self.axl, Gdk.KEY_F7, 0,
                                 Gtk.AccelFlags.VISIBLE)
        img = Gtk.Image()
        img.set_from_file(join(asm_path.ICON_DIR, 'Help-16.png'))
        win_help.set_image(img)
        win_help.connect('activate',
                         lambda *a: self.notebook.set_current_page(5))
        full_screen = Gtk.ImageMenuItem.new_with_label("ملء الشاشة")
        full_screen.add_accelerator("activate", self.axl, Gdk.KEY_F11, 0,
                                    Gtk.AccelFlags.VISIBLE)
        full_screen.connect('activate', self.full_screen)
        exit1 = Gtk.ImageMenuItem.new_with_label("خروج")
        exit1.add_accelerator("activate", self.axl, Gdk.KEY_Q, ACCEL_CTRL_MOD,
                              Gtk.AccelFlags.VISIBLE)
        exit1.connect('activate', Gtk.main_quit)
        menu_wins.append(win_quran)
        menu_wins.append(win_tafsir)
        menu_wins.append(win_list)
        menu_wins.append(win_opened)
        menu_wins.append(win_waraka)
        menu_wins.append(win_special)
        menu_wins.append(win_help)
        menu_wins.append(Gtk.SeparatorMenuItem())
        menu_wins.append(full_screen)
        menu_wins.append(exit1)
        btn_menu = Gtk.MenuButton()
        btn_menu.set_popup(menu_wins)
        img = Gtk.Image.new_from_icon_name('go-home-symbolic', 2)
        btn_menu.set_image(img)
        menu_wins.show_all()

        hb_bar.pack_start(btn_menu)

        btnbox_action = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        Gtk.StyleContext.add_class(btnbox_action.get_style_context(), "linked")

        find_btn = Gtk.Button()
        img = Gtk.Image.new_from_icon_name('system-search-symbolic', 2)
        find_btn.set_image(img)
        find_btn.set_tooltip_text('نافذة البحث')
        find_btn.connect('clicked', lambda *a: self.search_win.show_all())
        btnbox_action.pack_start(find_btn, False, False, 0)

        # a أحداث صفحة الكتاب المفتوح--------------------------------------

        menu_action_book = Gtk.Menu()
        go_old = Gtk.ImageMenuItem.new_with_label("الذهاب إلى التصفح الأقدم")
        go_old.connect('activate', self.back_to_old)
        menu_action_book.append(go_old)
        go_new = Gtk.ImageMenuItem.new_with_label("الذهاب إلى التصفح الأحدث")
        go_new.connect('activate', self.advance_to_new)
        menu_action_book.append(go_new)
        menu_action_book.append(Gtk.SeparatorMenuItem())
        add_fav = Gtk.ImageMenuItem.new_with_label("أضف الكتاب إلى المفضّلة")
        add_fav.connect('activate', self.add_to_favory)
        menu_action_book.append(add_fav)
        sav_mark = Gtk.ImageMenuItem.new_with_label(
            "حفظ موضع الصّفحة الحاليّة")
        sav_mark.connect('activate', self.site_in_book)
        menu_action_book.append(sav_mark)
        menu_action_book.append(Gtk.SeparatorMenuItem())
        self.del_tashkil = Gtk.ImageMenuItem.new_with_label("حذف التّشكيل")
        if asm_config.getn('tashkil') == 0:
            self.del_tashkil.set_label("إعادة التّشكيل")
        self.del_tashkil.connect('activate', self.set_tashkil)
        menu_action_book.append(self.del_tashkil)

        menu_action_book.append(Gtk.SeparatorMenuItem())
        win_marks = Gtk.ImageMenuItem.new_with_label(
            "نافذة العلامات المرجعيّة")
        win_marks.connect('activate', lambda *a: SavedMarks(self))
        menu_action_book.append(win_marks)
        win_results = Gtk.ImageMenuItem.new_with_label("نافذة البحوث المحفوظة")
        win_results.connect('activate', lambda *a: SavedResult(self))
        menu_action_book.append(win_results)

        self.btn_action_book = Gtk.MenuButton()
        img = Gtk.Image.new_from_icon_name('view-more-symbolic', 2)
        self.btn_action_book.set_image(img)
        self.btn_action_book.set_popup(menu_action_book)
        menu_action_book.show_all()
        btnbox_action.pack_start(self.btn_action_book, False, False, 0)

        # a أحداث صفحة قائمة الكتب--------------------------------------

        menu_action_list = Gtk.Menu()
        self.show_icons = Gtk.ImageMenuItem.new_with_label("عرض بالأيقونات")
        self.show_icons.add_accelerator("activate", self.axl, Gdk.KEY_S,
                                        ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE)
        menu_action_list.append(self.show_icons)
        if asm_config.getn('view_books') == 0:
            self.show_icons.set_label("عرض بالقائمة")
        else:
            self.show_icons.set_label("عرض بالأيقونات")
        self.show_icons.connect('activate', self.change_view)
        menu_action_list.append(Gtk.SeparatorMenuItem())
        side_panel = Gtk.ImageMenuItem.new_with_label(
            "إخفاء/عرض اللوح الجانبي")
        side_panel.connect('activate', self.show_side)
        menu_action_list.append(side_panel)
        menu_action_list.append(Gtk.SeparatorMenuItem())
        organize = Gtk.ImageMenuItem.new_with_label("تنظيم المكتبة")
        organize.connect('activate', self.organize_page)
        menu_action_list.append(organize)

        menu_action_list.append(Gtk.SeparatorMenuItem())
        win_marks = Gtk.ImageMenuItem.new_with_label(
            "نافذة العلامات المرجعيّة")
        win_marks.connect('activate', lambda *a: SavedMarks(self))
        menu_action_list.append(win_marks)
        win_results = Gtk.ImageMenuItem.new_with_label("نافذة البحوث المحفوظة")
        win_results.connect('activate', lambda *a: SavedResult(self))
        menu_action_list.append(win_results)

        self.btn_action_list = Gtk.MenuButton()
        img = Gtk.Image.new_from_icon_name('view-more-symbolic', 2)
        self.btn_action_list.set_image(img)
        self.btn_action_list.set_popup(menu_action_list)
        menu_action_list.show_all()
        btnbox_action.pack_start(self.btn_action_list, False, False, 0)

        # a أحداث صفحة تحرير الكتاب--------------------------------------

        menu_action_edit = Gtk.Menu()
        find_replace = Gtk.ImageMenuItem.new_with_label("إيجاد واستبدال")
        find_replace.connect('activate', self.editbook.replace_all)
        find_replace.add_accelerator("activate", self.axl, Gdk.KEY_F,
                                     ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE)
        menu_action_edit.append(find_replace)
        back_old_text = Gtk.ImageMenuItem.new_with_label("أرجع النص الأصلي")
        back_old_text.add_accelerator("activate", self.axl, Gdk.KEY_Z,
                                      ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE)
        back_old_text.connect('activate', self.editbook.undo_cb)
        menu_action_edit.append(back_old_text)
        menu_action_edit.append(Gtk.SeparatorMenuItem())
        change_info = Gtk.ImageMenuItem.new_with_label("تغيير معلومات الكتاب")
        menu_action_edit.append(change_info)
        change_info.connect('activate',
                            lambda *a: EditBitaka(self, self.editbook.id_book))
        menu_action_edit.append(Gtk.SeparatorMenuItem())
        save_changed = Gtk.ImageMenuItem.new_with_label(
            "حفظ التغييرات في الكتاب")
        save_changed.add_accelerator("activate", self.axl, Gdk.KEY_S,
                                     ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE)
        save_changed.connect('activate', self.editbook.save_book)
        menu_action_edit.append(save_changed)
        show_normal = Gtk.ImageMenuItem.new_with_label(
            "عرض الكتاب في الوضع العاديّ")
        show_normal.connect('activate', self.editbook.show_book)
        menu_action_edit.append(show_normal)
        menu_action_edit.append(Gtk.SeparatorMenuItem())
        win_marks = Gtk.ImageMenuItem.new_with_label(
            "نافذة العلامات المرجعيّة")
        win_marks.connect('activate', lambda *a: SavedMarks(self))
        menu_action_edit.append(win_marks)
        win_results = Gtk.ImageMenuItem.new_with_label("نافذة البحوث المحفوظة")
        win_results.connect('activate', lambda *a: SavedResult(self))
        menu_action_edit.append(win_results)

        self.btn_action_edit = Gtk.MenuButton()
        self.btn_action_edit.set_popup(menu_action_edit)
        img = Gtk.Image.new_from_icon_name('view-more-symbolic', 2)
        self.btn_action_edit.set_image(img)
        menu_action_edit.show_all()
        btnbox_action.pack_start(self.btn_action_edit, False, False, 0)
        hb_bar.pack_start(btnbox_action)

        # a أحداث باقي الصفحات--------------------------------------

        menu_action_other = Gtk.Menu()
        win_marks = Gtk.ImageMenuItem.new_with_label(
            "نافذة العلامات المرجعيّة")
        win_marks.connect('activate', lambda *a: SavedMarks(self))
        menu_action_other.append(win_marks)
        win_results = Gtk.ImageMenuItem.new_with_label("نافذة البحوث المحفوظة")
        win_results.connect('activate', lambda *a: SavedResult(self))
        menu_action_other.append(win_results)
        menu_action_other.append(Gtk.SeparatorMenuItem())

        self.btn_action_other = Gtk.MenuButton()
        self.btn_action_other.set_popup(menu_action_other)
        img = Gtk.Image.new_from_icon_name('view-more-symbolic', 2)
        self.btn_action_other.set_image(img)
        menu_action_other.show_all()
        btnbox_action.pack_start(self.btn_action_other, False, False, 0)

        #------------------------------------
        self.go_parts = Gtk.Button()
        self.go_parts.set_size_request(64, -1)
        self.go_parts.set_tooltip_text("الرجوع إلى الأقسام الرّئيسة")
        self.go_parts.connect('clicked', lambda *a: self.list_books.back_cb())
        img = Gtk.Image.new_from_icon_name('go-previous-symbolic-rtl', 2)
        self.go_parts.set_image(img)
        hb_bar.pack_start(self.go_parts)

        # a أزرار التصفح---------------------------------------

        self.btnbox_pages = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        Gtk.StyleContext.add_class(self.btnbox_pages.get_style_context(),
                                   "linked")
        #-----------------------------
        first_page = Gtk.Button()
        img = Gtk.Image.new_from_icon_name('go-first-symbolic-rtl', 2)
        first_page.set_image(img)
        first_page.set_tooltip_text('الصفحة الأولى')
        first_page.connect('clicked', self.first_page)
        first_page.add_accelerator("clicked", self.axl, Gdk.KEY_Up,
                                   ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE)
        self.btnbox_pages.pack_start(first_page, False, False, 0)
        #--------------------------------------
        prev_page = Gtk.Button()
        img = Gtk.Image.new_from_icon_name('go-previous-symbolic-rtl', 2)
        prev_page.set_image(img)
        prev_page.set_tooltip_text('الصفحة السابقة')
        prev_page.connect('clicked', self.previous_page)
        prev_page.add_accelerator("clicked", self.axl, Gdk.KEY_Right,
                                  ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE)
        self.btnbox_pages.pack_start(prev_page, False, False, 0)
        #--------------------------------------
        next_page = Gtk.Button()
        img = Gtk.Image.new_from_icon_name('go-next-symbolic-rtl', 2)
        next_page.set_image(img)
        next_page.set_tooltip_text('الصفحة التالية')
        next_page.connect('clicked', self.next_page)
        next_page.add_accelerator("clicked", self.axl, Gdk.KEY_Left,
                                  ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE)
        self.btnbox_pages.pack_start(next_page, False, False, 0)
        #--------------------------------------
        last_page = Gtk.Button()
        img = Gtk.Image.new_from_icon_name('go-last-symbolic-rtl', 2)
        last_page.set_image(img)
        last_page.set_tooltip_text('الصفحة الأخيرة')
        last_page.connect('clicked', self.last_page)
        last_page.add_accelerator("clicked", self.axl, Gdk.KEY_Down,
                                  ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE)
        self.btnbox_pages.pack_start(last_page, False, False, 0)
        hb_bar.set_custom_title(self.btnbox_pages)

        #- btn_pref---------------------------------
        btn_pref = Gtk.MenuButton()
        btn_pref.connect('toggled',
                         lambda *a: self.mepref.set_visible_child_name('n0'))
        self.popover = Gtk.Popover()
        btn_pref.set_popover(self.popover)
        btn_pref.set_name('btn_pref')
        img = Gtk.Image.new_from_icon_name('open-menu-symbolic', 2)
        btn_pref.set_image(img)
        self.popover.add(self.mepref)
        hb_bar.pack_end(btn_pref)

        #--------------------------------------
        self.entry_search.set_placeholder_text('بحث عن كتاب')
        self.entry_search.connect('changed', self.search_on_page)
        self.entry_search.connect('activate', self.search_on_active)

        hb_bar.pack_end(self.entry_search)

        # a--------------------------------
        self.notebook = Gtk.Notebook()
        self.notebook.set_show_tabs(False)
        self.notebook.append_page(self.list_books, Gtk.Label.new('0'))
        self.notebook.append_page(self.viewerbook, Gtk.Label.new('1'))
        self.notebook.append_page(self.moshafpage, Gtk.Label.new('2'))
        self.notebook.append_page(self.winspage, Gtk.Label.new('3'))
        self.notebook.append_page(self.tafsirpage, Gtk.Label.new('4'))
        self.notebook.append_page(self.help_book, Gtk.Label.new('5'))
        self.notebook.append_page(self.warakapage, Gtk.Label.new('6'))
        self.notebook.append_page(self.editbook, Gtk.Label.new('7'))
        self.notebook.append_page(self.organize, Gtk.Label.new('8'))
        self.notebook.connect("switch-page", self.switch_page)
        self.notebook.set_scrollable(True)
        self.notebook.set_show_tabs(False)

        self.box.pack_start(self.notebook, True, True, 0)

        self.axl.connect(Gdk.KEY_F11, 0, Gtk.AccelFlags.VISIBLE,
                         self.full_screen)
        self.axl.connect(Gdk.KEY_F9, 0, Gtk.AccelFlags.VISIBLE,
                         self.viewerbook.hide_index)
        self.axl.connect(Gdk.KEY_BackSpace, ACCEL_CTRL_MOD,
                         Gtk.AccelFlags.VISIBLE, self.back_to_previous_page)

        self.axl.connect(Gdk.KEY_F1, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(2))
        self.axl.connect(Gdk.KEY_F2, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(4))
        self.axl.connect(Gdk.KEY_F3, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(0))
        self.axl.connect(Gdk.KEY_F4, 0, Gtk.AccelFlags.VISIBLE,
                         self.opened_book)
        self.axl.connect(Gdk.KEY_F5, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(6))
        self.axl.connect(Gdk.KEY_F6, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(3))
        self.axl.connect(Gdk.KEY_F7, 0, Gtk.AccelFlags.VISIBLE,
                         lambda *a: self.notebook.set_current_page(5))
        self.axl.connect(Gdk.KEY_Q, ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE,
                         self.delete_event_cb)
        self.axl.connect(Gdk.KEY_S, ACCEL_CTRL_MOD, Gtk.AccelFlags.VISIBLE,
                         self.change_view)
        self.axl.connect(Gdk.KEY_Up, ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE,
                         self.first_page)
        self.axl.connect(Gdk.KEY_Down, ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE,
                         self.last_page)
        self.axl.connect(Gdk.KEY_Left, ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE,
                         self.next_page)
        self.axl.connect(Gdk.KEY_Right, ACCEL_ALT_MOD, Gtk.AccelFlags.VISIBLE,
                         self.previous_page)

        self.add(self.box)

        self.show_all()
        if asm_config.getn('search') == 0:
            self.search_win.stack.set_visible_child_name("n1")
        else:
            self.search_win.stack.set_visible_child_name("n2")
        self.btnbox_pages.hide()
        self.btn_action_book.hide()
        self.btn_action_other.hide()
        self.btn_action_edit.hide()
        self.go_parts.hide()
        self.help_book.scroll_search.hide()
        self.help_book.hp.set_position(120)
        if asm_config.getn('show_side') == 1:
            self.list_books.vbox_side.hide()
        else:
            self.list_books.vbox_side.show_all()
        greet.destroy()
        try:
            self.start_session()
        except:
            pass
        self.change_font()