/*
pRepo - Peter's Repository program
Complex tutorial of gSAFE ( http://hyperprog.com/gsafe/ )
(C) 2011 Peter Deak (______@gmail.com)
License: GPL
*/
#include <QtCore>
#include <QtSql>
#include <QtGui>
#include <QtWebKit>
#include <datalib.h>
#include <hfactory.h>
#include <dialib.h>
#include <dconsole.h>
#include <guilib.h>
#include <printlib.h>
#include <xmlolib.h>
#include "prepo.h"
// ////////////////////////////////////////////////////////////////////////////////////////////
MainDialog::MainDialog(QWidget *parent)
: QDialog(parent),ui(new Ui::MainWindowBase)
{
ui->setupUi(this);
HSqlInterface::setSqlMode("QtSqlite_Win");
//Initialize HRefreshAgent...
new HRefreshAgent();
//Create HFactory object...
myfactory = new HFactory("");
connect(myfactory,SIGNAL(errorSignal(QString)),this,SLOT(showError(QString)));
//Read metadata from Qt resource by HFactory
QFile *metadatadef_file=NULL;
metadatadef_file = new QFile(METADEFFILE);
if(!metadatadef_file->exists())
{
error(tr("Error: Missing datadef file!"));
exit(0);
}
myfactory->readFromFile(metadatadef_file);
delete metadatadef_file;
metadatadef_file = NULL;
//Opens the database, or create if not exists
sdebug(QString("Open the sqlite database file:") + QString(DATABASEFILE));
bool newcreate=false;
QFile *database_file=NULL;
database_file = new QFile(DATABASEFILE);
if(!database_file->exists())
{
error(tr("Error:Can't open the database file!"));
if(QMessageBox::question(this,tr("New database"),tr("Create new empty database structure?"),tr("No"),tr("Yes")))
newcreate = true;
if(!newcreate)
exit(0);
}
delete database_file;
database_file = NULL;
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(DATABASEFILE);
if(!db.open())
{
QMessageBox::information(this,"gSAFE-Qt4",tr("Cannot establish the database connection..."));
exit(0);
}
globalsql = new HSqlHandler();
connect(globalsql,SIGNAL(errorSignal(QString)),this,SLOT(showError(QString)));
//Create the database structure
if(newcreate)
{
QString createstr="";
//Creating a new empty database structure...
createstr = myfactory->sqlCreateString("settings");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (0)"));
createstr = myfactory->sqlCreateString("Type");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (1)"));
createstr = myfactory->sqlCreateString("Place");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (2)"));
createstr = myfactory->sqlCreateString("Accountable");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (3)"));
createstr = myfactory->sqlCreateString("Object");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (4)"));
createstr = myfactory->sqlCreateString("Moving");
globalsql->submit0ResultQuery(createstr,tr("Error during structure creation (5)"));
//Popus a dialog to save the settings (insert a record to the setting table
HTable *settings = myfactory->genHTable("settings");
HDialog *fsdialog = new HDialog(this,tr("Settings"),settings,NULL,"Ok|OkIsAccept|StrToE",tr("Set the following attributes"));
while(!fsdialog->exec());
settings->setSqlFieldValue("next",settings->getSqlFieldValue("start"));
settings->insertRecord();
delete fsdialog;
delete settings;
}
//Database succesfull opened...
objectchangelogger = new HDataChangeLogger(myfactory->genHTable("Moving"),"Unknown","User");
//------------- Allocate various things --------------------------------------
pixmaparray_new_edit_del = new QList<QPixmap *>();
pixmaparray_new_edit_del->push_back(new QPixmap(":/ICONS/new.png" ));
pixmaparray_new_edit_del->push_back(new QPixmap(":/ICONS/edit.png"));
pixmaparray_new_edit_del->push_back(new QPixmap(":/ICONS/del.png" ));
connect(ui->bClose,SIGNAL(clicked()),this,SLOT(close()));
connect(ui->bObjects,SIGNAL(clicked()),this,SLOT(slotObjects()));
connect(ui->bTypes,SIGNAL(clicked()),this,SLOT(slotTypes()));
connect(ui->bPlaces,SIGNAL(clicked()),this,SLOT(slotPlaces()));
connect(ui->bAcc,SIGNAL(clicked()),this,SLOT(slotAcc()));
connect(ui->bIn,SIGNAL(clicked()),this,SLOT(slotInObj()));
connect(ui->bMove,SIGNAL(clicked()),this,SLOT(slotMoveObj()));
connect(ui->bSetprice,SIGNAL(clicked()),this,SLOT(slotSetCValueObj()));
connect(ui->bOut,SIGNAL(clicked()),this,SLOT(slotOutObj()));
connect(ui->bTrace,SIGNAL(clicked()),this,SLOT(slotTraceObj()));
connect(ui->bConsole,SIGNAL(clicked()),this,SLOT(slotConsole()));
connect(ui->bAbout,SIGNAL(clicked()),this,SLOT(slotInfo()));
currList = NULL;
objt = NULL;
clicked_outkey = "";
wstack.clear();
wstack.push_back(this);
setSizeGripEnabled(true);
slotStat("");
connect(HRefreshAgent::getNotifyAgent(),SIGNAL(getnotify(QString)),this,SLOT(slotStat(QString)));
//Register custom console commands
::register_dconsole_command("createstr",this);
::register_dconsole_command("dumpmetadata",this);
}
MainDialog::~MainDialog(void)
{
}
int MainDialog::showError(QString err)
{
QString msg;
msg = QString(tr("%1: %2"))
.arg(tr("Error received"))
.arg(err);
sdebug(msg);
error(msg);
return 0;
}
int MainDialog::slotConsole(void)
{
dconsole();
return 0;
}
int MainDialog::slotInfo(void)
{
QMessageBox::information(this,tr("About"),
QString("<strong>pRepo</strong> - %1<br>%2<br>http://hyperprog.com<br><br>%3: %4<br>gSAFE: %5<br><br>%6<br>License: GPLv2")
.arg(tr("Peter's repository program"))
.arg(tr("(gSAFE tutorial program)"))
.arg(tr("Version"))
.arg(VERSION)
.arg(GSAFE_VERSION)
.arg(tr("Author: Peter Deak (hyper80@gmail.com)")));
return 0;
}
// //Places///////////////////////////////////////////////////////////////////////
int MainDialog::slotPlaces(void)
{
currList = myfactory->genHList("Place","list");
currList->extrafeatures = true;
HDialog *d = new HDialog(wstack.top(),tr("Places"),currList,NULL,
"Ok|EscC|ToolCenter|Vert",tr("Places"),"","",pixmaparray_new_edit_del);
currList->readList();
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotPlacesAct(QString)));
connect(d->pixTool[0],SIGNAL(clicked()),this,SLOT(slotAddPlaces()));
connect(d->pixTool[1],SIGNAL(clicked()),this,SLOT(slotEditPlaces()));
connect(d->pixTool[2],SIGNAL(clicked()),this,SLOT(slotDelPlace()));
wstack.push_back(d);
d->exec();
wstack.pop();
delete d;
delete currList;
currList = NULL;
return 0;
}
int MainDialog::slotAddPlaces(void)
{
HTable *t = myfactory->genHTable("Place");
HDialog *d = new HDialog(wstack.top(),tr("A new place"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("The new place"));
wstack.push_back(d);
while(d->exec())
{
t->rereadNextInsertedKey();
if(t->insertRecord() == 0)
{
emit setKeyTo(t->getInsertedKey());
HRefreshAgent::notify("place");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotEditPlaces(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
HTable *t = myfactory->genHTable("Place");
HDialog *d = new HDialog(wstack.top(),tr("Edit place"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("Edit the place"));
t->updateWithKey(key);
wstack.push_back(d);
while(d->exec())
{
if(t->saveRecord() == 0)
{
HRefreshAgent::notify("place");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotDelPlace(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
if(QMessageBox::question(wstack.top(),tr("Are you sure?"),tr("Are you sure want to delete this place?"),tr("No"),tr("Yes")))
{
if(globalsql->submit1ResultQuery(
QString("SELECT COUNT(*) FROM object WHERE place=\'%1\';").arg(key),"CL01").toInt() > 0)
{
error(tr("You can't delete a place which contains objects! Sorry."));
return 0;
}
globalsql->submit0ResultQuery(QString("DELETE FROM place WHERE pkey=%1").arg(key),"");
HRefreshAgent::notify("place");
}
return 0;
}
// //Types///////////////////////////////////////////////////////////////////////
int MainDialog::slotTypes(void)
{
currList = myfactory->genHList("Type","list");
currList->extrafeatures = true;
HDialog *d = new HDialog(wstack.top(),tr("Types"),currList,NULL,
"Ok|EscC|ToolCenter|Vert",tr("Types"),"","",pixmaparray_new_edit_del);
currList->readList();
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotTypesAct(QString)));
connect(d->pixTool[0],SIGNAL(clicked()),this,SLOT(slotAddTypes()));
connect(d->pixTool[1],SIGNAL(clicked()),this,SLOT(slotEditTypes()));
connect(d->pixTool[2],SIGNAL(clicked()),this,SLOT(slotDelTypes()));
wstack.push_back(d);
d->exec();
wstack.pop();
delete d;
delete currList;
return 0;
}
int MainDialog::slotAddTypes(void)
{
HTable *t = myfactory->genHTable("Type");
HDialog *d = new HDialog(wstack.top(),tr("A new type"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("The new type"));
wstack.push_back(d);
while(d->exec())
{
t->rereadNextInsertedKey();
if(t->insertRecord() == 0)
{
emit setKeyTo(t->getInsertedKey());
HRefreshAgent::notify("type");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotEditTypes(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
HTable *t = myfactory->genHTable("Type");
HDialog *d = new HDialog(wstack.top(),tr("Edit type"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("Edit the type"));
t->updateWithKey(key);
wstack.push_back(d);
while(d->exec())
{
if(t->saveRecord() == 0)
{
HRefreshAgent::notify("type");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotDelTypes(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
if(QMessageBox::question(wstack.top(),tr("Are you sure?"),tr("Are you sure want to delete this type?"),tr("No"),tr("Yes")))
{
if(globalsql->submit1ResultQuery(
QString("SELECT COUNT(*) FROM object WHERE type=\'%1\';").arg(key),"CL01").toInt() > 0)
{
error(tr("You can't delete a type which contains objects! Sorry."));
return 0;
}
globalsql->submit0ResultQuery(QString("DELETE FROM type WHERE tkey=%1").arg(key),"");
HRefreshAgent::notify("type");
}
return 0;
}
// //Accountables///////////////////////////////////////////////////////////////////////
int MainDialog::slotAcc(void)
{
currList = myfactory->genHList("Accountable","list");
currList->extrafeatures = true;
HDialog *d = new HDialog(wstack.top(),tr("Accountables"),currList,NULL,
"Ok|EscC|ToolCenter|Vert",tr("Accountables"),"","",pixmaparray_new_edit_del);
currList->readList();
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotAccAct(QString)));
connect(d->pixTool[0],SIGNAL(clicked()),this,SLOT(slotAddAcc()));
connect(d->pixTool[1],SIGNAL(clicked()),this,SLOT(slotEditAcc()));
connect(d->pixTool[2],SIGNAL(clicked()),this,SLOT(slotDelAcc()));
wstack.push_back(d);
d->exec();
wstack.pop();
delete d;
delete currList;
return 0;
}
int MainDialog::slotAddAcc(void)
{
HTable *t = myfactory->genHTable("Accountable");
HDialog *d = new HDialog(wstack.top(),tr("A new accountable"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("The new accountable"));
wstack.push_back(d);
while(d->exec())
{
t->rereadNextInsertedKey();
if(t->insertRecord() == 0)
{
emit setKeyTo(t->getInsertedKey());
HRefreshAgent::notify("accountable");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotEditAcc(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
HTable *t = myfactory->genHTable("Accountable");
HDialog *d = new HDialog(wstack.top(),tr("Edit accountable"),t,NULL,
"Ok|EscC|Vert|StrToE|OkIsAccept",tr("Edit the accountable"));
t->updateWithKey(key);
wstack.push_back(d);
while(d->exec())
{
if(t->saveRecord() == 0)
{
HRefreshAgent::notify("accountable");
break;
}
else continue;
}
wstack.pop();
delete d;
delete t;
return 0;
}
int MainDialog::slotDelAcc(void)
{
QString key;
if(currList == NULL || currList->soft_current_key.isEmpty())
return 0;
key = currList->soft_current_key;
if(QMessageBox::question(wstack.top(),tr("Are you sure?"),tr("Are you sure want to delete this accountable?"),tr("No"),tr("Yes")))
{
if(globalsql->submit1ResultQuery(
QString("SELECT COUNT(*) FROM object WHERE acc=\'%1\';").arg(key),"CL01").toInt() > 0)
{
error(tr("You can't delete an accountable which contains objects! Sorry."));
return 0;
}
globalsql->submit0ResultQuery(QString("DELETE FROM accountable WHERE akey=%1").arg(key),"");
HRefreshAgent::notify("accountable");
}
return 0;
}
// //Objects///////////////////////////////////////////////////////////////////////
int MainDialog::slotInObj(void) //Add incoming object
{
QString repnum;
int nextrepnum;
objt = myfactory->genHTable("Object","record");
//Make a new repository number
repnum = globalsql->submit1ResultQuery("SELECT prefix FROM settings LIMIT 1",tr("Error query next rep. prefix")).toString();
nextrepnum = globalsql->submit1ResultQuery("SELECT next FROM settings LIMIT 1",tr("Error query next rep. num.")).toInt();
objt->setSqlFieldValue("repnumber",QString("%1%2").arg(repnum).arg(nextrepnum));
//Check if allow empty accountable
if(!globalsql->submit1ResultQuery("SELECT allowemptyacc FROM settings LIMIT 1",tr("Error query next settings")).toBool())
objt->fieldBySqlName("acc")->addNotValidValue("NULL");
//Add toolbuttons to make possible to add items from here. (type,place,accountable)
((HSqlChoose *)objt->fieldBySqlName("type"))->addToolButton(this,tr("Add new type..."));
((HSqlChoose *)objt->fieldBySqlName("place"))->addToolButton(this,tr("Add new place..."));
((HSqlChoose *)objt->fieldBySqlName("acc"))->addToolButton(this,tr("Add new accountable..."));
HDialog *d = new HDialog(wstack.top(),tr("New object"),objt,NULL,
"Ok|EscC|Vert|OkIsAccept|StrToE",tr("Add a new object"),"","",NULL);
wstack.push_back(d);
while(d->exec())
{
bool ok=true;
objt->rereadNextInsertedKey();
objt->transaction();
if(objt->insertRecord(false,true,false) != 0)
ok = false;
//save the next prepository number
globalsql->submit0ResultQuery(QString("UPDATE settings SET next=%1;").arg(nextrepnum+1),tr("Error set next rep num."),true);
if(globalsql->errorStatus())
ok = false;
if(ok)
{
objt->commit();
HRefreshAgent::notify("object");
break;
}
else
{
objt->rollback();
continue;
}
}
wstack.pop();
delete d;
delete objt;
objt = NULL;
return 0;
}
int MainDialog::toolbuttonclicked(void)
{
if(objt == NULL)
return 0;
if( ((HSqlChoose *)objt->fieldBySqlName("type"))->toolbarbutton_down_text == tr("Add new type...") )
return slotAddTypes();
if( ((HSqlChoose *)objt->fieldBySqlName("place"))->toolbarbutton_down_text == tr("Add new place...") )
return slotAddPlaces();
if( ((HSqlChoose *)objt->fieldBySqlName("acc"))->toolbarbutton_down_text == tr("Add new accountable...") )
return slotAddAcc();
return 0;
}
//Object list dialog
int MainDialog::objectList(QString role,QString mode,QString filter)
{
QString caption=tr("Objects"),text=tr("Objects");
QString readfilter="";
currList = myfactory->genHList("Object",role);
currList->extrafeatures = true;
if(mode == "baselist")
{
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotViewObject(QString)));
}
if(mode == "modify")
{
text = tr("Select object to modify");
readfilter = " AND status=\'a\' ";
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotModifyObject(QString)));
}
if(mode == "setcval")
{
text = tr("Select object to modify current value");
readfilter = " AND status=\'a\' ";
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotSetCValueObject(QString)));
}
if(mode == "out")
{
text = tr("Select object to sold/refuse");
readfilter = " AND status=\'a\' ";
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotOutObject(QString)));
}
if(mode == "trace")
{
text = tr("Select object to trace");
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotTraceObject(QString)));
}
if(mode == "place")
{
text = tr("Objects is in this place");
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotViewObject(QString)));
readfilter = QString(" AND place=\'%1\' ").arg(filter);
}
if(mode == "type")
{
text = tr("Objects is in type");
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotViewObject(QString)));
readfilter = QString(" AND type=\'%1\' ").arg(filter);
}
if(mode == "acc")
{
text = tr("Objects which assigned to this accountable");
connect(currList,SIGNAL(actionOnRecord(QString)),this,SLOT(slotViewObject(QString)));
readfilter = QString(" AND acc=\'%1\' ").arg(filter);
}
HDialog *d = new HDialog(wstack.top(),caption,currList,NULL,
"Ok|EscC|Vert",text,"","",NULL);
currList->readList(readfilter);
wstack.push_back(d);
connect(currList,SIGNAL(alternateActionOnRecord(QString)),this,SLOT(slotAlterOnObj(QString)));
d->exec();
wstack.pop();
delete d;
delete currList;
currList = NULL;
return 0;
}
//Activate on right click on an object in object list
int MainDialog::slotAlterOnObj(QString key)
{
QMenu *popup = new QMenu(this);
popup->addAction(tr("Add new object"),this,SLOT(slotInObj()));
popup->addAction(tr("Move/Edit object"),this,SLOT(slotMenuEdit()));
popup->addAction(tr("Sold/Refuse object"),this,SLOT(slotMenuRefuse()));
popup->addAction(tr("Trace object"),this,SLOT(slotMenuTrace()));
clicked_outkey = key;
popup->exec(QCursor::pos());
clicked_outkey = "";
delete popup;
return 0;
}
int MainDialog::objectViewEdit(QString key,QString role,bool readonly) //View/Edit an object
{
bool ro = readonly;
if(key.isEmpty())
return 0;
//Generate the metadata object
objt = myfactory->genHTable("Object",role);
//Set logger
objectchangelogger->setPos("slotViewEditObject");
objt->setDataChangeLogger(objectchangelogger);
//Read the data from SQL
objt->updateWithKey(key);
//Set readonly if necessary (ro requested, or sold item)
if(objt->getSqlFieldValue("status").toString() == "o")
ro = true;
if(ro)
objt->setReadonly();
if(role == "out")
objt->setSqlFieldValue("status","o");
//Check if allow empty accountable
if(!globalsql->submit1ResultQuery("SELECT allowemptyacc FROM settings LIMIT 1",tr("Error query next settings")).toBool())
objt->fieldBySqlName("acc")->addNotValidValue("NULL");
((HSqlChoose *)objt->fieldBySqlName("type"))->addToolButton(this,tr("Add new type..."));
((HSqlChoose *)objt->fieldBySqlName("place"))->addToolButton(this,tr("Add new place..."));
((HSqlChoose *)objt->fieldBySqlName("acc"))->addToolButton(this,tr("Add new accountable..."));
HDialog *d = new HDialog(wstack.top(),tr("Object"),objt,NULL,
"Ok|EscC|Vert|OkIsAccept|StrToE",tr("Object's data"),"","",NULL);
wstack.push_back(d);
while(d->exec())
{
if(ro)
break;
if(role == "setcval")
objt->setSqlFieldValue("lcdate",QDate::currentDate());
if(objt->saveRecord() == 0)
{
HRefreshAgent::notify("object");
break;
}
else continue;
}
wstack.pop();
delete d;
delete objt;
objectchangelogger->setPos("Unknown");
objt = NULL;
return 0;
}
// //Trace an object changes //////////////////////////////////////////////////////////////////
int MainDialog::slotTraceObject(QString key)
{
int i,c;
if(key.isEmpty())
return 0;
HDataField *df;
HTable *ot = myfactory->genHTable("Object");
ot->updateWithKey(key);
HPlainDataMatrix *m;
m = globalsql->submitNResultQuery(4,
QString("SELECT sqlfieldname,oldvalue,newvalue,changetime FROM object_moving "
"WHERE changedkey=\'%1\' "
"ORDER BY changetime;").arg(key),tr("Error query changes"));
m->setHeaderCell(0,tr("Changed data"));
m->setHeaderCell(1,tr("Old value"));
m->setHeaderCell(2,tr("New value"));
c = m->rowCount();
for(i=0;i<c;++i)
{
df = ot->fieldBySqlName(m->getCellStr(i,0));
if(df != NULL)
{
QString explain_txt="";
QString old_display_str="";
QString new_display_str="";
explain_txt = df->getExplainText();
old_display_str = df->dbValueToDispValue(QString(m->getCellStr(i,1))).toString();
new_display_str = df->dbValueToDispValue(QString(m->getCellStr(i,2))).toString();
if(!explain_txt.isEmpty())
m->setCellStr(i,0,explain_txt);
if(!old_display_str.isEmpty())
m->setCellStr(i,1,old_display_str);
if(!new_display_str.isEmpty())
m->setCellStr(i,2,new_display_str);
}
}
HPlainDMD *pdmd = new HPlainDMD(wstack.top(),m,true);
pdmd->exec();
delete pdmd;
delete m;
delete ot;
return 0;
}
// Small slots for events //////////////////////////////////////////////////////////////////////////
int MainDialog::slotViewObject(QString key) { return objectViewEdit(key,"",true); }
int MainDialog::slotModifyObject(QString key) { return objectViewEdit(key,"modify",false); }
int MainDialog::slotSetCValueObject(QString key){ return objectViewEdit(key,"setcval",false);}
int MainDialog::slotOutObject(QString key) { return objectViewEdit(key,"out",false); }
int MainDialog::slotMenuEdit(void) { return objectViewEdit(clicked_outkey,"modify",false); }
int MainDialog::slotMenuRefuse(void) { return objectViewEdit(clicked_outkey,"out",false); }
int MainDialog::slotPlacesAct(QString key) { return objectList("list","place",key); }
int MainDialog::slotTypesAct(QString key) { return objectList("list","type",key); }
int MainDialog::slotAccAct(QString key) { return objectList("list","acc",key); }
int MainDialog::slotObjects(void) { return objectList("list","baselist"); }
int MainDialog::slotMoveObj(void) { return objectList("list","modify"); }
int MainDialog::slotSetCValueObj(void) { return objectList("list","setcval"); }
int MainDialog::slotOutObj(void) { return objectList("list","out"); }
int MainDialog::slotTraceObj(void) { return objectList("list","trace"); }
int MainDialog::slotMenuTrace(void) { return slotTraceObject(clicked_outkey); }
// //Small statistics///////////////////////////////////////////////////////////////////
int MainDialog::slotStat(QString tblname)
{
Q_UNUSED(tblname)
int pnum = globalsql->submit1ResultQuery("SELECT count(*) FROM place;","S_E1").toInt();
int anum = globalsql->submit1ResultQuery("SELECT count(*) FROM accountable;","S_E2").toInt();
int tnum = globalsql->submit1ResultQuery("SELECT count(*) FROM type;","S_E3").toInt();
int onum = globalsql->submit1ResultQuery("SELECT count(*) FROM object;","S_E4").toInt();
int oanum = globalsql->submit1ResultQuery("SELECT count(*) FROM object WHERE status=\'a\';","S_E5").toInt();
double osum = globalsql->submit1ResultQuery("SELECT sum(invalue) FROM object;","S_E6").toDouble();
double oasum = globalsql->submit1ResultQuery("SELECT sum(invalue) FROM object WHERE status=\'a\';","S_E7").toDouble();
ui->label->setText(
QString("%1: %2 (%3: %4)\n%5: %6 (%7: %8)\n%9: %10\n%11: %12\n%13: %14")
.arg(tr("Objects in the system")).arg(onum)
.arg(tr("Active")).arg(oanum)
.arg(tr("Sum incoming value in the system")).arg(osum)
.arg(tr("Active")).arg(oasum)
.arg(tr("Types in the system")).arg(tnum)
.arg(tr("Places in the system")).arg(::doubleToQString(pnum,0,2,1))
.arg(tr("Accountables in the system")).arg(::doubleToQString(anum,0,2,1))
);
return 0;
}
// //Other//////////////////////////////////////////////////////////////////////////////
void MainDialog::keyPressEvent(QKeyEvent *e)
{
if(e->key() == Qt::Key_Escape)
close();
}
QString MainDialog::donsole_command_interpreter(QString commandString)
{
if(commandString == "createstr")
{
QString createstr="=========================================================\n";
createstr += myfactory->sqlCreateString("settings"); createstr.append("\n");
createstr += myfactory->sqlCreateString("Type"); createstr.append("\n");
createstr += myfactory->sqlCreateString("Place"); createstr.append("\n");
createstr += myfactory->sqlCreateString("Accountable"); createstr.append("\n");
createstr += myfactory->sqlCreateString("Object"); createstr.append("\n");
createstr += myfactory->sqlCreateString("Moving"); createstr.append("\n");
return createstr;
}
if(commandString == "dumpmetadata")
{
QFile f(METADEFFILE);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
return tr("Error, cannot provide the resource.");
QTextStream in(&f);
return in.readAll();
}
return "Ok.";
}
// //////////////////////////////////////////////////////////////////////////// //
int main(int argi,char **argc)
{
QApplication app(argi,argc);
#ifdef LANG_HU
QTranslator qtTranslator;
qtTranslator.load(LANGUAGEFILE);
app.installTranslator(&qtTranslator);
#endif
MainDialog *maindialog = new MainDialog(0);
maindialog->show();
app.exec();
return 0;
}
//end code.
|