File indexing completed on 2024-04-21 14:46:28

0001 /*
0002     SPDX-FileCopyrightText: 2009 Prakash Mohan <prakash.mohan@kdemail.net>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "observeradd.h"
0008 
0009 #include "kstarsdata.h"
0010 
0011 #include <QSqlTableModel>
0012 
0013 ObserverAdd::ObserverAdd()
0014 {
0015     // Setting up the widget from the .ui file and adding it to the QDialog
0016     QWidget *widget = new QWidget;
0017 
0018     ui.setupUi(widget);
0019 
0020     QVBoxLayout *mainLayout = new QVBoxLayout;
0021     mainLayout->addWidget(widget);
0022     setLayout(mainLayout);
0023 
0024     setWindowTitle(i18nc("@title:window", "Manage Observers"));
0025 
0026     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
0027     mainLayout->addWidget(buttonBox);
0028     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
0029 
0030     ui.AddObserverB->setIcon(QIcon::fromTheme("list-add"));
0031     ui.RemoveObserverB->setIcon(QIcon::fromTheme("list-remove"));
0032 
0033     // Load the observers list from the file
0034     loadObservers();
0035     auto db = QSqlDatabase::database(KStarsData::Instance()->userdb()->connectionName());
0036     QSqlTableModel *users = new QSqlTableModel(nullptr, db);
0037     users->setTable("user");
0038     users->select();
0039     ui.tableView->setModel(users);
0040     ui.tableView->setColumnHidden(0, true);
0041     ui.tableView->horizontalHeader()->resizeContentsPrecision();
0042     ui.tableView->viewport()->update();
0043     ui.AddObserverB->setEnabled(false);
0044     ui.RemoveObserverB->setEnabled(false);
0045     ui.tableView->setSelectionMode(QAbstractItemView::SingleSelection);
0046     // Make connections
0047     connect(ui.AddObserverB, SIGNAL(clicked()), this, SLOT(slotAddObserver()));
0048     connect(ui.RemoveObserverB, SIGNAL(clicked()), this, SLOT(slotRemoveObserver()));
0049     connect(ui.Name, SIGNAL(textChanged(QString)), this, SLOT(checkObserverInfo()));
0050     connect(ui.Surname, SIGNAL(textChanged(QString)), this, SLOT(checkObserverInfo()));
0051     //connect (ui.tableView->verticalHeader(),SIGNAL(sectionClicked(int)),this,SLOT(checkTableInfo()));
0052     connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(auxSlot()));
0053 }
0054 void ObserverAdd::auxSlot()
0055 {
0056     ui.RemoveObserverB->setEnabled(true);
0057 }
0058 
0059 void ObserverAdd::checkObserverInfo()
0060 {
0061     if (ui.Name->text().isEmpty() || ui.Surname->text().isEmpty())
0062         ui.AddObserverB->setEnabled(false);
0063     else
0064         ui.AddObserverB->setEnabled(true);
0065 }
0066 
0067 void ObserverAdd::slotUpdateModel()
0068 {
0069     auto db = QSqlDatabase::database(KStarsData::Instance()->userdb()->connectionName());
0070     QSqlTableModel *users = new QSqlTableModel(nullptr, db);
0071     users->setTable("user");
0072     users->select();
0073     ui.tableView->setModel(users);
0074     ui.tableView->setColumnHidden(0, true);
0075     ui.tableView->horizontalHeader()->resizeContentsPrecision();
0076     ui.tableView->viewport()->update();
0077 }
0078 
0079 void ObserverAdd::slotRemoveObserver()
0080 {
0081     QModelIndex index = ui.tableView->currentIndex();
0082     int nr            = index.row();
0083     QString s         = ui.tableView->model()->data(ui.tableView->model()->index(nr, 0)).toString();
0084 
0085     KStarsData::Instance()->userdb()->DeleteObserver(s);
0086     ui.RemoveObserverB->setEnabled(false);
0087     slotUpdateModel();
0088 }
0089 
0090 void ObserverAdd::slotAddObserver()
0091 {
0092     if (KStarsData::Instance()->userdb()->FindObserver(ui.Name->text(), ui.Surname->text()))
0093     {
0094         if (OAL::warningOverwrite(
0095                     i18n("Another Observer already exists with the given Name and Surname, Overwrite?")) == KMessageBox::No)
0096             return;
0097     }
0098 
0099     KStarsData::Instance()->userdb()->AddObserver(ui.Name->text(), ui.Surname->text(), ui.Contact->text());
0100 
0101     //Reload observers into OAL::m_observers
0102     loadObservers();
0103     // Reset the UI for a fresh addition
0104     ui.Name->clear();
0105     ui.Surname->clear();
0106     ui.Contact->clear();
0107     slotUpdateModel();
0108 }
0109 
0110 void ObserverAdd::loadObservers()
0111 {
0112     KStarsData::Instance()->logObject()->readObservers();
0113 }