diff --git a/connectionlistmodel.cpp b/connectionlistmodel.cpp index 29fc5f0..0f349ce 100644 --- a/connectionlistmodel.cpp +++ b/connectionlistmodel.cpp @@ -67,7 +67,7 @@ int ConnectionListModel::rowCount(const QModelIndex &parent) const int ConnectionListModel::columnCount(const QModelIndex &/*parent*/) const { - return 2; + return 4; } QVariant ConnectionListModel::data(const QModelIndex &index, int role) const @@ -76,17 +76,60 @@ QVariant ConnectionListModel::data(const QModelIndex &index, int role) const if (role == Qt::DisplayRole || role == Qt::EditRole) { int row = index.row(); int col = index.column(); -// if (col == 0) { - result = makeLongDescription(m_connections.at(row)); - // } - //else { - //result = QString("other col"); - //} + const ConnectionConfig& cfg = m_connections.at(row); + switch (col) { + case 0: + result = makeLongDescription(cfg); + break; + case 1: + result = stdStrToQ(cfg.description()); + break; + case 2: + result = stdStrToQ(cfg.host()); + break; + case 3: + result = cfg.port(); + break; + + } } return result; } +bool ConnectionListModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + + if (role == Qt::EditRole) { + int row = index.row(); + int col = index.column(); + ConnectionConfig& cfg = m_connections.at(row); + switch (col) { + case 0: + break; + case 1: + cfg.setDescription( qStrToStd(value.toString()) ); + emit dataChanged(index, index); + break; + case 2: + cfg.setHost( qStrToStd(value.toString()) ); + emit dataChanged(index, index); + break; + case 3: + cfg.setPort( value.toInt() ); + emit dataChanged(index, index); + break; + } + } + return true; +} + +Qt::ItemFlags ConnectionListModel::flags(const QModelIndex &index) const +{ + return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled; +} + + QString ConnectionListModel::makeLongDescription(const ConnectionConfig &cfg) { std::string result(cfg.description()); @@ -94,8 +137,18 @@ QString ConnectionListModel::makeLongDescription(const ConnectionConfig &cfg) result += cfg.user(); result += "@"; result += cfg.host(); + result += ":"; + result += std::to_string(cfg.port()); result += "/"; result += cfg.dbname(); result += ")"; return stdStrToQ(result); } + +void ConnectionListModel::add(const ConnectionConfig &cfg) +{ + m_connections.push_back(cfg); + auto idx = createIndex(m_connections.size()-1, 0); + emit dataChanged(idx, idx); +} + diff --git a/connectionlistmodel.h b/connectionlistmodel.h index 31dd0f0..4f2e963 100644 --- a/connectionlistmodel.h +++ b/connectionlistmodel.h @@ -18,13 +18,10 @@ public: virtual int columnCount(const QModelIndex &/*parent*/) const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + virtual Qt::ItemFlags flags(const QModelIndex &index) const override; - void add(const ConnectionConfig &cfg) - { - m_connections.push_back(cfg); - auto idx = createIndex(m_connections.size()-1, 0); - emit dataChanged(idx, idx); - } + void add(const ConnectionConfig &cfg); private: using t_Connections = std::vector; diff --git a/connectionmanagerwindow.cpp b/connectionmanagerwindow.cpp index 029d856..467ec87 100644 --- a/connectionmanagerwindow.cpp +++ b/connectionmanagerwindow.cpp @@ -20,7 +20,9 @@ ConnectionManagerWindow::ConnectionManagerWindow(QWidget *parent) m_mapper = new QDataWidgetMapper(this); m_mapper->setModel(m_listModel); - m_mapper->addMapping(ui->edtUser, 1); + m_mapper->addMapping(ui->edtName, 1); + m_mapper->addMapping(ui->edtHost, 2); + m_mapper->addMapping(ui->spinPort, 3); m_mapper->toFirst(); connect(ui->listView->selectionModel(),