101 lines
2.5 KiB
C++
101 lines
2.5 KiB
C++
#include "connectionmanagerwindow.h"
|
|
#include "ui_connectionmanagerwindow.h"
|
|
#include "mainwindow.h"
|
|
#include <QDataWidgetMapper>
|
|
#include <QMessageBox>
|
|
#include <QStandardItemModel>
|
|
|
|
#include "connectionlistmodel.h"
|
|
|
|
ConnectionManagerWindow::ConnectionManagerWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::ConnectionManagerWindow)
|
|
, m_listModel(new ConnectionListModel(this))
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
ui->listView->setModel(m_listModel);
|
|
|
|
setupWidgetMappings();
|
|
|
|
connect(ui->listView->selectionModel(),
|
|
SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
|
this, SLOT(on_currentChanged(QModelIndex,QModelIndex)));
|
|
}
|
|
|
|
|
|
ConnectionManagerWindow::~ConnectionManagerWindow()
|
|
{
|
|
m_listModel->save();
|
|
|
|
delete ui;
|
|
delete m_listModel;
|
|
delete m_mapper;
|
|
}
|
|
|
|
void ConnectionManagerWindow::on_actionAdd_Connection_triggered()
|
|
{
|
|
ConnectionConfig c;
|
|
c.setName("new");
|
|
m_listModel->add(c);
|
|
|
|
// Select the new row
|
|
auto idx = m_listModel->index(m_listModel->rowCount() - 1, 0);
|
|
ui->listView->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::Select);
|
|
}
|
|
|
|
void ConnectionManagerWindow::on_currentChanged(const QModelIndex ¤t,
|
|
const QModelIndex &previous)
|
|
{
|
|
int currow = current.row();
|
|
m_listModel->save(prevSelection);
|
|
m_mapper->setCurrentIndex(currow);
|
|
prevSelection = currow;
|
|
}
|
|
|
|
void ConnectionManagerWindow::on_actionDelete_connection_triggered()
|
|
{
|
|
auto ci = ui->listView->selectionModel()->currentIndex();
|
|
if (ci.isValid()) {
|
|
m_listModel->removeRow(ci.row());
|
|
}
|
|
}
|
|
|
|
|
|
void ConnectionManagerWindow::setupWidgetMappings()
|
|
{
|
|
m_mapper = new QDataWidgetMapper(this);
|
|
m_mapper->setModel(m_listModel);
|
|
m_mapper->addMapping(ui->edtName, 1);
|
|
m_mapper->addMapping(ui->edtHost, 2);
|
|
m_mapper->addMapping(ui->spinPort, 3);
|
|
m_mapper->addMapping(ui->edtUser, 4);
|
|
m_mapper->addMapping(ui->edtPassword, 5);
|
|
m_mapper->addMapping(ui->edtDbname, 6);
|
|
m_mapper->toFirst();
|
|
}
|
|
|
|
void ConnectionManagerWindow::on_actionConnect_triggered()
|
|
{
|
|
// Open a window for this connection, maybe we should first check the connection?
|
|
auto ci = ui->listView->selectionModel()->currentIndex();
|
|
auto cc = m_listModel->get(ci.row());
|
|
m_listModel->save(ci.row());
|
|
if (cc.valid()) {
|
|
auto w = new MainWindow;
|
|
w->setAttribute( Qt::WA_DeleteOnClose );
|
|
w->setConfig(cc.get());
|
|
w->show();
|
|
}
|
|
}
|
|
|
|
void ConnectionManagerWindow::on_actionQuit_application_triggered()
|
|
{
|
|
auto res = QMessageBox::question(this, "pglab",
|
|
tr("Close ALL windows?"), QMessageBox::Yes, QMessageBox::No);
|
|
if (res == QMessageBox::Yes) {
|
|
QApplication::quit();
|
|
}
|
|
|
|
//closeAllWindows();
|
|
}
|