def __init__(self, parent): self.parent = parent self.size_font = int(self.parent.theme.fontch[-2:]) self.con = sqlite3.connect(daw_customs.MY_DATA) self.db = MyDB() self.con.create_function('fuzzy', 1, daw_araby.fuzzy) self.cur = self.con.cursor() Gtk.Box.__init__(self,spacing=7,orientation=Gtk.Orientation.HORIZONTAL) self.view_count = daw_customs.ViewClass() self.view_count_bfr = self.view_count.get_buffer() self.view_count_tag = self.view_count_bfr.create_tag("title") scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_count) self.pack_start(scroll, True, True, 0) self.show_all()
def __init__(self, parent): self.parent = parent self.db = MyDB() self.size_font = int(self.parent.theme.fontch[-2:]) self.list_modifieds = [] self .build()
class Organize(Gtk.Box): def visible_cb(self, model, itr, data): if len(self.theword) == 0: return if daw_araby.fuzzy(self.theword[0]) in daw_araby.fuzzy(model.get_value(itr, 1).decode('utf8')): return True else: return False def search_cb(self, *a): self.theword = [self.search_poets.get_text().decode('utf8')] self.modelfilter.refilter() def visible_cb0(self, model, itr, data): if len(self.theword) == 0: return if daw_araby.fuzzy(self.theword0[0]) in daw_araby.fuzzy(model.get_value(itr, 1).decode('utf8')): return True else: return False def search_on_page(self, text): if len(self.store_poems) == 0: return self.theword0 = [text] self.modelfilter0.refilter() def near_page(self, v): self.size_font += v self.view_charh.override_font(Pango.FontDescription("{}".format(self.size_font,))) self.view_nasse.override_font(Pango.FontDescription("{}".format(self.size_font,))) self.view_sabab.override_font(Pango.FontDescription("{}".format(self.size_font,))) self.view_tarjama.override_font(Pango.FontDescription("{}".format(self.size_font,))) def move_in_page(self, v): model, i = self.tree_poet.get_selection().get_selected() if i: p = model.get_path(i).get_indices()[0] if p+v == -1 or p+v == len(model): return i1 = model.get_iter((p+v,)) self.tree_poet.get_selection().select_iter(i1) self.tree_poet.scroll_to_cell((p+v,)) elif len(self.tree_poet.get_model()) == 0: return else: i2 = model.get_iter((0,)) self.tree_poet.get_selection().select_iter(i2) self.tree_poet.scroll_to_cell((0,)) self.ok_poet() def __init__(self, parent): self.parent = parent self.db = MyDB() self.size_font = int(self.parent.theme.fontch[-2:]) self.list_modifieds = [] self .build() def modify_data(self, *a): model, i = self.sel_poem.get_selected() id_poem = model.get_value(i,0) text = daw_tools.right_space(self.view_nasse_bfr.get_text(self.view_nasse_bfr.get_start_iter(), self.view_nasse_bfr.get_end_iter(), False)).decode('utf8') if text == '': daw_customs.erro(self.parent, 'لقد تم مسح القصيدة'); return nam = self.nm_poem.get_text().decode('utf8') if nam == '' : daw_customs.erro(self.parent, 'ضع اسما للقصيدة\nأو أول شطر منها'); return naw3 = daw_customs.value_active(self.naw3) if naw3 == None : daw_customs.erro(self.parent, 'حدد نوع القصيدة'); return if naw3 == 1: baher = daw_customs.value_active(self.baher) if baher == None : if self.active_baher.get_active() == False: baher = 0 else: daw_customs.erro(self.parent, 'حدد بحر القصيدة'); return rawi = daw_customs.value_active(self.rawi) if rawi == None : if self.active_rawi.get_active() == False: rawi = 0 else: daw_customs.erro(self.parent, 'حدد روي القصيدة'); return kafia = daw_customs.value_active(self.kafia) if kafia == None : if self.active_kafia.get_active() == False: kafia = 0 else: daw_customs.erro(self.parent, 'حدد قافية القصيدة'); return arodh = daw_customs.value_active(self.arodh) if arodh == None : if self.active_arodh.get_active() == False: arodh = 0 else: daw_customs.erro(self.parent, 'حدد عروض القصيدة'); return elif naw3 == 2: baher = daw_customs.value_active(self.baher) if baher == None : if self.active_baher.get_active() == False: baher = 0 else: daw_customs.erro(self.parent, 'حدد بحر القصيدة'); return rawi = 0 kafia = 0 arodh = 0 else: baher = 0 rawi = 0 kafia = 0 arodh = 0 gharadh = daw_customs.value_active(self.gharadh) if gharadh == None : if self.active_gharadh.get_active() == False: gharadh = 0 else: daw_customs.erro(self.parent, 'حدد غرض القصيدة'); return charh = self.view_charh_bfr.get_text(self.view_charh_bfr.get_start_iter(), self.view_charh_bfr.get_end_iter(), False).decode('utf8') sabab = self.view_sabab_bfr.get_text(self.view_sabab_bfr.get_start_iter(), self.view_sabab_bfr.get_end_iter(), False).decode('utf8') label = Gtk.Label() label.override_font(Pango.FontDescription('KacstOne 15')) if naw3 != 5: if arodh in [26, 27, 37, 39, 40]: longer_half, n_abiat = daw_tools.longer_half(text, label, 1) else: longer_half, n_abiat = daw_tools.longer_half(text, label, 0) else: longer_half = 0 msg = daw_customs.sure(self.parent, ''' هل أنت متأكد بأنك تريد تعديل البيانات ؟ ''' ) if msg == Gtk.ResponseType.NO: return check = self.parent.db.modify_poem(id_poem, nam, text, sabab, charh, n_abiat, baher, rawi, kafia, arodh, gharadh, naw3, longer_half) if check == None: daw_customs.info(self.parent, 'تم تعديل البيانات بنجاح'); return def modify_poet_cb(self, *a): model, i = self.sel_poet.get_selected() id_poet = model.get_value(i,0) if id_poet != 0: nm = self.nm_poet.get_text().decode('utf8') lak = self.lak_poet.get_text().decode('utf8') if nm == lak == '': daw_customs.erro(self.parent, 'ضع أسما للشاعر'); return if nm == '': nm += lak elif lak == '': lak += nm age = daw_customs.value_active(self.ages) if age == None : daw_customs.erro(self.parent, 'حدد عصر الشاعر\nأو اجعله غير معروف'); return balad = daw_customs.value_active(self.lands) if self.lands.get_sensitive(): if balad == None : daw_customs.erro(self.parent, 'حدد بلد الشاعر\nأو اجعله غير معروف'); return else: balad = 22 sex = daw_customs.value_active(self.sexs) if sex == None : daw_customs.erro(self.parent, 'حدد جنس الشاعر'); return die = self.dh_poet.get_value() tarjama = self.view_tarjama_bfr.get_text(self.view_tarjama_bfr.get_start_iter(), self.view_tarjama_bfr.get_end_iter(), False).decode('utf8') msg = daw_customs.sure(self.parent, ''' هل أنت متأكد بأنك تريد تعديل بيانات الشاعر ؟ ''' ) if msg == Gtk.ResponseType.NO: return check = self.parent.db.modify_poet(id_poet, nm, lak, tarjama, die, sex, balad, age) if check == None: daw_customs.info(self.parent, 'تم تعديل البيانات بنجاح'); return else: return def load_data(self, text_poem='', text_sabab='', text_charh='', nm_poem='', baher=-1, rawi=-1, gharadh=-1, kafia=-1, naw3=-1, arodh=-1): self.view_nasse_bfr.set_text(text_poem) self.view_sabab_bfr.set_text(text_sabab) self.view_charh_bfr.set_text(text_charh) self.nm_poem.set_text(nm_poem) self.naw3.set_active(naw3) if self.baher.get_visible(): self.baher.set_active(baher) if self.rawi.get_visible(): self.rawi.set_active(rawi) if self.gharadh.get_visible(): self.gharadh.set_active(gharadh) if self.kafia.get_visible(): self.kafia.set_active(kafia) if self.arodh.get_visible(): if arodh == None: arodh = -1 self.arodh.set_active(arodh) # a حذف ديوان def remove_poet(self,*a): model, i = self.sel_poet.get_selected() if i: id_poet = model.get_value(i,0) nm = model.get_value(i,1) msg = daw_customs.sure(self.parent, ''' سيتم حذف ديوان {}" مع بيانات الشاعر، هل تريد الاستمرار ؟ '''.format(nm,)) if msg == Gtk.ResponseType.YES: check = self.parent.db.remove_poet(id_poet) if check == None: self.refresh_poets() # a حذف قصيدة def remove_poem(self,*a): model, i = self.sel_poem.get_selected() if i: id_poem = model.get_value(i,0) nm = model.get_value(i,1) msg = daw_customs.sure(self.parent, ''' سيتم حذف قصيدة {} هل تريد الاستمرار ؟ '''.format(nm,)) if msg == Gtk.ResponseType.YES: check = self.parent.db.remove_poem(id_poem) if check == None: self.ok_poet() def ok_poem(self, *a): self.notebk.set_current_page(1) model, i = self.sel_poem.get_selected() if i: id_poem = model.get_value(i,0) text_poem, text_sabab, text_charh, text_ta3lik = self.parent.db.get_poem(id_poem) nm_poem = self.parent.db.name_poem(id_poem) baher = self.parent.db.get_id_baher(id_poem)-1 rawi = daw_tools.get_index(daw_tools.elrawi, self.parent.db.rawi_poem(id_poem)) gharadh = daw_tools.get_index(daw_tools.elgharadh, self.parent.db.gharadh_poem(id_poem)) kafia = daw_tools.get_index(daw_tools.elkawafi, self.parent.db.kafia_poem(id_poem)) naw3 = daw_tools.get_index(daw_tools.elnaw3, self.parent.db.naw3_poem(id_poem)) if baher == -1: arodh = -1 else: arodh = daw_tools.get_index_arodh(self.parent.db.get_id_baher(id_poem), self.parent.db.arodh_poem(id_poem)) self.load_data(text_poem, text_sabab, text_charh, nm_poem, baher, rawi, gharadh, kafia, naw3, arodh) self.list_modifieds = [] self.list_modifieds.append(text_poem) self.redo.set_sensitive(False) def ok_poet(self, *a): model, i = self.sel_poet.get_selected() if i: id_poet = model.get_value(i,0) list_poems, self.text_tarjama = self.parent.db.poems_of_poet(id_poet) if id_poet != 0: self.grid_poet.set_sensitive(True) self.view_tarjama_bfr.set_text(self.text_tarjama) self.lak_poet.set_text(self.parent.db.name_poet(id_poet)[1]) self.nm_poet.set_text(self.parent.db.name_poet(id_poet)[0]) self.ages.set_active(daw_tools.get_index(daw_tools.age_poet, self.parent.db.age_poet(id_poet))) self.lands.set_active(daw_tools.get_index(daw_tools.elbalad, self.parent.db.balad_poet(id_poet))) self.sexs.set_active(daw_tools.get_index(daw_tools.sex_poet, self.parent.db.sex_poet(id_poet))) self.dh_poet.set_value(float(self.parent.db.death_poet(id_poet))) else: self.grid_poet.set_sensitive(False) self.view_tarjama_bfr.set_text('') self.lak_poet.set_text('') self.nm_poet.set_text('') self.ages.set_active(-1) self.lands.set_active(-1) self.sexs.set_active(-1) self.dh_poet.set_value(0.0) self.store_poems.clear() self.load_data() if len(list_poems) != 0: self.names_list0 = [] self.modelfilter0 = self.store_poems.filter_new() for a in list_poems: self.store_poems.append([a[0], a[1]]) self.names_list0.append(a[1]) self.theword0 = self.names_list0[:] self.modelfilter0.set_visible_func(self.visible_cb0, self.theword0) self.tree_poems.set_model(self.modelfilter0) self.notebk.set_current_page(0) def change_text(self, *a): text = (self.view_nasse_bfr.get_text(self.view_nasse_bfr.get_start_iter(), self.view_nasse_bfr.get_end_iter(), False)).decode('utf8') model, i = self.sel_poem.get_selected() if i: id_poem = model.get_value(i,0) if len(self.list_modifieds) > 0: if text != self.list_modifieds[-1]: self.list_modifieds.append(text) self.redo.set_sensitive(True) def redo_text(self, *a): del self.list_modifieds[-1] self.view_nasse_bfr.set_text(self.list_modifieds[-1]) del self.list_modifieds[-1] del self.list_modifieds[-1] if len(self.list_modifieds) == 1: self.redo.set_sensitive(False) def change_naw3(self, *a): if self.naw3.get_active() == 0: self.baher_hb.show_all() self.rawi_hb.show_all() self.kafia_hb.show_all() self.arodh_hb.show_all() elif self.naw3.get_active() == 1: self.baher_hb.show_all() self.rawi_hb.hide() self.kafia_hb.hide() self.arodh_hb.hide() else: self.baher_hb.hide() self.rawi_hb.hide() self.kafia_hb.hide() self.arodh_hb.hide() def a3aridh_elbaher(self, *a): model = self.arodh.get_model() model.clear() baher = daw_customs.value_active(self.baher) if baher == None: return a3aridh = daw_tools.ela3aridh_in_behor[baher] for a in a3aridh: nm = daw_tools.get_name(daw_tools.ela3aridh, a) model.append([a, nm]) def select_age(self, *a): if daw_customs.value_active(self.ages) == 8: self.lands.set_sensitive(True) else: self.lands.set_active(-1) self.lands.set_sensitive(False) def tashkeel_cb(self, btn, haraka): self.view_nasse_bfr.insert_at_cursor(haraka) def merge_poet_cb(self, *a): new_poet = self.poets_entry1.get_text() if new_poet == '': return poet, sex, balad, age = self.parent.db.id_name_poet(new_poet.decode('utf8')) if poet == None: daw_customs.erro(self.parent, 'ضع الاسم الصحيح للشاعر'); return model, i = self.sel_poet.get_selected() if i: poet_old = model.get_value(i,0) self.parent.db.merge_poet(poet_old, poet, sex, balad, age) daw_customs.info(self.parent, 'تم دمج ديوان {} مع ديوان {}'.format(model.get_value(i,1), new_poet)) def move_poem_cb(self, *a): new_poet = self.poets_entry.get_text() if new_poet == '': return poet, sex, balad, age = self.parent.db.id_name_poet(new_poet.decode('utf8')) if poet == None: daw_customs.erro(self.parent, 'ضع الاسم الصحيح للشاعر'); return model, i = self.sel_poem.get_selected() if i: poem = model.get_value(i,0) self.parent.db.change_poet(poem, poet, sex, balad, age) daw_customs.info(self.parent, 'تم نقل القصيدة {} إلى ديوان {}'.format(model.get_value(i,1), new_poet)) model.remove(i) def refresh_poets(self, *a): self.store_poet.clear() ls = self.db.all_poets() self.modelfilter = self.store_poet.filter_new() ls.append([0, u'ما لا يعرف قائله', 0, 22, 9]) self.names_list = [] for a in ls: s_list = [] self.store_poet.append(a) s_list.append(a[2]) self.names_list.append(s_list) self.theword = self.names_list[:] self.modelfilter.set_visible_func(self.visible_cb, self.theword) self.tree_poet.set_model(self.modelfilter) def build(self,*a): Gtk.Box.__init__(self,spacing=7,orientation=Gtk.Orientation.VERTICAL) hp1 = Gtk.HPaned() self.pack_start(hp1, True, True, 0) self.tree_poet = daw_customs.TreeClass() self.sel_poet = self.tree_poet.get_selection() cell = Gtk.CellRendererText() cell.set_property("wrap-mode", Pango.WrapMode.WORD_CHAR) cell.set_property("wrap-width", 150) kal = Gtk.TreeViewColumn('دواوين الشعراء', cell, text=1) self.tree_poet.append_column(kal) self.store_poet = Gtk.ListStore(int, str, int, int, int) self.refresh_poets() self.tree_poet.connect("cursor-changed", self.ok_poet) scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.tree_poet) scroll.set_size_request(150, -1) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) vb = Gtk.Box(spacing=7,orientation=Gtk.Orientation.VERTICAL) try: self.search_poets = Gtk.SearchEntry() except: self.search_poets = Gtk.Entry() self.search_poets.set_placeholder_text('بحث عن شاعر') self.search_poets.connect('changed', self.search_cb) vb.pack_start(self.search_poets, False, False, 0) vb.pack_start(scroll, True, True, 0) hp1.pack1(vb, False, False) hp2 = Gtk.HPaned() hp1.pack2(hp2, True, True) self.store_poems = Gtk.ListStore(int, str) self.tree_poems = daw_customs.TreeClass() self.tree_poems.set_model(self.store_poems) self.sel_poem = self.tree_poems.get_selection() self.tree_poems.set_grid_lines(Gtk.TreeViewGridLines.HORIZONTAL) self.tree_poems.connect("cursor-changed", self.ok_poem) poems = Gtk.TreeViewColumn('القصائد', Gtk.CellRendererText(), text=1) self.tree_poems.append_column(poems) scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.tree_poems) scroll.set_size_request(180, -1) hp2.pack1(scroll, False, False) self.notebk = Gtk.Notebook() hp2.pack2(self.notebk, True, True) self.notebk.set_show_tabs(False) self.nbk1 = Gtk.Notebook() self.nbk2 = Gtk.Notebook() self.view_nasse = daw_customs.ViewEdit() self.view_nasse.set_justification(Gtk.Justification.CENTER) self.view_nasse_bfr = self.view_nasse.get_buffer() self.view_nasse_bfr.connect('changed', self.change_text) scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_nasse) vb = Gtk.VBox(False, 0) hb = Gtk.HBox(False, 0) lab = Gtk.Label('التشكيل : ') lab.set_alignment(0,0.5) hb.pack_start(lab, False, False, 0) shadda = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'shadda.png'), 'الشدة', self.tashkeel_cb, daw_araby.SHADDA) hb.pack_start(shadda, False, False, 0) skon = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'skon.png'), 'السكون',self.tashkeel_cb, daw_araby.SUKUN) hb.pack_start(skon, False, False, 0) fatha = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'fatha.png'), 'الفتحة',self.tashkeel_cb, daw_araby.FATHA) hb.pack_start(fatha, False, False, 0) damma = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'damma.png'), 'الضمة',self.tashkeel_cb, daw_araby.DAMMA) hb.pack_start(damma, False, False, 0) kasra = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'kasra.png'), 'الكسرة',self.tashkeel_cb, daw_araby.KASRA) hb.pack_start(kasra, False, False, 0) fatha2 = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'fatha2.png'), 'الفتحتين',self.tashkeel_cb, daw_araby.FATHATAN) hb.pack_start(fatha2, False, False, 0) damma2 = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'damma2.png'), 'الضمتين',self.tashkeel_cb, daw_araby.DAMMATAN) hb.pack_start(damma2, False, False, 0) kasra2 = daw_customs.tool_button(join(daw_customs.ICON_DIR, 'kasra2.png'), 'الكسرتين',self.tashkeel_cb, daw_araby.KASRATAN) hb.pack_start(kasra2, False, False, 0) vb.pack_start(scroll, True, True, 0) self.redo = Gtk.ToolButton(stock_id=Gtk.STOCK_REDO) self.redo.set_sensitive(False) hb.pack_end(self.redo, False, False, 3) self.redo.connect('clicked', self.redo_text) vb.pack_start(hb, False, False, 0) self.nbk1.append_page(vb, Gtk.Label('القصيدة')) self.view_charh = daw_customs.ViewEdit() self.view_charh_bfr = self.view_charh.get_buffer() scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_charh) self.nbk1.append_page(scroll, Gtk.Label('الشرح')) vb = Gtk.VBox(False, 7) vb.set_border_width(7) hb = Gtk.HBox(False, 7) la0 = Gtk.Label('اسم القصيدة') la0.set_alignment(0,0.5) hb.pack_start(la0, False, False, 0) self.nm_poem = Gtk.Entry() self.nm_poem.set_placeholder_text('إن لم يكن لها اسم ، اكتب صدر أول بيت بدلا من ذلك') hb.pack_start(self.nm_poem, True, True, 0) vb.pack_start(hb, False, False, 0) hb, self.naw3 = daw_customs.combo(daw_tools.elnaw3, u'النوع', 0) vb.pack_start(hb, False, False, 0) self.naw3.connect('changed', self.change_naw3) hb, self.gharadh = daw_customs.combo(daw_tools.elgharadh, u'الغرض', 0) vb.pack_start(hb, False, False, 0) self.active_gharadh = Gtk.CheckButton('') self.active_gharadh.set_active(True) def active_gharadh_cb(widget, *a): if self.active_gharadh.get_active(): self.gharadh.set_sensitive(True) else: self.gharadh.set_sensitive(False) self.gharadh.set_active(-1) self.active_gharadh.connect('toggled', active_gharadh_cb) hb.pack_start(self.active_gharadh, False, False, 0) self.baher_hb, self.baher = daw_customs.combo(daw_tools.elbehor, u'البحر', 0) self.baher.connect('changed', self.a3aridh_elbaher) vb.pack_start(self.baher_hb, False, False, 0) self.active_baher = Gtk.CheckButton('') self.active_baher.set_active(True) def active_baher_cb(widget, *a): if self.active_baher.get_active(): self.baher.set_sensitive(True) else: self.baher.set_sensitive(False) self.baher.set_active(-1) self.active_baher.connect('toggled', active_baher_cb) self.baher_hb.pack_start(self.active_baher, False, False, 0) self.rawi_hb, self.rawi = daw_customs.combo(daw_tools.elrawi, u'الروي', 0) vb.pack_start(self.rawi_hb, False, False, 0) self.active_rawi = Gtk.CheckButton('') self.active_rawi.set_active(True) def active_rawi_cb(widget, *a): if self.active_rawi.get_active(): self.rawi.set_sensitive(True) else: self.rawi.set_sensitive(False) self.rawi.set_active(-1) self.active_rawi.connect('toggled', active_rawi_cb) self.rawi_hb.pack_start(self.active_rawi, False, False, 0) self.kafia_hb, self.kafia = daw_customs.combo(daw_tools.elkawafi, u'القافية', 0) vb.pack_start(self.kafia_hb, False, False, 0) self.active_kafia = Gtk.CheckButton('') self.active_kafia.set_active(True) def active_kafia_cb(widget, *a): if self.active_kafia.get_active(): self.kafia.set_sensitive(True) else: self.kafia.set_sensitive(False) self.kafia.set_active(-1) self.active_kafia.connect('toggled', active_kafia_cb) self.kafia_hb.pack_start(self.active_kafia, False, False, 0) self.arodh_hb, self.arodh = daw_customs.combo([], u'العروض وضربها', 0) vb.pack_start(self.arodh_hb, False, False, 0) self.active_arodh = Gtk.CheckButton('') self.active_arodh.set_active(True) def active_arodh_cb(widget, *a): if self.active_arodh.get_active(): self.arodh.set_sensitive(True) else: self.arodh.set_sensitive(False) self.arodh.set_active(-1) self.active_arodh.connect('toggled', active_arodh_cb) self.arodh_hb.pack_start(self.active_arodh, False, False, 0) la1 = Gtk.Label('سبب النظم') la1.set_alignment(0,1) vb.pack_start(la1, False, False, 0) self.view_sabab = daw_customs.ViewEdit() self.view_sabab_bfr = self.view_sabab.get_buffer() scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_sabab) vb.pack_start(scroll, True, True, 0) self.nbk1.append_page(vb, Gtk.Label('معلوماتها')) self.view_tarjama = daw_customs.ViewEdit() self.view_tarjama_bfr = self.view_tarjama.get_buffer() scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_tarjama) self.nbk2.append_page(scroll, Gtk.Label('الترجمة')) self.grid_poet = Gtk.Grid() self.grid_poet.set_column_spacing(6) self.grid_poet.set_row_spacing(6) self.grid_poet.set_border_width(6) self.grid_poet.attach(Gtk.Label('الاسم المشتهر'), 1, 1, 1, 1) self.lak_poet = Gtk.Entry() self.grid_poet.attach(self.lak_poet, 2, 1, 3, 1) self.grid_poet.attach(Gtk.Label('الاسم الحقيقي'), 1, 2, 1, 1) self.nm_poet = Gtk.Entry() self.grid_poet.attach(self.nm_poet, 2, 2, 3, 1) hb, self.ages = daw_customs.combo(daw_tools.age_poet, u'العصر', 0) self.ages.connect('changed', self.select_age) self.grid_poet.attach(hb, 1, 3, 4, 1) hb, self.lands = daw_customs.combo(daw_tools.elbalad, u'البلد', 0) self.grid_poet.attach(hb, 1, 4, 4, 1) hb, self.sexs = daw_customs.combo(daw_tools.sex_poet, u'الجنس', 0) self.grid_poet.attach(hb, 1, 5, 4, 1) self.grid_poet.attach(Gtk.Label('الوفاة (هـ)'), 1, 6, 1, 1) adj = Gtk.Adjustment(1434, -300, 1434, 1, 5.0, 0.0) self.dh_poet = Gtk.SpinButton() self.dh_poet.set_adjustment(adj) self.dh_poet.set_wrap(True) self.grid_poet.attach(self.dh_poet, 2, 6, 1, 1) self.nbk2.append_page(self.grid_poet, Gtk.Label('معلومات الشاعر')) vb = Gtk.VBox(False, 7) vb.set_border_width(7) hb = Gtk.HBox(False, 7) move_poem = daw_customs.ButtonClass('نقل القصيدة الحالية إلى ديوان : ') move_poem.connect('clicked', self.move_poem_cb) hb.pack_start(move_poem, False, False, 0) self.poets_entry = Gtk.Entry() self.poets_entry.set_placeholder_text('اكتب حرفا لتحصل على التكملة') self.completion03 = Gtk.EntryCompletion() self.completion03.set_model(self.parent.dawawinpage.store_poet) self.completion03.set_text_column(1) self.poets_entry.set_completion(self.completion03) hb.pack_start(self.poets_entry, True, True, 0) vb.pack_start(hb, False, False, 0) hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.del_poem = daw_customs.ButtonClass('حذف قصيدة') self.del_poem.connect('clicked',self.remove_poem) hbox.pack_start(self.del_poem, False, False, 0) vb.pack_start(hbox, False, False, 0) self.nbk1.append_page(vb, Gtk.Label('متقدم')) vb = Gtk.VBox(False, 7) vb.set_border_width(7) hb = Gtk.HBox(False, 7) merge_poet = daw_customs.ButtonClass('دمج الشاعر الحالي مع الشاعر : ') merge_poet.connect('clicked', self.merge_poet_cb) hb.pack_start(merge_poet, False, False, 0) self.poets_entry1 = Gtk.Entry() self.poets_entry1.set_placeholder_text('اكتب حرفا لتحصل على التكملة') self.completion04 = Gtk.EntryCompletion() self.completion04.set_model(self.parent.dawawinpage.store_poet) self.completion04.set_text_column(1) self.poets_entry1.set_completion(self.completion04) hb.pack_start(self.poets_entry1, True, True, 0) vb.pack_start(hb, False, False, 0) hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.del_poet = daw_customs.ButtonClass('حذف ديوان') self.del_poet.connect('clicked',self.remove_poet) hbox.pack_start(self.del_poet, False, False, 0) vb.pack_start(hbox, False, False, 0) self.nbk2.append_page(vb, Gtk.Label('متقدم')) vb = Gtk.VBox(False, 7) hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.modif_poet = daw_customs.ButtonClass('تعديل الشاعر') self.modif_poet.connect('clicked',self.modify_poet_cb) vb.pack_start(self.nbk2, True, True, 0) vb.pack_start(hbox, False, False, 0) hbox.pack_start(self.modif_poet, False, False, 0) self.notebk.append_page(vb, Gtk.Label('')) vb = Gtk.VBox(False, 7) hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.modif_poem = daw_customs.ButtonClass('تعديل القصائد') self.modif_poem.connect('clicked',self.modify_data) vb.pack_start(self.nbk1, True, True, 0) vb.pack_start(hbox, False, False, 0) hbox.pack_start(self.modif_poem, False, False, 0) self.notebk.append_page(vb, Gtk.Label('')) self.show_all()
class Count(Gtk.Box): def __init__(self, parent): self.parent = parent self.size_font = int(self.parent.theme.fontch[-2:]) self.con = sqlite3.connect(daw_customs.MY_DATA) self.db = MyDB() self.con.create_function('fuzzy', 1, daw_araby.fuzzy) self.cur = self.con.cursor() Gtk.Box.__init__(self,spacing=7,orientation=Gtk.Orientation.HORIZONTAL) self.view_count = daw_customs.ViewClass() self.view_count_bfr = self.view_count.get_buffer() self.view_count_tag = self.view_count_bfr.create_tag("title") scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(self.view_count) self.pack_start(scroll, True, True, 0) self.show_all() def near_page(self, v): self.size_font += v self.view_count.override_font(Pango.FontDescription("{}".format(self.size_font,))) def move_in_page(self, v): return def n_dawawin(self, sex, age): self.cur.execute('SELECT id_poet FROM poets WHERE sex=? AND age=?', (sex, age)) poets = self.cur.fetchall() return len(poets) def n_poems(self, sex, age): self.cur.execute('SELECT id_poem FROM infopoem WHERE sex=? AND age=?', (sex, age)) poems = self.cur.fetchall() return len(poems) def n_verses(self, sex, age): self.cur.execute('SELECT sum(abiat) FROM infopoem WHERE sex=? AND age=?', (sex, age)) abiats = self.cur.fetchall() if abiats[0][0] == None: return 0 return abiats[0][0] def refresh(self, *a): self.v_f_1 = self.n_verses(2, 1) self.v_m_1 = self.n_verses(1, 1) self.p_f_1 = self.n_poems(2, 1) self.p_m_1 = self.n_poems(1, 1) self.d_f_1 = self.n_dawawin(2, 1) self.d_m_1 = self.n_dawawin(1, 1) self.v_f_2 = self.n_verses(2, 2) self.v_m_2 = self.n_verses(1, 2) self.p_f_2 = self.n_poems(2, 2) self.p_m_2 = self.n_poems(1, 2) self.d_f_2 = self.n_dawawin(2, 2) self.d_m_2 = self.n_dawawin(1, 2) self.v_f_3 = self.n_verses(2, 3) self.v_m_3 = self.n_verses(1, 3) self.p_f_3 = self.n_poems(2, 3) self.p_m_3 = self.n_poems(1, 3) self.d_f_3 = self.n_dawawin(2, 3) self.d_m_3 = self.n_dawawin(1, 3) self.v_f_4 = self.n_verses(2, 4) self.v_m_4 = self.n_verses(1, 4) self.p_f_4 = self.n_poems(2, 4) self.p_m_4 = self.n_poems(1, 4) self.d_f_4 = self.n_dawawin(2, 4) self.d_m_4 = self.n_dawawin(1, 4) self.v_f_5 = self.n_verses(2, 5) self.v_m_5 = self.n_verses(1, 5) self.p_f_5 = self.n_poems(2, 5) self.p_m_5 = self.n_poems(1, 5) self.d_f_5 = self.n_dawawin(2, 5) self.d_m_5 = self.n_dawawin(1, 5) self.v_f_10 = self.n_verses(2, 10) self.v_m_10 = self.n_verses(1, 10) self.p_f_10 = self.n_poems(2, 10) self.p_m_10 = self.n_poems(1, 10) self.d_f_10 = self.n_dawawin(2, 10) self.d_m_10 = self.n_dawawin(1, 10) self.v_f_11 = self.n_verses(2, 11) self.v_m_11 = self.n_verses(1, 11) self.p_f_11 = self.n_poems(2, 11) self.p_m_11 = self.n_poems(1, 11) self.d_f_11 = self.n_dawawin(2, 11) self.d_m_11 = self.n_dawawin(1, 11) self.v_f_6 = self.n_verses(2, 6) self.v_m_6 = self.n_verses(1, 6) self.p_f_6 = self.n_poems(2, 6) self.p_m_6 = self.n_poems(1, 6) self.d_f_6 = self.n_dawawin(2, 6) self.d_m_6 = self.n_dawawin(1, 6) self.v_f_7 = self.n_verses(2, 7) self.v_m_7 = self.n_verses(1, 7) self.p_f_7 = self.n_poems(2, 7) self.p_m_7 = self.n_poems(1, 7) self.d_f_7 = self.n_dawawin(2, 7) self.d_m_7 = self.n_dawawin(1, 7) self.v_f_8 = self.n_verses(2, 8) self.v_m_8 = self.n_verses(1, 8) self.p_f_8 = self.n_poems(2, 8) self.p_m_8 = self.n_poems(1, 8) self.d_f_8 = self.n_dawawin(2, 8) self.d_m_8 = self.n_dawawin(1, 8) self.v_f_9 = self.n_verses(2, 9) self.v_m_9 = self.n_verses(1, 9) self.p_f_9 = self.n_poems(2, 9) self.p_m_9 = self.n_poems(1, 9) self.d_f_9 = self.n_dawawin(2, 9) self.d_m_9 = self.n_dawawin(1, 9) self.p_n_9 = self.n_poems(0, 9) self.v_n_9 = self.n_verses(0, 9) def make_html(self, *a): self.refresh() template = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>إحصاءات دواوين العرب</title> </head> <body> <table style="vertical-align: middle; text-align: center; width: 800px; height: 700px; margin-left: auto; margin-right: auto;" border = 1"1" cellpadding = 1"2" cellspacing = 1"2"> <caption style="caption-side: right;"><br> </caption><tbody> <tr> <td style="background-color: rgb(204, 51, 204);">أبيات الشواعر<br> </td> <td style="background-color: rgb(204, 51, 204);">أبيات الشعراء<br> </td> <td style="background-color: rgb(204, 51, 204);">قصائد الشواعر<br> </td> <td style="background-color: rgb(204, 51, 204);">قصائد الشعراء<br> </td> <td style="background-color: rgb(204, 51, 204);">دواوين الشواعر<br> </td> <td style="background-color: rgb(204, 51, 204);">دواوين الشعراء<br> </td> <td style="background-color: rgb(51, 204, 255);">العصور</td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">الجاهلي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">المخضرمون<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">صدر اﻹسلام<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">الأموي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">العباسي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">الفاطمي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">الأيوبي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">المملوكي<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">العثماني<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">الحديث<br> </td> </tr> <tr> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td>{}<br> </td> <td style="background-color: rgb(255, 190, 94);">غير معروف<br> </td> </tr> </tbody> </table> <br> <br> </body> </html>'''.format(self.v_f_1, self.v_m_1, self.p_f_1, self.p_m_1, self.d_f_1, self.d_m_1, self.v_f_2, self.v_m_2, self.p_f_2, self.p_m_2, self.d_f_2, self.d_m_2, self.v_f_3, self.v_m_3, self.p_f_3, self.p_m_3, self.d_f_3, self.d_m_3, self.v_f_4, self.v_m_4, self.p_f_4, self.p_m_4, self.d_f_4, self.d_m_4, self.v_f_5, self.v_m_5, self.p_f_5, self.p_m_5, self.d_f_5, self.d_m_5, self.v_f_10, self.v_m_10, self.p_f_10, self.p_m_10, self.d_f_10, self.d_m_10, self.v_f_11, self.v_m_11, self.p_f_11, self.p_m_11, self.d_f_11, self.d_m_11, self.v_f_6, self.v_m_6, self.p_f_6, self.p_m_6, self.d_f_6, self.d_m_6, self.v_f_7, self.v_m_7, self.p_f_7, self.p_m_7, self.d_f_7, self.d_m_7, self.v_f_8, self.v_m_8, self.p_f_8, self.p_m_8, self.d_f_8, self.d_m_8, self.v_f_9, self.v_m_9, self.p_f_9, self.p_m_9, self.d_f_9, self.d_m_9) file_html = join(daw_customs.HOME_DIR, 'count.html') file_count = open(file_html, 'w') file_count.write(template) file_count.close() call(['xdg-open', file_html]) def make_text(self, *a): self.refresh() new_text = ''' صفحة إحصاء الدواوين والقصائد والأبيات الملحقة بقاعدة بيانات برنامج دواوين العرب : عدد الدواوين الإجمالي : {} ، عدد القصائد الإجمالي : {} ، عدد الأبيات الإجمالي : {} ، ،============================================، العصر الجاهلي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... عصر المخضرمين : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر الإسلامي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر الأموي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر العباسي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر الفاطمي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر الأيوبي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر المملوكي : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر العثماني : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... العصر الحديث : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... غير المعروف عصره : الشعراء : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الشواعر : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، الكل : عدد الدواوين : {} ، عدد القصائد : {} ، عدد الأبيات : {} ، ................................... غير المعروف قائله : عدد القصائد : {} ، عدد الأبيات : {} ، '''.format(self.db.n_dawawin(), self.db.n_poems(), self.db.n_verses(), self.d_m_1, self.p_m_1, self.v_m_1, self.d_f_1, self.p_f_1, self.v_f_1, self.d_m_1+self.d_f_1 ,self.p_m_1+self.p_f_1, self.v_m_1+self.v_f_1, self.d_m_2, self.p_m_2, self.v_m_2, self.d_f_2, self.p_f_2, self.v_f_2, self.d_m_2+self.d_f_2 , self.p_m_2+self.p_f_2, self.v_m_2+self.v_f_2, self.d_m_3, self.p_m_3, self.v_m_3, self.d_f_3, self.p_f_3, self.v_f_3, self.d_m_3+self.d_f_3 ,self.p_m_3+self.p_f_3, self.v_m_3+self.v_f_3, self.d_m_4, self.p_m_4, self.v_m_4, self.d_f_4, self.p_f_4, self.v_f_4, self.d_m_4+self.d_f_4 ,self.p_m_4+self.p_f_4, self.v_m_4+self.v_f_4, self.d_m_5, self.p_m_5, self.v_m_5, self.d_f_5, self.p_f_5, self.v_f_5, self.d_m_5+self.d_f_5, self.p_m_5+self.p_f_5, self.v_m_5+self.v_f_5, self.d_m_10, self.p_m_10, self.v_m_10, self.d_f_10, self.p_f_10, self.v_f_10, self.d_m_10+self.d_f_10 ,self.p_m_10+self.p_f_10, self.v_m_10+self.v_f_10, self.d_m_11, self.p_m_11, self.v_m_11, self.d_f_11, self.p_f_11, self.v_f_11, self.d_m_11+self.d_f_11 ,self.p_m_11+self.p_f_11, self.v_m_11+self.v_f_11, self.d_m_6, self.p_m_6, self.v_m_6, self.d_f_6, self.p_f_6, self.v_f_6, self.d_m_6+self.d_f_6 ,self.p_m_6+self.p_f_6, self.v_m_6+self.v_f_6, self.d_m_7, self.p_m_7, self.v_m_7, self.d_f_7, self.p_f_7, self.v_f_7, self.d_m_7+self.d_f_7 ,self.p_m_7+self.p_f_7, self.v_m_7+self.v_f_7, self.d_m_8, self.p_m_8, self.v_m_8, self.d_f_8, self.p_f_8, self.v_f_8, self.d_m_8+self.d_f_8 ,self.p_m_8+self.p_f_8, self.v_m_8+self.v_f_8, self.d_m_9, self.p_m_9, self.v_m_9, self.d_f_9, self.p_f_9, self.v_f_9, self.d_m_9+self.d_f_9 ,self.p_m_9+self.p_f_9, self.v_m_9+self.v_f_9, self.p_n_9, self.v_n_9) self.view_count_bfr.set_text(new_text)
def __init__(self, parent): self.parent = parent self.db = MyDB() self.build()
class Preference(Gtk.Dialog): def __init__(self, parent): self.parent = parent self.db = MyDB() self.build() def specified(self, *a): if self.dfo.get_active(): self.frame.set_sensitive(False) daw_config.setv('tr', '0') else: self.frame.set_sensitive(True) daw_config.setv('tr', '1') def ch_font(self, btn): nconf = btn.get_name() dialog = Gtk.FontChooserDialog("اختر خطا") dialog.set_font(daw_config.getv(nconf)) response = dialog.run() if response == Gtk.ResponseType.OK: font = dialog.get_font() daw_config.setv(nconf, font) dialog.destroy() self.parent.theme.refrech() #FIXME change 'get_current_color' to 'get_current_rgba'------------- def ch_color(self, btn): nconf = btn.get_name() dialog = Gtk.ColorSelectionDialog("اختر لونا") colorsel = dialog.get_color_selection() colorsel.set_current_rgba(daw_customs.rgba(daw_config.getv(nconf))) response = dialog.run() if response == Gtk.ResponseType.OK: color = colorsel.get_current_color().to_string() daw_config.setv(nconf, color) dialog.destroy() self.parent.theme.refrech() def change_vls(self, btn, nm): v = btn.get_active() daw_config.setv(nm, v) def sel_ORNAMENT(self, icv, path): model = icv.get_model() name = model[path][1] daw_config.setv('ornament-file', name) self.parent.theme.refrech() def has_mytheme(self, *a): if self.sel_theme.get_active(): daw_config.setv('theme', '1') self.parent.theme.refrech() else: daw_config.setv('theme', '0') self.parent.theme.refrech() def has_ornament(self, *a): if self.sel_ornament.get_active(): daw_config.setv('ornament', '1') self.parent.theme.refrech() else: daw_config.setv('ornament', '0') self.parent.theme.refrech() def change_path_db(self, *a): open_dlg = Gtk.FileChooserDialog(u'تغيير مسار قاعدة البيانات', self.parent, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) Filter = Gtk.FileFilter() Filter.set_name(u"قاعدة البيانات") Filter.add_pattern("Dawawin.db") open_dlg.add_filter(Filter) res = open_dlg.run() if res == Gtk.ResponseType.OK: self.e_dest.set_text(open_dlg.get_filenames()[0].decode('utf8')) daw_config.setv('path', open_dlg.get_filenames()[0]) open_dlg.destroy() def new_db(self,*a): save_dlg = Gtk.FileChooserDialog(u'مسار قاعدة البيانات الجديدة', self.parent, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) res = save_dlg.run() if res == Gtk.ResponseType.OK: new_dir = join(save_dlg.get_filename().decode('utf8'), u'دواوين العرب') if os.path.exists(join(new_dir,'Dawawin.db')): daw_customs.erro(self.parent, u'يوجد قاعدة بيانات في هذا الدليل بالفعل') else: if not os.path.exists(new_dir): os.mkdir(new_dir) if not os.path.exists(join(new_dir,u'Audio')): os.mkdir(join(new_dir,u'Audio')) if not os.path.exists(join(new_dir,u'Ornament')): os.mkdir(join(new_dir,u'Ornament')) list_f = os.listdir(daw_customs.ORNAMENT) for v in list_f: copyfile(join(daw_customs.ORNAMENT,v), join(new_dir,u'Ornament',v)) self.parent.db.create_db(join(new_dir,'Dawawin.db')) copyfile(daw_customs.MY_AWZAN, join(new_dir,'Awzan.db')) copyfile(daw_customs.MY_HELP, join(new_dir,'Help.db')) copyfile(daw_customs.MY_DICT, join(new_dir,'Dict.db')) daw_customs.info(self.parent, u'تم إضافة قاعدة بيانات جديدة') save_dlg.destroy() def count_cb(self, *a): n_dawawin = self.db.n_dawawin() n_poems = self.db.n_poems() n_verses = self.db.n_verses() daw_config.setv('n_dawawin', n_dawawin) daw_config.setv('n_poems', n_poems) daw_config.setv('n_verses', n_verses) self.n_dawawin.set_text('عدد الدواوين : '+n_dawawin) self.n_poems.set_text('عدد القصائد : '+n_poems) self.n_verses.set_text('عدد الأبيات : '+n_verses) def del_all_cb(self, *a): Clear(self.parent).show_all() self.hide() def show_count(self, *a): self.parent.show_page(None, 'الإحصاء', 15) self.parent.countpage.make_text() self.hide() def build(self,*a): Gtk.Dialog.__init__(self, parent=self.parent) self.set_icon_name("Dawawin") self.set_title("التفضيلات") self.resize(500, 300) area = self.get_content_area() area.set_spacing(6) self.connect('delete-event', lambda w,*a: w.hide() or True) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) lab_info = Gtk.Label('بعض الخيارات قد تحتاج إلى إعادة تشغيل البرنامج') lab_info.override_background_color(Gtk.StateFlags.NORMAL, daw_customs.rgba('#FFF14E')) lab_info.override_color(Gtk.StateFlags.NORMAL, daw_customs.rgba('#E90003')) lab_info.override_font(Pango.FontDescription("8")) self.notebook = Gtk.Notebook() self.box0 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box00 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box1 = Gtk.Box(spacing=4, orientation=Gtk.Orientation.VERTICAL) self.box2 = Gtk.Box(spacing=4,orientation=Gtk.Orientation.VERTICAL) hbox = Gtk.Box(spacing=40,orientation=Gtk.Orientation.HORIZONTAL) hbox.pack_start(self.box1, False, False, 0) hbox.pack_start(self.box2, False, False, 0) self.frame = Gtk.Frame() self.frame.add(hbox) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) self.dfo = Gtk.RadioButton.new_with_label_from_widget(None, 'افتراضي') self.cos = Gtk.RadioButton.new_with_label_from_widget(self.dfo,'مخصص') self.dfo.connect('toggled',self.specified,'0') self.cos.connect('toggled',self.specified,'1') hbox.pack_start(self.dfo, False, False, 0) hbox.pack_start(self.cos, False, False, 0) self.sel_theme = Gtk.CheckButton('تلوين النافذة') hbox.pack_end(self.sel_theme, False, False, 0) if daw_config.getv('theme') == '1': self.sel_theme.set_active(True) else: self.sel_theme.set_active(False) self.sel_theme.connect("toggled", self.has_mytheme) hbox.set_border_width(5) self.box0.pack_start(hbox, False, False, 0) self.box0.pack_start(self.frame, True, True, 0) list_w1 = [[u'القوائم الجانبية','td'], [u'قائمة القصائد','tp'], [u'متن القصيدة','mp'], [u'الشرح والترجمة','ch'], [u'العناوين','an']] list_w2 = [[u'لون خلفية العرض','b'], [u'لون خط التحديد','fs'], [u'لون خلفية التحديد','bs'], [u'لون تحديد البحث','ss'], [u'لون خلفية خاص','bp']] for a in list_w1: hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) btn1 = Gtk.ToolButton(stock_id = Gtk.STOCK_SELECT_FONT) btn1.set_name('font'+a[1]) btn1.connect('clicked',self.ch_font) btn2 = Gtk.ToolButton(stock_id = Gtk.STOCK_SELECT_COLOR) btn2.set_name('color'+a[1]) btn2.connect('clicked',self.ch_color) hbox.pack_start(btn2, False, False, 0) hbox.pack_start(btn1, False, False, 0) hbox.pack_start(Gtk.Label(a[0]), False, False, 0) self.box1.pack_start(hbox, False, False, 0) for a in list_w2: hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) btn = Gtk.ToolButton(stock_id = Gtk.STOCK_SELECT_COLOR) btn.set_name('color'+a[1]) btn.connect('clicked',self.ch_color) hbox.pack_start(btn, False, False, 0) hbox.pack_start(Gtk.Label(a[0]), False, False, 0) self.box2.pack_start(hbox, False, False, 0) self.notebook.append_page(self.box0, Gtk.Label('خط ولون')) vb = Gtk.VBox(False, 6) vb.set_border_width(6) ls = [[0, u'ضيق'], [1, u'وسط'], [2, u'واسع']] hb, self.bayn_abiat = daw_customs.combo(ls, u'المسافة بين الأبيات', 3) self.bayn_abiat.set_active(daw_config.getn('b_abiat')) self.bayn_abiat.connect('changed', self.change_vls, u'b_abiat') vb.pack_start(hb, False, False, 0) ls = [[0, u'ضيق'], [1, u'وسط'], [2, u'واسع']] hb, self.bayn_shater = daw_customs.combo(ls, u'المسافة بين شطري البيت', 3) self.bayn_shater.set_active(daw_config.getn('b_half')) self.bayn_shater.connect('changed', self.change_vls, u'b_half') vb.pack_start(hb, False, False, 0) ls = [[0, u'دوما'], [1, u'للحاجة']] hb, self.tarakeb = daw_customs.combo(ls, u'تراكب شطري البيت', 3) self.tarakeb.set_active(daw_config.getn('tarakeb')) self.tarakeb.connect('changed', self.change_vls, u'tarakeb') vb.pack_start(hb, False, False, 0) ls = [[0, u'بالتطويلات'], [1, u'بالمسافات']] hb, self.tandhid = daw_customs.combo(ls, u'تعديل طول الشطر', 3) self.tandhid.set_active(daw_config.getn('tandhid')) self.tandhid.connect('changed', self.change_vls, u'tandhid') vb.pack_start(hb, False, False, 0) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) lab = Gtk.Label('أدنى طول للشطر بالبكسلات') lab.set_alignment(0,0.5) hbox.pack_start(lab, False, False, 0) adj = Gtk.Adjustment(150, 100, 700, 1, 5, 0) self.min_long = Gtk.SpinButton() self.min_long.set_adjustment(adj) self.min_long.set_wrap(True) self.min_long.set_value(daw_config.getf('min_long')) def change_min(widget, *a): v = self.min_long.get_value() daw_config.setv('min_long', v) self.min_long.connect('value-changed', change_min) hbox.pack_start(self.min_long, False, False, 0) vb.pack_start(hbox, False, False, 0) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) lab = Gtk.Label('التراكب إذا تجاوز طول الشطر') lab.set_alignment(0,0.5) hbox.pack_start(lab, False, False, 0) adj = Gtk.Adjustment(350, 300, 1000, 1, 5, 0) self.max_long = Gtk.SpinButton() self.max_long.set_adjustment(adj) self.max_long.set_wrap(True) self.max_long.set_value(daw_config.getf('max_long')) def change_max(widget, *a): v = self.max_long.get_value() daw_config.setv('max_long', v) self.max_long.connect('value-changed', change_max) hbox.pack_start(self.max_long, False, False, 0) vb.pack_start(hbox, False, False, 0) self.notebook.append_page(vb, Gtk.Label('تخطيط')) vb = Gtk.VBox(False, 6) vb.set_border_width(6) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) self.del_all = daw_customs.ButtonClass('مسح عام') self.del_all.connect('clicked', self.del_all_cb) hbox.pack_start(self.del_all, False, False, 0) vb.pack_start(hbox, False, False, 0) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) self.add_db = daw_customs.ButtonClass('أنشاء قاعدة بيانات جديدة') self.add_db.connect('clicked', self.new_db) hbox.pack_start(self.add_db, False, False, 0) if not exists(dirname(daw_config.getv('path'))): self.add_db.set_sensitive(False) vb.pack_start(hbox, False, False, 0) hbox = Gtk.Box(spacing=6,orientation=Gtk.Orientation.HORIZONTAL) self.e_dest = Gtk.Entry() self.e_dest.set_text(daw_config.getv('path').decode('utf8')) self.b_dest = daw_customs.ButtonClass('تغيير المسار') self.b_dest.connect('clicked', self.change_path_db) hbox.pack_start(self.b_dest, False, False, 0) hbox.pack_start(self.e_dest, True, True, 0) vb.pack_start(hbox, False, False, 0) hbox = Gtk.Box(spacing=6,orientation=Gtk.Orientation.HORIZONTAL) db_void = Gtk.LinkButton.new_with_label("http://sourceforge.net/projects/dawawin/files/", 'صفحة البرنامج على النت') hbox.pack_start(db_void, False, False, 0) vb.pack_start(hbox, False, False, 0) self.notebook.append_page(vb, Gtk.Label('خيارات')) vb = Gtk.VBox(False, 6) vb.set_border_width(6) self.n_dawawin = Gtk.Label('عدد الدواوين : '+daw_config.getv('n_dawawin')) self.n_dawawin.set_alignment(0,0.5) vb.pack_start(self.n_dawawin, False, False, 0) self.n_poems = Gtk.Label('عدد القصائد : '+daw_config.getv('n_poems')) self.n_poems.set_alignment(0,0.5) vb.pack_start(self.n_poems, False, False, 0) self.n_verses = Gtk.Label('عدد الأبيات : '+daw_config.getv('n_verses')) self.n_verses.set_alignment(0,0.5) vb.pack_start(self.n_verses, False, False, 0) hbox = Gtk.Box(spacing=6,orientation=Gtk.Orientation.HORIZONTAL) self.rapid_count = daw_customs.ButtonClass('إحصاء سريع') self.rapid_count.connect('clicked', self.count_cb) self.detail_count = daw_customs.ButtonClass('إحصاء مفصل') self.detail_count.connect('clicked', self.show_count) self.web_count = daw_customs.ButtonClass('صفحة ويب') self.web_count.connect('clicked', lambda *a: self.parent.countpage.make_html()) hbox.pack_start(self.rapid_count, False, False, 0) hbox.pack_start(self.detail_count, False, False, 0) hbox.pack_start(self.web_count, False, False, 0) vb.pack_end(hbox, False, False, 0) self.notebook.append_page(vb, Gtk.Label('إحصاء')) vbox = Gtk.Box(spacing=4, orientation=Gtk.Orientation.VERTICAL) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) self.sel_ornament = Gtk.CheckButton('اعتمد زخرفة الخلفية') hbox.pack_start(self.sel_ornament, False, False, 0) if daw_config.getv('ornament') == '1': self.sel_ornament.set_active(True) else: self.sel_ornament.set_active(False) self.sel_ornament.connect("toggled", self.has_ornament) vbox.pack_start(hbox, False, False, 0) liststore = Gtk.ListStore(Pixbuf, str) iconview = Gtk.IconView.new() iconview.set_model(liststore) iconview.set_pixbuf_column(0) iconview.set_reorderable(True) list_icons = os.listdir(daw_customs.ORNAMENT) iconview.set_columns(6) iconview.connect('item-activated', self.sel_ORNAMENT) for a in list_icons: try: pixbuf = Pixbuf.new_from_file_at_size(join(daw_customs.ORNAMENT, a), 64, 64 ) liststore.append([pixbuf, a]) except: pass scroll = Gtk.ScrolledWindow() scroll.set_shadow_type(Gtk.ShadowType.IN) scroll.add(iconview) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) vbox.pack_start(scroll, True, True, 0) self.notebook.append_page(vbox, Gtk.Label('الزخرفة')) self.box.pack_start(self.notebook, True, True, 0) self.box.pack_start(lab_info, False, False, 0) clo = daw_customs.ButtonClass("إغلاق") clo.connect('clicked',lambda *a: self.hide()) ref = daw_customs.ButtonClass("تحديث الواجهة") ref.connect('clicked',lambda *a: self.parent.theme.refrech()) ref.connect('clicked',lambda *a: self.parent.refrech()) hbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.HORIZONTAL) hbox.set_border_width(5) hbox.pack_start(ref, False, False, 0) hbox.pack_end(clo, False, False, 0) self.box.pack_start(hbox, False, False, 0) if daw_config.getv('tr') == '1': self.cos.set_active(True) else: self.frame.set_sensitive(False) self.dfo.set_active(True) area.pack_start(self.box, True, True, 0)