Example #1
0
 def __init__(self, parent, book, id_book):
     Gtk.VBox.__init__(self, False, 3)
     self.db_list = listDB()
     self.parent = parent
     self.othman = Othman()
     self.id_book = id_book
     self.book = book
     self.nm_book = basename(book)[:-4]
     self.db = bookDB(book, id_book)
     self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
     self.current_id = 1
     self.opened_new = []
     self.opened_old = []
     self.build()
Example #2
0
 def search_on_quran(self, *a):
     text = self.search_entry.get_text()
     if len(text) >= 3:
         all_ayat = Othman().search('"' + text + '"')
         self.store_search.clear()
         if len(all_ayat) == 0:
             asm_customs.erro(self.parent, 'لا يوجد نتيجة')
             return
         else:
             for ayat in all_ayat:
                 i_sura = ayat[0]
                 i_ayat = ayat[1]
                 suras_names = Othman().get_suras_names()
                 sura = suras_names[i_sura - 1]
                 self.store_search.append(None, [i_sura, i_ayat, sura[1]])
Example #3
0
 def __init__(self, parent):
     Gtk.VBox.__init__(self, False, 3)
     self.set_border_width(5)
     self.parent = parent
     self.othman = Othman()
     self.db_list = listDB()
     self.db = None
     self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
     self.build()
Example #4
0
 def search_on_active(self, text):
     if len(text) >= 3:
         all_ayat = Othman().search(text)
         self.store_index.clear()
         if len(all_ayat) == 0:
             asm_customs.erro(self.parent, 'لا يوجد نتيجة')
             return
         else:
             for ayat in all_ayat:
                 sura = ayat[0]
                 aya = ayat[1]
                 suras_names = Othman().get_suras_names()
                 suranm = suras_names[sura - 1]
                 id_page = self.db.aya_page(aya, sura)
                 if id_page != self.id_page_last:
                     self.my_aya[id_page] = [ayat[5]]
                     self.id_page_last = id_page
                     self.store_index.append(None, [id_page, suranm[1]])
                 else:
                     self.my_aya[id_page].append(ayat[5])
Example #5
0
def tafsir_ayat(widget, buff, parent):
    if buff.get_has_selection():
        sel = buff.get_selection_bounds()
        text = buff.get_text(sel[0], sel[1],True)
        if len(text) >= 3:
            all_ayat = Othman().search('"'+text+'"')
            parent.tafsirpage.store_search.clear()
            if len(all_ayat) == 0:
                asm_customs.erro(parent, 'لا يوجد نتيجة'); return
            else: 
                for ayat in all_ayat:
                    i_sura = ayat[0]
                    i_ayat = ayat[1]
                    suras_names = Othman().get_suras_names()
                    sura = suras_names[i_sura-1]
                    parent.tafsirpage.store_search.append(None, [i_sura, i_ayat, sura[1]])
                    parent.tafsirpage.notebook.set_current_page(1)
            parent.tafsirpage.view_tafsir_bfr.set_text('')
            parent.tafsirpage.sel_search.select_path((0,))
            parent.notebook.set_current_page(4)
            parent.tafsirpage.ok_result()
Example #6
0
 def is_tafsir(self, all_in_page):
     try:
         sora, aya, na = all_in_page[6], all_in_page[7], all_in_page[8]
     except:
         sora = 0
     if sora > 0 and sora < 115:
         try:
             na = int(na)
         except:
             na = 1
         nasse_quran = ' '.join(Othman().get_ayat(sora, aya, aya + na))
         self.view_nasse_bfr.insert(self.view_nasse_bfr.get_start_iter(),
                                    u" \nـــــــــــــــــــ\n")
         self.view_nasse_bfr.insert_with_tags(
             self.view_nasse_bfr.get_start_iter(), nasse_quran,
             self.view_quran_tag)
Example #7
0
 def tafsir_ayat(self, *a):
     all_ayat = self.db.ayat_in_page(self.page_id)
     self.parent.tafsirpage.store_search.clear()
     if len(all_ayat[0]) == 0:
         asm_customs.erro(self.parent, 'لا يوجد نتيجة')
         return
     else:
         for ayat in all_ayat:
             i_sura = ayat[0]
             i_ayat = ayat[1]
             suras_names = Othman().get_suras_names()
             sura = suras_names[i_sura - 1]
             self.parent.tafsirpage.store_search.append(
                 None, [i_sura, i_ayat, sura[1]])
             self.parent.tafsirpage.notebook.set_current_page(1)
     self.parent.tafsirpage.view_tafsir_bfr.set_text('')
     self.parent.tafsirpage.sel_search.select_path((0, ))
     self.parent.notebook.set_current_page(4)
     self.parent.tafsirpage.ok_result()
Example #8
0
 def __init__(self, parent, id_book):
     self.parent = parent
     self.listdb = listDB()
     book = self.listdb.file_book(id_book)
     self.db = bookDB(book, id_book)
     self.othman = Othman()
     Gtk.Dialog.__init__(self, parent=self.parent)
     self.set_icon_name("asmaa")
     self.resize(750, 450)
     self.set_modal(True)
     self.set_title(u'تعديل تفسير : {}'.format(self.db.book_name,))
     self.connect('destroy', self.quit_dlg)
     box = self.vbox
     box.set_border_width(5)
     
     # a عارض النص-----------------------------------
     self.view_nasse = asm_customs.ViewClass()
     self.view_nasse.set_name('View')
     self.view_nasse_bfr = self.view_nasse.get_buffer()
     self.view_quran_tag = self.view_nasse_bfr.create_tag("quran")
     self.view_quran_tag.set_property('foreground', self.parent.theme.color_quran)
     self.view_quran_tag.set_property("paragraph-background", self.parent.theme.background_quran)
     self.view_quran_tag.set_property('font', self.parent.theme.font_quran)
     self.scroll_nasse = Gtk.ScrolledWindow()
     self.scroll_nasse.set_shadow_type(Gtk.ShadowType.IN)
     self.scroll_nasse.add(self.view_nasse)
     box.pack_start(self.scroll_nasse, True, True, 0)
     box.pack_start(Gtk.HSeparator(), False, False, 3)
     
     hb = Gtk.Box(spacing=7,orientation=Gtk.Orientation.HORIZONTAL)
     self.lab_id_pg = Gtk.Label('جزء 1 ، صفحة 1')
     hb.pack_start(self.lab_id_pg, False, False, 3)
     adj = Gtk.Adjustment(1, 1, len(self.db.list_pages), 1, 5.0, 0.0)
     self.id_pg = Gtk.SpinButton()
     self.id_pg.connect('changed', self.change_id_pg)
     self.id_pg.set_adjustment(adj)
     lab = Gtk.Label('معرف الصفحة')
     self.id_pg.set_wrap(True)
     self.id_pg.set_size_request(100, -1)
     hb.pack_end(self.id_pg, False, False, 0)
     hb.pack_end(lab, False, False, 0)
     box.pack_start(hb, False, False, 3)
     
     box.pack_start(Gtk.HSeparator(), False, False, 3)
     
     hb = Gtk.Box(spacing=7,orientation=Gtk.Orientation.HORIZONTAL)
     sura_list = self.othman.get_suras_names()
     hb0, self.suras = asm_customs.combo(sura_list, u'السورة')
     hb.pack_start(hb0, False, False, 3)
     self.suras.set_active(-1)
     
     adj = Gtk.Adjustment(0, 0, 0, 1, 5.0, 0.0)
     self.n_ayas = Gtk.SpinButton()
     self.n_ayas.set_adjustment(adj)
     lab = Gtk.Label('عدد الآيات')
     self.n_ayas.set_wrap(True)
     self.n_ayas.set_size_request(100, -1)
     hb.pack_end(self.n_ayas, False, False, 0)
     hb.pack_end(lab, False, False, 0)
     
     adj = Gtk.Adjustment(0, 0, 0, 1, 5.0, 0.0)
     self.ayas = Gtk.SpinButton()
     self.ayas.set_adjustment(adj)
     lab = Gtk.Label('أول آية')
     self.ayas.set_wrap(True)
     self.ayas.set_size_request(100, -1)
     hb.pack_end(self.ayas, False, False, 0)
     hb.pack_end(lab, False, False, 0)
     box.pack_start(hb, False, False, 3)
     
     hbox = Gtk.Box(spacing=5,orientation=Gtk.Orientation.HORIZONTAL)
     save_btn = asm_customs.ButtonClass("غيّر")
     save_btn.set_tooltip_text('ثبت السورة والآيات للصفحة الحالية')
     save_btn.connect('clicked', self.save_cb)
     hbox.pack_start(save_btn, False, False, 0)
     no_save_btn = asm_customs.ButtonClass("أخل")
     no_save_btn.set_tooltip_text('ألغ ربط الصفحة الحالية بالآيات')
     no_save_btn.connect('clicked', self.no_save_cb)
     hbox.pack_start(no_save_btn, False, False, 0)
     clo = asm_customs.ButtonClass("إغلاق")
     clo.connect('clicked', self.quit_dlg)
     hbox.pack_end(clo, False, False, 0)
     box.pack_end(hbox, False, False, 0)
     box.pack_end(Gtk.HSeparator(), False, False, 3)
     
     self.suras.connect('changed', self.select_sura)
     self.show_all()
Example #9
0
class EditTafsir(Gtk.Dialog):
    
    def quit_dlg(self, *a):
        self.destroy()
        self.db.close_db()
        del self.db
    
    def save_cb(self, *a):
        id_page = self.id_pg.get_value()
        sura = self.suras.get_active()+1
        aya = self.ayas.get_value()
        na = self.n_ayas.get_value()
        if sura == 0 or aya == 0 or na == 0: return
        self.db.edit_tafsir(id_page, sura, aya, na)
        self.change_id_pg()
        
    def no_save_cb(self, *a):
        id_page = self.id_pg.get_value()
        #self.suras.set_active(-1)
        #self.ayas.set_value(0)
        #self.n_ayas.set_value(0)
        self.db.edit_tafsir(id_page, 0, 0, 0)
        self.change_id_pg()
    
    def is_tafsir(self, all_in_page):
        try: sora, aya, na = all_in_page[6], all_in_page[7], all_in_page[8]
        except: sora = 0
        if sora > 0 and sora < 115:
            try: na = int(na)
            except: na = 1
            nasse_quran = ' '.join(self.othman.get_ayat(sora,aya,aya+na))
            self.view_nasse_bfr.insert(self.view_nasse_bfr.get_start_iter(), u" \n")
            self.view_nasse_bfr.insert_with_tags(self.view_nasse_bfr.get_start_iter(), 
                                                 nasse_quran, self.view_quran_tag)
    
    def change_id_pg(self, *a):
        page_id = self.id_pg.get_value()
        all_in_page = self.db.get_text_body(page_id)
        self.lab_id_pg.set_text(u'جزء {} ، صفحة {}'.format(all_in_page[3], all_in_page[4]))
        try:
            if all_in_page[6] != 0:
                self.suras.set_active(int(all_in_page[6])-1)
                self.ayas.set_value(int(all_in_page[7]))
                self.n_ayas.set_value(int(all_in_page[8]))
        except:
            pass
        self.view_nasse_bfr.set_text(all_in_page[2])
        self.is_tafsir(all_in_page)
        self.scroll_nasse.get_vadjustment().set_value(0.0)
    
    def select_sura(self, w):
        if self.suras.get_active() == -1: return
        ayat = asm_customs.value_active(w, 2)
        adj = self.ayas.get_adjustment()
        adj.set_upper(ayat)
        adj.set_value(1)
        adj = self.n_ayas.get_adjustment()
        adj.set_upper(ayat)
        adj.set_value(1)
    
    def __init__(self, parent, id_book):
        self.parent = parent
        self.listdb = listDB()
        book = self.listdb.file_book(id_book)
        self.db = bookDB(book, id_book)
        self.othman = Othman()
        Gtk.Dialog.__init__(self, parent=self.parent)
        self.set_icon_name("asmaa")
        self.resize(750, 450)
        self.set_modal(True)
        self.set_title(u'تعديل تفسير : {}'.format(self.db.book_name,))
        self.connect('destroy', self.quit_dlg)
        box = self.vbox
        box.set_border_width(5)
        
        # a عارض النص-----------------------------------
        self.view_nasse = asm_customs.ViewClass()
        self.view_nasse.set_name('View')
        self.view_nasse_bfr = self.view_nasse.get_buffer()
        self.view_quran_tag = self.view_nasse_bfr.create_tag("quran")
        self.view_quran_tag.set_property('foreground', self.parent.theme.color_quran)
        self.view_quran_tag.set_property("paragraph-background", self.parent.theme.background_quran)
        self.view_quran_tag.set_property('font', self.parent.theme.font_quran)
        self.scroll_nasse = Gtk.ScrolledWindow()
        self.scroll_nasse.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_nasse.add(self.view_nasse)
        box.pack_start(self.scroll_nasse, True, True, 0)
        box.pack_start(Gtk.HSeparator(), False, False, 3)
        
        hb = Gtk.Box(spacing=7,orientation=Gtk.Orientation.HORIZONTAL)
        self.lab_id_pg = Gtk.Label('جزء 1 ، صفحة 1')
        hb.pack_start(self.lab_id_pg, False, False, 3)
        adj = Gtk.Adjustment(1, 1, len(self.db.list_pages), 1, 5.0, 0.0)
        self.id_pg = Gtk.SpinButton()
        self.id_pg.connect('changed', self.change_id_pg)
        self.id_pg.set_adjustment(adj)
        lab = Gtk.Label('معرف الصفحة')
        self.id_pg.set_wrap(True)
        self.id_pg.set_size_request(100, -1)
        hb.pack_end(self.id_pg, False, False, 0)
        hb.pack_end(lab, False, False, 0)
        box.pack_start(hb, False, False, 3)
        
        box.pack_start(Gtk.HSeparator(), False, False, 3)
        
        hb = Gtk.Box(spacing=7,orientation=Gtk.Orientation.HORIZONTAL)
        sura_list = self.othman.get_suras_names()
        hb0, self.suras = asm_customs.combo(sura_list, u'السورة')
        hb.pack_start(hb0, False, False, 3)
        self.suras.set_active(-1)
        
        adj = Gtk.Adjustment(0, 0, 0, 1, 5.0, 0.0)
        self.n_ayas = Gtk.SpinButton()
        self.n_ayas.set_adjustment(adj)
        lab = Gtk.Label('عدد الآيات')
        self.n_ayas.set_wrap(True)
        self.n_ayas.set_size_request(100, -1)
        hb.pack_end(self.n_ayas, False, False, 0)
        hb.pack_end(lab, False, False, 0)
        
        adj = Gtk.Adjustment(0, 0, 0, 1, 5.0, 0.0)
        self.ayas = Gtk.SpinButton()
        self.ayas.set_adjustment(adj)
        lab = Gtk.Label('أول آية')
        self.ayas.set_wrap(True)
        self.ayas.set_size_request(100, -1)
        hb.pack_end(self.ayas, False, False, 0)
        hb.pack_end(lab, False, False, 0)
        box.pack_start(hb, False, False, 3)
        
        hbox = Gtk.Box(spacing=5,orientation=Gtk.Orientation.HORIZONTAL)
        save_btn = asm_customs.ButtonClass("غيّر")
        save_btn.set_tooltip_text('ثبت السورة والآيات للصفحة الحالية')
        save_btn.connect('clicked', self.save_cb)
        hbox.pack_start(save_btn, False, False, 0)
        no_save_btn = asm_customs.ButtonClass("أخل")
        no_save_btn.set_tooltip_text('ألغ ربط الصفحة الحالية بالآيات')
        no_save_btn.connect('clicked', self.no_save_cb)
        hbox.pack_start(no_save_btn, False, False, 0)
        clo = asm_customs.ButtonClass("إغلاق")
        clo.connect('clicked', self.quit_dlg)
        hbox.pack_end(clo, False, False, 0)
        box.pack_end(hbox, False, False, 0)
        box.pack_end(Gtk.HSeparator(), False, False, 3)
        
        self.suras.connect('changed', self.select_sura)
        self.show_all()
Example #10
0
    def __init__(self, parent):
        self.db = None
        self.current_id = 1
        self.part_now = 1
        self.page_now = 1
        self.nm_book = 'التفسير الميسر'
        self.parent = parent
        self.othman = Othman()
        self.listbook = listDB()
        sura_list = self.othman.get_suras_names()
        self.opened_new = []
        self.opened_old = []
        Gtk.HBox.__init__(self, False, 0)
        vbox = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)

        self.notebook = Gtk.Notebook()
        self.notebook.set_show_tabs(False)
        vb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)
        vb.set_border_width(5)
        self.load_list()
        self.tafsirs = asm_customs.combo(self.store_tafasir, 'التفسير')
        self.tafsirs.set_wrap_width(self.n_warp)
        vb.pack_start(self.tafsirs, False, False, 0)
        self.tafsirs.set_active(0)

        adj = Gtk.Adjustment(1, 1, 7, 1, 5.0, 0.0)
        self.ayas = Gtk.SpinButton()
        self.ayas.set_adjustment(adj)
        self.ayas.set_value(1.0)
        self.ayas.connect('activate', self.select_aya)

        hb, self.suras = asm_customs.combo(sura_list, 'السورة')
        self.suras.set_wrap_width(10)
        vb.pack_start(hb, False, False, 0)
        self.suras.set_active(0)

        hb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.HORIZONTAL)
        lab = Gtk.Label('الآيــــة')
        self.ayas.set_wrap(True)
        self.ayas.set_size_request(140, -1)
        hb.pack_start(lab, False, False, 0)
        hb.pack_end(self.ayas, False, False, 0)
        vb.pack_start(hb, False, False, 0)

        show_search = Gtk.Button('أظهر البحث')

        def show_search_cb(w):
            self.notebook.set_current_page(1)
            self.ok_result()

        show_search.connect('clicked', show_search_cb)
        vb.pack_end(show_search, False, False, 0)
        modif_list_tafsir = Gtk.Button('تعديل قائمة التفاسير')
        modif_list_tafsir.connect('clicked', self.show_modif_list_tafsir)
        vb.pack_end(modif_list_tafsir, False, False, 0)
        self.notebook.append_page(vb, Gtk.Label('تصفح'))

        vb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)
        vb.set_border_width(5)

        self.tafsirs1 = asm_customs.combo(self.store_tafasir, 'التفسير')
        self.tafsirs1.set_wrap_width(self.n_warp)
        vb.pack_start(self.tafsirs1, False, False, 0)
        self.tafsirs1.set_active(0)

        self.search_entry = Gtk.SearchEntry()
        self.search_entry.set_placeholder_text('بحث في القرآن')
        self.search_entry.connect('activate', self.search_on_quran)
        hbox = Gtk.HBox(False, 2)
        hbox.pack_start(self.search_entry, True, True, 0)
        vb.pack_start(hbox, False, False, 0)

        self.store_search = Gtk.TreeStore(int, int, str)
        self.tree_search = Gtk.TreeView()
        self.tree_search.set_name('Tree')
        self.tree_search.set_model(self.store_search)
        cell = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn('السورة', cell, text=2)
        self.tree_search.append_column(column)
        cell = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn('الآية', cell, text=1)
        self.tree_search.append_column(column)
        self.sel_search = self.tree_search.get_selection()
        self.tree_search.connect("cursor-changed", self.ok_result)
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.tree_search)

        show_browse = Gtk.Button('أظهر التصفح')

        def show_browse_cb(w):
            self.notebook.set_current_page(0)
            self.select_tafsir()

        show_browse.connect('clicked', show_browse_cb)
        vb.pack_end(show_browse, False, False, 0)

        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        vb.pack_start(scroll, True, True, 0)
        self.notebook.append_page(vb, Gtk.Label('بحث'))
        vbox.pack_start(self.notebook, True, True, 0)
        self.pack_start(vbox, False, False, 0)

        self.view_tafsir = asm_customs.ViewClass()
        self.view_tafsir.set_name('View')
        self.view_tafsir_bfr = self.view_tafsir.get_buffer()
        self.view_tafsir.connect_after("populate-popup",
                                       asm_popup.populate_popup, self.parent)
        self.view_quran_tag = self.view_tafsir_bfr.create_tag("quran")
        self.view_search_tag = self.view_tafsir_bfr.create_tag("search")
        self.change_font()
        self.scroll_nasse = Gtk.ScrolledWindow()
        self.scroll_nasse.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_nasse.add(self.view_tafsir)
        self.pack_start(self.scroll_nasse, True, True, 0)

        self.tafsirs.connect('changed', self.select_tafsir)
        self.tafsirs1.connect('changed', self.ok_result)
        self.change_sura = self.suras.connect('changed', self.select_sura)
        self.change_aya = self.ayas.connect('value-changed', self.select_aya)
        self.show_all()
        self.select_aya(self.ayas)
Example #11
0
class Tafsir(Gtk.HBox):
    def show_tafsir(self, tafsir, sura, aya):
        self.aya_now = aya
        self.db = bookDB(asm_path.TAFSIR_DB, -1)
        if tafsir != None:
            if tafsir != -1:
                self.db.close_db()
                del self.db
                book = self.listbook.file_book(tafsir)
                self.db = bookDB(book, tafsir)
        id_page = self.db.page_ayat(sura, aya)
        self.show_page(id_page)

    def mov_browse(self, id_page):
        self.suras.handler_block(self.change_sura)
        self.ayas.handler_block(self.change_aya)
        self.all_in_page = self.db.get_text_body(
            id_page)  #rowid, id, text, part, page, hno, sora, aya, na
        if self.all_in_page in [None, "", 0
                                ] or self.all_in_page[7] in [None, "", 0]:
            self.suras.set_active(-1)
            self.ayas.set_sensitive(False)
        elif self.notebook.get_current_page() == 0:
            if self.all_in_page[6] >= 1 and self.suras.get_active(
            ) != self.all_in_page[6] - 1:
                self.suras.set_active(self.all_in_page[6] - 1)
                self.ayas.set_sensitive(True)
                ayat = asm_customs.value_active(self.suras, 2)
                adj = self.ayas.get_adjustment()
                if ayat == None: ayat = 100
                adj.set_upper(ayat)
                adj.set_value(1)
            if self.aya_now in range(self.all_in_page[7], self.all_in_page[7] +
                                     self.all_in_page[8]):
                self.ayas.set_value(self.aya_now)
            else:
                self.ayas.set_value(self.all_in_page[7])

        self.suras.handler_unblock(self.change_sura)
        self.ayas.handler_unblock(self.change_aya)

    def show_page(self, id_page):
        self.all_in_page = self.db.get_text_body(
            id_page)  #rowid, id, text, part, page, hno, sora, aya, na
        self.current_id = self.all_in_page[0]
        self.part_now = self.all_in_page[3]
        self.page_now = self.all_in_page[4]
        self.view_tafsir_bfr.set_text(self.all_in_page[2])
        text = self.parent.entry_search.get_text()
        if len(text) >= 2 and text != "ال":
            self.search_now(text)
        try:
            sora, aya, na = self.all_in_page[6], self.all_in_page[
                7], self.all_in_page[8]
        except:
            sora = 0
        if sora > 0 and sora < 115:
            try:
                na = int(na)
            except:
                na = 1
            tafsir_quran = ' '.join(self.othman.get_ayat(sora, aya, aya + na))
            self.view_tafsir_bfr.insert(self.view_tafsir_bfr.get_start_iter(),
                                        " \nـــــــــــــــــــ\n")
            self.view_tafsir_bfr.insert_with_tags(
                self.view_tafsir_bfr.get_start_iter(), tafsir_quran,
                self.view_quran_tag)
        # add to list browse
        if len(self.opened_old) == 0:
            self.opened_old.append([id_page, self.tafsirs.get_active()])
        elif ([id_page, self.tafsirs.get_active()]) != self.opened_old[-1]:
            self.opened_old.append([id_page, self.tafsirs.get_active()])
        # change n aya and n sura
        self.mov_browse(id_page)
        self.scroll_nasse.get_vadjustment().set_value(0.0)

    def ok_result(self, *a):
        model, i = self.sel_search.get_selected()
        if i:
            sura = model.get_value(i, 0)
            aya = model.get_value(i, 1)
            tafsir = asm_customs.value_active(self.tafsirs1, 0)
            self.show_tafsir(tafsir, sura, aya)

    def near_page(self, v):
        self.size_font += v
        self.view_tafsir.override_font(
            Pango.FontDescription("{}".format(self.size_font, )))

    def select_tafsir(self, *a):
        self.nm_book = asm_customs.value_active(self.tafsirs, 1)
        tafsir = asm_customs.value_active(self.tafsirs, 0)
        sura = asm_customs.value_active(self.suras, 0)
        aya = self.ayas.get_value()
        self.show_tafsir(tafsir, sura, aya)

    def select_sura(self, w):
        self.ayas.set_sensitive(True)
        sura = asm_customs.value_active(w, 0)
        ayat = asm_customs.value_active(w, 2)
        adj = self.ayas.get_adjustment()
        adj.set_upper(ayat)
        adj.set_value(1)
        tafsir = asm_customs.value_active(self.tafsirs, 0)
        self.show_tafsir(tafsir, sura, 1)

    def select_aya(self, w):
        sura = asm_customs.value_active(self.suras, 0)
        aya = int(w.get_text())
        adj = self.ayas.get_adjustment()
        if aya > adj.get_upper(): aya = adj.get_upper()
        tafsir = asm_customs.value_active(self.tafsirs, 0)
        self.show_tafsir(tafsir, sura, aya)

    def first_page(self, *a):
        self.show_page(self.db.first_page())

    def previous_page(self, *a):
        self.show_page(self.db.previous_page(self.current_id))

    def next_page(self, *a):
        self.show_page(self.db.next_page(self.current_id))

    def last_page(self, *a):
        self.show_page(self.db.last_page())

    def back_to_old(self, *a):
        if len(self.opened_old) == 1: return
        n = self.opened_old.pop()
        self.tafsirs.set_active(self.opened_old[-1][1])
        self.show_page(self.opened_old[-1][0])
        self.opened_new.append(n)

    def advance_to_new(self, *a):
        if len(self.opened_new) == 0: return
        n = self.opened_new.pop()
        self.tafsirs.set_active(n[1])
        self.show_page(n[0])
        if n != self.opened_old[-1]: self.opened_old.append(n)

    def search_on_quran(self, *a):
        text = self.search_entry.get_text()
        if len(text) >= 3:
            all_ayat = Othman().search('"' + text + '"')
            self.store_search.clear()
            if len(all_ayat) == 0:
                asm_customs.erro(self.parent, 'لا يوجد نتيجة')
                return
            else:
                for ayat in all_ayat:
                    i_sura = ayat[0]
                    i_ayat = ayat[1]
                    suras_names = Othman().get_suras_names()
                    sura = suras_names[i_sura - 1]
                    self.store_search.append(None, [i_sura, i_ayat, sura[1]])

    def search_on_active(self, text):
        return

    def search_on_page(self, text):
        self.show_page(self.all_in_page[1])
        self.search_now(text)

    def search_now(self, text):
        search_tokens = []
        nasse = self.view_tafsir_bfr.get_text(
            self.view_tafsir_bfr.get_start_iter(),
            self.view_tafsir_bfr.get_end_iter(), True)
        if text == '':
            return
        else:
            text = text.strip()
            ls_term = asm_araby.fuzzy(text).split(' ')
        for text in ls_term:
            if len(text) == 1 or text == "ال": continue
            new_term = ''
            for l in text:
                new_term += '({}(\u0651)?([\u064b\u064c\u064d\u064e\u064f\u0650\u0652])?)'.format(
                    l, )
            new_term = new_term.replace('ا', '[اأإؤءئى]')
            new_term = new_term.replace('ه', '[هة]')
            re_term = re.compile('({})'.format(new_term, ))
            r_findall = re_term.findall(nasse)
            for r in r_findall:
                if r[0] not in search_tokens: search_tokens.append(r[0])
        asm_customs.with_tag(self.view_tafsir_bfr, self.view_search_tag,
                             search_tokens, 1, self.view_tafsir)

    def change_font(self, *a):
        self.view_quran_tag.set_property('foreground',
                                         self.parent.theme.color_quran)
        self.view_quran_tag.set_property("paragraph-background",
                                         self.parent.theme.background_quran)
        self.view_quran_tag.set_property('font', self.parent.theme.font_quran)
        self.view_search_tag.set_property('foreground',
                                          self.parent.theme.color_searched)
        self.view_search_tag.set_property(
            'background', self.parent.theme.background_searched)

    def load_list(self, *a):
        self.store_tafasir = []
        list_tafsir = eval(asm_config.getv('list_tafsir'))
        if list_tafsir[2] == 0:
            all_tafsir = self.listbook.all_tafsir()
            for a in all_tafsir:
                self.store_tafasir.append(a)
        elif list_tafsir[2] == 1:
            for a in list_tafsir[1]:
                if self.listbook.tit_book(a) != None and len(
                        self.listbook.tit_book(a)) > 1:
                    self.store_tafasir.append(
                        [a, self.listbook.tit_book(a)[1]])
        self.store_tafasir.insert(0, [-1, 'التفسير الميسر'])
        self.n_warp = list_tafsir[0] + 1

    def refresh_list(self, *a):
        model = self.tafsirs.get_model()
        model1 = self.tafsirs1.get_model()
        model.clear()
        model1.clear()
        list_tafsir = eval(asm_config.getv('list_tafsir'))
        model.append([-1, 'التفسير الميسر', 0])
        model1.append([-1, 'التفسير الميسر', 0])
        for a in list_tafsir[1]:
            model.append([a, self.listbook.tit_book(a)[1], 0])
            model1.append([a, self.listbook.tit_book(a)[1], 0])
        self.tafsirs.set_active(0)
        self.tafsirs1.set_active(0)
        self.tafsirs.set_wrap_width(list_tafsir[0] + 1)
        self.tafsirs1.set_wrap_width(list_tafsir[0] + 1)
        self.tafsirs.show_all()
        self.tafsirs1.show_all()

    def show_modif_list_tafsir(self, *a):
        ListTafasir(self.parent)
        return

    def __init__(self, parent):
        self.db = None
        self.current_id = 1
        self.part_now = 1
        self.page_now = 1
        self.nm_book = 'التفسير الميسر'
        self.parent = parent
        self.othman = Othman()
        self.listbook = listDB()
        sura_list = self.othman.get_suras_names()
        self.opened_new = []
        self.opened_old = []
        Gtk.HBox.__init__(self, False, 0)
        vbox = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)

        self.notebook = Gtk.Notebook()
        self.notebook.set_show_tabs(False)
        vb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)
        vb.set_border_width(5)
        self.load_list()
        self.tafsirs = asm_customs.combo(self.store_tafasir, 'التفسير')
        self.tafsirs.set_wrap_width(self.n_warp)
        vb.pack_start(self.tafsirs, False, False, 0)
        self.tafsirs.set_active(0)

        adj = Gtk.Adjustment(1, 1, 7, 1, 5.0, 0.0)
        self.ayas = Gtk.SpinButton()
        self.ayas.set_adjustment(adj)
        self.ayas.set_value(1.0)
        self.ayas.connect('activate', self.select_aya)

        hb, self.suras = asm_customs.combo(sura_list, 'السورة')
        self.suras.set_wrap_width(10)
        vb.pack_start(hb, False, False, 0)
        self.suras.set_active(0)

        hb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.HORIZONTAL)
        lab = Gtk.Label('الآيــــة')
        self.ayas.set_wrap(True)
        self.ayas.set_size_request(140, -1)
        hb.pack_start(lab, False, False, 0)
        hb.pack_end(self.ayas, False, False, 0)
        vb.pack_start(hb, False, False, 0)

        show_search = Gtk.Button('أظهر البحث')

        def show_search_cb(w):
            self.notebook.set_current_page(1)
            self.ok_result()

        show_search.connect('clicked', show_search_cb)
        vb.pack_end(show_search, False, False, 0)
        modif_list_tafsir = Gtk.Button('تعديل قائمة التفاسير')
        modif_list_tafsir.connect('clicked', self.show_modif_list_tafsir)
        vb.pack_end(modif_list_tafsir, False, False, 0)
        self.notebook.append_page(vb, Gtk.Label('تصفح'))

        vb = Gtk.Box(spacing=7, orientation=Gtk.Orientation.VERTICAL)
        vb.set_border_width(5)

        self.tafsirs1 = asm_customs.combo(self.store_tafasir, 'التفسير')
        self.tafsirs1.set_wrap_width(self.n_warp)
        vb.pack_start(self.tafsirs1, False, False, 0)
        self.tafsirs1.set_active(0)

        self.search_entry = Gtk.SearchEntry()
        self.search_entry.set_placeholder_text('بحث في القرآن')
        self.search_entry.connect('activate', self.search_on_quran)
        hbox = Gtk.HBox(False, 2)
        hbox.pack_start(self.search_entry, True, True, 0)
        vb.pack_start(hbox, False, False, 0)

        self.store_search = Gtk.TreeStore(int, int, str)
        self.tree_search = Gtk.TreeView()
        self.tree_search.set_name('Tree')
        self.tree_search.set_model(self.store_search)
        cell = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn('السورة', cell, text=2)
        self.tree_search.append_column(column)
        cell = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn('الآية', cell, text=1)
        self.tree_search.append_column(column)
        self.sel_search = self.tree_search.get_selection()
        self.tree_search.connect("cursor-changed", self.ok_result)
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.tree_search)

        show_browse = Gtk.Button('أظهر التصفح')

        def show_browse_cb(w):
            self.notebook.set_current_page(0)
            self.select_tafsir()

        show_browse.connect('clicked', show_browse_cb)
        vb.pack_end(show_browse, False, False, 0)

        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        vb.pack_start(scroll, True, True, 0)
        self.notebook.append_page(vb, Gtk.Label('بحث'))
        vbox.pack_start(self.notebook, True, True, 0)
        self.pack_start(vbox, False, False, 0)

        self.view_tafsir = asm_customs.ViewClass()
        self.view_tafsir.set_name('View')
        self.view_tafsir_bfr = self.view_tafsir.get_buffer()
        self.view_tafsir.connect_after("populate-popup",
                                       asm_popup.populate_popup, self.parent)
        self.view_quran_tag = self.view_tafsir_bfr.create_tag("quran")
        self.view_search_tag = self.view_tafsir_bfr.create_tag("search")
        self.change_font()
        self.scroll_nasse = Gtk.ScrolledWindow()
        self.scroll_nasse.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_nasse.add(self.view_tafsir)
        self.pack_start(self.scroll_nasse, True, True, 0)

        self.tafsirs.connect('changed', self.select_tafsir)
        self.tafsirs1.connect('changed', self.ok_result)
        self.change_sura = self.suras.connect('changed', self.select_sura)
        self.change_aya = self.ayas.connect('value-changed', self.select_aya)
        self.show_all()
        self.select_aya(self.ayas)
Example #12
0
 def __init__(self, parent):
     self.parent = parent
     self.db = Othman()
     self.opened_new = []
     self.opened_old = []
     self.build()
Example #13
0
class ViewerMoshaf(Gtk.HPaned):
    def __init__(self, parent):
        self.parent = parent
        self.db = Othman()
        self.opened_new = []
        self.opened_old = []
        self.build()

    def show_bitaka(self, *a):
        return [
            '', '', '', '''
كلام رب العالمين على الحقيقة بألفاظه ومعانيه 
محفوظ في الصدور ، مقروء بالألسنة مكتوب في المصاحف
تكلم به الله تعالى فسمعه جبريل منه 
وتكلم به جبريل فسمعه النبي - صلى الله عليه وسلم - منه ، 
وتكلم به النبي - صلى الله عليه وسلم - فسمعته منه أمته وحفظته عنه ، 
فالكلام كلام الباري والصوت صوت القارئ . 
قال الله تعالى : فأجره حتى يسمع كلام الله  الآية 
        ''', ''''''
        ]

    def first_page(self, *a):
        self.show_page(1)

    def previous_page(self, *a):
        if self.page_id == 1:
            return
        self.show_page(self.page_id - 1)

    def next_page(self, *a):
        if self.page_id == 604:
            return
        self.show_page(self.page_id + 1)

    def last_page(self, *a):
        self.show_page(604)

    def back_to_old(self, *a):
        if len(self.opened_old) == 1: return
        n = self.opened_old.pop()
        self.show_page(self.opened_old[-1])
        self.opened_new.append(n)

    def advance_to_new(self, *a):
        if len(self.opened_new) == 0: return
        n = self.opened_new.pop()
        self.show_page(n)
        if n != self.opened_old[-1]: self.opened_old.append(n)

    def ok_index(self, *a):
        model, i = self.sel_index.get_selected()
        if i:
            page = model.get_value(i, 0)
            self.show_page(page)

    def show_page(self, page=1):
        new_list = []
        sura = ''
        ls_text = self.db.text_in_page(page)
        ls_text.reverse()
        for a in range(len(ls_text)):
            if a % 2 == 0:
                txt = '<div id = "nasse">' + ' '.join(ls_text[a]) + '</div>'
                new_list.append(txt)
            else:
                sura = ls_text[a][1]
                if page != 1 and page != 187:
                    new_list.append(
                        '<div id = "basmala">بِــــسۡمِ ٱللهِ ٱلرَّحۡمَـٰنِ ٱلرَّحِيمِ</div>'
                    )
                tit = title_sura.replace('الترتيب', 'الترتيب{}'.format(ls_text[a][0]),).\
                replace('السورة', 'سورة '+ls_text[a][1]).replace('الآيات', 'الآيات{}'.format(ls_text[a][3]))
                new_list.append(tit)
        new_list.reverse()
        if [] in new_list: new_list.remove([])
        if sura == '': sura = self.db.info_page(page)[0]
        new_text = ' '.join(new_list)
        html = open(join(asm_path.MOSHAF_DIR, 'page_quran.html'), 'r')
        html = html.read()
        html = html.replace('{nasse}', new_text)
        html = html.replace('{sura}', 'سورة ' + sura)
        html = html.replace('{joze}',
                            'الجزء ' + ajzaa[self.db.info_page(page)[1]])
        html = html.replace('{page}', str(page))
        if len(self.my_aya.keys()) != 0:
            if page in self.my_aya.keys():
                for a in self.my_aya[page]:
                    aya_txt = self.db.get_aya(a)
                    html = re.sub(
                        aya_txt,
                        '<span style="background-color: rgb(255, 245, 177);">{}</span>'
                        .format(aya_txt, ), html)
        self.view_quran.load_alternate_html(
            html, 'file://{}/'.format(asm_path.MOSHAF_DIR, ),
            'file://{}/'.format(asm_path.MOSHAF_DIR, ))
        self.page_id = page
        if len(self.opened_old) == 0: self.opened_old.append(page)
        elif page != self.opened_old[-1]: self.opened_old.append(page)

    def load_sura(self, *a):
        for a in self.list_sura:
            while (Gtk.events_pending()):
                Gtk.main_iteration()
            s = self.store_index.append(None, a[0])
            for b in a[1:]:
                self.store_index.append(s, b)

    def load_tahzib(self, *a):
        iters = [None]
        last_iter = None
        last_level = 0
        for i in self.list_ahzab:
            level = i[2]
            if level > last_level: iters.append(last_iter)
            elif level < last_level:
                for j in range(last_level - level):
                    iters.pop()
            try:
                last_iter = self.store_index.append(iters[-1], [i[0], i[1]])
            except:
                pass
            last_level = level

    def load_page(self, *a):
        for page in range(1, 605):
            self.store_index.append(None, [page, 'الصفحة {}'.format(page, )])

    def load_index(self, btn):
        self.tree_index.handler_block(self.changed_index)
        v = btn.get_active()
        self.store_index.clear()
        if v == 0:
            self.load_sura()
        elif v == 1:
            self.load_tahzib()
        elif v == 2:
            self.load_page()
        self.my_aya = {}
        self.show_page(self.page_id)
        self.tree_index.handler_unblock(self.changed_index)

    def tafsir_ayat(self, *a):
        all_ayat = self.db.ayat_in_page(self.page_id)
        self.parent.tafsirpage.store_search.clear()
        if len(all_ayat[0]) == 0:
            asm_customs.erro(self.parent, 'لا يوجد نتيجة')
            return
        else:
            for ayat in all_ayat:
                i_sura = ayat[0]
                i_ayat = ayat[1]
                suras_names = Othman().get_suras_names()
                sura = suras_names[i_sura - 1]
                self.parent.tafsirpage.store_search.append(
                    None, [i_sura, i_ayat, sura[1]])
                self.parent.tafsirpage.notebook.set_current_page(1)
        self.parent.tafsirpage.view_tafsir_bfr.set_text('')
        self.parent.tafsirpage.sel_search.select_path((0, ))
        self.parent.notebook.set_current_page(4)
        self.parent.tafsirpage.ok_result()

    def populate_page_popup_cb(self, webview, context_menu, hit_result_event,
                               event):
        context_menu.remove_all()
        action1 = Gtk.Action.new('تفسير الآيات', 'تفسير الآيات', None)
        action1.connect('activate', self.tafsir_ayat)
        option1 = WebKit2.ContextMenuItem().new(action1)
        context_menu.append(option1)

#     def populate_page_popup_cb1(self, view, menu, ev, p):
# #         for a in menu.get_children():
# #             a.destroy()
#         f1 = WebKit2.ContextMenu('تفسير الآيات')
#         f1.connect('activate', self.tafsir_ayat)
#         menu.append(f1)
#         c1 = Gtk.SeparatorMenuItem()
#         menu.append(c1)
#         c1.show()
#         i = Gtk.MenuItem('')
#         i.connect('activate', lambda m,v,*a,**k: v.zoom_in(), view)
#         menu.append(i)
#         i = Gtk.MenuItem('تصغير النص')
#         i.connect('activate', lambda m,v,**k: v.zoom_out(), view)
#         menu.append(i)
#         i = Gtk.MenuItem('الحجم العادي')
#         i.connect('activate', lambda m,v,*a,**k: v.get_zoom_level() == 1.0 or v.set_zoom_level(1.0), view)
#         menu.append(i)
#         menu.show_all()
#         return False

    def search_on_page(self, text):
        return

    def search_on_active(self, text):
        if len(text) >= 3:
            all_ayat = Othman().search(text)
            self.store_index.clear()
            if len(all_ayat) == 0:
                asm_customs.erro(self.parent, 'لا يوجد نتيجة')
                return
            else:
                for ayat in all_ayat:
                    sura = ayat[0]
                    aya = ayat[1]
                    suras_names = Othman().get_suras_names()
                    suranm = suras_names[sura - 1]
                    id_page = self.db.aya_page(aya, sura)
                    if id_page != self.id_page_last:
                        self.my_aya[id_page] = [ayat[5]]
                        self.id_page_last = id_page
                        self.store_index.append(None, [id_page, suranm[1]])
                    else:
                        self.my_aya[id_page].append(ayat[5])

    def build(self, *a):
        self.id_page_last = 0
        try:
            self.list_sura = pickle.load(
                open(join(asm_path.MOSHAF_DIR, 'list_sura.pkl'), "rb"))
            self.list_ahzab = pickle.load(
                open(join(asm_path.MOSHAF_DIR, 'list_ahzab.pkl'), "rb"))
        except:
            self.list_sura = []
            self.list_ahzab = []
        self.my_aya = {}
        self.page_id = asm_config.getn('quran_pos')
        Gtk.HPaned.__init__(self)
        self.set_border_width(3)
        self.set_position(150)
        # a الفهرس-----------------------------------
        vbox = Gtk.VBox(False, 3)
        index_by = Gtk.ComboBoxText()
        index_by.append_text('السور')
        index_by.append_text('الأجزاء')
        index_by.append_text('الصفحات')
        index_by.set_active(0)
        vbox.pack_start(index_by, False, False, 0)
        self.tree_index = Gtk.TreeView()
        self.tree_index.set_name('Tree')
        self.tree_index.set_headers_visible(False)
        cell = Gtk.CellRendererText()
        cell.set_property("wrap-width", 150)
        kal = Gtk.TreeViewColumn('الفهرس', cell, text=1)
        self.tree_index.append_column(kal)
        self.store_index = Gtk.TreeStore(int, str)
        self.tree_index.set_model(self.store_index)
        self.sel_index = self.tree_index.get_selection()
        self.changed_index = self.tree_index.connect("cursor-changed",
                                                     self.ok_index)
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.tree_index)
        scroll.get_hadjustment().set_value(0.0)
        vbox.pack_start(scroll, True, True, 0)
        self.pack1(vbox, True, True)

        self.view_quran = WebKit2.WebView()

        self.view_quran.connect("context-menu", self.populate_page_popup_cb)
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.view_quran)
        self.view_quran.set_zoom_level(True)
        self.pack2(scroll, True, True)
        index_by.connect('changed', self.load_index)
        self.load_index(index_by)
Example #14
0
class OpenBook(Gtk.VBox):
    def __init__(self, parent, book, id_book):
        Gtk.VBox.__init__(self, False, 3)
        self.db_list = listDB()
        self.parent = parent
        self.othman = Othman()
        self.id_book = id_book
        self.book = book
        self.nm_book = basename(book)[:-4]
        self.db = bookDB(book, id_book)
        self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        self.current_id = 1
        self.opened_new = []
        self.opened_old = []
        self.build()

    def set_tashkil(self, *a):
        self.show_page(self.all_in_page[1])
        if asm_config.getn('tashkil') == 0:
            now_text = asm_araby.stripHarakat(self.all_in_page[2])
        else:
            now_text = self.all_in_page[2]
        ch = self.stack.get_visible_child_name()
        if ch == "n1":
            self.view_nasse_bfr1.set_text(now_text)
            self.view_nasse_bfr1.insert(self.view_nasse_bfr1.get_end_iter(),
                                        " \n")
        else:
            self.view_nasse_bfr2.set_text(now_text)
            self.view_nasse_bfr2.insert(self.view_nasse_bfr2.get_end_iter(),
                                        " \n")

    def show_bitaka(self, *a):
        box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL)
        bitaka_book = self.db.info_book()[3]
        info_book = self.db.info_book()[4]
        dlg = Gtk.Dialog(parent=self.parent)
        dlg.set_icon_name("asmaa")
        dlg.set_default_size(450, 300)
        area = dlg.get_content_area()
        area.set_spacing(6)

        hb_bar = Gtk.HeaderBar()
        hb_bar.set_show_close_button(True)
        dlg.set_titlebar(hb_bar)
        stack = Gtk.Stack()
        stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
        stack.set_transition_duration(1000)
        stack_switcher = Gtk.StackSwitcher()
        stack_switcher.set_stack(stack)
        hb_bar.set_custom_title(stack_switcher)

        self.view_info = asm_customs.ViewClass()
        self.view_info.set_name('View')
        self.view_info_bfr = self.view_info.get_buffer()
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.view_info)
        stack.add_titled(scroll, 'n1', ' بطاقة')
        self.view_info_bfr.set_text(bitaka_book)

        self.view_info1 = asm_customs.ViewClass()
        self.view_info1.set_name('View')
        self.view_info_bfr1 = self.view_info1.get_buffer()
        scroll = Gtk.ScrolledWindow()
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.add(self.view_info1)
        stack.add_titled(scroll, 'n2', 'نبذة')
        self.view_info_bfr1.set_text(info_book)
        #-----------------------------------------
        ls2 = [self.view_info, self.view_info1]
        for a in ls2:
            szfont, fmfont = asm_customs.split_font(
                self.parent.theme.font_nasse_others)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(
                self.parent.theme.color_nasse_others) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.parent.theme.background_nasse_others) + ''';
            }
            #View text selection, #View:selected  {
            color: ''' + asm_customs.rgb(
                        self.parent.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                            self.parent.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)
        box.pack_start(stack, True, True, 0)
        area.pack_start(box, True, True, 0)
        dlg.show_all()

    def change_font(self, *a):
        ls0 = [self.tree_index, self.tree_search]
        for a in ls0:
            szfont, fmfont = asm_customs.split_font(
                self.parent.theme.font_lists_titles)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            }
            #Tree:selected {
            color: ''' + asm_customs.rgb(
                self.parent.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.parent.theme.background_selected) + ''';
            }
            #Tree:hover {
            color: ''' + asm_customs.rgb(self.parent.theme.color_hover) + ''';
            background-color: ''' + asm_customs.rgb(
                        self.parent.theme.background_hover) + ''';
            }
            #Tree {
            color: ''' + asm_customs.rgb(
                            self.parent.theme.color_lists_titles) + ''';
            background-color: ''' + asm_customs.rgb(
                                self.parent.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.view_nasse1, self.view_nasse2]
        for a in ls1:
            szfont, fmfont = asm_customs.split_font(
                self.parent.theme.font_nasse_books)
            data = '''
            * {
            font-family: "''' + fmfont + '''";
            font-size: ''' + szfont + '''px;
            color: ''' + asm_customs.rgb(
                self.parent.theme.color_nasse_books) + ''';
            background-color: ''' + asm_customs.rgb(
                    self.parent.theme.background_nasse_books) + ''';
            }
            #View text selection, #View:selected  {
            color: ''' + asm_customs.rgb(
                        self.parent.theme.color_selected) + ''';
            background-color: ''' + asm_customs.rgb(
                            self.parent.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)
        #-----------------------------------------------
        self.view_title_tag1.set_property('foreground',
                                          self.parent.theme.color_anawin)
        self.view_quran_tag1.set_property('foreground',
                                          self.parent.theme.color_quran)
        self.view_terms_tag1.set_property('foreground',
                                          self.parent.theme.color_anawin)
        self.view_title_tag2.set_property('foreground',
                                          self.parent.theme.color_anawin)
        self.view_quran_tag2.set_property('foreground',
                                          self.parent.theme.color_quran)
        self.view_terms_tag2.set_property('foreground',
                                          self.parent.theme.color_anawin)
        self.view_search_tag1.set_property('foreground',
                                           self.parent.theme.color_searched)
        self.view_search_tag2.set_property('foreground',
                                           self.parent.theme.color_searched)
        self.view_title_tag1.set_property('font',
                                          self.parent.theme.font_anawin)
        self.view_quran_tag1.set_property('font', self.parent.theme.font_quran)
        self.view_title_tag2.set_property('font',
                                          self.parent.theme.font_anawin)
        self.view_quran_tag2.set_property('font', self.parent.theme.font_quran)
        self.view_quran_tag2.set_property("paragraph-background",
                                          self.parent.theme.background_quran)
        self.view_quran_tag1.set_property("paragraph-background",
                                          self.parent.theme.background_quran)
        self.view_search_tag1.set_property(
            'background', self.parent.theme.background_searched)
        self.view_search_tag2.set_property(
            'background', self.parent.theme.background_searched)
        self.view_title_tag1.set_property('background',
                                          self.parent.theme.background_anawin)
        self.view_terms_tag1.set_property('background',
                                          self.parent.theme.background_anawin)
        self.view_title_tag2.set_property('background',
                                          self.parent.theme.background_anawin)
        self.view_terms_tag2.set_property('background',
                                          self.parent.theme.background_anawin)

    def search_on_active(self, text):
        if text == '': return
        self.store_search.clear()
        self.scroll_index.hide()
        self.scroll_search.show_all()
        phrase = '''fuzzy(nass) LIKE ? ESCAPE "|"'''
        text = asm_araby.fuzzy(text)
        self.search_tokens = asm_araby.tokenize_search(text)
        phrase2 = list(
            map(
                lambda phrase: '%' + phrase.replace('|', '||').replace(
                    '%', '|%') + '%', self.search_tokens))
        if len(phrase2) < 1: return []
        condition = ' AND '.join([phrase] * len(phrase2))
        self.db.search(text, self.store_search, condition, phrase2)
        if len(self.store_search) == 0:
            self.hide_search()
            asm_customs.erro(self.parent, 'لا يوجد نتائج')
            return
        self.hp.set_position(200)

    def hide_search(self, *a):
        self.scroll_index.show_all()
        self.scroll_search.hide()
        if len(self.list_index) > 1:
            self.hp.set_position(200)
        else:
            self.hp.set_position(1)
        self.entry_index.set_text('')

    def search_on_page(self, text):
        self.show_page(self.all_in_page[1])
        self.search_now(text)

    def search_now(self, text):
        search_tokens1 = []
        search_tokens2 = []
        star_iter1 = self.view_nasse_bfr1.get_start_iter()
        end_iter1 = self.view_nasse_bfr1.get_end_iter()
        star_iter2 = self.view_nasse_bfr2.get_start_iter()
        end_iter2 = self.view_nasse_bfr2.get_end_iter()
        self.view_nasse_bfr1.remove_tag_by_name("search1", star_iter1,
                                                end_iter1)
        self.view_nasse_bfr2.remove_tag_by_name("search2", star_iter2,
                                                end_iter2)
        nasse1 = self.view_nasse_bfr1.get_text(star_iter1, end_iter1, True)
        nasse2 = self.view_nasse_bfr2.get_text(star_iter2, end_iter2, True)
        if text == '':
            return
        else:
            text = text.strip()
            ls_term = asm_araby.fuzzy(text).split(' ')
        for text in ls_term:
            if len(text) == 1 or text == "ال": continue
            new_term = ''
            for l in text:
                new_term += '({}(\u0651)?([\u064b\u064c\u064d\u064e\u064f\u0650\u0652])?)'.format(
                    l, )
            new_term = new_term.replace('ا', '[اأإؤءئى]')
            new_term = new_term.replace('ه', '[هة]')
            re_term = re.compile('({})'.format(new_term, ))
            r_findall1 = re_term.findall(nasse1)
            r_findall2 = re_term.findall(nasse2)
            for r in r_findall1:
                if r[0] not in search_tokens1: search_tokens1.append(r[0])
            for r in r_findall2:
                if r[0] not in search_tokens2: search_tokens2.append(r[0])
        asm_customs.with_tag(self.view_nasse_bfr1, self.view_search_tag1,
                             search_tokens1, 1, self.view_nasse1)
        asm_customs.with_tag(self.view_nasse_bfr2, self.view_search_tag2,
                             search_tokens2, 1, self.view_nasse2)

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

    def index_highlight(self, model, path, i, page_id):
        pid = model.get(i, 0)[0]
        if pid == page_id:
            self.tree_index.expand_to_path(path)
            self.tree_index.scroll_to_cell(path)
            self.sel_index.select_path(path)
            return True
        else:
            return False

    def first_page(self, *a):
        self.stack.set_transition_type(self.style_browse_prev)
        if self.db.first_page() == self.all_in_page[1]: return
        self.show_page(self.db.first_page())
        id_page = self.all_in_page[1]
        try:
            self.store_index.foreach(self.index_highlight, id_page)
        except:
            pass
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        GObject.timeout_add(200, self.reset_event)

    def previous_page(self, *a):
        self.stack.set_transition_type(self.style_browse_prev)
        if self.db.previous_page(self.current_id) == self.all_in_page[1]:
            return
        self.show_page(self.db.previous_page(self.current_id))
        id_page = self.all_in_page[1]
        try:
            self.store_index.foreach(self.index_highlight, id_page)
        except:
            pass
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        GObject.timeout_add(200, self.reset_event)

    def next_page(self, *a):
        self.stack.set_transition_type(self.style_browse_next)
        if self.db.next_page(self.current_id) == self.all_in_page[1]: return
        self.show_page(self.db.next_page(self.current_id))
        id_page = self.all_in_page[1]
        try:
            self.store_index.foreach(self.index_highlight, id_page)
        except:
            pass
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        GObject.timeout_add(200, self.reset_event)

    def last_page(self, *a):
        self.stack.set_transition_type(self.style_browse_next)
        if self.db.last_page() == self.all_in_page[1]: return
        self.show_page(self.db.last_page())
        id_page = self.all_in_page[1]
        try:
            self.store_index.foreach(self.index_highlight, id_page)
        except:
            pass
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        GObject.timeout_add(200, self.reset_event)

    def back_to_old(self, *a):
        if len(self.opened_old) == 1: return
        n = self.opened_old.pop()
        self.stack.set_transition_type(self.style_browse_prev)
        self.show_page(self.opened_old[-1])
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        self.opened_new.append(n)

    def advance_to_new(self, *a):
        if len(self.opened_new) == 0: return
        n = self.opened_new.pop()
        self.stack.set_transition_type(self.style_browse_prev)
        self.show_page(n)
        ch = self.stack.get_visible_child_name()
        if ch == "n1": self.stack.set_visible_child_name("n2")
        else: self.stack.set_visible_child_name("n1")
        if n != self.opened_old[-1]: self.opened_old.append(n)

    def set_index(self, *a):
        self.store_index.clear()
        self.list_index = self.db.index_book()
        iters = [None]
        last_iter = None
        last_level = 0
        last_id = self.db_list.get_last(self.id_book)
        if last_id == None or last_id[0] == 0:
            self.show_page(self.db.first_page())
        else:
            self.show_page(last_id[0])
        self.stack.set_visible_child_name("n2")
        #-----------------------------------
        if len(self.list_index) > 1:
            self.hp.set_position(200)
        else:
            self.hp.set_position(1)
        v = 0
        for i in self.list_index:
            v += 1
            if v % 1000 == 999:
                while (Gtk.events_pending()):
                    Gtk.main_iteration()
            level = i[3]
            if level > last_level: iters.append(last_iter)
            elif level < last_level:
                for j in range(last_level - level):
                    iters.pop()
            try:
                last_iter = self.store_index.append(iters[-1], [i[1], i[2]])
            except:
                pass
            last_level = level

    def ok_index(self, *a):
        model, i = self.sel_index.get_selected()
        if i:
            p = model.get_path(i)
            if model.iter_has_child(i):
                if self.tree_index.row_expanded(p):
                    self.tree_index.collapse_row(p)
                else:
                    self.tree_index.expand_row(p, False)
            id_page = model.get_value(i, 0)
            tit = model.get_value(i, 1)

            if self.current_id < id_page:
                self.stack.set_transition_type(self.style_browse_next)
            elif self.current_id > id_page:
                self.stack.set_transition_type(self.style_browse_prev)
            elif self.current_id == id_page:
                return
            self.show_page(id_page)
            ch = self.stack.get_visible_child_name()
            if ch == "n1":
                self.stack.set_visible_child_name("n2")
                asm_customs.with_tag(self.view_nasse_bfr1,
                                     self.title_select_tag1, [
                                         tit,
                                     ], 0, self.view_nasse1)
            else:
                self.stack.set_visible_child_name("n1")
                asm_customs.with_tag(self.view_nasse_bfr2,
                                     self.title_select_tag2, [
                                         tit,
                                     ], 0, self.view_nasse2)
            GObject.timeout_add(200, self.reset_event)

    def ok_search(self, *a):
        model, i = self.sel_search.get_selected()
        if i:
            p = model.get_path(i)
            if model.iter_has_child(i):
                if self.tree_search.row_expanded(p):
                    self.tree_search.collapse_row(p)
                else:
                    self.tree_search.expand_row(p, False)
            id_page = model.get_value(i, 0)

            if self.current_id < id_page:
                self.stack.set_transition_type(self.style_browse_next)
            elif self.current_id > id_page:
                self.stack.set_transition_type(self.style_browse_prev)
            elif self.current_id == id_page:
                return
            self.show_page(id_page)
            ch = self.stack.get_visible_child_name()
            if ch == "n1":
                self.stack.set_visible_child_name("n2")
            else:
                self.stack.set_visible_child_name("n1")

    def show_page(self, id_page):
        self.all_in_page = self.db.get_text_body(
            id_page)  #rowid, id, text, part, page, hno, sora, aya, na
        if asm_config.getn('tashkil') == 0:
            now_text = asm_araby.stripHarakat(self.all_in_page[2])
        else:
            now_text = self.all_in_page[2]
        self.has_commment(id_page)
        titles = self.db.titles_page(self.all_in_page[1])
        ch = self.stack.get_visible_child_name()
        if ch == "n1":
            self.view_nasse_bfr2.set_text(now_text)
            self.view_nasse_bfr2.insert(self.view_nasse_bfr2.get_end_iter(),
                                        " \n")
            try:
                asm_customs.with_tag(self.view_nasse_bfr2,
                                     self.view_title_tag2, titles)
            except:
                pass
        else:
            self.view_nasse_bfr1.set_text(now_text)
            self.view_nasse_bfr1.insert(self.view_nasse_bfr1.get_end_iter(),
                                        " \n")
            try:
                asm_customs.with_tag(self.view_nasse_bfr1,
                                     self.view_title_tag1, titles)
            except:
                pass
        self.is_tafsir(self.all_in_page)
        self.current_id = self.all_in_page[0]
        self.ent_page.set_text(str(self.all_in_page[4]))
        self.ent_part.set_text(str(self.all_in_page[3]))
        text = self.parent.entry_search.get_text()
        if len(text) >= 2 and text != "ال":
            self.search_now(text)
        if len(self.opened_old) == 0: self.opened_old.append(id_page)
        elif id_page != self.opened_old[-1]: self.opened_old.append(id_page)
        self.stack.show_all()
        self.scroll_nasse1.get_vadjustment().set_value(0.0)
        self.scroll_nasse2.get_vadjustment().set_value(0.0)

    def reset_event(self, *a):
        self.scroll_nasse1.get_vadjustment().set_lower(True)
        self.scroll_nasse2.get_vadjustment().set_lower(True)
        self.scroll_nasse1.get_vadjustment().set_value(0.0)
        self.scroll_nasse2.get_vadjustment().set_value(0.0)

    def scroll_event(self, sc, ev):
        if asm_config.getn('mouse_browse') == 0: return
        vadj = sc.get_vadjustment()
        p = vadj.get_page_size()
        m = vadj.get_upper() - p
        v = vadj.get_value()
        if m == v:
            if self.vadj_page_next == 5:
                self.next_page()
                self.vadj_page_next = 0
            else:
                self.vadj_page_next += 1
        elif v <= 1.0:
            if self.vadj_page_prev == 5:
                if ev.get_scroll_deltas()[2] == -1.0:
                    self.previous_page()
                if ev.get_scroll_deltas()[2] == 1.0:
                    self.next_page()
                self.vadj_page_prev = 0
            else:
                self.vadj_page_prev += 1
        else:
            self.vadj_page_next = 0
            self.vadj_page_prev = 0

    def convert_browse(self, *a):
        ls = [1, 2, 5, 10, 15, 20, 30]
        self.stack.set_transition_duration(ls[asm_config.getn('time_browse')] *
                                           100)
        GObject.source_remove(self.timeo)
        self.timeo = GLib.timeout_add(
            100 / ((asm_config.getn('auto_browse')) * 8), self.autoScroll,
            None)
        if asm_config.getn('style_browse') == 0:
            self.style_browse_next = Gtk.StackTransitionType.NONE
            self.style_browse_prev = Gtk.StackTransitionType.NONE
        elif asm_config.getn('style_browse') == 1:
            self.style_browse_next = Gtk.StackTransitionType.CROSSFADE
            self.style_browse_prev = Gtk.StackTransitionType.CROSSFADE
        elif asm_config.getn('style_browse') == 2:
            self.style_browse_next = Gtk.StackTransitionType.SLIDE_LEFT
            self.style_browse_prev = Gtk.StackTransitionType.SLIDE_RIGHT
        elif asm_config.getn('style_browse') == 3:
            self.style_browse_next = Gtk.StackTransitionType.SLIDE_UP
            self.style_browse_prev = Gtk.StackTransitionType.SLIDE_DOWN

    def has_commment(self, id_page):
        if self.db.show_comment(id_page) != None and self.db.show_comment(
                id_page) != []:
            img = Gtk.Image.new_from_icon_name('view-paged-symbolic', 2)
        else:
            img = Gtk.Image.new_from_icon_name('document-new-symbolic', 2)
        self.comment_btn.set_image(img)
        self.comment_btn.show_all()

    def is_tafsir(self, all_in_page):
        try:
            sora, aya, na = int(all_in_page[6]), int(
                all_in_page[7]), all_in_page[8]
        except:
            sora = 0
        if sora > 0 and sora < 115:
            try:
                na = int(na)
            except:
                na = 1
            nasse_quran = ' '.join(self.othman.get_ayat(sora, aya, aya + na))
            ch = self.stack.get_visible_child_name()
            if ch == "n2":
                self.view_nasse_bfr1.insert(
                    self.view_nasse_bfr1.get_start_iter(), " \n")
                self.view_nasse_bfr1.insert_with_tags(
                    self.view_nasse_bfr1.get_start_iter(), nasse_quran,
                    self.view_quran_tag1)
            else:
                self.view_nasse_bfr2.insert(
                    self.view_nasse_bfr2.get_start_iter(), " \n")
                self.view_nasse_bfr2.insert_with_tags(
                    self.view_nasse_bfr2.get_start_iter(), nasse_quran,
                    self.view_quran_tag2)

    #aمؤقت-------------------------------
    def dialog_move_to_page(self, *a):
        dlg = Gtk.Dialog(parent=self.parent)
        dlg.set_icon_name("asmaa")
        dlg.set_position(Gtk.WindowPosition.MOUSE)
        dlg.set_title('انتقل إلى صفحة محدّدة')
        parts_all, pages_all = self.db.parts_pages(self.all_in_page[3])
        ent_page = Gtk.Entry()
        lab_page = Gtk.Label(u"عدد الصفحات " + str(pages_all))
        ent_page.set_text(str(self.all_in_page[4]))
        ent_part = Gtk.Entry()
        lab_part = Gtk.Label(u"عدد الأجزاء " + str(parts_all))
        ent_part.set_text(str(self.all_in_page[3]))
        clo = asm_customs.ButtonClass("ألغ")
        clo.connect('clicked', lambda *a: dlg.destroy())
        move = Gtk.Button("انتقل")

        def replace_cb(widget):
            n_page = int(ent_page.get_text())
            n_part = int(ent_part.get_text())
            id_page = self.db.go_to_page(n_part, n_page)
            if id_page == None:
                for n in range(20):
                    id_page = self.db.go_to_nearer_page(n_part, n_page, n + 1)
                    if id_page != None: break
            if id_page == None:
                asm_customs.erro(self.parent,
                                 "لا يمكن الذهاب إلى الصفحة المحددة")
                return
            if self.current_id < id_page[0]:
                self.stack.set_transition_type(self.style_browse_next)
            elif self.current_id > id_page[0]:
                self.stack.set_transition_type(self.style_browse_prev)
            elif self.current_id == id_page[0]:
                return
            self.show_page(id_page[0])
            ch = self.stack.get_visible_child_name()
            if ch == "n1":
                self.stack.set_visible_child_name("n2")
            else:
                self.stack.set_visible_child_name("n1")
            dlg.destroy()

        move.connect('clicked', replace_cb)
        ent_page.connect('activate', replace_cb)
        ent_part.connect('activate', replace_cb)
        box = dlg.vbox
        box.set_border_width(5)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(ent_page, False, False, 3)
        hb.pack_start(lab_page, False, False, 3)
        box.pack_start(hb, False, False, 3)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(ent_part, False, False, 3)
        hb.pack_start(lab_part, False, False, 3)
        box.pack_start(hb, False, False, 3)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(move, False, False, 0)
        hb.pack_end(clo, False, False, 0)
        box.pack_end(hb, False, False, 0)
        dlg.show_all()

    def move_to_page(self, *a):
        parts_all, pages_all = self.db.parts_pages(self.all_in_page[3])
        self.lab_page_move.set_label("عدد الصفحات " + str(pages_all))
        self.lab_part_move.set_label("عدد الأجزاء " + str(parts_all))
        self.ent_page_move.set_text(str(self.all_in_page[4]))
        self.ent_part_move.set_text(str(self.all_in_page[3]))

    def search_entry(self, *a):
        text = asm_araby.fuzzy(self.entry_index.get_text())
        if text == '':
            self.scroll_index.show_all()
            self.scroll_search.hide()
        else:
            self.scroll_index.hide()
            titles = self.db.search_index(text)
            self.store_search.clear()
            c = 1
            for a in titles:
                self.store_search.append([a[0], c, a[1], '', 0, 0, '', 0])
                c += 1
            self.scroll_search.show_all()

    def autoScroll(self, *a):
        if not self.autoScrolling: return True
        ch = self.stack.get_visible_child_name()
        if ch == "n1":
            vadj = self.scroll_nasse1.get_vadjustment()
        else:
            vadj = self.scroll_nasse2.get_vadjustment()
        m = vadj.get_upper() - vadj.get_page_size()
        n = min(m, vadj.get_value() + 0.1)
        if n == m: self.btn_autoScroll.set_active(False)
        vadj.set_value(n)
        return True

    def autoScrollCb(self, b, *a):
        self.autoScrolling = b.get_active()

    # a تحرير الكتاب المفتوح----------------------------------

    def editbk_cb(self, *a):
        if asm_path.can_modify(self.parent):
            msg = asm_customs.sure(
                self.parent,
                'عملية تعديل الكتاب عملية دقيقة،\nأي خطأ قد يؤدي لتلف الكتاب،\nهل تريد الاستمرار؟'
            )
            if msg == Gtk.ResponseType.YES:
                self.parent.editbook.close_db()
                book = self.db_list.file_book(self.id_book)
                self.parent.editbook.add_book(book, self.id_book,
                                              self.all_in_page[1])
                self.parent.notebook.set_current_page(7)

    def comment_cb(self, *a):
        if asm_path.can_modify(self.parent):
            # interface--------------------------------------
            box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL)
            dlg = Gtk.Dialog(parent=self.parent)
            dlg.set_icon_name("asmaa")
            dlg.set_default_size(380, 300)
            area = dlg.get_content_area()
            area.set_spacing(6)

            hb_bar = Gtk.HeaderBar()
            hb_bar.set_show_close_button(True)
            dlg.set_titlebar(hb_bar)
            hb_bar.set_title('التعليق')

            view_comment = Gtk.TextView()
            view_comment_bfr = view_comment.get_buffer()
            scroll = Gtk.ScrolledWindow()
            scroll.set_shadow_type(Gtk.ShadowType.IN)
            scroll.add(view_comment)
            # functions------------------------------------
            id_page = self.all_in_page[1]

            def add_widget():
                dlg.show_all()
                if self.db.show_comment(
                        id_page) != None and self.db.show_comment(
                            id_page) != []:
                    update_btn.show_all()
                    delete_btn.show_all()
                    save_btn.hide()
                    view_comment_bfr.set_text(self.db.show_comment(id_page)[0])
                else:
                    save_btn.show_all()
                    update_btn.hide()
                    delete_btn.hide()

            #-----------------------
            def save_cb(w):
                comment = view_comment_bfr.get_text(
                    view_comment_bfr.get_start_iter(),
                    view_comment_bfr.get_end_iter(), False)
                if comment == '': return
                self.db.add_comment(id_page, comment)
                add_widget()
                img = Gtk.Image.new_from_icon_name('view-paged-symbolic', 2)
                self.comment_btn.set_image(img)
                self.comment_btn.show_all()

            #------------------------
            def update_cb(w):
                comment = view_comment_bfr.get_text(
                    view_comment_bfr.get_start_iter(),
                    view_comment_bfr.get_end_iter(), False)
                self.db.update_comment(id_page, comment)

            #-------------------------
            def delete_cb(w):
                self.db.remove_comment(id_page)
                view_comment_bfr.set_text('')
                add_widget()
                img = Gtk.Image.new_from_icon_name('document-new-symbolic', 2)
                self.comment_btn.set_image(img)
                self.comment_btn.show_all()

            #-----------------------------------
            save_btn = asm_customs.ButtonClass("حفظ")
            save_btn.connect('clicked', save_cb)
            update_btn = asm_customs.ButtonClass("حفظ")
            update_btn.connect('clicked', update_cb)
            delete_btn = asm_customs.ButtonClass("حذف")
            delete_btn.connect('clicked', delete_cb)
            hbox = Gtk.Box(spacing=0, orientation=Gtk.Orientation.HORIZONTAL)
            Gtk.StyleContext.add_class(hbox.get_style_context(), "linked")
            hbox.pack_start(update_btn, False, False, 0)
            hbox.pack_start(delete_btn, False, False, 0)
            hb_bar.pack_start(hbox)
            hb_bar.pack_start(save_btn)
            #----------------------------
            box.pack_start(scroll, True, True, 0)
            area.pack_start(box, True, True, 0)
            #dlg.show_all()
            add_widget()

    def build(self, *a):
        self.vadj_page_next = 0
        self.vadj_page_prev = 0
        self.hp = Gtk.HPaned()
        self.parent.connect("check-resize", self.convert_browse)

        # a الفهرس-----------------------------------
        vbox = Gtk.VBox(False, 0)
        self.tree_index = Gtk.TreeView()
        self.tree_index.set_name('Tree')
        cell = Gtk.CellRendererText()
        cell.set_property("ellipsize", Pango.EllipsizeMode.END)
        kal = Gtk.TreeViewColumn('الفهرس', cell, text=1)
        self.tree_index.append_column(kal)
        self.store_index = Gtk.TreeStore(int, str)
        self.tree_index.set_model(self.store_index)
        self.sel_index = self.tree_index.get_selection()
        self.tree_index.connect("cursor-changed", self.ok_index)
        self.scroll_index = Gtk.ScrolledWindow()
        self.scroll_index.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_index.add(self.tree_index)
        #self.scroll_index.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.AUTOMATIC)
        self.scroll_index.get_hadjustment().set_value(0.0)
        vbox.pack_start(self.scroll_index, True, True, 0)
        #----------------------------------------------
        self.tree_search = Gtk.TreeView()
        self.tree_search.set_name('Tree')
        cell = Gtk.CellRendererText()
        raq = Gtk.TreeViewColumn('الرقم', cell, text=1)
        self.tree_search.append_column(raq)
        cell = Gtk.CellRendererText()
        cell.set_property("ellipsize", Pango.EllipsizeMode.END)
        kal = Gtk.TreeViewColumn('أغلق النتائج', cell, text=2)
        kal.set_expand(True)
        kal.set_clickable(True)
        kal.connect('clicked', self.hide_search)
        self.tree_search.append_column(kal)
        self.store_search = Gtk.ListStore(int, int, str, str, int, int, str,
                                          int)
        self.tree_search.set_model(self.store_search)
        self.sel_search = self.tree_search.get_selection()
        self.tree_search.connect("cursor-changed", self.ok_search)
        self.scroll_search = Gtk.ScrolledWindow()
        self.scroll_search.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_search.add(self.tree_search)
        self.scroll_search.get_hadjustment().set_value(0.0)
        vbox.pack_start(self.scroll_search, True, True, 0)

        try:
            self.entry_index = Gtk.SearchEntry()
        except:
            self.entry_index = Gtk.Entry()
        self.entry_index.set_placeholder_text('بحث في الفهرس')
        self.entry_index.connect('changed', self.search_entry)
        vbox.pack_start(self.entry_index, False, False, 3)
        self.hp.pack1(vbox, True, True)

        # a عارض النص-----------------------------------
        vbox = Gtk.VBox(False, 0)
        self.stack = Gtk.Stack()
        vbox.pack_start(self.stack, True, True, 0)
        #-------------------------------------
        self.view_nasse1 = asm_customs.ViewClass()
        self.view_nasse1.set_name('View')
        self.view_nasse_bfr1 = self.view_nasse1.get_buffer()
        self.view_nasse1.connect_after("populate-popup",
                                       asm_popup.populate_popup, self.parent)
        #self.view_nasse1.connect('button-press-event', self.sss)
        self.scroll_nasse1 = Gtk.ScrolledWindow()
        #self.scroll_nasse1.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        self.scroll_nasse1.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_nasse1.add(self.view_nasse1)
        self.scroll_event_name1 = self.scroll_nasse1.connect(
            'scroll-event', self.scroll_event)
        self.view_title_tag1 = self.view_nasse_bfr1.create_tag("title1")
        self.view_quran_tag1 = self.view_nasse_bfr1.create_tag("quran1")
        self.view_search_tag1 = self.view_nasse_bfr1.create_tag("search1")
        self.view_terms_tag1 = self.view_nasse_bfr1.create_tag("terms1")
        self.title_select_tag1 = self.view_nasse_bfr1.create_tag("tit_select1")
        self.stack.add_named(self.scroll_nasse1, 'n1')
        #-------------------------------------
        self.view_nasse2 = asm_customs.ViewClass()
        self.view_nasse2.set_name('View')
        self.view_nasse_bfr2 = self.view_nasse2.get_buffer()
        self.view_nasse2.connect_after("populate-popup",
                                       asm_popup.populate_popup, self.parent)
        self.scroll_nasse2 = Gtk.ScrolledWindow()
        #self.scroll_nasse2.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        self.scroll_nasse2.set_shadow_type(Gtk.ShadowType.IN)
        self.scroll_nasse2.add(self.view_nasse2)
        self.scroll_event_name2 = self.scroll_nasse2.connect(
            'scroll-event', self.scroll_event)
        self.view_title_tag2 = self.view_nasse_bfr2.create_tag("title2")
        self.view_quran_tag2 = self.view_nasse_bfr2.create_tag("quran2")
        self.view_search_tag2 = self.view_nasse_bfr2.create_tag("search2")
        self.view_terms_tag2 = self.view_nasse_bfr2.create_tag("terms2")
        self.title_select_tag2 = self.view_nasse_bfr2.create_tag("tit_select2")
        self.stack.add_named(self.scroll_nasse2, 'n2')
        #----------------------------------------
        hbox = Gtk.HBox(False, 3)
        hbox.set_border_width(3)
        hbox.pack_start(Gtk.Label('('), False, False, 0)
        self.ent_page = Gtk.Label()
        hbox.pack_start(self.ent_page, False, False, 0)
        hbox.pack_start(Gtk.Label('/'), False, False, 0)
        self.ent_part = Gtk.Label()
        hbox.pack_start(self.ent_part, False, False, 0)
        hbox.pack_start(Gtk.Label(')'), False, False, 0)

        move_btn = Gtk.MenuButton()
        img = Gtk.Image.new_from_icon_name('go-jump-symbolic', 2)
        move_btn.set_image(img)
        self.popover = Gtk.Popover()
        move_btn.set_popover(self.popover)
        self.ent_page_move = Gtk.Entry()
        self.ent_part_move = Gtk.Entry()
        self.lab_page_move = Gtk.Label("عدد الصفحات ")
        self.lab_part_move = Gtk.Label("عدد الأجزاء ")
        move = Gtk.Button("انتقل")

        def replace_cb(widget):
            n_page = int(self.ent_page_move.get_text())
            n_part = int(self.ent_part_move.get_text())
            id_page = self.db.go_to_page(n_part, n_page)
            if id_page == None:
                for n in range(20):
                    id_page = self.db.go_to_nearer_page(n_part, n_page, n + 1)
                    if id_page != None: break
            if id_page == None:
                asm_customs.erro(self.parent,
                                 "لا يمكن الذهاب إلى الصفحة المحددة")
                return
            if self.current_id < id_page[0]:
                self.stack.set_transition_type(self.style_browse_next)
            elif self.current_id > id_page[0]:
                self.stack.set_transition_type(self.style_browse_prev)
            elif self.current_id == id_page[0]:
                return
            self.show_page(id_page[0])
            ch = self.stack.get_visible_child_name()
            if ch == "n1":
                self.stack.set_visible_child_name("n2")
            else:
                self.stack.set_visible_child_name("n1")
            self.popover.hide()

        move.connect('clicked', replace_cb)
        self.ent_page_move.connect('activate', replace_cb)
        self.ent_part_move.connect('activate', replace_cb)
        box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL)
        box.set_border_width(5)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(self.ent_page_move, False, False, 3)
        hb.pack_start(self.lab_page_move, False, False, 3)
        box.pack_start(hb, False, False, 3)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(self.ent_part_move, False, False, 3)
        hb.pack_start(self.lab_part_move, False, False, 3)
        box.pack_start(hb, False, False, 3)
        hb = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
        hb.pack_start(move, False, False, 0)
        box.pack_end(hb, False, False, 0)
        move_btn.connect("clicked", self.move_to_page)
        box.show_all()
        self.popover.add(box)
        move_btn.set_tooltip_text('الانتقال إلى الصفحة المحددة')
        hbox.pack_start(move_btn, False, False, 10)

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

        self.comment_btn = Gtk.Button()
        self.comment_btn.set_tooltip_text("أظهر التعليق")
        self.comment_btn.connect('clicked', self.comment_cb)
        btnbox_action.pack_start(self.comment_btn, False, False, 0)
        vbox.pack_start(hbox, False, False, 0)
        self.btn_autoScroll = Gtk.ToggleButton()
        img = Gtk.Image.new_from_icon_name('media-seek-forward-symbolic-rtl',
                                           2)
        self.btn_autoScroll.add(img)
        self.btn_autoScroll.set_tooltip_text("استعراض آلي")
        btnbox_action.pack_start(self.btn_autoScroll, False, False, 0)
        hbox.pack_start(btnbox_action, False, False, 0)
        self.autoScrolling = False
        self.btn_autoScroll.connect("clicked", self.autoScrollCb)
        self.timeo = GLib.timeout_add(
            100 / ((asm_config.getn('auto_browse')) * 8), self.autoScroll,
            None)

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

        bitaka = Gtk.Button()
        bitaka.set_tooltip_text("بطاقة عن الكتاب")
        bitaka.connect('clicked', self.show_bitaka)
        img = Gtk.Image.new_from_icon_name('dialog-information-symbolic', 2)
        bitaka.set_image(img)
        btnbox_info.pack_start(bitaka, False, False, 0)
        edit_book = Gtk.Button()
        edit_book.set_tooltip_text("تحرير الكتاب الحاليّ")
        edit_book.connect('clicked', self.editbk_cb)
        img = Gtk.Image.new_from_icon_name('text-editor-symbolic', 2)
        edit_book.set_image(img)
        btnbox_info.pack_start(edit_book, False, False, 0)
        hbox.pack_end(btnbox_info, False, False, 0)

        self.convert_browse()
        self.hp.pack2(vbox, True, False)
        self.pack_start(self.hp, True, True, 0)
        self.show_all()
        self.scroll_search.hide()
        self.change_font()