-
-
Save zsmahi/3390881 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
## Copyright (C) 2009-2012 Assem Chelli <assem.ch [at] gmail.com> | |
## This program is free software: you can redistribute it and/or modify | |
## it under the terms of the GNU Affero General Public License as published by | |
## the Free Software Foundation, either version 3 of the License, or | |
## (at your option) any later version. | |
## This program is distributed in the hope that it will be useful, | |
## but WITHOUT ANY WARRANTY; without even the implied warranty of | |
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
## GNU Affero General Public License for more details. | |
## You should have received a copy of the GNU Affero General Public License | |
## along with this program. If not, see <http://www.gnu.org/licenses/>. | |
""" | |
<<<<<<< HEAD | |
TODO use Alfanous.outputs.Json to request different info the first time | |
TODO use Table grid for view , use CSS good schema instead | |
TODO complete all new Ui features | |
TODO relate to AboutDlg / PreferenceDlg / Hints dialog | |
TODO use css and simplify texts to make a good localization | |
TODO clean Code | |
TODO sura's name also in English | |
TODO fields name in english and arabic / explication (id) | |
TODO add qurany project for Subjects in english | |
TODO %(var)s mapping is better for localization | |
TODO use QT Localization instead of gettext | |
TODO Use tree widget to show results | |
TODO printing | |
TODO load Qt resources on realtime or at least compile them on realtime if missed | |
======= | |
Created on 12 avr. 2010 | |
@author: Assem Chelli | |
@contact: assem.ch[at]gmail.com | |
@todo: use Alfanous.outputs.Json to request results | |
@todo: use Table grid for view , use CSS good schema instead | |
@todo: complete all new Ui features | |
@todo: relate to AboutDlg / PreferenceDlg / Hints dialog | |
@todo: use css and simplify texts to make a good localization | |
@todo: clean Code | |
@todo: sura's name also in English | |
@todo: fields name in english and arabic / explication (id) | |
@todo: add qurany project for Subjects in english | |
@todo: %(var)s mapping is better for localization | |
@todo: Localization | |
@todo: Use tree widget to show results | |
@todo: printing | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
""" | |
## Arguments Management | |
from optparse import OptionParser, OptionGroup | |
usage = "usage: %prog [options]" | |
parser = OptionParser( usage = usage, version = "AlfanousDesktop 0.5" ) | |
paths = OptionGroup( parser, "Paths", "Choose your paths: " ) | |
paths.add_option( "-c", "--config", dest = "config", type = "string", | |
help = "configuration file path", metavar = "PATH" ) | |
paths.add_option( "-i", "--index", dest = "index", type = "string", | |
help = "indexes path", metavar = "PATH" ) | |
paths.add_option( "-l", "--local", dest = "local", type = "string", | |
help = "localization path", metavar = "PATH" ) | |
<<<<<<< HEAD | |
paths.add_option( "-r", "--resource", dest = "resource", type = "string", | |
help = "resources path", metavar = "PATH" ) | |
======= | |
paths.add_option( "-s", "--store", dest = "store", type = "string", | |
help = "store path", metavar = "PATH" ) | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
parser.add_option_group( paths ) | |
( options, args ) = parser.parse_args() | |
## Importing modules | |
import sys, os, gettext | |
from configobj import ConfigObj | |
<<<<<<< HEAD | |
from PyQt4 import QtGui, QtCore, uic | |
from PyQt4.QtCore import QRect | |
from pyparsing import ParseException | |
from alfanous.Outputs import Raw | |
from re import compile | |
======= | |
from PyQt4 import QtGui, QtCore | |
from PyQt4.QtCore import QRect | |
from pyparsing import ParseException | |
from alfanous.outputs import Raw | |
from re import compile | |
## Importing forms | |
from mainform_ui import Ui_MainWindow | |
#from aboutDlg import Ui_Dialog as Ui_aboutDlg | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
## Localization using gettext | |
_ = gettext.gettext | |
n_ = gettext.ngettext | |
gettext.bindtextdomain( "alfanousQT" ); | |
gettext.textdomain( "alfanousQT" ); | |
<<<<<<< HEAD | |
## Specification of resources paths | |
from alfanous.Data import Paths | |
CONFIGPATH = options.config if options.config else Paths.HOME_CONFIG + "" | |
INDEXPATH = options.index if options.index else Paths.ROOT_INDEX | |
LOCALPATH = options.local if options.local else "./locale/" | |
RESPATH = options.resource if options.resource else Paths.ROOT_RESOURCE | |
## Load Qt forms & dialogs on real time | |
THIS_FILE_DIR_PATH = os.path.dirname( __file__ ) + "/" | |
print THIS_FILE_DIR_PATH | |
Ui_MainWindow = uic.loadUiType( THIS_FILE_DIR_PATH + "UI/mainform.ui" )[0] | |
Ui_aboutDlg = uic.loadUiType( THIS_FILE_DIR_PATH + "UI/aboutDlg.ui" )[0] | |
Ui_preferencesDlg = uic.loadUiType( THIS_FILE_DIR_PATH + "UI/preferencesDlg.ui" )[0] | |
## Initialize search engines | |
RAWoutput = Raw() # default paths | |
======= | |
## Specification of resources paths | |
CONFIGPATH = options.config if options.config else "../../resources/configs/" | |
INDEXPATH = options.index if options.index else"../../indexes/" | |
LOCALPATH = options.local if options.local else"./locale/" | |
STOREPATH = options.store if options.store else "../../store/" | |
## Initialize search engines | |
RAWoutput = Raw( QSE_index = INDEXPATH + "main/", TSE_index = INDEXPATH + "extend/", Recitations_list_file = CONFIGPATH + "recitations.js", Translations_list_file = CONFIGPATH + "translations.js", Information_file = CONFIGPATH + "information.js", Hints_file = CONFIGPATH + "hints.js", Stats_file = CONFIGPATH + "stats.js" ) | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
## STATIC GLOBAL variables | |
PERPAGE = 10 #results per page | |
DIR = _( "ltr" ) #direction: default | |
RELATIONS = ["", "", u"|", u"+", u"-"] | |
SAJDA_TYPE = {u"مستحبة":_( u"recommended" ), u"واجبة":_( u"obliged" )} | |
SURA_TYPE = {u"مدنية":_( u"medina" ), u"مكية":_( u"mekka" )} | |
CSS = """ | |
<style type="text/css"> | |
#TODO : new simple&clean style | |
</style> | |
""" | |
## Some functions | |
relate = lambda query, filter, index:"( " + unicode( query ) + " ) " + RELATIONS[index] + " ( " + filter + " ) " if index > 1 else filter if index == 1 else unicode( query ) + " " + filter | |
<<<<<<< HEAD | |
class QUI( Ui_MainWindow ): | |
""" the main UI """ | |
======= | |
class QUI( Ui_MainWindow ): | |
""" the Quranic main UI """ | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
def __init__( self ): | |
self.last_results = None | |
self.last_terms = None | |
self.currentQuery = None | |
self.Queries = [] | |
self.history = [] | |
def exit( self ): | |
self.save_config() | |
sys.exit() | |
def load_config( self ): | |
"""load configuration""" | |
config = ConfigObj( CONFIGPATH + "/config.ini" ) | |
boolean = lambda s:True if s == "True" else False | |
self.o_query.clear() | |
self.o_query.addItems( map( lambda x:x.decode( "utf-8" ), config["history"] ) if config.has_key( "history" ) else [u"الحمد لله"] ) | |
self.o_limit.setValue( int( config["options"]["limit"] ) if config.has_key( "options" ) else 100 ) | |
self.o_perpage.setValue( int( config["options"]["perpage"] ) if config.has_key( "options" ) else 10 ) | |
self.o_sortedbyscore.setChecked( boolean( config["sorting"]["sortedbyscore"] ) if config.has_key( "sorting" ) else True ) | |
self.o_sortedbymushaf.setChecked( boolean( config["sorting"]["sortedbymushaf"] ) if config.has_key( "sorting" ) else False ) | |
self.o_sortedbytanzil.setChecked( boolean( config["sorting"]["sortedbytanzil"] ) if config.has_key( "sorting" ) else False ) | |
self.o_sortedbysubject.setChecked( boolean( config["sorting"]["sortedbysubject"] ) if config.has_key( "sorting" ) else False ) | |
self.o_sortedbyfield.setChecked( boolean( config["sorting"]["sortedbyfield"] ) if config.has_key( "sorting" ) else False ) | |
self.o_field.setCurrentIndex( int( config["sorting"]["field"] ) if config.has_key( "sorting" ) else 0 ) | |
self.o_reverse.setChecked( boolean( config["sorting"]["reverse"] )if config.has_key( "sorting" ) else False ) | |
self.o_prev.setChecked( boolean( config["extend"]["prev"] ) if config.has_key( "extend" ) else False ) | |
self.o_suiv.setChecked( boolean( config["extend"]["suiv"] )if config.has_key( "extend" ) else False ) | |
self.o_word_stat.setChecked( boolean( config["extend"]["word_stat"] )if config.has_key( "extend" ) else False ) | |
self.o_aya_info.setChecked( boolean( config["extend"]["aya_info"] )if config.has_key( "extend" ) else False ) | |
self.o_sura_info.setChecked( boolean( config["extend"]["sura_info"] )if config.has_key( "extend" ) else False ) | |
self.o_traduction.setCurrentIndex( int( config["extend"]["traduction"] ) if config.has_key( "extend" ) else 0 ) | |
self.o_recitation.setCurrentIndex( int( config["extend"]["recitation"] ) if config.has_key( "extend" ) else 0 ) | |
self.o_script_uthmani.setChecked( boolean( config["script"]["uthmani"] ) if config.has_key( "script" ) else False ) | |
self.o_script_standard.setChecked( boolean( config["script"]["standard"] ) if config.has_key( "script" ) else True ) | |
self.w_features.setHidden( not boolean( config["widgets"]["features"] ) if config.has_key( "widgets" ) else True ) | |
self.w_options.setHidden( not boolean( config["widgets"]["options"] ) if config.has_key( "widgets" ) else True ) | |
self.m_options.setChecked ( boolean( config["widgets"]["options"] ) if config.has_key( "widgets" ) else False ) | |
self.m_features.setChecked ( boolean( config["widgets"]["features"] ) if config.has_key( "widgets" ) else False ) | |
def save_config( self ): | |
"""save configuration """ | |
if not os.path.isdir( CONFIGPATH ): | |
os.makedirs( CONFIGPATH ) | |
config = ConfigObj( CONFIGPATH + "/config.ini" ) | |
config["history"] = map( lambda x:x, config["history"] ) if config.has_key( "history" ) else ["الحمد لله"] | |
config["options"] = {} | |
config["options"]["limit"] = self.o_limit.value() | |
config["options"]["perpage"] = self.o_perpage.value() | |
config["options"]["highlight"] = self.o_highlight.isChecked() | |
config["sorting"] = {} | |
config["sorting"]["sortedbyscore"] = self.o_sortedbyscore.isChecked() | |
config["sorting"]["sortedbymushaf"] = self.o_sortedbymushaf.isChecked() | |
config["sorting"]["sortedbytanzil"] = self.o_sortedbytanzil.isChecked() | |
config["sorting"]["sortedbysubject"] = self.o_sortedbysubject.isChecked() | |
config["sorting"]["sortedbyfield"] = self.o_sortedbyfield.isChecked() | |
config["sorting"]["field"] = self.o_field.currentIndex() | |
config["sorting"]["reverse"] = self.o_reverse.isChecked() | |
config["extend"] = {} | |
config["extend"]["prev"] = self.o_prev.isChecked() | |
config["extend"]["suiv"] = self.o_suiv.isChecked() | |
config["extend"]["traduction"] = self.o_traduction.currentIndex() | |
config["extend"]["recitation"] = self.o_recitation.currentIndex() | |
config["extend"]["word_stat"] = self.o_word_stat.isChecked() | |
config["extend"]["aya_info"] = self.o_aya_info.isChecked() | |
config["extend"]["sura_info"] = self.o_sura_info.isChecked() | |
config["script"] = {} | |
config["script"]["uthmani"] = self.o_script_uthmani.isChecked() | |
config["script"]["standard"] = self.o_script_standard.isChecked() | |
config["widgets"] = {} | |
config["widgets"]["features"] = not self.w_features.isHidden() | |
config["widgets"]["options"] = not self.w_options.isHidden() | |
config.write() | |
def setupUi( self, MainWindow ): | |
super( QUI, self ).setupUi( MainWindow ) | |
if DIR == "rtl": | |
MainWindow.setLayoutDirection( QtCore.Qt.RightToLeft ) | |
self.o_query.setLayoutDirection( QtCore.Qt.RightToLeft ) | |
QtCore.QObject.connect( self.o_search, QtCore.SIGNAL( "clicked()" ), self.search_all ) | |
<<<<<<< HEAD | |
QtCore.QObject.connect( self.o_page, QtCore.SIGNAL( "valueChanged(int)" ), self.search_all ) | |
======= | |
QtCore.QObject.connect( self.o_page, QtCore.SIGNAL( "valueChanged(int)" ), self.changepage ) | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
QtCore.QObject.connect( self.o_chapter, QtCore.SIGNAL( "activated(QString)" ), self.topics ) | |
QtCore.QObject.connect( self.o_topic, QtCore.SIGNAL( "activated(QString)" ), self.subtopics ) | |
QtCore.QObject.connect( self.o_sajdah_exist, QtCore.SIGNAL( "activated(int)" ), self.sajda_enable ) | |
QtCore.QObject.connect( self.o_struct_as, QtCore.SIGNAL( "activated(QString)" ), self.setstructborn ) | |
QtCore.QObject.connect( self.o_perpage, QtCore.SIGNAL( "valueChanged(int)" ), self.changePERPAGE ) | |
QtCore.QObject.connect( self.o_struct_from, QtCore.SIGNAL( "valueChanged(int)" ), self.struct_to_min ) | |
QtCore.QObject.connect( self.o_stat_from, QtCore.SIGNAL( "valueChanged(int)" ), self.stat_to_min ) | |
QtCore.QObject.connect( self.m_exit, QtCore.SIGNAL( "clicked()" ), self.exit ) | |
QtCore.QObject.connect( self.m_help, QtCore.SIGNAL( "clicked()" ), self.help ) | |
QtCore.QObject.connect( self.m_about, QtCore.SIGNAL( "clicked()" ), self.about ) | |
QtCore.QObject.connect( self.a_save, QtCore.SIGNAL( "clicked()" ), self.save_results ) | |
QtCore.QObject.connect( self.a_print, QtCore.SIGNAL( "clicked()" ), self.print_results ) | |
QtCore.QObject.connect( self.o_add2query_advanced, QtCore.SIGNAL( "clicked()" ), self.add2query_advanced ) | |
QtCore.QObject.connect( self.o_add2query_struct, QtCore.SIGNAL( "clicked()" ), self.add2query_struct ) | |
QtCore.QObject.connect( self.o_add2query_stat, QtCore.SIGNAL( "clicked()" ), self.add2query_stat ) | |
QtCore.QObject.connect( self.o_add2query_subject, QtCore.SIGNAL( "clicked()" ), self.add2query_subject ) | |
QtCore.QObject.connect( self.o_add2query_word, QtCore.SIGNAL( "clicked()" ), self.add2query_word ) | |
QtCore.QObject.connect( self.o_add2query_misc, QtCore.SIGNAL( "clicked()" ), self.add2query_misc ) | |
self.o_chapter.addItems( RAWoutput._chapters ) | |
self.o_sura_name.addItems( RAWoutput._surates ) | |
self.o_field.addItems( RAWoutput._fields.values() )# x.keys() for Arabic | |
self.o_traduction.addItems( RAWoutput._translations.values() ) | |
self.load_config() | |
<<<<<<< HEAD | |
def search_all( self, page = 1 ): | |
======= | |
def search_all( self ): | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
""" | |
The main search function | |
""" | |
# add to history | |
self.history.insert( 0, self.o_query.currentText() ) | |
self.o_query.clear() | |
self.o_query.addItems( self.history ) | |
self.o_query.setCurrentIndex( 0 ) | |
### | |
limit = self.o_limit.value() | |
html = CSS | |
suggest_flags = { | |
"action":"suggest", | |
"query": self.o_query.currentText() | |
} | |
output = RAWoutput.do( suggest_flags ) | |
#print output | |
suggestions = output["suggest"] if output.has_key( "suggest" ) else [] | |
#print suggestions | |
if len( suggestions ): | |
html += _( u"<h1> Suggestions (%(number)s) </h1>" ) % {"number":len( suggestions )} | |
for key, value in suggestions: | |
html += _( u"<span class='green'> %(word)s </span> : %(suggestions)s. <br />" ) % {"word": unicode( key ), "suggestions":u"،".join( value )} | |
#search | |
results, terms = None, [] | |
search_flags = {"action":"search", | |
"query": self.o_query.currentText(), | |
"sortedby":"score" if self.o_sortedbyscore.isChecked() \ | |
else "mushaf" if self.o_sortedbymushaf.isChecked() \ | |
else "tanzil" if self.o_sortedbytanzil.isChecked() \ | |
else "subject" if self.o_sortedbysubject.isChecked() \ | |
else unicode( self.o_field.currentText() ), # ara2eng_names[self.o_field.currentText()] for Arabic, | |
"page": self.o_page.value(), | |
"reverse_order": self.o_reverse.isChecked(), | |
"word_info":self.o_word_stat.isChecked(), | |
"highlight":self.o_highlight.isChecked(), | |
"script": "uthmani" if self.o_script_uthmani.isChecked() | |
else "standard", | |
"prev_aya":self.o_prev.isChecked(), | |
"next_aya": self.o_suiv.isChecked(), | |
"sura_info": self.o_sura_info.isChecked(), | |
"aya_position_info": self.o_aya_info.isChecked(), | |
"aya_theme_info": self.o_aya_info.isChecked(), | |
"aya_stat_info": self.o_aya_info.isChecked(), | |
"aya_sajda_info": self.o_aya_info.isChecked(), | |
"translation":self.o_traduction.currentText(), | |
} | |
try: | |
results = RAWoutput.do( search_flags ) | |
except ParseException as PE: | |
html += _( "Your query is wrong!,correct it and search again" ) | |
except KeyboardInterrupt: | |
html += _( "Interrupted by user" ) | |
#print words_info | |
if self.o_word_stat.isChecked(): | |
html += u'<h1> Words ( %(nb_words)d words reported %(nb_matches)d times ): </h1>' % results["search"]["words"]["global"] | |
for cpt in xrange( results["search"]["words"]["global"]["nb_words"] ) : | |
this_word_info = results["search"]["words"][cpt + 1] | |
this_word_info["cpt"] = cpt + 1 | |
html += u'''<p> | |
<span class="green">%(cpt)d. %(word)s : </span> | |
reported | |
<span class="green"> %(nb_matches)d </span> | |
times in | |
<span class="green"> %(nb_ayas)d </span> | |
ayas. | |
</p>''' % this_word_info | |
html += u"<br/>" | |
#if self.o_filter.isChecked() and self.last_results: | |
# results = QFilter( self.last_results, results ) | |
self.last_results = results | |
ayas = results["search"]["ayas"] | |
#outputs | |
self.o_time.display( results["search"]["runtime"] ) | |
self.o_resnum.display( results["search"]["interval"]["total"] ) | |
# get page | |
numpagereal = ( results["search"]["interval"]["total"] - 1 ) / PERPAGE + 1 | |
numpagelimit = ( limit - 1 ) / PERPAGE + 1 | |
numpage = numpagelimit if numpagelimit < numpagereal else numpagereal | |
self.o_numpage.display( numpage ) | |
self.o_page.setMinimum( 1 if numpage else 0 ) | |
self.o_page.setMaximum( numpage ) | |
<<<<<<< HEAD | |
#self.o_page.setValue( ) | |
======= | |
self.o_page.setValue( 1 ) | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
if results["error"]["code"] == 0: | |
html += _( """<h1> Results ( %(interval_start)d to %(interval_end)d of %(interval_total)d ) </h1> <br/>""" ) \ | |
% { | |
"interval_start": results["search"]["interval"]["start"] , | |
"interval_end": results["search"]["interval"]["end"], | |
"interval_total": results["search"]["interval"]["total"] | |
} | |
for cpt, result in results["search"]["ayas"].items(): | |
html += _( u""" %(cpt)d) - Aya n° %(aya_id)d of Sura %(sura_name)s """ ) \ | |
% { | |
"cpt": cpt, | |
"aya_id": result["identifier"]["aya_id"], | |
"sura_name": result["identifier"]["sura_name"], | |
} | |
if result["sura"]: | |
html += _( u" Sura n°: %(sura_id)d ,revel_place : %(sura_type)s, revel_order : %(sura_order)d, ayas : %(sura_nb_ayas)d " ) \ | |
% { | |
"sura_id": result["sura"]["id"], | |
"sura_type": SURA_TYPE[result["sura"]["type"]], | |
"sura_order": result["sura"]["order"], | |
"sura_nb_ayas": result ["sura"]["stat"]["ayas"] | |
} | |
html += "<br/>" | |
if result["aya"]["prev_aya"]: | |
html += """[ %(prev_aya_text)s ] - %(prev_aya_sura)s %(prev_aya_id)d <br/> | |
""" % { | |
"prev_aya_text": result["aya"]["prev_aya"]["text"] , | |
"prev_aya_sura": result["aya"]["prev_aya"]["sura"], | |
"prev_aya_id": result["aya"]["prev_aya"]["id"] | |
} | |
html += u"[ %(aya_text)s ] <br/> " % { | |
"aya_text": result["aya"]["text"], | |
} | |
if result["aya"]["next_aya"]: | |
html += u"""[ %(next_aya_text)s ] - %(next_aya_sura)s %(next_aya_id)d <br/> | |
""" % { | |
"next_aya_text":result["aya"]["next_aya"]["text"], | |
"next_aya_sura":result["aya"]["next_aya"]["sura"], | |
"next_aya_id": result["aya"]["next_aya"]["id"] | |
} | |
if result["aya"]["translation"]: | |
html += _( u"""Translation -%(translation_title)s-: %(translation_text)s <br/> | |
""" ) % { | |
"translation_title":"" , | |
"translation_text": result["aya"]["translation"] | |
} | |
if result["position"]: | |
html += _( u"""page: %(position_page)d ; (Hizb : %(position_hizb)d</b> ,Rubu' : %(position_rub)d) ; manzil :%(position_manzil)d ; ruku' :%(position_ruku)s <br/> | |
""" ) % { | |
"position_page": result["position"]["page"], | |
"position_hizb": result["position"]["hizb"], | |
"position_rub": result["position"]["rub"], | |
"position_manzil": result["position"]["manzil"], | |
"position_ruku": result["position"]["ruku"] | |
} | |
if result["theme"]: | |
html += _( """chapter : %(theme_chapter)s ; topic : %(theme_topic)s ; subtopic : %(theme_subtopic)s <br/> | |
""" ) % { | |
"theme_chapter":result["theme"]["chapter"] , | |
"theme_topic": result["theme"]["topic"] , | |
"theme_subtopic": result["theme"]["subtopic"] | |
} | |
if result["stat"]: | |
html += _( """words : %(aya_nb_words)d / %(sura_nb_words)d ; letters : %(aya_nb_letters)d / %(sura_nb_letters)d ; names of Allaah : %(aya_nb_godnames)d / %(sura_nb_godnames)d <br/> | |
""" ) % { | |
"aya_nb_words": result["stat"]["words"] , | |
"sura_nb_words": result["sura"]["stat"]["words"] , | |
"aya_nb_letters": result["stat"]["letters"], | |
"sura_nb_letters": result["sura"]["stat"]["letters"] , | |
"aya_nb_godnames": result["stat"]["godnames"], | |
"sura_nb_godnames": result["sura"]["stat"]["godnames"] | |
} | |
if result["sajda"]: | |
if result["sajda"]["exist"] == u"نعم": | |
html += _( u""" This aya contain a sajdah -%(sajda_type)s- n° %(sajda_id)d <br/> | |
""" ) % { | |
"sajda_type": SAJDA_TYPE[ result["sajda"]["type"]], | |
"sajda_id": result["sajda"]["id"] | |
} | |
html += "<br/><hr/><br/>" | |
self.o_results.setText( html ) | |
<<<<<<< HEAD | |
def topics( self, chapter ): | |
======= | |
def changepage( self, page ): | |
self.search_all( page ) | |
def topics( self, chapter ): | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
first = self.o_topic.itemText( 0 ) | |
list = [item for item in RAWoutput.QSE.list_values( "topic", conditions = [( "chapter", unicode( chapter ) )] ) if item] | |
list.insert( 0, first ) | |
self.o_topic.clear() | |
self.o_topic.addItems( list ) | |
pass | |
def subtopics( self, topic ): | |
first = self.o_subtopic.itemText( 0 ) | |
list = [item for item in RAWoutput.QSE.list_values( "subtopic", conditions = [( "topic", unicode( topic ) ), ] ) if item] | |
list.insert( 0, first ) | |
self.o_subtopic.clear() | |
self.o_subtopic.addItems( list ) | |
pass | |
def changePERPAGE( self, perpage ): | |
global PERPAGE | |
PERPAGE = perpage | |
def add2query_advanced( self ): | |
""" | |
""" | |
filter = "" | |
text = unicode( self.o_feature_text.text() ) | |
word_re = compile( "[^ \n\t]+" ) | |
words = word_re.findall( text ) | |
if text: | |
if self.o_synonyms.isChecked(): | |
for word in words:filter += " ~" + word | |
elif self.o_antonyms.isChecked(): | |
for word in words:filter = " #" + word | |
elif self.o_orthograph.isChecked(): | |
for word in words: filter = " %" + word | |
elif self.o_vocalization.isChecked(): | |
filter = u" آية_:'" + text + "'" | |
elif self.o_phrase.isChecked(): | |
filter = " \"" + text + "\"" | |
elif self.o_partofword.isChecked(): | |
for word in words: filter = " *" + word + "*" | |
elif self.o_allwords.isChecked(): | |
filter = u" + ".join( words ) | |
elif self.o_somewords.isChecked(): | |
filter = u" | ".join( words ) | |
elif self.o_nowords.isChecked(): | |
filter = u" - ".join( words ) | |
elif self.o_derivation_light.isChecked(): | |
for word in words:filter += " >" + word | |
elif self.o_derivation_deep.isChecked(): | |
for word in words:filter += " >>" + word | |
elif self.o_boost.isChecked(): | |
filter = " (" + text + ")^2" | |
index = self.o_relation_advanced.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
if text: | |
self.o_query.setEditText( newquery ) | |
def add2query_struct( self ): | |
""" | |
""" | |
filter = "" | |
items_fields = [u"رقم_الآية", u"رقم", u"ركوع", u"رقم_السورة", u"صفحة", u"ربع", u"حزب", u"جزء", u"منزل"] | |
index = self.o_struct_as.currentIndex() | |
vfrom = self.o_struct_from.value() | |
vto = self.o_struct_to.value() | |
filter = u" " + items_fields[index] + u":[" + unicode( vfrom ) + u" إلى " + unicode( vto ) + "]" | |
index = self.o_relation_struct.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
self.o_query.setEditText( newquery ) | |
def add2query_subject( self ): | |
""" """ | |
filter = "" | |
if self.o_chapter.currentIndex() != 0: | |
filter += u" فصل:\"" + unicode( self.o_chapter.currentText() ) + "\"" | |
if self.o_topic.currentIndex() > 0: | |
filter += u" + فرع:\"" + unicode( self.o_topic.currentText() ) + "\"" | |
if self.o_subtopic.currentIndex() > 0: | |
filter += u" + باب:\"" + unicode( self.o_subtopic.currentText() ) + "\"" | |
index = self.o_relation_subject.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
self.o_query.setEditText( newquery ) | |
def add2query_stat( self ): | |
""" | |
""" | |
filter = "" | |
i = self.o_stat_num.currentIndex() | |
j = self.o_stat_in.currentIndex() | |
vfrom = self.o_stat_from.value() | |
vto = self.o_stat_to.value() | |
STATIN = ["", u"آ", u"س"] | |
STATNUM = ["", u"ح", u"ك", u"ج", u"آ", u"ر"] | |
if i * j != 0 and i / 4 + 1 <= j: | |
filter += u" " + STATNUM[i] + "_" + STATIN[j] + u":[" + str( vfrom ) + u" إلى " + str( vto ) + u"]" | |
index = self.o_relation_stat.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
self.o_query.setEditText( newquery ) | |
def add2query_misc( self ): | |
""" """ | |
filter = u"" | |
if self.o_sura_name.currentIndex() != 0: | |
filter += u" سورة:\"" + unicode( sura_reallist[self.o_sura_name.currentIndex() - 1] ) + "\"" | |
sura_types = [u"", u"مدنية", u"مكية"] | |
if self.o_tanzil.currentIndex() != 0: | |
filter += u" نوع_السورة:" + unicode( sura_types[self.o_tanzil.currentIndex()] ) | |
yes_no = ["", u"لا", u"نعم"] | |
sajdah_types = ["", u"مستحبة", u"واجبة"] | |
if self.o_sajdah_exist.currentIndex() != 0: | |
if self.o_sajdah_type.currentIndex() == 0: | |
filter += u" سجدة:" + unicode( yes_no[self.o_sajdah_exist.currentIndex()] ) | |
else: | |
filter += u" نوع_السجدة:" + unicode( sajdah_types[self.o_sajdah_type.currentIndex()] ) | |
index = self.o_relation_misc.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
if filter:self.o_query.setEditText( newquery ) | |
def add2query_word( self ): | |
filter = "" | |
root = unicode( self.o_word_root.text() ) | |
type_values = [u"اسم", u"فعل", u"أداة"] | |
type = type_values[self.o_word_type.currentIndex()] | |
filter = u" {" + root + u"،" + type + u"}" | |
index = self.o_relation_word.currentIndex() | |
newquery = relate( self.o_query.currentText(), filter, index ) | |
if root:self.o_query.setEditText( newquery ) | |
def setstructborn( self ): | |
items_max = [286, 6236, 565, 114, 604, 240, 60, 30, 7] | |
max = items_max[self.o_struct_as.currentIndex()] | |
self.o_struct_from.setMaximum( max ) | |
self.o_struct_to.setMaximum( max ) | |
def struct_to_min( self, nb ): | |
self.o_struct_to.setMinimum( nb ) | |
def stat_to_min( self, nb ): | |
self.o_stat_to.setMinimum( nb ) | |
def sajda_enable( self, index ): | |
if index == 2: | |
self.o_sajdah_type.setEnabled( True ) | |
else: | |
self.o_sajdah_type.setDisabled( True ) | |
def save_results( self ): | |
"""save as html file""" | |
diag = QtGui.QFileDialog() | |
diag.setAcceptMode( diag.AcceptSave ) | |
diag.setFileMode( diag.AnyFile ) | |
diag.setFilter( "*.html" ) | |
filenames = ["./results.html "] | |
if ( diag.exec_() ): | |
filenames = diag.selectedFiles(); | |
path = unicode( filenames[0] ) | |
file = open( path, "w" ) | |
file.write( self.o_results.toHtml() + "<br><br>CopyRights(c)<a href='http://www.alfanous.org'>Alfanous</a> " ) | |
file.close() | |
def print_results( self ): | |
printer = QtGui.QPrinter() | |
printer.setCreator( self.o_results.toHtml() ) | |
printer.setDocName( _( u"Results" ) + "-" + str( self.o_page.value() ) ) | |
printer.setPageSize( printer.A4 ) | |
dialog = QtGui.QPrintDialog( printer, None ) | |
if dialog.exec_(): | |
pass | |
painter = QtGui.QPainter( printer ) | |
painter.drawText( 10, 10, _( "This is not a bug,Printing will be available in next releases insha'allah" ) ) | |
painter.setFont( QtGui.QFont( "Arabeyesqr" ) ) | |
metrics = ( painter.device().width(), painter.device().height() ) | |
marginHeight = 6 | |
marginWidth = 8 | |
body = QRect( marginWidth, marginHeight, metrics[0] - 2 * marginWidth, metrics[1] - 2 * marginHeight ) | |
#painter.drawRect(body) | |
i = 0 | |
for line in self.o_results.toPlainText().split( "\n" ): | |
i += 1 | |
if "[" not in line: | |
painter.drawText( 10, 30 + 10 * i, line ) | |
painter.end() | |
<<<<<<< HEAD | |
======= | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
def about( self ): | |
""" deprecated """ | |
html = """to replace with about dialog """ | |
self.o_results.setText( html ) | |
<<<<<<< HEAD | |
======= | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
def help( self ): | |
""" deprecated """ | |
html = """ to replace with a hints dialog """ | |
self.o_results.setText( html ) | |
<<<<<<< HEAD | |
======= | |
>>>>>>> b6fabfed4e9f64dcf859c25fa527f031fa858057 | |
def main(): | |
""" the main function""" | |
app = QtGui.QApplication( sys.argv ) | |
#app.setStyle() | |
MainWindow = QtGui.QMainWindow() | |
ui = QUI() | |
ui.setupUi( MainWindow ) | |
MainWindow.show() | |
app.exec_() | |
ui.exit() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment