mirror of
https://github.com/leozide/leocad.git
synced 2026-07-27 19:56:49 +00:00
Use the part picker widget on the replace widget.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "lc_findreplacewidget.h"
|
||||
#include "lc_colorpicker.h"
|
||||
#include "lc_mainwindow.h"
|
||||
#include "lc_partselectionpopup.h"
|
||||
#include "pieceinf.h"
|
||||
#include "piece.h"
|
||||
#include "lc_model.h"
|
||||
@@ -37,8 +38,8 @@ lcFindReplaceWidget::lcFindReplaceWidget(QWidget* Parent, lcModel* Model, bool R
|
||||
Layout->addWidget(FindNextButton, 0, 3);
|
||||
|
||||
QToolButton* FindAllButton = new QToolButton(this);
|
||||
FindAllButton ->setAutoRaise(true);
|
||||
FindAllButton ->setDefaultAction(gMainWindow->mActions[LC_EDIT_FIND_ALL]);
|
||||
FindAllButton->setAutoRaise(true);
|
||||
FindAllButton->setDefaultAction(gMainWindow->mActions[LC_EDIT_FIND_ALL]);
|
||||
Layout->addWidget(FindAllButton, 0, 4);
|
||||
|
||||
connect(FindColorPicker, &lcColorPicker::ColorChanged, this, &lcFindReplaceWidget::FindColorIndexChanged);
|
||||
@@ -55,10 +56,22 @@ lcFindReplaceWidget::lcFindReplaceWidget(QWidget* Parent, lcModel* Model, bool R
|
||||
ReplaceColorPicker = new lcColorPicker(this, true);
|
||||
ReplaceColorPicker->setToolTip(tr("Replacement Color"));
|
||||
Layout->addWidget(ReplaceColorPicker, 1, 1);
|
||||
|
||||
mReplacePartComboBox = new QComboBox(this);
|
||||
mReplacePartComboBox->setToolTip(tr("Replacement Part"));
|
||||
Layout->addWidget(mReplacePartComboBox, 1, 2);
|
||||
|
||||
QPixmap Pixmap(1, 1);
|
||||
Pixmap.fill(QColor::fromRgba64(0, 0, 0, 0));
|
||||
|
||||
mReplacePartButton = new lcElidableToolButton(this);
|
||||
mReplacePartButton->setToolTip(tr("Replacement Part"));
|
||||
|
||||
QSizePolicy PieceButtonSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
PieceButtonSizePolicy.setHorizontalStretch(2);
|
||||
PieceButtonSizePolicy.setVerticalStretch(0);
|
||||
mReplacePartButton->setSizePolicy(PieceButtonSizePolicy);
|
||||
|
||||
mReplacePartButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
||||
mReplacePartButton->setIcon(Pixmap);
|
||||
|
||||
Layout->addWidget(mReplacePartButton, 1, 2);
|
||||
|
||||
QToolButton* ReplaceNextButton = new QToolButton(this);
|
||||
ReplaceNextButton->setAutoRaise(true);
|
||||
@@ -71,15 +84,10 @@ lcFindReplaceWidget::lcFindReplaceWidget(QWidget* Parent, lcModel* Model, bool R
|
||||
Layout->addWidget(ReplaceAllButton, 1, 4);
|
||||
|
||||
connect(ReplaceColorPicker, &lcColorPicker::ColorChanged, this, &lcFindReplaceWidget::ReplaceColorIndexChanged);
|
||||
connect(mReplacePartComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &lcFindReplaceWidget::ReplaceActivated);
|
||||
|
||||
mReplacePartComboBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
|
||||
mReplacePartComboBox->setMinimumContentsLength(1);
|
||||
|
||||
mReplacePartComboBox->setModel(new lcPieceIdStringModel(gMainWindow->GetActiveModel(), mReplacePartComboBox));
|
||||
connect(mReplacePartButton, &lcElidableToolButton::clicked, this, &lcFindReplaceWidget::ReplaceButtonClicked);
|
||||
|
||||
ReplaceColorPicker->SetCurrentColor(lcGetColorIndex(LC_COLOR_NOCOLOR));
|
||||
mReplacePartComboBox->setCurrentIndex(0);
|
||||
mReplacePartButton->setText(tr("None"));
|
||||
}
|
||||
|
||||
QToolButton* CloseButton = new QToolButton(this);
|
||||
@@ -152,9 +160,16 @@ void lcFindReplaceWidget::ReplaceColorIndexChanged(int ColorIndex)
|
||||
Params.ReplaceColorIndex = ColorIndex;
|
||||
}
|
||||
|
||||
void lcFindReplaceWidget::ReplaceActivated(int Index)
|
||||
void lcFindReplaceWidget::ReplaceButtonClicked()
|
||||
{
|
||||
lcFindReplaceParams& Params = lcView::GetFindReplaceParams();
|
||||
|
||||
Params.ReplacePieceInfo = (PieceInfo*)mReplacePartComboBox->itemData(Index).value<void*>();
|
||||
std::optional<PieceInfo*> Result = lcShowPartSelectionPopup(Params.ReplacePieceInfo, std::vector<std::pair<PieceInfo*, std::string>>(),
|
||||
gDefaultColor, mReplacePartButton, mReplacePartButton->mapToGlobal(mReplacePartButton->rect().bottomLeft()));
|
||||
|
||||
if (!Result.has_value())
|
||||
return;
|
||||
|
||||
Params.ReplacePieceInfo = Result.value();
|
||||
mReplacePartButton->setText(Result.value()->m_strDescription);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
class lcElidableToolButton;
|
||||
|
||||
class lcFindReplaceWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -12,9 +14,9 @@ protected slots:
|
||||
void FindTextEdited(const QString& Text);
|
||||
void FindActivated(int Index);
|
||||
void ReplaceColorIndexChanged(int ColorIndex);
|
||||
void ReplaceActivated(int Index);
|
||||
void ReplaceButtonClicked();
|
||||
|
||||
protected:
|
||||
QComboBox* mFindPartComboBox = nullptr;
|
||||
QComboBox* mReplacePartComboBox = nullptr;
|
||||
lcElidableToolButton* mReplacePartButton = nullptr;
|
||||
};
|
||||
|
||||
+11
-4
@@ -4667,7 +4667,10 @@ void lcModel::FindReplacePiece(bool SearchForward, bool FindAll, bool Replace)
|
||||
|
||||
size_t StartIndex = mPieces.size() - 1;
|
||||
int ReplacedCount = 0;
|
||||
|
||||
|
||||
BeginActionSequence();
|
||||
BeginObjectEditAction();
|
||||
|
||||
if (!FindAll)
|
||||
{
|
||||
// We have to find the currently focused piece, in order to find next/prev match and (optionally) to replace it
|
||||
@@ -4736,7 +4739,9 @@ void lcModel::FindReplacePiece(bool SearchForward, bool FindAll, bool Replace)
|
||||
if (CurrentIndex == StartIndex)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
EndObjectEditAction();
|
||||
|
||||
if (FindAll)
|
||||
RecordSetSelectionAndFocusAction(Selection, nullptr, 0, lcSelectionMode::Single);
|
||||
else
|
||||
@@ -4744,11 +4749,13 @@ void lcModel::FindReplacePiece(bool SearchForward, bool FindAll, bool Replace)
|
||||
|
||||
if (ReplacedCount)
|
||||
{
|
||||
SaveCheckpoint(tr("Replacing Piece(s)", "", ReplacedCount));
|
||||
EndActionSequence(tr("Replace Piece(s)", "", ReplacedCount));
|
||||
|
||||
gMainWindow->UpdateSelectedObjects(false);
|
||||
UpdateAllViews();
|
||||
gMainWindow->UpdateTimeline(false, true);
|
||||
}
|
||||
else
|
||||
EndActionSequence(tr("Selection"));
|
||||
}
|
||||
|
||||
void lcModel::UndoAction()
|
||||
|
||||
@@ -986,7 +986,25 @@ void lcPartSelectionWidget::SetCurrentPart(PieceInfo* Info)
|
||||
|
||||
void lcPartSelectionWidget::SetCategory(lcPartCategoryType Type, int Index)
|
||||
{
|
||||
mPartsWidget->SetCategory(Type, Index);
|
||||
for (int Row = 0; Row < mCategoriesWidget->topLevelItemCount(); Row++)
|
||||
{
|
||||
QTreeWidgetItem* Item = mCategoriesWidget->topLevelItem(Row);
|
||||
lcPartCategoryType ItemType = static_cast<lcPartCategoryType>(Item->data(0, static_cast<int>(lcPartCategoryRole::Type)).toInt());
|
||||
|
||||
if (ItemType != Type)
|
||||
continue;
|
||||
|
||||
if (Type == lcPartCategoryType::Palette || Type == lcPartCategoryType::Category)
|
||||
{
|
||||
int ItemIndex = Item->data(0, static_cast<int>(lcPartCategoryRole::Index)).toInt();
|
||||
|
||||
if (ItemIndex != Index)
|
||||
continue;
|
||||
}
|
||||
|
||||
mCategoriesWidget->setCurrentItem(Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void lcPartSelectionWidget::SetCustomParts(const std::vector<std::pair<PieceInfo*, std::string>>& Parts, int ColorIndex)
|
||||
|
||||
Reference in New Issue
Block a user