klog/setuppageworldeditor.cpp
2017-05-06 17:27:18 +00:00

329 lines
11 KiB
C++

#include "setuppageworldeditor.h"
SetupPageWorldEditor::SetupPageWorldEditor(QWidget *parent) : QWidget(parent)
{
//qDebug() << "SetupPageWorldEditor::SetupPageWorldEditor" << endl;
//worldPanel = new QWidget;
world = new World();
util = new Utilities();
setupEntityDialog = new SetupEntityDialog();
worldModel = new QSqlRelationalTableModel(this);
worldView = new QTableView;
worldView->setContextMenuPolicy(Qt::CustomContextMenu);
worldView->setSortingEnabled(true);
createWorldModel();
createWorldPanel();
worldView->setCurrentIndex(worldModel->index(0, 0));
addEntityPushButton = new QPushButton;
delEntityPushButton = new QPushButton;
editEntityPushButton = new QPushButton;
exportWorldPushButton = new QPushButton;
loadWorldPushButton = new QPushButton;
addEntityPushButton->setText("Add");
delEntityPushButton->setText("Delete");
editEntityPushButton->setText("Edit");
exportWorldPushButton->setText("Export World");
loadWorldPushButton->setText("Import World");
addEntityPushButton->setEnabled(false);
delEntityPushButton->setEnabled(false);
editEntityPushButton->setEnabled(false);
addEntityPushButton->setToolTip("Still not implemented.");
delEntityPushButton->setToolTip("Still not implemented.");
editEntityPushButton->setToolTip("Still not implemented.");
exportWorldPushButton->setEnabled(false);
loadWorldPushButton->setEnabled(true);
exportWorldPushButton->setToolTip("Still not implemented.");
loadWorldPushButton->setToolTip("Import a new CTY.CSV file");
QHBoxLayout *buttonsLayout = new QHBoxLayout;
buttonsLayout->addWidget(exportWorldPushButton);
buttonsLayout->addWidget(loadWorldPushButton);
buttonsLayout->addSpacerItem(new QSpacerItem(10,0,QSizePolicy::Expanding,QSizePolicy::Maximum));
buttonsLayout->addWidget(addEntityPushButton);
buttonsLayout->addWidget(editEntityPushButton);
buttonsLayout->addWidget(delEntityPushButton);
/*
QHBoxLayout *wbuttonsLayout = new QHBoxLayout;
wbuttonsLayout->addSpacerItem(new QSpacerItem(10,0,QSizePolicy::Expanding,QSizePolicy::Maximum));
wbuttonsLayout->addWidget(exportWorldPushButton);
wbuttonsLayout->addWidget(loadWorldPushButton);
QHBoxLayout *buttonsLayout = new QHBoxLayout;
buttonsLayout->addLayout(wbuttonsLayout);
buttonsLayout->addLayout(ebuttonsLayout);
*/
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(worldView);
layout->addLayout(buttonsLayout);
setLayout(layout);
createActions();
if (isWorldEmpty())
{
QString ctyfile = util->getCTYFile();
QMessageBox msgBox;
if (QFile::exists(ctyfile))
{
msgBox.setIcon(QMessageBox::Information);
msgBox.setText(tr("An entities information file (CTY.CSV) has been detected in your KLog folder and will be loaded."));
msgBox.exec();
world->recreate(ctyfile);
worldModel->select();
//slotImportWorldButtonClicked();
}
else
{
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText(tr("No entities information file (CTY.CSV) has been detected in your KLog folder."));
msgBox.setInformativeText(tr("KLog will not be able to show entities information."));
msgBox.exec();
}
}
}
SetupPageWorldEditor::~SetupPageWorldEditor()
{
//qDebug() << "SetupPageWorldEditor::~SetupPageWorldEditor" << endl;
}
void SetupPageWorldEditor::createWorldPanel()
{
worldView->setModel(worldModel);
QString stringQuery = QString("SELECT * FROM entity");
QSqlQuery query(stringQuery);
QSqlRecord rec = query.record(); // Number of columns
int columns = rec.count();
for (int i = 0; i < columns; i++ ){
worldView->setColumnHidden(i, true);
}
columns = rec.indexOf("mainprefix");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("name");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("dxcc");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("continent");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("cqz");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("ituz");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("utc");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("latitude");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("longitude");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("deleted");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("sincedate");
worldView->setColumnHidden(columns, false);
columns = rec.indexOf("todate");
worldView->setColumnHidden(columns, false);
worldView->setItemDelegate(new QSqlRelationalDelegate(this));
worldView->setSelectionMode( QAbstractItemView::SingleSelection);
worldView->setSelectionBehavior(QAbstractItemView::SelectRows);
worldView->resizeColumnsToContents();
worldView->horizontalHeader()->setStretchLastSection(true);
}
void SetupPageWorldEditor::createWorldModel()
{
/*
WORLD_DXCCid = 0,
WORLD_Nameid = 1,
WORLD_MainPrefix = 2,
WORLD_CQZ = 3,
WORLD_ITUZ = 4,
WORLD_Cont = 5
*/
QString stringQuery = QString("SELECT * FROM entity");
QSqlQuery q(stringQuery);
QSqlRecord rec = q.record();
int nameCol;
//worldModel = new QSqlRelationalTableModel(this);
worldModel->setTable("entity");
worldModel->setEditStrategy(QSqlTableModel::OnFieldChange);
nameCol = rec.indexOf("mainprefix");
worldModel->setSort(nameCol, Qt::AscendingOrder);
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Prefix"));
nameCol = rec.indexOf("name");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Entity"));
nameCol = rec.indexOf("dxcc");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("ARRL id"));
nameCol = rec.indexOf("continent");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Continent"));
nameCol = rec.indexOf("cqz");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("CQ Zone"));
nameCol = rec.indexOf("ituz");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("ITU Zone"));
nameCol = rec.indexOf("utc");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("UTC"));
nameCol = rec.indexOf("latitude");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Latitude"));
nameCol = rec.indexOf("longitude");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Longitude"));
nameCol = rec.indexOf("deleted");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Deleted"));
nameCol = rec.indexOf("sincedate");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("Since Date"));
nameCol = rec.indexOf("todate");
worldModel->setHeaderData(nameCol, Qt::Horizontal, tr("To Date"));
worldModel->select();
}
void SetupPageWorldEditor::createActions()
{
//qDebug() << "SetupPageWorldEditor::createActions" << endl;
connect(addEntityPushButton, SIGNAL(clicked()), this, SLOT(slotAddButtonClicked()) );
connect(delEntityPushButton, SIGNAL(clicked()), this, SLOT(slotDelButtonClicked()) );
connect(editEntityPushButton, SIGNAL(clicked()), this, SLOT(slotEditButtonClicked()) );
connect(loadWorldPushButton, SIGNAL(clicked()), this, SLOT(slotImportWorldButtonClicked()) );
connect(worldView, SIGNAL(doubleClicked ( const QModelIndex& ) ), this, SLOT(slotDoubleClickEntity( const QModelIndex& ) ) );
//SIGNAL received from the setupEntityDialog
// void entityAdded(const QStringList _qs); // entity
connect(setupEntityDialog, SIGNAL(entityAdded(QStringList)), this, SLOT(slotAnalyzeEntityAddedSignal(QStringList) ) );
}
void SetupPageWorldEditor::slotAnalyzeEntityAddedSignal(const QStringList _qs)
{
/*
//qDebug() << "SetupPageWorldEditor::slotAnalyzeEntityAddedSignal\n" <<
_qs.at(0) << "\n" <<
_qs.at(1) << "\n" <<
_qs.at(2) << "\n" <<
_qs.at(3) << "\n" <<
_qs.at(4) << "\n" <<
_qs.at(5) << "\n" <<
_qs.at(6) << "\n" <<
_qs.at(7) << "\n" <<
_qs.at(8) << "\n" <<
_qs.at(9) << "\n" <<
_qs.at(10) << "\n" << endl;
*/
}
bool SetupPageWorldEditor::isWorldEmpty()
{
// I need to check if the world is empty and I have the CTY.CSV file
if (world->getHowManyEntities()<1)
{
return true;
}
else
{
return false;
}
return true;
}
void SetupPageWorldEditor::slotAddButtonClicked()
{
//qDebug() << "SetupPageWorldEditor::slotAddButtonClicked" << endl;
setupEntityDialog->exec();
//TODO
}
void SetupPageWorldEditor::slotDelButtonClicked()
{
//qDebug() << "SetupPageWorldEditor::slotDelButtonClicked" << endl;
//TODO
}
void SetupPageWorldEditor::slotEditButtonClicked()
{
//qDebug() << "SetupPageWorldEditor::slotEditButtonClicked" << endl;
//TODO
}
void SetupPageWorldEditor::slotDoubleClickEntity( const QModelIndex & index)
{
//qDebug() << "SetupPageWorldEditor::slotDoubleClickEntity" << endl;
//TODO
QSqlQuery query;
QString queryString;
int row = index.row();
//qDebug() << "SetupPageWorldEditor::slotDoubleClickEntity: ARRLid: " << QString::number((worldModel->index(row, 8)).data(0).toInt()) << endl;
}
void SetupPageWorldEditor::slotImportWorldButtonClicked()
{
//qDebug() << "SetupPageWorldEditor::slotImportWorldButtonClicked" << endl;
QString klogDir;
klogDir = util->getHomeDir();
QString worldFile;
worldFile.clear();
worldFile = QFileDialog::getOpenFileName(this, tr("Open File"), klogDir, tr("BigCTY (*.csv)"));
QMessageBox msgBox;
//qDebug() << "SetupPageWorldEditor::slotImportWorldButtonClicked: " << worldFile << endl;
if (world->recreate(worldFile) )
{
msgBox.setIcon(QMessageBox::Information);
msgBox.setText(tr("Entities information has been updated."));
worldModel->select();
}
else
{
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText(tr("Entities information has not been updated."));
}
msgBox.exec();
//qDebug() << "SetupPageWorldEditor::slotImportWorldButtonClicked - END" << endl;
}