mirror of
https://github.com/leozide/leocad
synced 2025-02-06 08:46:06 +01:00
Fixed enter key not working on the part picker.
This commit is contained in:
parent
f2a2e446bb
commit
79dbf992bf
7 changed files with 139 additions and 30 deletions
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue