From 5d454cdcd1011edcf06567294b1f8c1171c946fe Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Tue, 9 Jan 2018 15:46:40 +0100 Subject: [PATCH] . --- cdistributor.cpp | 20 +++++ cdistributor.h | 6 ++ cdistributoreditdialog.cpp | 94 +++++++++++++++++++-- cdistributoreditdialog.h | 4 + cdistributoreditdialog.ui | 94 ++++++++++++++------- cdistributorwindow.cpp | 5 +- clabel.cpp | 17 ++++ clabel.h | 23 +++++ cmainwindow.cpp | 15 +++- cpartdistributoreditdialog.cpp | 86 +++++++++++++++++++ cpartdistributoreditdialog.h | 43 ++++++++++ cpartdistributoreditdialog.ui | 148 +++++++++++++++++++++++++++++++++ cparteditdialog.cpp | 129 ++++++++++++++++++++++++++++ cparteditdialog.h | 8 ++ cparteditdialog.ui | 6 ++ cpartwindow.cpp | 37 ++++----- cpartwindow.h | 2 +- qtPartlist.pro | 11 ++- 18 files changed, 680 insertions(+), 68 deletions(-) create mode 100644 clabel.cpp create mode 100644 clabel.h create mode 100644 cpartdistributoreditdialog.cpp create mode 100644 cpartdistributoreditdialog.h create mode 100644 cpartdistributoreditdialog.ui diff --git a/cdistributor.cpp b/cdistributor.cpp index 8e1bae0..49d1615 100644 --- a/cdistributor.cpp +++ b/cdistributor.cpp @@ -126,6 +126,16 @@ QString cDistributor::description() return(m_szDescription); } +void cDistributor::setLogo(const QPixmap& logo) +{ + m_logo = logo; +} + +QPixmap cDistributor::logo() +{ + return(m_logo); +} + cDistributor* cDistributorList::add(qint32 id) { cDistributor* lpDistributor = find(id); @@ -147,3 +157,13 @@ cDistributor* cDistributorList::find(qint32 id) } return(0); } + +cDistributor* cDistributorList::find(const QString& szName) +{ + for(int x = 0;x < count();x++) + { + if(at(x)->name() == szName) + return(at(x)); + } + return(0); +} diff --git a/cdistributor.h b/cdistributor.h index 6f622f8..45068a6 100644 --- a/cdistributor.h +++ b/cdistributor.h @@ -4,6 +4,7 @@ #include #include +#include class cDistributor @@ -43,6 +44,9 @@ public: void setDescription(const QString& szDescription); QString description(); + + void setLogo(const QPixmap& logo); + QPixmap logo(); private: qint32 m_id; QString m_szName; @@ -55,6 +59,7 @@ private: QString m_szEMail; QString m_szLink; QString m_szDescription; + QPixmap m_logo; }; Q_DECLARE_METATYPE(cDistributor*) @@ -64,6 +69,7 @@ class cDistributorList : public QList public: cDistributor* add(qint32 id); cDistributor* find(qint32 id); + cDistributor* find(const QString& szName); }; #endif // CDISTRIBUTOR_H diff --git a/cdistributoreditdialog.cpp b/cdistributoreditdialog.cpp index 5c5671d..ea954c7 100644 --- a/cdistributoreditdialog.cpp +++ b/cdistributoreditdialog.cpp @@ -7,8 +7,11 @@ #include #include - +#include #include +#include +#include +#include #include @@ -16,11 +19,14 @@ cDistributorEditDialog::cDistributorEditDialog(QWidget *parent) : QDialog(parent), ui(new Ui::cDistributorEditDialog), - m_id(-1) + m_id(-1), + m_szLogoPath(QDir::homePath()) { ui->setupUi(this); ui->m_lpPostalCode->setValidator(new QIntValidator(0, 99999, this)); ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + + connect(ui->m_lpLogo, SIGNAL(clicked()), this, SLOT(logoClicked())); } cDistributorEditDialog::~cDistributorEditDialog() @@ -33,13 +39,23 @@ void cDistributorEditDialog::setValues(cDistributor* lpDistributor) ui->m_lpName->setText(lpDistributor->name()); ui->m_lpLink->setText(lpDistributor->link()); ui->m_lpAddress->setText(lpDistributor->address()); - ui->m_lpPostalCode->setText(QString("%1").arg(lpDistributor->postalCode())); + if(lpDistributor->postalCode()) + ui->m_lpPostalCode->setText(QString("%1").arg(lpDistributor->postalCode())); ui->m_lpCity->setText(lpDistributor->city()); ui->m_lpCountry->setText(lpDistributor->country()); ui->m_lpPhone->setText(lpDistributor->phone()); ui->m_lpFax->setText(lpDistributor->fax()); ui->m_lpEMail->setText(lpDistributor->eMail()); ui->m_lpDescription->setText(lpDistributor->description()); + if(!lpDistributor->logo().isNull()) + { + m_logo = lpDistributor->logo(); + + if(m_logo.width() > 150 || m_logo.height() > 100) + ui->m_lpLogo->setPixmap(m_logo.scaled(150, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + else + ui->m_lpLogo->setPixmap(m_logo); + } m_id = lpDistributor->id(); } @@ -52,6 +68,42 @@ void cDistributorEditDialog::on_m_lpName_textChanged(const QString &arg1) ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true); } +void cDistributorEditDialog::logoClicked() +{ + QString szFileName = QFileDialog::getOpenFileName(this, tr("Open Image"), m_szLogoPath, tr("Image Files (*.png *.jpg *.bmp *.gif)")); + + if(szFileName.isEmpty()) + return; + + QDir dir(szFileName); + m_szLogoPath = dir.absolutePath(); + + QFile file(szFileName); + if(!file.open(QIODevice::ReadOnly)) + { + QMessageBox::critical(this, "Error", "File can't be opened."); + return; + } + + QByteArray baLogo = file.readAll(); + file.close(); + QPixmap logo; + logo.loadFromData(baLogo); + + if(logo.isNull()) + { + QMessageBox::critical(this, "Error", "Not a valid image."); + return; + } + + m_logo = logo; + + if(logo.width() > 150 || logo.height() > 100) + ui->m_lpLogo->setPixmap(logo.scaled(150, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + else + ui->m_lpLogo->setPixmap(logo); +} + void cDistributorEditDialog::accept() { if(m_id != -1) @@ -84,12 +136,15 @@ bool cDistributorEditDialog::save() return(false); } - szQuery = QString("UPDATE distributor SET name=:name, link=:link, address=:address, postal_code=:postal_code, city=:city, country=:country, phone=:phone, fax=:fax, email=:email, description=:description WHERE id=:id;"); + szQuery = QString("UPDATE distributor SET name=:name, link=:link, address=:address, postal_code=:postal_code, city=:city, country=:country, phone=:phone, fax=:fax, email=:email, description=:description, logo=:logo WHERE id=:id;"); query.prepare(szQuery); query.bindValue(":name", ui->m_lpName->text()); query.bindValue(":link", ui->m_lpLink->text()); query.bindValue(":address", ui->m_lpAddress->text()); - query.bindValue(":postal_code", ui->m_lpPostalCode->text().toInt()); + if(ui->m_lpPostalCode->text().length()) + query.bindValue(":postal_code", ui->m_lpPostalCode->text().toInt()); + else + query.bindValue(":postal_code", QVariant(QVariant::Int)); query.bindValue(":city", ui->m_lpCity->text()); query.bindValue(":country", ui->m_lpCountry->text()); query.bindValue(":phone", ui->m_lpPhone->text()); @@ -98,6 +153,17 @@ bool cDistributorEditDialog::save() query.bindValue(":description", ui->m_lpDescription->document()->toPlainText()); query.bindValue(":id", m_id); + if(m_logo.isNull()) + query.bindValue(":logo", QVariant::ByteArray); + else + { + QByteArray baLogo; + QBuffer buffer(&baLogo); + buffer.open(QIODevice::WriteOnly); + m_logo.save(&buffer, "PNG"); + query.bindValue(":logo", baLogo); + } + if(!query.exec()) { myDebug << query.lastError().text(); @@ -125,12 +191,15 @@ bool cDistributorEditDialog::add() return(false); } - szQuery = QString("INSERT INTO distributor (name, link, address, postal_code, city, country, phone, fax, email, description) VALUES (:name, :link, :address, :postal_code, :city, :country, :phone, :fax, :email, :description);"); + szQuery = QString("INSERT INTO distributor (name, link, address, postal_code, city, country, phone, fax, email, description) VALUES (:name, :link, :address, :postal_code, :city, :country, :phone, :fax, :email, :description, :logo);"); query.prepare(szQuery); query.bindValue(":name", ui->m_lpName->text()); query.bindValue(":link", ui->m_lpLink->text()); query.bindValue(":address", ui->m_lpAddress->text()); - query.bindValue(":postal_code", ui->m_lpPostalCode->text().toInt()); + if(ui->m_lpPostalCode->text().length()) + query.bindValue(":postal_code", ui->m_lpPostalCode->text().toInt()); + else + query.bindValue(":postal_code", QVariant(QVariant::Int)); query.bindValue(":city", ui->m_lpCity->text()); query.bindValue(":country", ui->m_lpCountry->text()); query.bindValue(":phone", ui->m_lpPhone->text()); @@ -138,6 +207,17 @@ bool cDistributorEditDialog::add() query.bindValue(":email", ui->m_lpEMail->text()); query.bindValue(":description", ui->m_lpDescription->document()->toPlainText()); + if(m_logo.isNull()) + query.bindValue(":logo", QVariant::ByteArray); + else + { + QByteArray baLogo; + QBuffer buffer(&baLogo); + buffer.open(QIODevice::WriteOnly); + m_logo.save(&buffer, "PNG"); + query.bindValue(":logo", baLogo); + } + if(!query.exec()) { myDebug << query.lastError().text(); diff --git a/cdistributoreditdialog.h b/cdistributoreditdialog.h index 1482def..8041fda 100644 --- a/cdistributoreditdialog.h +++ b/cdistributoreditdialog.h @@ -5,6 +5,7 @@ #include "cdistributor.h" #include +#include namespace Ui { @@ -23,10 +24,13 @@ public: void setValues(cDistributor* lpDistributor); private slots: void on_m_lpName_textChanged(const QString &arg1); + void logoClicked(); private: Ui::cDistributorEditDialog* ui; qint32 m_id; + QString m_szLogoPath; + QPixmap m_logo; bool save(); bool add(); diff --git a/cdistributoreditdialog.ui b/cdistributoreditdialog.ui index 352197c..bdb87e1 100644 --- a/cdistributoreditdialog.ui +++ b/cdistributoreditdialog.ui @@ -18,17 +18,7 @@ - - - - Web: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - + EMail: @@ -38,10 +28,10 @@ - + - + City: @@ -51,10 +41,10 @@ - + - + Country: @@ -64,7 +54,7 @@ - + Address: @@ -84,7 +74,7 @@ - + Postal: @@ -94,13 +84,13 @@ - + - + - + Phone: @@ -110,13 +100,13 @@ - + - + - + Fax: @@ -126,7 +116,32 @@ - + + + + + 150 + 100 + + + + + 150 + 100 + + + + NO LOGO + + + false + + + Qt::AlignCenter + + + + Description: @@ -136,18 +151,28 @@ - + - - - - + - + + + + + Web: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + @@ -164,8 +189,16 @@ + + + cLabel + QLabel +
clabel.h
+
+
m_lpName + m_lpLink m_lpAddress m_lpPostalCode m_lpCity @@ -173,7 +206,6 @@ m_lpPhone m_lpFax m_lpEMail - m_lpLink m_lpDescription diff --git a/cdistributorwindow.cpp b/cdistributorwindow.cpp index 16b9359..fc636ce 100644 --- a/cdistributorwindow.cpp +++ b/cdistributorwindow.cpp @@ -58,7 +58,8 @@ void cDistributorWindow::showDistributorList() lpItems.at(2)->setText(lpDistributor->fax()); lpItems.at(3)->setText(lpDistributor->eMail()); lpItems.at(4)->setText(lpDistributor->address()); - lpItems.at(5)->setText(QString("%1").arg(lpDistributor->postalCode())); + if(lpDistributor->postalCode()) + lpItems.at(5)->setText(QString("%1").arg(lpDistributor->postalCode())); lpItems.at(6)->setText(lpDistributor->city()); lpItems.at(7)->setText(lpDistributor->country()); lpItems.at(8)->setText(lpDistributor->link()); @@ -243,7 +244,7 @@ void cDistributorWindow::onDelete() showDistributorList(); } -void cDistributorWindow::on_m_lpDistributorList_doubleClicked(const QModelIndex &index) +void cDistributorWindow::on_m_lpDistributorList_doubleClicked(const QModelIndex &/*index*/) { onEdit(); } diff --git a/clabel.cpp b/clabel.cpp new file mode 100644 index 0000000..4db7cf4 --- /dev/null +++ b/clabel.cpp @@ -0,0 +1,17 @@ +#include "clabel.h" + + +cLabel::cLabel(QWidget* parent, Qt::WindowFlags /*f*/) : + QLabel(parent) +{ + +} + +cLabel::~cLabel() +{ +} + +void cLabel::mousePressEvent(QMouseEvent* /*event*/) +{ + emit clicked(); +} diff --git a/clabel.h b/clabel.h new file mode 100644 index 0000000..8be514e --- /dev/null +++ b/clabel.h @@ -0,0 +1,23 @@ +#ifndef CLABEL_H +#define CLABEL_H + + +#include +#include + + +class cLabel : public QLabel +{ + Q_OBJECT + +public: + explicit cLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); + ~cLabel(); +signals: + void clicked(); + +protected: + void mousePressEvent(QMouseEvent* event); +}; + +#endif // CLABEL_H diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 4de0e5e..045586a 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -116,7 +116,8 @@ void cMainWindow::initDB() " phone STRING," " fax STRING," " email STRING," - " description TEXT);"); + " description TEXT," + " logo BLOB);"); } if(!m_db.tables().contains("part_distributor")) @@ -178,7 +179,7 @@ void cMainWindow::loadDistributorList() QSqlQuery query; QString szQuery; - szQuery = "SELECT id, name, link, address, postal_code, city, country, phone, fax, email, link, description FROM distributor ORDER BY name;"; + szQuery = "SELECT id, name, link, address, postal_code, city, country, phone, fax, email, link, description, logo FROM distributor ORDER BY name;"; if(!query.exec(szQuery)) { @@ -202,6 +203,14 @@ void cMainWindow::loadDistributorList() lpDistributor->setEMail(query.value("email").toString()); lpDistributor->setLink(query.value("link").toString()); lpDistributor->setDescription(query.value("description").toString()); + + QByteArray baLogo = query.value("logo").toByteArray(); + if(!baLogo.isEmpty()) + { + QPixmap logo; + if(logo.loadFromData(baLogo)) + lpDistributor->setLogo(logo); + } } } @@ -521,11 +530,13 @@ void cMainWindow::partGroupChanged(cPartGroup* /*lpPartGroup*/) { loadPartGroupList(); loadPartList(); + loadPartDistributorList(); } void cMainWindow::partChanged(cPart* /*lpPart*/) { loadPartList(); + loadPartDistributorList(); } void cMainWindow::on_m_lpMenuPartlistNew_triggered() diff --git a/cpartdistributoreditdialog.cpp b/cpartdistributoreditdialog.cpp new file mode 100644 index 0000000..6cbe50b --- /dev/null +++ b/cpartdistributoreditdialog.cpp @@ -0,0 +1,86 @@ +#include "cpartdistributoreditdialog.h" +#include "ui_cpartdistributoreditdialog.h" + +#include + + +cPartDistributorEditDialog::cPartDistributorEditDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::cPartDistributorEditDialog), + m_lpPart(0), + m_lpDistributorList(0), + m_lpPartDistributor(0) +{ + ui->setupUi(this); + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false); +} + +cPartDistributorEditDialog::~cPartDistributorEditDialog() +{ + delete ui; +} + +void cPartDistributorEditDialog::setValues(cPart* lpPart, cDistributorList* lpDistributorList, cPartDistributor* lpPartDistributor) +{ + m_lpPart = lpPart; + m_lpDistributorList = lpDistributorList; + m_lpPartDistributor = lpPartDistributor; + + for(int x = 0;x < lpDistributorList->count();x++) + ui->m_lpDistributor->addItem(lpDistributorList->at(x)->name(), QVariant::fromValue(lpDistributorList->at(x))); + + if(lpPartDistributor) + { + ui->m_lpDistributor->setCurrentText(lpPartDistributor->distributor()->name()); + ui->m_lpName->setText(lpPartDistributor->name()); + ui->m_lpDescription->setText(lpPartDistributor->description()); + ui->m_lpLink->setText(lpPartDistributor->link()); + ui->m_lpPrice->setValue(lpPartDistributor->price()); + } + + if(ui->m_lpName->text().length() && ui->m_lpDistributor->currentIndex() >= 0) + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + else + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false); +} + +void cPartDistributorEditDialog::on_m_lpName_textChanged(const QString &arg1) +{ + if(arg1.length() && ui->m_lpDistributor->currentIndex() >= 0) + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + else + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false); +} + +void cPartDistributorEditDialog::on_m_lpDistributor_currentIndexChanged(const QString &arg1) +{ + if(arg1.length() && ui->m_lpDistributor->currentIndex() >= 0) + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + else + ui->m_lpButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false); +} + +QString cPartDistributorEditDialog::name() +{ + return(ui->m_lpName->text()); +} + +QString cPartDistributorEditDialog::description() +{ + return(ui->m_lpDescription->document()->toPlainText()); +} + +cDistributor* cPartDistributorEditDialog::distributor() +{ + return(qvariant_cast(ui->m_lpDistributor->currentData(Qt::UserRole))); +} + +qreal cPartDistributorEditDialog::price() +{ + return(ui->m_lpPrice->value()); +} + +QString cPartDistributorEditDialog::link() +{ + return(ui->m_lpLink->text()); +} diff --git a/cpartdistributoreditdialog.h b/cpartdistributoreditdialog.h new file mode 100644 index 0000000..8b39f59 --- /dev/null +++ b/cpartdistributoreditdialog.h @@ -0,0 +1,43 @@ +#ifndef CPARTDISTRIBUTOREDITDIALOG_H +#define CPARTDISTRIBUTOREDITDIALOG_H + + +#include "cpart.h" +#include "cdistributor.h" +#include "cpartdistributor.h" + +#include + + +namespace Ui { +class cPartDistributorEditDialog; +} + +class cPartDistributorEditDialog : public QDialog +{ + Q_OBJECT + +public: + explicit cPartDistributorEditDialog(QWidget *parent = 0); + ~cPartDistributorEditDialog(); + + void setValues(cPart* lpPart, cDistributorList* lpDistributorList, cPartDistributor* lpPartDistributor); + + QString name(); + QString description(); + cDistributor* distributor(); + qreal price(); + QString link(); + +private slots: + void on_m_lpName_textChanged(const QString &arg1); + void on_m_lpDistributor_currentIndexChanged(const QString &arg1); + +private: + Ui::cPartDistributorEditDialog* ui; + cPart* m_lpPart; + cDistributorList* m_lpDistributorList; + cPartDistributor* m_lpPartDistributor; +}; + +#endif // CPARTDISTRIBUTOREDITDIALOG_H diff --git a/cpartdistributoreditdialog.ui b/cpartdistributoreditdialog.ui new file mode 100644 index 0000000..e12e59b --- /dev/null +++ b/cpartdistributoreditdialog.ui @@ -0,0 +1,148 @@ + + + cPartDistributorEditDialog + + + + 0 + 0 + 500 + 350 + + + + Dialog + + + + + + + + + + 99999.000000000000000 + + + + + + + Name: + + + + + + + Price: + + + + + + + Distributor: + + + + + + + Web: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Description + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + m_lpName + m_lpDistributor + m_lpPrice + m_lpLink + m_lpDescription + + + + + m_lpButtonBox + accepted() + cPartDistributorEditDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + m_lpButtonBox + rejected() + cPartDistributorEditDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/cparteditdialog.cpp b/cparteditdialog.cpp index 0f35b4a..722fa5e 100644 --- a/cparteditdialog.cpp +++ b/cparteditdialog.cpp @@ -1,6 +1,8 @@ #include "cparteditdialog.h" #include "ui_cparteditdialog.h" +#include "cpartdistributoreditdialog.h" + #include "common.h" #include @@ -11,6 +13,8 @@ #include #include +#include + #include @@ -33,6 +37,13 @@ cPartEditDialog::~cPartEditDialog() delete ui; } +bool cPartEditDialog::somethingSelected() +{ + if(ui->m_lpPartDistributorList->selectionModel()->selectedRows().count()) + return(true); + return(false); +} + void cPartEditDialog::setValues(cPart* lpPart, cPartGroupList* lpPartGroupList, cDistributorList *lpDistributorList, cPartDistributorList *lpPartDistributorList) { m_lpPart = lpPart; @@ -153,6 +164,54 @@ bool cPartEditDialog::save() myDebug << query.lastError().text(); return(false); } + + for(int x = 0;x < m_lpPartDistributorListModel->rowCount();x++) + { + QStandardItem* lpItemName = m_lpPartDistributorListModel->itemFromIndex(m_lpPartDistributorListModel->index(x, 0)); + QStandardItem* lpItemDistributor = m_lpPartDistributorListModel->itemFromIndex(m_lpPartDistributorListModel->index(x, 1)); + QStandardItem* lpItemPrice = m_lpPartDistributorListModel->itemFromIndex(m_lpPartDistributorListModel->index(x, 2)); + QStandardItem* lpItemDescription = m_lpPartDistributorListModel->itemFromIndex(m_lpPartDistributorListModel->index(x, 3)); + QStandardItem* lpItemLink = m_lpPartDistributorListModel->itemFromIndex(m_lpPartDistributorListModel->index(x, 4)); + + cPartDistributor* lpPartDistributor = qvariant_cast(lpItemName->data(Qt::UserRole)); + + if(lpPartDistributor) + { + QSqlQuery query; + query.prepare("UPDATE part_distributor SET name=:name, description=:description, partID=:partID, distributorID=:distributorID, price=:price, link=:link WHERE id=:id;"); + query.bindValue(":name", lpItemName->text()); + query.bindValue(":description", lpItemDescription->text()); + query.bindValue(":partID", m_lpPart->id()); + query.bindValue(":distributorID", m_lpDistributorList->find(lpItemDistributor->text())->id()); + query.bindValue(":price", lpItemPrice->text().toDouble()); + query.bindValue(":link", lpItemLink->text()); + query.bindValue(":id", lpPartDistributor->id()); + + if(!query.exec()) + { + myDebug << query.lastError().text(); + return(false); + } + } + else + { + QSqlQuery query; + query.prepare("INSERT INTO part_distributor (name, description, partID, distributorID, price, link) VALUES (:name, :description, :partID, :distributorID, :price, :lin);"); + query.bindValue(":name", lpItemName->text()); + query.bindValue(":description", lpItemDescription->text()); + query.bindValue(":partID", m_lpPart->id()); + query.bindValue(":distributorID", m_lpDistributorList->find(lpItemDistributor->text())->id()); + query.bindValue(":price", lpItemPrice->text().toDouble()); + query.bindValue(":link", lpItemLink->text()); + + if(!query.exec()) + { + myDebug << query.lastError().text(); + return(false); + } + } + } + return(true); } @@ -262,3 +321,73 @@ void cPartEditDialog::on_m_lpGroupAdd_clicked() } } } + +void cPartEditDialog::on_m_lpPartDistributorList_customContextMenuRequested(const QPoint &pos) +{ + QMenu* lpMenu = new QMenu(this); + + lpMenu->addAction("add", this, SLOT(onAddDistributor())); + + if(somethingSelected()) + { + lpMenu->addAction("edit", this, SLOT(onEditDistributor())); + lpMenu->addAction("delete", this, SLOT(onDeleteDistributor())); + } + + lpMenu->popup(ui->m_lpPartDistributorList->viewport()->mapToGlobal(pos)); +} + +void cPartEditDialog::onAddDistributor() +{ + cPartDistributorEditDialog* lpDialog = new cPartDistributorEditDialog(this); + lpDialog->setValues(m_lpPart, m_lpDistributorList, 0); + if(lpDialog->exec() != QDialog::Accepted) + { + delete lpDialog; + return; + } + + QList lpItems; + QString szName = lpDialog->name(); + QString szDescription = lpDialog->description(); + cDistributor* lpDistributor = lpDialog->distributor(); + qreal dPrice = lpDialog->price(); + QString szLink = lpDialog->link(); + + for(int z = 0;z < 5;z++) + lpItems.append(new QStandardItem); + + lpItems.at(0)->setText(szName); + lpItems.at(1)->setText(lpDistributor->name()); + lpItems.at(2)->setText(QString::number(dPrice, 'f', 2)); + lpItems.at(3)->setText(szDescription); + lpItems.at(4)->setText(szLink); + + m_lpPartDistributorListModel->appendRow(lpItems); + + ui->m_lpPartDistributorList->sortByColumn(1, Qt::AscendingOrder); + + delete lpDialog; +} + +void cPartEditDialog::onEditDistributor() +{ + QStandardItem* lpItem = m_lpPartDistributorListModel->itemFromIndex(ui->m_lpPartDistributorList->selectionModel()->selectedRows().at(0)); + if(!lpItem) + return; + + cPartDistributor* lpPartDistributor = qvariant_cast(lpItem->data(Qt::UserRole)); + if(!lpPartDistributor) + return; + + cPartDistributorEditDialog* lpDialog = new cPartDistributorEditDialog(this); + lpDialog->setValues(m_lpPart, m_lpDistributorList, lpPartDistributor); + if(lpDialog->exec() != QDialog::Accepted) + return; + + delete lpDialog; +} + +void cPartEditDialog::onDeleteDistributor() +{ +} diff --git a/cparteditdialog.h b/cparteditdialog.h index ab6cdcb..86f6179 100644 --- a/cparteditdialog.h +++ b/cparteditdialog.h @@ -25,10 +25,18 @@ public: qint32 id(); void setValues(cPart* lpPart, cPartGroupList* lpPartGroupList, cDistributorList* lpDistributorList, cPartDistributorList* lpPartDistributorList); + + bool somethingSelected(); private slots: void on_m_lpName_textChanged(const QString &arg1); void on_m_lpGroupAdd_clicked(); + void on_m_lpPartDistributorList_customContextMenuRequested(const QPoint &pos); + + void onAddDistributor(); + void onEditDistributor(); + void onDeleteDistributor(); + private: Ui::cPartEditDialog* ui; QStandardItemModel* m_lpPartDistributorListModel; diff --git a/cparteditdialog.ui b/cparteditdialog.ui index 485136f..796ba9b 100644 --- a/cparteditdialog.ui +++ b/cparteditdialog.ui @@ -85,6 +85,12 @@ + + Qt::CustomContextMenu + + + QAbstractItemView::NoEditTriggers + true diff --git a/cpartwindow.cpp b/cpartwindow.cpp index c2b3b8f..c815e1b 100644 --- a/cpartwindow.cpp +++ b/cpartwindow.cpp @@ -44,7 +44,7 @@ void cPartWindow::setList(cPartGroupList* lpPartGroupList, cPartList* lpPartList showPartList(); } -void cPartWindow::showPartList() +void cPartWindow::showPartList(qint32 id) { m_lpPartListModel->clear(); @@ -55,6 +55,7 @@ void cPartWindow::showPartList() qint32 iOldPartGroupID = -1; QStandardItem* lpGroupItem = 0; + QStandardItem* lpSelected = 0; for(int x = 0;x < m_lpPartList->count();x++) { @@ -80,6 +81,9 @@ void cPartWindow::showPartList() lpItems.at(z)->setData(QVariant::fromValue(lpPart), Qt::UserRole); lpGroupItem->appendRow(lpItems); + + if(id != -1 && lpPart->id() == id) + lpSelected = lpItems.at(0); } for(int z = 0;z < header.count();z++) @@ -89,8 +93,15 @@ void cPartWindow::showPartList() for(int z = 0;z < header.count();z++) ui->m_lpPartList->resizeColumnToContents(z); + + if(lpSelected) + { + ui->m_lpPartList->setCurrentIndex(lpSelected->index()); + ui->m_lpPartList->scrollTo(lpSelected->index()); + } } + bool cPartWindow::somethingSelected() { if(ui->m_lpPartList->selectionModel()->selectedRows().count()) @@ -206,30 +217,12 @@ void cPartWindow::onEdit() return; } - qint32 id = lpDialog->id(); + qint32 id = lpPart->id(); delete lpDialog; partChanged(0); - showPartList(); - - for(int x = 0;x < m_lpPartListModel->rowCount();x++) - { - QStandardItem* lpItem = m_lpPartListModel->item(x, 0); - if(!lpItem) - continue; - - cPart* lpPart = qvariant_cast(lpItem->data(Qt::UserRole)); - if(!lpPart) - continue; - - if(lpPart->id() == id) - { - ui->m_lpPartList->setCurrentIndex(lpItem->index()); - ui->m_lpPartList->scrollTo(lpItem->index()); - return; - } - } + showPartList(id); } void cPartWindow::onDelete() @@ -278,7 +271,7 @@ void cPartWindow::onDelete() showPartList(); } -void cPartWindow::on_m_lpPartList_doubleClicked(const QModelIndex &index) +void cPartWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/) { onEdit(); } diff --git a/cpartwindow.h b/cpartwindow.h index 931b65c..ba50a73 100644 --- a/cpartwindow.h +++ b/cpartwindow.h @@ -52,7 +52,7 @@ private: cDistributorList* m_lpDistributorList; cPartDistributorList* m_lpPartDistributorList; - void showPartList(); + void showPartList(qint32 id = -1); }; #endif // CPARTWINDOW_H diff --git a/qtPartlist.pro b/qtPartlist.pro index 0975901..7eaa6fd 100644 --- a/qtPartlist.pro +++ b/qtPartlist.pro @@ -35,7 +35,9 @@ SOURCES += \ cpartgroup.cpp \ cpart.cpp \ cparteditdialog.cpp \ - cpartdistributor.cpp + cpartdistributor.cpp \ + clabel.cpp \ + cpartdistributoreditdialog.cpp HEADERS += \ cmainwindow.h \ @@ -48,7 +50,9 @@ HEADERS += \ cpartgroup.h \ cpart.h \ cparteditdialog.h \ - cpartdistributor.h + cpartdistributor.h \ + clabel.h \ + cpartdistributoreditdialog.h FORMS += \ cmainwindow.ui \ @@ -56,4 +60,5 @@ FORMS += \ cdistributorwindow.ui \ cpartwindow.ui \ cdistributoreditdialog.ui \ - cparteditdialog.ui + cparteditdialog.ui \ + cpartdistributoreditdialog.ui