diff --git a/cpartlistitemeditdialog.cpp b/cpartlistitemeditdialog.cpp index f411357..da3576b 100644 --- a/cpartlistitemeditdialog.cpp +++ b/cpartlistitemeditdialog.cpp @@ -11,6 +11,15 @@ cPartlistItemEditDialog::cPartlistItemEditDialog(QWidget *parent) : { ui->setupUi(this); + m_lpReplacementModel = new QStandardItemModel(0, 3); + ui->m_lpReplacement->setModel(m_lpReplacementModel); +// ui->m_lpReplacement->setItemDelegate(new cPartListItemDelegate()); + + QStringList header; + header << tr("reference") << ("group") << tr("part") << tr("distributor") << tr("state") << tr("price") << tr("description"); + m_lpReplacementModel->setHorizontalHeaderLabels(header); + ui->m_lpReplacement->header()->setMinimumSectionSize(50); + ui->m_lpOrderState->addItem(cPartlistItem::stateString(cPartlistItem::STATE_init), QVariant::fromValue((qint8)cPartlistItem::STATE_init)); ui->m_lpOrderState->addItem(cPartlistItem::stateString(cPartlistItem::STATE_ordered), QVariant::fromValue((qint8)cPartlistItem::STATE_ordered)); ui->m_lpOrderState->addItem(cPartlistItem::stateString(cPartlistItem::STATE_shipping), QVariant::fromValue((qint8)cPartlistItem::STATE_shipping)); @@ -59,6 +68,37 @@ void cPartlistItemEditDialog::setValues(const QString &szReference, const QStrin ui->m_lpDescription->setText(szDescription); } +void cPartlistItemEditDialog::addReplace(const QString& szReference, const QString& szGroup, const QString& szPart, const QString& szDistributor, const QString& szState, const qreal& dPrice, const QString& szDescription) +{ + QList lpItems; + + for(int z = 0;z < m_lpReplacementModel->columnCount();z++) + lpItems.append(new QStandardItem); + + lpItems.at(0)->setText(szReference); + lpItems.at(1)->setText(szGroup); + lpItems.at(2)->setText(szPart); + //lpItems.at(2)->setData(lpPartlistItem->partID(), Qt::UserRole); + if(!szDistributor.isEmpty()) + { + lpItems.at(3)->setText(szDistributor); + //lpItems.at(3)->setData(QVariant::fromValue(lpPartlistItem->distributorID()), Qt::UserRole); + } + lpItems.at(4)->setText(szState); + lpItems.at(5)->setText(QString::number(dPrice, 'f', 2)); + lpItems.at(5)->setTextAlignment(Qt::AlignRight); + lpItems.at(6)->setText(szDescription); + +// for(int z = 0;z < m_lpPartListModel->columnCount();z++) +// { +// lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem), Qt::UserRole); +// lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem->partID()), Qt::UserRole+1); +// lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2); +// } + + m_lpReplacementModel->appendRow(lpItems); +} + void cPartlistItemEditDialog::on_m_lpGroupList_currentIndexChanged(int /*index*/) { fillPartList(); diff --git a/cpartlistitemeditdialog.h b/cpartlistitemeditdialog.h index d2e2912..9a23496 100644 --- a/cpartlistitemeditdialog.h +++ b/cpartlistitemeditdialog.h @@ -9,6 +9,7 @@ #include "cpartlistitem.h" #include +#include namespace Ui { @@ -25,6 +26,7 @@ public: void setList(cDistributorList* lpDistributorList, cPartGroupList* lpPartGroupList, cPartList* lpPartList, cPartDistributorList* lpPartDistributorList); void setValues(const QString& szReference, const QString& szGroup, const QString& szPart, const QString& szDistributor, const QString& szState, const qreal& dPrice, const QString& szDescription); + void addReplace(const QString& szReference, const QString& szGroup, const QString& szPart, const QString& szDistributor, const QString& szState, const qreal& dPrice, const QString& szDescription); QString reference(); cPart* part(); @@ -39,6 +41,7 @@ private slots: private: Ui::cPartlistItemEditDialog* ui; + QStandardItemModel* m_lpReplacementModel; cDistributorList* m_lpDistributorList; cPartGroupList* m_lpPartGroupList; cPartList* m_lpPartList; diff --git a/cpartlistitemeditdialog.ui b/cpartlistitemeditdialog.ui index 4dc04d2..80b4a80 100644 --- a/cpartlistitemeditdialog.ui +++ b/cpartlistitemeditdialog.ui @@ -46,18 +46,6 @@ - - - - false - - - - 1 - - - - @@ -118,6 +106,13 @@ + + + + 0 + + + diff --git a/cpartlistwindow.cpp b/cpartlistwindow.cpp index c8d7d64..5b89d78 100644 --- a/cpartlistwindow.cpp +++ b/cpartlistwindow.cpp @@ -220,37 +220,79 @@ void cPartlistWindow::showPartList() for(int x = 0;x < m_partlistItemList.count();x++) { - QList lpItems; cPartlistItem* lpPartlistItem = m_partlistItemList.at(x); - for(int z = 0;z < header.count();z++) - lpItems.append(new QStandardItem); + if(!lpPartlistItem->replaceID()) + addItem(lpPartlistItem); + } - lpItems.at(0)->setText(lpPartlistItem->reference()); - lpItems.at(1)->setText(m_lpPartList->find(lpPartlistItem->partID())->partGroup()->name()); - lpItems.at(2)->setText(m_lpPartList->find(lpPartlistItem->partID())->name()); - lpItems.at(2)->setData(lpPartlistItem->partID(), Qt::UserRole); - if(lpPartlistItem->distributorID()) + for(int x = 0;x < m_partlistItemList.count();x++) + { + cPartlistItem* lpPartlistItem = m_partlistItemList.at(x); + + if(lpPartlistItem->replaceID()) { - lpItems.at(3)->setText(m_lpDistributorList->find(lpPartlistItem->distributorID())->name()); - lpItems.at(3)->setData(QVariant::fromValue(lpPartlistItem->distributorID()), Qt::UserRole); + QStandardItem* lpRoot = findItem(lpPartlistItem->replaceID()); + if(lpRoot) + addItem(lpPartlistItem, lpRoot); } - lpItems.at(4)->setText(lpPartlistItem->stateString()); - lpItems.at(5)->setText(QString::number(lpPartlistItem->price(), 'f', 2)); - lpItems.at(5)->setTextAlignment(Qt::AlignRight); - lpItems.at(6)->setText(lpPartlistItem->description()); - - for(int z = 0;z < header.count();z++) - { - lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem->partID()), Qt::UserRole+1); - lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2); - } - - m_lpPartListModel->appendRow(lpItems); } for(int z = 0;z < header.count();z++) ui->m_lpPartList->resizeColumnToContents(z); + + ui->m_lpPartList->sortByColumn(1, Qt::AscendingOrder); +} + +QStandardItem* cPartlistWindow::findItem(qint32 itemID) +{ + for(int z = 0;z < m_lpPartListModel->rowCount();z++) + { + QStandardItem* lpItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(z, 0)); + if(!lpItem) + return(0); + + cPartlistItem* lpPartlistItem = qvariant_cast(lpItem->data(Qt::UserRole)); + if(!lpPartlistItem) + return(0); + + if(lpPartlistItem->id() == itemID) + return(lpItem); + } +} + +void cPartlistWindow::addItem(cPartlistItem* lpPartlistItem, QStandardItem *lpRoot) +{ + QList lpItems; + + for(int z = 0;z < m_lpPartListModel->columnCount();z++) + lpItems.append(new QStandardItem); + + lpItems.at(0)->setText(lpPartlistItem->reference()); + lpItems.at(1)->setText(m_lpPartList->find(lpPartlistItem->partID())->partGroup()->name()); + lpItems.at(2)->setText(m_lpPartList->find(lpPartlistItem->partID())->name()); + lpItems.at(2)->setData(lpPartlistItem->partID(), Qt::UserRole); + if(lpPartlistItem->distributorID()) + { + lpItems.at(3)->setText(m_lpDistributorList->find(lpPartlistItem->distributorID())->name()); + lpItems.at(3)->setData(QVariant::fromValue(lpPartlistItem->distributorID()), Qt::UserRole); + } + lpItems.at(4)->setText(lpPartlistItem->stateString()); + lpItems.at(5)->setText(QString::number(lpPartlistItem->price(), 'f', 2)); + lpItems.at(5)->setTextAlignment(Qt::AlignRight); + lpItems.at(6)->setText(lpPartlistItem->description()); + + for(int z = 0;z < m_lpPartListModel->columnCount();z++) + { + lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem), Qt::UserRole); + lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem->partID()), Qt::UserRole+1); + lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2); + } + + if(lpRoot) + lpRoot->appendRow(lpItems); + else + m_lpPartListModel->appendRow(lpItems); } bool cPartlistWindow::save(qint32 id) @@ -323,10 +365,10 @@ bool cPartlistWindow::somethingSelected() return(false); } -void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/) -{ - onPartEdit(); -} +//void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/) +//{ +// onPartEdit(); +//} void cPartlistWindow::on_m_lpPartList_clicked(const QModelIndex &index) { @@ -403,16 +445,56 @@ void cPartlistWindow::onPartEdit() cPartlistItemEditDialog* lpDialog = new cPartlistItemEditDialog(this); lpDialog->setList(m_lpDistributorList, m_lpPartGroupList, m_lpPartList, m_lpPartDistributorList); - QModelIndex index = ui->m_lpPartList->currentIndex(); - QStandardItem* lpReferenceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 0)); - QStandardItem* lpPartGroupItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 1)); - QStandardItem* lpPartItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 2)); - QStandardItem* lpDistributorItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 3)); - QStandardItem* lpStateItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 4)); - QStandardItem* lpPriceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 5)); - QStandardItem* lpDescriptionItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(index.row(), 6)); + QModelIndex index = ui->m_lpPartList->currentIndex(); + QStandardItem* lpItem = m_lpPartListModel->itemFromIndex(index); + + QStandardItem* lpReferenceItem; + QStandardItem* lpPartGroupItem; + QStandardItem* lpPartItem; + QStandardItem* lpDistributorItem; + QStandardItem* lpStateItem; + QStandardItem* lpPriceItem; + QStandardItem* lpDescriptionItem; + + if(lpItem->parent()) + { + QStandardItem* lpParent = lpItem->parent(); + lpReferenceItem = lpParent->child(index.row(), 0); + lpPartGroupItem = lpParent->child(index.row(), 1); + lpPartItem = lpParent->child(index.row(), 2); + lpDistributorItem = lpParent->child(index.row(), 3); + lpStateItem = lpParent->child(index.row(), 4); + lpPriceItem = lpParent->child(index.row(), 5); + lpDescriptionItem = lpParent->child(index.row(), 6); + } + else + { + lpReferenceItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 0)); + lpPartGroupItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 1)); + lpPartItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 2)); + lpDistributorItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 3)); + lpStateItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 4)); + lpPriceItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 5)); + lpDescriptionItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 6)); + } lpDialog->setValues(lpReferenceItem->text(), lpPartGroupItem->text(), lpPartItem->text(), lpDistributorItem->text(), lpStateItem->text(), lpPriceItem->text().toDouble(), lpDescriptionItem->text()); + + if(!lpItem->parent()) + { + for(int x = 0;x < lpItem->rowCount();x++) + { + lpReferenceItem = lpItem->child(x, 0); + lpPartGroupItem = lpItem->child(x, 1); + lpPartItem = lpItem->child(x, 2); + lpDistributorItem = lpItem->child(x, 3); + lpStateItem = lpItem->child(x, 4); + lpPriceItem = lpItem->child(x, 5); + lpDescriptionItem = lpItem->child(x, 6); + lpDialog->addReplace(lpReferenceItem->text(), lpPartGroupItem->text(), lpPartItem->text(), lpDistributorItem->text(), lpStateItem->text(), lpPriceItem->text().toDouble(), lpDescriptionItem->text()); + } + } + if(lpDialog->exec() == QDialog::Rejected) { delete lpDialog; diff --git a/cpartlistwindow.h b/cpartlistwindow.h index 3e0caf3..be082c2 100644 --- a/cpartlistwindow.h +++ b/cpartlistwindow.h @@ -42,7 +42,7 @@ public: bool somethingSelected(); private slots: void on_m_lpName_textChanged(const QString &arg1); - void on_m_lpPartList_doubleClicked(const QModelIndex &index); +// void on_m_lpPartList_doubleClicked(const QModelIndex &index); void on_m_lpPartList_clicked(const QModelIndex &index); void on_m_lpPartList_customContextMenuRequested(const QPoint &pos); @@ -69,6 +69,8 @@ private: cPartlistItemList m_partlistItemList; void showPartList(); + void addItem(cPartlistItem* lpPartlistItem, QStandardItem* lpRoot = 0); + QStandardItem* findItem(qint32 itemID); bool save(qint32 id); }; diff --git a/cpartlistwindow.ui b/cpartlistwindow.ui index ab9a5b7..db4fe80 100644 --- a/cpartlistwindow.ui +++ b/cpartlistwindow.ui @@ -98,7 +98,13 @@ Qt::CustomContextMenu - QAbstractItemView::EditKeyPressed + QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed + + + true + + + true