/* Marcion
Copyright (C) 2009 - 2010 Milan Konvicka
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program */
#include "wordpreview.h"
//
unsigned int CWordPreview::count=0;
CWordPreview::CWordPreview( CMessages * const messages,
QWidget * parent, Qt::WFlags f)
: QWidget(parent, f),messages(messages),
crumw(messages),cwnd(),popup(),
_store(),_store_tbr(),_store_tbr2()
{
setupUi(this);
QFont cf(messages->settings().copticFont());
cf.setPointSize(messages->settings().copticFontSize());
QFont gf(messages->settings().greekFont());
gf.setPointSize(messages->settings().greekFontSize());
QFont lf(messages->settings().latinFont());
lf.setPointSize(messages->settings().latinFontSize());
settings_fontChanged(CTranslit::Copt, cf);
settings_fontChanged(CTranslit::Greek, gf);
settings_fontChanged(CTranslit::Latin, lf);
connect(&messages->settings(),SIGNAL(fontChanged(CTranslit::Script, QFont)),this,SLOT(settings_fontChanged(CTranslit::Script, QFont)));
treeResult->init(messages/*,this,&CWordPreview::format*/);
brPreview->init(messages,QString(),CBookTextBrowser::Coptic);
tbrOne->init(messages,QString(),CBookTextBrowser::Coptic);
tbrTwo->init(messages,QString(),CBookTextBrowser::Coptic);
brPreview->setWordsChecked(true);
tbrOne->setWordsChecked(true);
tbrTwo->setWordsChecked(true);
brPreview->getInputBox().setSwitchState(true);
tbrOne->getInputBox().setSwitchState(true);
tbrTwo->getInputBox().setSwitchState(true);
connect(brPreview->browser(),SIGNAL(anchorClicked(const QUrl)),this,SLOT(slot_brPreview_anchorClicked(QUrl)));
connect(tbrOne->browser(),SIGNAL(anchorClicked(const QUrl)),this,SLOT(slot_tbrOne_anchorClicked(QUrl)));
connect(tbrTwo->browser(),SIGNAL(anchorClicked(const QUrl)),this,SLOT(slot_tbrTwo_anchorClicked(QUrl)));
(show_panel=popup.addAction("show/hide panel"))->setCheckable(true);
show_panel->setChecked(true);
clr=popup.addAction("clear");
popup.addSeparator(); resolve=popup.addAction("resolve");
setWindowTitle("query / Crum ("+QString::number(++count)+")");
crumw.setWindowTitle(windowTitle()+" / Crum");
cwnd.setWidget(&crumw);
cwnd.setWindowIcon(messages->icons().Alfa1);
inpWord->setScript(CTranslit::Copt);
inpWord->setTr(CTranslit::CopticTrToCopticN);
inpWord->setSwitchState(true);
inpWord->setSwitch(true);
messages->settings().mdiArea()->addSubWindow(&cwnd);
trGreek->setScript(CTranslit::Greek);
trGreek->setSwitch(false);
trGreek->setSwitchState(true);
for(int x=0;x<=CRUM_COUNT;x++)
cmbCrum->addItem(QString::number(x+1));
if(!messages->settings().isCopticEditable())
{
btFullW->setVisible(false);
btFullD->setVisible(false);
}
treeResult->setFont(cf);
tbPreview->setCurrentIndex(0);
stwView->setCurrentIndex(0);
checkalld(true);
beforequery();
printInfo();
}
CWordPreview::~CWordPreview()
{
setParent(0);
crumw.setParent(0);
cwnd.setWidget(0);
messages->settings().mdiArea()->removeSubWindow(&cwnd);
}
//
int CWordPreview::dialects() const
{
int r=0;
if(cbS->isChecked())
r|=CDialects3::Sah;
if(cbSa->isChecked())
r|=CDialects3::SahA;
if(cbSf->isChecked())
r|=CDialects3::SahF;
if(cbAch->isChecked())
r|=CDialects3::Achm;
if(cbSa->isChecked())
r|=CDialects3::AchmSub;
if(cbBoh->isChecked())
r|=CDialects3::Boh;
if(cbF->isChecked())
r|=CDialects3::Fay;
if(cbFb->isChecked())
r|=CDialects3::FayB;
if(cbO->isChecked())
r|=CDialects3::Old;
return r;
}
/*void CWordPreview::prepareCreateIndex()
{
tabQuery->setCurrentIndex(0);
rbRegexp->setChecked(true);
inpWord->setText(".*");
on_btQuery_clicked();
on_btAllInTree_clicked();
}*/
void CWordPreview::startQuery()
{
switch(tabQuery->currentIndex())
{
case 0 : //coptic
case 1 :
{
QString na(inpWord->updateL(rbExact->isChecked(),true));
QString where;
if(rbDirect->isChecked())
where="compare_d(`word`,'"+na
+
"',"+(rbExact->isChecked()?"0":(rbLike->isChecked()?"1":"2"))+
","+QString::number(dialects())+","+
(cbAll->isChecked()?"1":"0")+") and `type`<>99";
else
{
QString aup,aua;
if(cbAll->isChecked())
{
aup="(";
aua=" or `crum_index`.`dialect`=0)";
}
if(rbExact->isChecked())
where=aup+QString::number(dialects())+"&`crum_index`.`dialect` "+aua+" and `crum_index`.`word` = binary '"+na+"'";
else if(rbLike->isChecked())
where=aup+QString::number(dialects())+"&`crum_index`.`dialect` "+aua+" and `crum_index`.`word` like binary '"+na+"'";
else if(rbRegexp->isChecked())
where=aup+QString::number(dialects())+"&`crum_index`.`dialect`"+aua+" and `crum_index`.`word` regexp binary '"+na+"'";
}
query(where);
inpWord->setText(na);
break;
}
case 2 : //english
{
QString where(QString(rbEnglish->isChecked()?
"`en`":"`cz`")+
" LIKE '%"+txtCzEn->text()+"%'");
query(where);
break;
}
case 3 : //greek
{
QString where("`gr` like '%"+trGreek->text()+"%'");
query(where);
break;
}
case 4 : //crum
{
QString page;
if(cbA->isChecked()&&cbB->isChecked())
page="_";
else if(cbA->isChecked())
page="a";
else if(cbB->isChecked())
page="b";
else
page="_";
QString where("`crum` like '"+cmbCrum->
lineEdit()->text()+page+"'");
query(where);
break;
}
}
}
void CWordPreview::on_btQuery_clicked()
{
if(tabQuery->currentIndex()==0)
inpWord->updateHistory();
startQuery();
}
void CWordPreview::slot_brPreview_anchorClicked(QUrl url)
{
messages->MsgMsg("anchor clicked");
QString action=url.toString();
if(action.leftRef(4)=="crum")
{
crumw.show();
if(crumw.parentWidget()->isVisible())
crumw.parentWidget()->setFocus();
else
crumw.parentWidget()->show();
crumw.showPage(action.mid(4,action.length()-5).toInt()-3+CRUM_FIRST);
}
else if(action.leftRef(4)=="edit")
{
int key=action.mid(5).toInt();
QString mode(action.mid(4,1));
CAddWord * aw=new CAddWord(messages,messages->crumPg(),key,
mode=="w"?
CAddWord::UpdateWord:CAddWord::UpdateDeriv);
messages->settings().mdiArea()->addSubWindow(aw)->setWindowIcon(messages->icons().AddW);
aw->show();
}
else if(action.leftRef(4)=="full")
{
showfull(action.mid(4));
}
else if(action.leftRef(4)=="addd")
{
int key=action.mid(5).toInt();
CAddWord * aw=new CAddWord(messages,messages->crumPg(),key,
CAddWord::InsertDeriv);
messages->settings().mdiArea()->addSubWindow(aw)->setWindowIcon(messages->icons().AddW);
aw->show();
}
else if(action.leftRef(4)=="cord")
reorder(action.mid(4));
}
void CWordPreview::showfull(QString key)
{
beforequery();
QString query("select `word`,`type`,`crum`,`quality`,`cz`,`en`,`gr`,`added`,`updated`,`created_by`,`updated_by` from `coptwrd` where `key`="+key);
CMySql q(query);
messages->MsgMsg("executing query "+query+" ...");
if(!q.exec())
{
messages->MsgErr(q.lastError());
return;
}
if(!q.first())
{
messages->MsgErr("something wrong");
return;
}
_store.init_line=QString("<a name=\"#word\"></a>WORD");
CWordTemplate wt(messages->settings().isCopticEditable(),cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
QString wtp=q.value(1);
words.append(CWordItem(key.toInt(),-1,0,
q.value(0),"#w0",CWordItem::Word,wtp.toUShort()));
wt.setKey(key.toInt());
wt.setWordKey(key);
wt.setType(wtp.toInt());
wt.setCrum(q.value(2));
wt.setQuality(q.value(3).toInt());
wt.setWord(CCrumResultTree::trBrackets(words.last().word()));
wt.setCzech(CCrumResultTree::format(q.value(4),cbGrEqv->isChecked()));
wt.setEnglish(CCrumResultTree::format(q.value(5),cbGrEqv->isChecked()));
wt.setGreek(q.value(6));
wt.setTable("w");
wt.setCreatedAt(q.value(7));
wt.setUpdatedAt(q.value(8));
wt.setCreatedBy(q.value(9));
wt.setUpdatedBy(q.value(10));
QString w_item;
if(messages->settings().isCopticEditable())
w_item=QString("<a name=\"#w0\">word - key: "+key+"</a>");
else
w_item=QString("<a name=\"#w0\">word</a>");
QString query2("select `key`,`word`,`type`,`crum`,`cz`,`en`,`gr`,`added`,`updated`,`created_by`,`updated_by`,`key_word`,`key_deriv` from `coptdrv` where `key_word`="+key+" order by `pos`");
CMySql q2(query2);
messages->MsgMsg("executing query "+query2+" ...");
if(!q2.exec())
{
messages->MsgErr(q2.lastError());
return;
}
int size=q2.size();
wt.setDerivCount(QString::number(size));
_store.appendItemW(w_item,wt);
_store.init_line_d=QString("<a name=\"#deriv\"></a>records: "+QString::number(size));
if(messages->settings().isCopticEditable())
_store.init_line_d.append("<a href=\"cord"+key+"\">CHANGE ORDER/DELETE</a>");
int pos=0;
while(pos++,q2.next())
{
QString k(q2.value(0)),
kw(q2.value(11)),
kd(q2.value(12));
QString wtp(q2.value(2));
derivs.append(CWordItem(k.toInt(),key.toInt(),pos,
q2.value(1),"#d"+QString::number(pos),
CWordItem::Derivation,wtp.toUShort()));
CWordTemplate wt2(messages->settings().isCopticEditable(),cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
wt2.setKey(k.toInt());
wt2.setWordKey(key);
wt2.setType(wtp.toInt());
wt2.setCrum(q2.value(3));
wt2.setWord(CCrumResultTree::trBrackets(derivs.last().word()));
wt2.setCzech(CCrumResultTree::format(q2.value(4),cbGrEqv->isChecked()));
wt2.setEnglish(CCrumResultTree::format(q2.value(5),cbGrEqv->isChecked()));
wt2.setGreek(q2.value(6));
wt2.setNoQuality();
wt2.setNoDerivCount();
wt2.setTable("d");
wt2.setCreatedAt(q2.value(7));
wt2.setUpdatedAt(q2.value(8));
wt2.setCreatedBy(q2.value(9));
wt2.setUpdatedBy(q2.value(10));
QString d_item;
if(messages->settings().isCopticEditable())
d_item=QString("<a name=\""+derivs.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+" key: "+k+" key_word: "+kw+" key_deriv: "+kd+"</a>");
else
d_item=QString("<a name=\""+derivs.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+"</a>");
_store.appendItemD(d_item,wt2);
}
afterquery();
displayStore();
messages->MsgOk();
}
void CWordPreview::reorder(QString key)
{
QString query("select `key`,`word`,`pos` from coptdrv where `key_word`="+key+" order by `pos`");
CMySql q(query);
messages->MsgMsg("executing query "+query+" ...");
if(!q.exec())
{
messages->MsgErr(q.lastError());
return;
}
messages->MsgOk();
QString query3("select `word` from coptwrd where `key`="+key);
CMySql q3(query3);
if(!q3.exec())
{
messages->MsgErr(q3.lastError());
return;
}
if(!q3.first())
{
messages->MsgErr("something wrong");
return;
}
CReorder r("reorder/delete",q.size(),q3.value(0));
QFont cf(messages->settings().copticFont());
cf.setPointSize(messages->settings().copticFontSize());
r.lblWord->setFont(cf);
r.tblDerivations->setFont(cf);
while(q.next())
{
r.appendItem(
CTranslit::to(q.value(1),
CTranslit::Copt),
q.value(0),
q.value(2)
);
}
if(r.exec()==QDialog::Accepted)
{
if(!r.deleteAll())
{
if(r.Delete.size()>0)
{
QMessageBox dlg(QMessageBox::Question,"delete derivations",
"Deleting "+QString::number(r.Delete.size())+" items.",QMessageBox::Close|QMessageBox::Ok);
if(dlg.exec()==QMessageBox::Ok)
for(int x=0;x<r.Delete.size();x++)
{
QString query("delete from `coptdrv` where `key`="+r.Delete.at(x));
CMySql q(query);
messages->MsgMsg("deleting derivation by query "+query+" ...");
if(!q.exec())
{
messages->MsgErr(q.lastError());
return;
}
}
}
if(r.Reorder.size()>0)
for(int x=0;x<r.Reorder.size();x++)
{
QString query("update `coptdrv` set `pos`="+QString::number(x+1)+" where `key`="+r.Reorder.at(x));
CMySql q(query);
messages->MsgMsg("executing query "+query+" ...");
if(!q.exec())
{
messages->MsgErr(q.lastError());
return;
}
}
}
else
{
QMessageBox dlg(QMessageBox::Question,"delete entire word","Deleting entire word with all derivations.",QMessageBox::Close|QMessageBox::Ok);
if(dlg.exec()==QMessageBox::Ok)
{
QString query("delete from `coptdrv` where `key_word`="+key);
CMySql q(query);
messages->MsgMsg("executing query "+query+" ...");
if(!q.exec())
{
messages->MsgErr(q.lastError());
return;
}
QString query2("delete from `coptwrd` where `key`="+key);
CMySql q2(query2);
messages->MsgMsg("executing query "+query2+" ...");
if(!q2.exec())
{
messages->MsgErr(q2.lastError());
return;
}
}
}
}
messages->MsgOk();
}
void CWordPreview::on_btWord_clicked()
{
brPreview->browser()->scrollToAnchor("#word");
}
void CWordPreview::on_btDeriv_clicked()
{
brPreview->browser()->scrollToAnchor("#deriv");
}
void CWordPreview::afterquery()
{
QRegExp re("<.*>");
re.setMinimal(true);
for(int x=0;x<words.size();x++)
{
CWordItem const & wi=words.at(x);
cmbW->addItem(wi.wtype()==99?"header":CWordTemplate::formatw(CTranslit::to(CCrumResultTree::trBrackets(wi.word()),
CTranslit::Copt),false).remove(re));
}
for(int x=0;x<derivs.size();x++)
{
CWordItem const & wi=derivs.at(x);
cmbD->addItem(wi.wtype()==99?"header":CWordTemplate::formatw(CTranslit::to(CCrumResultTree::trBrackets(wi.word()),
CTranslit::Copt),false).remove(re));
}
on_cmbD_activated(0);
on_cmbW_activated(0);
on_btWord_clicked();
brPreview->setPanelText(inpWord->text());
tbrOne->setPanelText(inpWord->text());
tbrTwo->setPanelText(inpWord->text());
}
void CWordPreview::clearTree()
{
disconnect(treeResult,SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),this,SLOT(on_treeResult_currentItemChanged(QTreeWidgetItem* , QTreeWidgetItem* )));
treeResult->clear();
tbrOne->browser()->clear();
tbrTwo->browser()->clear();
cmbChilds->clear();
connect(treeResult,SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),this,SLOT(on_treeResult_currentItemChanged(QTreeWidgetItem* , QTreeWidgetItem* )));
}
void CWordPreview::beforequery()
{
_store.clear();
clearTree();
//brPreview->browser()->clear();
cmbW->clear();
cmbD->clear();
lblW->clear();
lblD->clear();
words.clear();
derivs.clear();
tbPreview->setCurrentIndex(0);
}
void CWordPreview::on_cmbW_activated(int )
{
int ci;
if((ci=cmbW->currentIndex())!=-1)
{
CWordItem const * it=&words.at(ci);
brPreview->browser()->scrollToAnchor(it->anchor());
lblW->setText(QString::number(it->pos())+"/"+
QString::number(words.size()));
}
}
void CWordPreview::on_cmbD_activated(int )
{
int ci;
if((ci=cmbD->currentIndex())!=-1)
{
CWordItem const * it=&derivs.at(ci);
brPreview->browser()->scrollToAnchor(it->anchor());
lblD->setText(QString::number(it->pos())+"/"+
QString::number(derivs.size()));
}
}
void CWordPreview::query(QString const & where)
{
QApplication::setOverrideCursor(Qt::WaitCursor);
beforequery();
QString query;
if(rbDirect->isChecked())
query=("select *,(select count(*) from `coptdrv` where `key_word`=`q1`.`key`) as `q2` from (select `key`,`word`,`type`,`crum`,`quality`,`cz`,`en`,`gr`,`added`,`updated`,`created_by`,`updated_by` from `coptwrd` where "+where+" order by `crum` limit "+QString::number(spnPage->value()*spnLimit->value())+","+QString::number(spnLimit->value())+") as `q1`");
else
query="select *,(select count(*) from `coptdrv` where `key_word`=`q1`.`key`) as `q2` from (select distinct `coptwrd`.`key`,`coptwrd`.`word`,`coptwrd`.`type`,`coptwrd`.`crum`,`coptwrd`.`quality`,`coptwrd`.`cz`,`coptwrd`.`en`,`coptwrd`.`gr`,`coptwrd`.`added`,`coptwrd`.`updated`,`coptwrd`.`created_by`,`coptwrd`.`updated_by` from `crum_index` left join `coptwrd` on `crum_index`.`key`=`coptwrd`.`key` where `wd`=1 and "+where+" order by `coptwrd`.`crum` limit "+QString::number(spnPage->value()*spnLimit->value())+","+QString::number(spnLimit->value())+") as `q1`";
MQUERY_RESTC(q,query)
int reccount,size;
_store.init_line=QString(QString("<a name=\"#word\"></a><p>words:\t")+ QString::number(size=reccount=q.size())+"/"+QString::number(spnLimit->value())+" page: "+QString::number(spnPage->value())+"</p>");
int pos=0;
while(pos++,q.next())
{
CWordTemplate wt(messages->settings().isCopticEditable(),cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
int key=q.value(0).toInt();
//QString qdercount("select count(*) from `coptdrv` where `key_word`="+QString::number(key));
//MQUERY_GETFIRST(qdc,qdercount)
QString wtp(q.value(2));
wt.setKey(key);
words.append(CWordItem(key,-1,pos,q.value(1),
"#w"+QString::number(pos),
CWordItem::Word,wtp.toUShort()));
wt.setWordKey(QString::number(key));
wt.setType(wtp.toInt());
wt.setCrum(q.value(3));
wt.setQuality(q.value(4).toInt());
wt.setWord(CCrumResultTree::trBrackets(words.last().word()));
wt.setCzech(CCrumResultTree::format(q.value(5),cbGrEqv->isChecked()));
wt.setEnglish(CCrumResultTree::format(q.value(6),cbGrEqv->isChecked()));
wt.setGreek(q.value(7));
wt.setTable("w");
wt.setCreatedAt(q.value(8));
wt.setUpdatedAt(q.value(9));
wt.setCreatedBy(q.value(10));
wt.setUpdatedBy(q.value(11));
wt.setDerivCount(q.value(12));
QString w_item;
if(messages->settings().isCopticEditable())
w_item=QString("<a name=\""+words.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+" key: "+QString::number(key)+"</a>");
else
w_item=QString("<a name=\""+words.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+"</a>");
_store.appendItemW(w_item,wt);
}
if(cbDeriv->isChecked())
{
QString query2;
if(rbDirect->isChecked())
query2="select `key`,`key_word`,`word`,`type`,`crum`,`cz`,`en`,`gr`,`added`,`updated`,`created_by`,`updated_by`,`key_deriv` from `coptdrv` where "+where+" order by `crum` limit "+QString::number(spnPage->value()*spnLimit->value())+","+QString::number(spnLimit->value());
else
query2="select distinct `coptdrv`.`key`,`coptdrv`.`key_word`,`coptdrv`.`word`,`coptdrv`.`type`,`coptdrv`.`crum`,`coptdrv`.`cz`,`coptdrv`.`en`,`coptdrv`.`gr`,`coptdrv`.`added`,`coptdrv`.`updated`,`coptdrv`.`created_by`,`coptdrv`.`updated_by`,`coptdrv`.`key_deriv` from `crum_index` left join `coptdrv` on `crum_index`.`key`=`coptdrv`.`key` where `wd`=2 and "+where+" order by `coptdrv`.`crum` limit "+QString::number(spnPage->value()*spnLimit->value())+","+QString::number(spnLimit->value());
MQUERY_RESTC(q2,query2)
reccount+=q2.size();
_store.init_line_d=QString(QString("<a name=\"#deriv\"></a><p>derivations:\t")+ QString::number(size=q2.size())+"/"+QString::number(spnLimit->value())+" page: "+QString::number(spnPage->value())+"</p>");
pos=0;
while(pos++,q2.next())
{
CWordTemplate wt2(messages->settings().isCopticEditable(),cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
QString k(q2.value(0)),
kw(q2.value(1)),
kd(q2.value(12));
QString wtp(q2.value(3));
derivs.append(CWordItem(
k.toInt(),
kw.toInt(),
pos,
q2.value(2),
"#d"+QString::number(pos),
CWordItem::Word,wtp.toUShort()));
wt2.setKey(derivs.last().key());
wt2.setWordKey(QString::number(
derivs.last().key_word()));
wt2.setType(wtp.toInt());
wt2.setCrum(q2.value(4));
wt2.setWord(CCrumResultTree::trBrackets(derivs.last().word()));
wt2.setCzech(CCrumResultTree::format(q2.value(5),cbGrEqv->isChecked()));
wt2.setEnglish(CCrumResultTree::format(q2.value(6),cbGrEqv->isChecked()));
wt2.setGreek(q2.value(7));
wt2.setNoQuality();
wt2.setNoDerivCount();
wt2.setTable("d");
wt2.setCreatedAt(q2.value(8));
wt2.setUpdatedAt(q2.value(9));
wt2.setCreatedBy(q2.value(10));
wt2.setUpdatedBy(q2.value(11));
QString d_item;
if(messages->settings().isCopticEditable())
d_item=QString("<a name=\""+derivs.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+" key: "+k+" key_word: "+kw+" key_deriv: "+kd+"</a>");
else
d_item=QString("<a name=\""+derivs.last().anchor()+"\">"+QString::number(pos)+
"/"+QString::number(size)+"</a>");
_store.appendItemD(d_item,wt2);
}
}
_store.last_line=QString(QString("<p>total:\t")+ QString::number(reccount)+"</p>");
afterquery();
displayStore();
QApplication::restoreOverrideCursor();
messages->MsgOk();
}
void CWordPreview::on_txtCzEn_returnPressed()
{
on_btQuery_clicked();
}
void CWordPreview::queryCoptic(QString const & word)
{
tabQuery->setCurrentIndex(0);
inpWord->setText(word);
on_btQuery_clicked();
}
void CWordPreview::on_btPrev_clicked()
{
cmbCrum->setCurrentIndex(cmbCrum->currentIndex()-1);
}
void CWordPreview::on_btNext_clicked()
{
cmbCrum->setCurrentIndex(cmbCrum->currentIndex()+1);
}
void CWordPreview::on_cmbCrum_activated(int )
{
on_btQuery_clicked();
}
void CWordPreview::checkalld(bool ch)
{
cbS->setChecked(ch);
cbSa->setChecked(ch);
cbSf->setChecked(ch);
cbAch->setChecked(ch);
cbsA->setChecked(ch);
cbBoh->setChecked(ch);
cbF->setChecked(ch);
cbFb->setChecked(ch);
cbO->setChecked(ch);
}
void CWordPreview::on_btCheckAll_clicked()
{
checkalld(true);
}
void CWordPreview::on_btUncheckAll_clicked()
{
checkalld(false);
}
void CWordPreview::on_btFullW_clicked()
{
if(cmbW->currentIndex()!=-1)
showfull(QString::number(words[cmbW->currentIndex()].key()));
}
void CWordPreview::on_btFullD_clicked()
{
if(cmbD->currentIndex()!=-1)
showfull(QString::number(derivs[cmbD->currentIndex()].key_word()));
}
void CWordPreview::on_inpWord_query()
{
startQuery();
}
void CWordPreview::on_trGreek_query()
{
on_btQuery_clicked();
}
void CWordPreview::on_tbPreview_currentChanged(int index)
{
stwView->setCurrentIndex(index);
}
void CWordPreview::on_btTreeW_clicked()
{
int i=cmbW->currentIndex();
if(i!=-1)
{
QApplication::setOverrideCursor(Qt::WaitCursor);
CWordItem const * wi=&words[i];
treeResult->showInTree(wi,CResultItem::Wrd,false);
CResultItem * ri=treeResult->itemByKey(wi->key(),CResultItem::Wrd);
if(ri)
{
//treeResult->clearSelection();
//ri->setSelected(true);
//on_treeResult_currentItemChanged(ri,0);
//treeResult->scrollToItem(ri);
tbPreview->setCurrentIndex(1);
treeResult->setFocus();
treeResult->scrollToItem(ri);
treeResult->setCurrentItem(ri);
}
for(int x=0;x<words.size();x++)
{
CResultItem * resi(treeResult->itemByKey(words[x].key(),CResultItem::Wrd));
if(resi)
resi->setIcon(0,messages->icons().Check);
}
for(int x=0;x<derivs.size();x++)
{
CResultItem * resi(treeResult->itemByKey(derivs[x].key(),CResultItem::Drv));
if(resi)
resi->setIcon(0,messages->icons().Check);
}
QApplication::restoreOverrideCursor();
}
}
void CWordPreview::on_btTreeD_clicked()
{
int i=cmbD->currentIndex();
if(i!=-1)
{
QApplication::setOverrideCursor(Qt::WaitCursor);
CWordItem const * wi=&derivs[i];
treeResult->showInTree(wi,CResultItem::Drv,false);
CResultItem * ri=treeResult->itemByKey(wi->key(),CResultItem::Drv);
if(ri)
{
/*treeResult->clearSelection();
ri->setSelected(true);
on_treeResult_currentItemChanged(ri,0);
treeResult->scrollToItem(ri);*/
tbPreview->setCurrentIndex(1);
treeResult->setFocus();
treeResult->scrollToItem(ri);
treeResult->setCurrentItem(ri);
}
for(int x=0;x<words.size();x++)
{
CResultItem * resi(treeResult->itemByKey(words[x].key(),CResultItem::Wrd));
if(resi)
resi->setIcon(0,messages->icons().Check);
}
for(int x=0;x<derivs.size();x++)
{
CResultItem * resi(treeResult->itemByKey(derivs[x].key(),CResultItem::Drv));
if(resi)
resi->setIcon(0,messages->icons().Check);
}
QApplication::restoreOverrideCursor();
}
}
void CWordPreview::on_treeResult_currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* )
{
if(current)
{
treeResult->clearSelection();
current->setSelected(true);
}
else
return;
CResultItem * ri((CResultItem *)current);
_store_tbr.clear();
_store_tbr2.clear();
cmbChilds->clear();
CWordTemplate wt(false,cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
wt.setKey(ri->key);
wt.setWordKey(QString::number(ri->word_key));
wt.setType(ri->wtype);
wt.setCrum(ri->crum);
wt.setQuality(ri->quality);
wt.setWord(CCrumResultTree::trBrackets(ri->word));
wt.setCzech(CCrumResultTree::format(ri->cz,cbGrEqv->isChecked()));
wt.setEnglish(CCrumResultTree::format(ri->en,cbGrEqv->isChecked()));
wt.setGreek("");
//wt.setTable("w");
wt.setCreatedAt("");
wt.setUpdatedAt("");
wt.setCreatedBy("");
wt.setUpdatedBy("");
unsigned int ch;
wt.setDerivCount(QString::number(ch=ri->childCount()));
if(ri->wtype==99)
{
wt.setTable("w");
wt.setNoQuality();
_store_tbr._mode=CWordTemplate::Header;
_store_tbr._wt=wt;
}
else
{
switch(ri->type)
{
case CResultItem::Wrd :
{
wt.setTable("w");
_store_tbr._mode=CWordTemplate::EditWord;
_store_tbr._wt=wt;
break;
}
case CResultItem::Drv :
{
wt.setTable("d");
wt.setNoQuality();
_store_tbr._mode=CWordTemplate::EditWord;
_store_tbr._wt=wt;
break;
}
}
}
QString tx,tch(QString::number(ch));
for(unsigned int x=0;x<ch;x++)
{
CResultItem * ric=(CResultItem *)ri->child(x);
CWordTemplate wt2(false,cbCzech->isChecked(),messages->settings().border(),messages->settings().padding(),messages->settings().spacing());
wt2.setKey(ric->key);
wt2.setWordKey(QString::number(ric->word_key));
wt2.setType(ric->wtype);
wt2.setCrum(ric->crum);
wt2.setNoQuality();
wt2.setWord(CCrumResultTree::trBrackets(ric->word));
wt2.setCzech(CCrumResultTree::format(ric->cz,cbGrEqv->isChecked()));
wt2.setEnglish(CCrumResultTree::format(ric->en,cbGrEqv->isChecked()));
wt2.setGreek("");
wt2.setTable("d");
wt2.setCreatedAt("");
wt2.setUpdatedAt("");
wt2.setCreatedBy("");
wt2.setUpdatedBy("");
unsigned int ch;
wt2.setDerivCount(QString::number(ch=ric->childCount()));
wt2.setTable("d");
wt2.setNoQuality();
QRegExp re("<.*>");
re.setMinimal(true);
//cmbChilds->addItem(ric->formatted_word.remove(re));
tx=QString::number(x+1);
QString tbr2_line("<a name=\""+tx+"\">"+tx+"/"+tch+"</a>");
if(ric->wtype==99)
{
cmbChilds->addItem(ric->en);
_store_tbr2.appendItem(wt2,CWordTemplate::Header,tbr2_line);
}
else
{
cmbChilds->addItem(ric->formatted_word.remove(re));
_store_tbr2.appendItem(wt2,CWordTemplate::EditWord,tbr2_line);
}
}
displayStoreTbr();
displayStoreTbr2();
}
void CWordPreview::on_treeResult_customContextMenuRequested(QPoint )
{
QAction * a;
if((a=popup.exec(QCursor::pos())))
{
if(a==clr)
{
clearTree();
}
else if(a==show_panel)
{
wdgTopPanel->setVisible(show_panel->isChecked());
}
else if(a==resolve)
{
resolveLine();
}
}
}
/*void CWordPreview::on_treeResult_headerAdded(CResultItem* item)
{
}*/
void CWordPreview::slot_tbrOne_anchorClicked(QUrl url)
{
QString action=url.toString();
if(action.leftRef(4)=="crum")
{
slot_brPreview_anchorClicked(url);
}
}
void CWordPreview::slot_tbrTwo_anchorClicked(QUrl url)
{
QString action=url.toString();
if(action.leftRef(4)=="crum")
{
slot_brPreview_anchorClicked(url);
}
}
void CWordPreview::on_cmbChilds_currentIndexChanged(int index)
{
tbrTwo->browser()->scrollToAnchor(QString::number(index+1));
}
void CWordPreview::on_btShow_clicked()
{
int x=cmbChilds->currentIndex();
if(x!=-1)
on_cmbChilds_currentIndexChanged(x);
}
void CWordPreview::on_btUp_clicked()
{
int x=cmbChilds->currentIndex();
if(x>0)
{
cmbChilds->setCurrentIndex(x-1);
//on_cmbChilds_currentIndexChanged(x);
}
}
void CWordPreview::on_btBottom_clicked()
{
int y=cmbChilds->count();
if(y>0)
{
cmbChilds->setCurrentIndex(y-1);
//on_cmbChilds_currentIndexChanged(x);
}
}
void CWordPreview::on_btDown_clicked()
{
int x=cmbChilds->currentIndex(),
y=cmbChilds->count();
if(x!=-1&&y-1!=x)
{
cmbChilds->setCurrentIndex(x+1);
//on_cmbChilds_currentIndexChanged(x);
}
}
void CWordPreview::on_btTop_clicked()
{
int y=cmbChilds->count();
if(y!=0)
{
cmbChilds->setCurrentIndex(0);
//on_cmbChilds_currentIndexChanged(x);
}
}
void CWordPreview::on_btAllInTree_clicked()
{
QApplication::setOverrideCursor(Qt::WaitCursor);
clearTree();
for(int x=0;x<words.size();x++)
{
CWordItem const * wi=&words[x];
treeResult->showInTree(wi,CResultItem::Wrd,false);
CResultItem * ri=treeResult->itemByKey(wi->key(),CResultItem::Wrd);
ri->setIcon(0,messages->icons().Check);
}
for(int x=0;x<derivs.size();x++)
{
CWordItem const * wi=&derivs[x];
treeResult->showInTree(wi,CResultItem::Drv,false);
CResultItem * ri=treeResult->itemByKey(wi->key(),CResultItem::Drv);
ri->setIcon(0,messages->icons().Check);
}
tbPreview->setCurrentIndex(1);
QApplication::restoreOverrideCursor();
}
void CWordPreview::resolveLine()
{
CResultItem * ri=(CResultItem *)treeResult->currentItem();
if(ri&&_store_tbr.c_lines.isEmpty())
{
ri->resolveItem();
for(int x=0;x<ri->cwitem.wlist.count();x++)
{
_store_tbr.c_lines.append(ri->cwitem.dAsStr(x)+" "+CWordTemplate::formatw(CTranslit::tr(ri->cwitem.word(x),CTranslit::CopticDictC,false,false),false));
}
//tbrOne->browser()->append("<br>resolved : <br>");
for(int x=0;x<ri->cwitem.wlist_resolved.count();x++)
{
_store_tbr.combs.append(CWordTemplate::formatw(CWItem::dToStr(ri->cwitem.wlist_resolved[x].first)+" "+CTranslit::tr(ri->cwitem.wlist_resolved[x].second,CTranslit::CopticDictC,false,false),false));
}
displayStoreTbr();
}
}
void CWordPreview::printInfo()
{
QString query("select (select count(`key`) from `coptwrd`) as `words`,(select count(`key`) from `coptdrv`) as `derivations`,(select count(*) from `crum_index`) as `index`");
MQUERY_GETFIRST(q,query)
unsigned int inum(q.value(2).toUInt());
brPreview->browser()->append("words: "+q.value(0)+"<br>derivations: "+q.value(1)+"<br>index: "+QString::number(inum));
if(inum==0)
{
rbDirect->setChecked(true);
//rbIndex->setEnabled(false);
brPreview->browser()->append("<br>You have created no index yet. Use main application menu <i>database->local->(re)create index of coptic tables</i> and create it.<br>");
}
else
rbIndex->setChecked(true);
messages->MsgOk();
}
/*void CWordPreview::on_rbIndex_toggled(bool checked)
{
if(checked)
{
cbDeriv->setChecked(true);
cbDeriv->setEnabled(false);
}
}
void CWordPreview::on_rbDirect_toggled(bool checked)
{
if(checked)
{
//cbDeriv->setChecked(true);
cbDeriv->setEnabled(true);
}
}*/
void CWordPreview::settings_fontChanged(CTranslit::Script uf, QFont f)
{
QString s;
switch(uf)
{
case CTranslit::Copt :
{
inpWord->setFont(f);
cmbW->setFont(f);
cmbD->setFont(f);
cmbChilds->setFont(f);
brPreview->browser()->setFont(f);
tbrOne->browser()->setFont(f);
tbrTwo->browser()->setFont(f);
treeResult->setFont(f);
s="Coptic";
break;
}
case CTranslit::Latin :
{
inpWord->setLFont(f);
trGreek->setLFont(f);
txtCzEn->setFont(f);
s="Latin";
break;
}
case CTranslit::Greek :
{
trGreek->setFont(f);
s="Greek";
break;
}
case CTranslit::Hebrew :
{
s="Hebrew";
break;
}
}
messages->MsgMsg(windowTitle()+": "+s+" font changed");
}
void CWordPreview::on_brPreview_highlightActivated(bool * processed)
{
displayStore();
*processed=true;
}
void CWordPreview::on_brPreview_highlightDeactivated(bool * processed)
{
displayStore();
*processed=true;
}
void CWordPreview::on_tbrOne_highlightActivated(bool * processed)
{
displayStoreTbr();
*processed=true;
}
void CWordPreview::on_tbrOne_highlightDeactivated(bool * processed)
{
displayStoreTbr();
*processed=true;
}
void CWordPreview::on_tbrTwo_highlightActivated(bool * processed)
{
displayStoreTbr2();
*processed=true;
}
void CWordPreview::on_tbrTwo_highlightDeactivated(bool * processed)
{
displayStoreTbr2();
*processed=true;
}
void CWordPreview::on_brPreview_dictionaryRequested(int dict,QString const & word)
{
showDictionary(dict,word);
}
void CWordPreview::on_tbrOne_dictionaryRequested(int dict,QString const & word)
{
showDictionary(dict,word);
}
void CWordPreview::on_tbrTwo_dictionaryRequested(int dict,QString const & word)
{
showDictionary(dict,word);
}
void CWordPreview::showDictionary(int dict,QString const & word)
{
switch(dict)
{
case CBookTextBrowser::Crum :
inpWord->setText(word);
inpWord->setSwitchState(false);
rbExact->setChecked(true);
break;
case CBookTextBrowser::LSJ :
CLSJ * lsj = new CLSJ(messages);
lsj->setWindowTitle(QString("LSJ - "+word));
lsj->prepareParse(CTranslit::tr(word,CTranslit::GreekNToGreekTr,false,false));
lsj->parse();
//lsj->prepareDictionary();
//lsj->dictionary(word,CLSJ::Exact);
QMdiSubWindow * sw=messages->settings().mdiArea()->addSubWindow(lsj);
sw->show();
break;
}
}
void CWordPreview::displayStore()
{
brPreview->browser()->clear();
/*QRegExp r("<.*>");
r.setMinimal(true);*/
QString atxt(_store.init_line);
for(int x=0;x<_store.count;x++)
{
CWordTemplate lwt(_store._wt[x]);
QString cw(lwt.wordTr());
if(brPreview->rmAccents())
cw.remove(QRegExp("[\\[\\]\\(\\)]"));
if(brPreview->rmSpaces())
cw.remove(" ");
if(brPreview->isHighlightChecked())
cw=brPreview->highlightText(cw);
lwt.changeWord(cw);
atxt.append(_store.h_line[x]);
atxt.append(lwt.create(CWordTemplate::EditWord));
}
atxt.append(_store.init_line_d);
for(int y=0;y<_store.count_d;y++)
{
CWordTemplate lwt(_store._wt_d[y]);
if(brPreview->isHighlightChecked())
{
//cw.remove(r);
QString cw(lwt.wordTr());
cw=brPreview->highlightText(cw);
lwt.changeWord(cw);
}
atxt.append(_store.h_line_d[y]);
atxt.append(lwt.create(CWordTemplate::EditDeriv));
}
atxt.append(_store.last_line);
brPreview->browser()->insertHtml(atxt);
brPreview->browser()->moveCursor(QTextCursor::Start);
}
void CWordPreview::displayStoreTbr()
{
tbrOne->browser()->clear();
CWordTemplate lwt(_store_tbr._wt);
QString cw(lwt.wordTr());
if(brPreview->rmAccents())
cw.remove(QRegExp("[\\[\\]\\(\\)]"));
if(brPreview->rmSpaces())
cw.remove(" ");
if(tbrOne->isHighlightChecked())
cw=tbrOne->highlightText(cw);
lwt.changeWord(cw);
QString atxt(lwt.create(_store_tbr._mode));
if(!_store_tbr.c_lines.isEmpty())
{
atxt.append("<br>(this function is still under development)<br>");
for(int y=0;y<_store_tbr.c_lines.count();y++)
{
QString o_s(_store_tbr.c_lines[y]);
if(tbrOne->isHighlightChecked())
o_s=tbrOne->highlightText(o_s);
atxt.append(o_s+"<br>");
}
atxt.append("<br>resolved:<br>");
for(int x=0;x<_store_tbr.combs.count();x++)
{
QString o_s(_store_tbr.combs[x]);
if(tbrOne->rmSpaces())
o_s.remove(" ");
if(tbrOne->isHighlightChecked())
o_s=tbrOne->highlightText(o_s);
atxt.append(o_s+"<br>");
}
}
tbrOne->browser()->insertHtml(atxt);
tbrOne->browser()->moveCursor(QTextCursor::Start);
}
void CWordPreview::displayStoreTbr2()
{
tbrTwo->browser()->clear();
QString atxt;
for(int x=0;x<_store_tbr2.count;x++)
{
CWordTemplate lwt(_store_tbr2._wt[x]);
QString cw(lwt.wordTr());
if(tbrTwo->rmAccents())
cw.remove(QRegExp("[\\[\\]\\(\\)]"));
if(tbrTwo->rmSpaces())
cw.remove(" ");
if(tbrTwo->isHighlightChecked())
cw=tbrTwo->highlightText(cw);
lwt.changeWord(cw);
atxt.append(_store_tbr2._lines[x]);
atxt.append(lwt.create(_store_tbr2._mode[x]));
}
tbrTwo->browser()->insertHtml(atxt);
tbrTwo->browser()->moveCursor(QTextCursor::Start);
}
void CWordPreview::on_brPreview_contentChanged(bool,bool,bool * processed)
{
displayStore();
*processed=true;
}
void CWordPreview::on_tbrOne_contentChanged(bool,bool,bool * processed)
{
displayStoreTbr();
*processed=true;
}
void CWordPreview::on_tbrTwo_contentChanged(bool,bool,bool * processed)
{
displayStoreTbr2();
*processed=true;
}
//
CWTStore::CWTStore()
:init_line(),
init_line_d(),
last_line(),
h_line(),h_line_d(),
_wt(),_wt_d(),
count(0),count_d(0)
{
}
void CWTStore::appendItemW(QString const & hline, CWordTemplate const & wt)
{
h_line.append(hline);
_wt.append(wt);
count++;
}
void CWTStore::appendItemD(QString const & hline, CWordTemplate const & wt)
{
h_line_d.append(hline);
_wt_d.append(wt);
count_d++;
}
void CWTStore::clear()
{
init_line.clear();
init_line_d.clear();
last_line.clear();
_wt.clear();
_wt_d.clear();
h_line.clear();
h_line_d.clear();
count=0;
count_d=0;
}
//
CWTStoreTbr::CWTStoreTbr()
:_wt(),_mode(CWordTemplate::EditWord),c_lines(),combs()
{
}
void CWTStoreTbr::clear()
{
c_lines.clear();
combs.clear();
}
//
CWTStoreTbr2::CWTStoreTbr2()
:_wt(),_mode(),_lines(),count(0)
{
}
void CWTStoreTbr2::clear()
{
_lines.clear();
_mode.clear();
_wt.clear();
count=0;
}
void CWTStoreTbr2::appendItem(CWordTemplate const & wt,CWordTemplate::Mode mode, QString const & line)
{
_wt.append(wt);
_lines.append(line);
_mode.append(mode);
count++;
}