Fixed enter key not working on the part picker.

This commit is contained in:
Leonardo Zide 2025-01-20 16:42:08 -08:00
parent f2a2e446bb
commit 79dbf992bf
7 changed files with 139 additions and 30 deletions

View file

@ -2281,13 +2281,13 @@ lcMatrix33 lcModel::GetRelativeRotation() const
return lcMatrix33Identity();
}
void lcModel::AddPiece(PieceInfo* PieceInfo, quint32 Section)
lcPiece* lcModel::AddPiece(PieceInfo* PieceInfo, quint32 Section)
{
if (!PieceInfo)
PieceInfo = gMainWindow->GetCurrentPieceInfo();
if (!PieceInfo)
return;
return nullptr;
lcPiece* Last = mPieces.empty() ? nullptr : mPieces.back().get();
@ -2341,6 +2341,8 @@ void lcModel::AddPiece(PieceInfo* PieceInfo, quint32 Section)
ClearSelectionAndSetFocus(Piece, LC_PIECE_SECTION_POSITION, false);
SaveCheckpoint(tr("Adding Piece"));
return Piece;
}
void lcModel::AddPiece(lcPiece* Piece)

View file

@ -209,7 +209,7 @@ public:
void InsertStep(lcStep Step);
void RemoveStep(lcStep Step);
void AddPiece(PieceInfo* Info, quint32 Section);
lcPiece* AddPiece(PieceInfo* Info, quint32 Section);
void DeleteAllCameras();
void DeleteSelectedObjects();
void ResetSelectedPiecesPivotPoint();

View file

@ -547,11 +547,34 @@ lcPartSelectionListView::lcPartSelectionListView(QWidget* Parent, lcPartSelectio
lcPartSelectionItemDelegate* ItemDelegate = new lcPartSelectionItemDelegate(this, mListModel);
setItemDelegate(ItemDelegate);
connect(this, SIGNAL(customContextMenuRequested(QPoint)), SLOT(CustomContextMenuRequested(QPoint)));
connect(this, &QListView::doubleClicked, this, &lcPartSelectionListView::DoubleClicked);
connect(this, &QListView::customContextMenuRequested, this, &lcPartSelectionListView::CustomContextMenuRequested);
SetIconSize(lcGetProfileInt(LC_PROFILE_PARTS_LIST_ICONS));
}
void lcPartSelectionListView::keyPressEvent(QKeyEvent* KeyEvent)
{
if (KeyEvent->key() == Qt::Key_Enter)
{
PieceInfo* Info = GetCurrentPart();
emit PartPicked(Info);
return;
}
return QListView::keyPressEvent(KeyEvent);
}
void lcPartSelectionListView::DoubleClicked(const QModelIndex& Index)
{
PieceInfo* Info = GetListModel()->GetPieceInfo(Index.row());
if (Info)
emit PartPicked(Info);
}
void lcPartSelectionListView::CustomContextMenuRequested(QPoint Pos)
{
if (!mPartSelectionWidget)
@ -878,7 +901,7 @@ lcPartSelectionWidget::lcPartSelectionWidget(QWidget* Parent)
Layout->addWidget(mSplitter);
setLayout(Layout);
connect(mPartsWidget, &QListView::doubleClicked, this, &lcPartSelectionWidget::PartViewDoubleClicked);
connect(mPartsWidget, &lcPartSelectionListView::PartPicked, this, &lcPartSelectionWidget::PartViewPartPicked);
connect(mPartsWidget->selectionModel(), &QItemSelectionModel::currentChanged, this, &lcPartSelectionWidget::PartViewSelectionChanged);
connect(mFilterWidget, &QLineEdit::textChanged, this, &lcPartSelectionWidget::FilterChanged);
connect(mCategoriesWidget, &QTreeWidget::currentItemChanged, this, &lcPartSelectionWidget::CategoryChanged);
@ -1079,10 +1102,8 @@ void lcPartSelectionWidget::PartViewSelectionChanged(const QModelIndex& Current,
emit CurrentPartChanged(mPartsWidget->GetCurrentPart());
}
void lcPartSelectionWidget::PartViewDoubleClicked(const QModelIndex& Index)
void lcPartSelectionWidget::PartViewPartPicked(PieceInfo* Info)
{
PieceInfo* Info = mPartsWidget->GetListModel()->GetPieceInfo(Index.row());
if (Info)
emit PartPicked(Info);
}

View file

@ -219,6 +219,9 @@ public:
void UpdateInUseCategory();
void UpdateViewMode();
signals:
void PartPicked(PieceInfo* Info);
public slots:
void CustomContextMenuRequested(QPoint Pos);
void SetNoIcons();
@ -238,9 +241,13 @@ public slots:
void ToggleListMode();
void ToggleFixedColor();
protected slots:
void DoubleClicked(const QModelIndex& Index);
protected:
void SetIconSize(int Size);
void SetPartFilterType(lcPartFilterType Option);
void keyPressEvent(QKeyEvent* KeyEvent) override;
lcPartSelectionListModel* mListModel = nullptr;
lcPartSelectionWidget* mPartSelectionWidget = nullptr;
@ -311,7 +318,7 @@ protected slots:
void FilterCategoriesTriggered();
void CategoryChanged(QTreeWidgetItem* Current, QTreeWidgetItem* Previous);
void PartViewSelectionChanged(const QModelIndex& Current, const QModelIndex& Previous);
void PartViewDoubleClicked(const QModelIndex& Index);
void PartViewPartPicked(PieceInfo* Info);
void OptionsMenuAboutToShow();
void EditPartPalettes();

View file

@ -17,7 +17,7 @@
#include "lc_viewsphere.h"
#include "lc_findreplacewidget.h"
#include "lc_library.h"
#include "lc_partselectionwidget.h"
#include "lc_qutils.h"
lcFindReplaceParams lcView::mFindReplaceParams;
QPointer<lcFindReplaceWidget> lcView::mFindWidget;
@ -322,29 +322,15 @@ void lcView::ShowTrainTrackPopup()
if (!TrainTrackInfo)
return;
QMenu* Menu = new QMenu(mWidget);
PieceInfo* Info = lcShowTrainTrackPopup(mWidget, TrainTrackInfo);
QWidgetAction* Action = new QWidgetAction(Menu);
lcPartSelectionListView* ListView = new lcPartSelectionListView(mWidget, nullptr);
Action->setDefaultWidget(ListView);
Menu->addAction(Action);
std::vector<PieceInfo*> Parts = lcGetPiecesLibrary()->GetTrainTrackParts(TrainTrackInfo);
ListView->SetCustomParts(Parts);
connect(ListView, &QListView::doubleClicked, [this, Menu, ListView, ActiveModel]()
if (Info)
{
ActiveModel->AddPiece(ListView->GetCurrentPart(), mTrackToolSection);
lcObject* Focus = ActiveModel->GetFocusObject();
if (Focus && Focus->IsPiece())
ActiveModel->UpdateTrainTrackConnections((lcPiece*)Focus);
Menu->close();
});
Piece = ActiveModel->AddPiece(Info, mTrackToolSection);
Menu->exec(QCursor::pos());
delete Menu;
if (Piece)
ActiveModel->UpdateTrainTrackConnections(Piece);
}
}
void lcView::ShowContextMenu() const

View file

@ -229,6 +229,71 @@ void lcPieceIdPickerPopup::Close()
Menu->close();
}
lcTrainTrackPickerPopup::lcTrainTrackPickerPopup(QWidget* Parent, const lcTrainTrackInfo* TrainTrackInfo)
: QWidget(Parent)
{
QVBoxLayout* Layout = new QVBoxLayout(this);
mPartSelectionListView = new lcPartSelectionListView(this, nullptr);
Layout->addWidget(mPartSelectionListView);
mPartSelectionListView->setMinimumWidth(450);
mPartSelectionListView->setDragEnabled(false);
std::vector<PieceInfo*> Parts = lcGetPiecesLibrary()->GetTrainTrackParts(TrainTrackInfo);
mPartSelectionListView->SetCustomParts(Parts);
connect(mPartSelectionListView, &lcPartSelectionListView::PartPicked, this, &lcTrainTrackPickerPopup::Accept);
QDialogButtonBox* ButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel, this);
Layout->addWidget(ButtonBox);
QObject::connect(ButtonBox, &QDialogButtonBox::accepted, this, &lcTrainTrackPickerPopup::Accept);
QObject::connect(ButtonBox, &QDialogButtonBox::rejected, this, &lcTrainTrackPickerPopup::Reject);
}
void lcTrainTrackPickerPopup::showEvent(QShowEvent* ShowEvent)
{
QWidget::showEvent(ShowEvent);
mPartSelectionListView->setFocus();
}
void lcTrainTrackPickerPopup::Accept()
{
mPickedTrainTrack = mPartSelectionListView->GetCurrentPart();
Close();
}
void lcTrainTrackPickerPopup::Reject()
{
Close();
}
void lcTrainTrackPickerPopup::Close()
{
QMenu* Menu = qobject_cast<QMenu*>(parent());
if (Menu)
Menu->close();
}
PieceInfo* lcShowTrainTrackPopup(QWidget* Parent, const lcTrainTrackInfo* TrainTrackInfo)
{
std::unique_ptr<QMenu> Menu(new QMenu(Parent));
QWidgetAction* Action = new QWidgetAction(Menu.get());
lcTrainTrackPickerPopup* Popup = new lcTrainTrackPickerPopup(Menu.get(), TrainTrackInfo);
Action->setDefaultWidget(Popup);
Menu->addAction(Action);
Menu->exec(QCursor::pos());
return Popup->GetPickedTrainTrack();
}
lcColorDialogPopup::lcColorDialogPopup(const QColor& InitialColor, QWidget* Parent)
: QWidget(Parent)
{

View file

@ -3,6 +3,8 @@
#include <QObject>
class lcPartSelectionWidget;
class lcPartSelectionListView;
class lcTrainTrackInfo;
QString lcFormatValue(float Value, int Precision);
QString lcFormatValueLocalized(float Value);
@ -190,6 +192,32 @@ protected:
PieceInfo* mInitialPart = nullptr;
};
class lcTrainTrackPickerPopup : public QWidget
{
Q_OBJECT
public:
lcTrainTrackPickerPopup(QWidget* Parent, const lcTrainTrackInfo* TrainTrackInfo);
PieceInfo* GetPickedTrainTrack() const
{
return mPickedTrainTrack;
}
protected slots:
void Accept();
void Reject();
protected:
void showEvent(QShowEvent* ShowEvent) override;
void Close();
lcPartSelectionListView* mPartSelectionListView = nullptr;
PieceInfo* mPickedTrainTrack = nullptr;
};
PieceInfo* lcShowTrainTrackPopup(QWidget* Parent, const lcTrainTrackInfo* TrainTrackInfo);
class lcColorDialogPopup : public QWidget
{
Q_OBJECT