2017-07-19 23:20:32 +02:00
|
|
|
#pragma once
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2017-12-29 15:50:18 +01:00
|
|
|
#include "lc_context.h"
|
|
|
|
|
2016-12-16 18:14:19 +01:00
|
|
|
class lcPartSelectionListModel;
|
2017-01-11 02:48:05 +01:00
|
|
|
class lcPartSelectionListView;
|
2019-12-09 01:54:12 +01:00
|
|
|
class lcPartSelectionWidget;
|
|
|
|
|
|
|
|
enum class lcPartCategoryType
|
|
|
|
{
|
|
|
|
AllParts,
|
|
|
|
PartsInUse,
|
|
|
|
Submodels,
|
2019-12-09 04:19:02 +01:00
|
|
|
Palette,
|
2019-12-16 04:01:55 +01:00
|
|
|
Category,
|
|
|
|
Count
|
2019-12-09 01:54:12 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
enum class lcPartCategoryRole
|
|
|
|
{
|
|
|
|
Type = Qt::UserRole,
|
|
|
|
Index
|
|
|
|
};
|
|
|
|
|
2019-12-09 04:19:02 +01:00
|
|
|
struct lcPartPalette
|
2019-12-09 01:54:12 +01:00
|
|
|
{
|
|
|
|
QString Name;
|
|
|
|
std::vector<std::string> Parts;
|
|
|
|
};
|
2016-12-16 18:14:19 +01:00
|
|
|
|
|
|
|
class lcPartSelectionItemDelegate : public QStyledItemDelegate
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
2017-07-12 03:09:15 +02:00
|
|
|
lcPartSelectionItemDelegate(QObject* Parent, lcPartSelectionListModel* ListModel)
|
|
|
|
: QStyledItemDelegate(Parent), mListModel(ListModel)
|
2016-12-16 18:14:19 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2020-03-22 23:44:41 +01:00
|
|
|
void paint(QPainter* Painter, const QStyleOptionViewItem& Option, const QModelIndex& Index) const override;
|
|
|
|
QSize sizeHint(const QStyleOptionViewItem& Option, const QModelIndex& Index) const override;
|
2016-12-16 18:14:19 +01:00
|
|
|
|
|
|
|
protected:
|
|
|
|
lcPartSelectionListModel* mListModel;
|
|
|
|
};
|
|
|
|
|
|
|
|
class lcPartSelectionListModel : public QAbstractListModel
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
lcPartSelectionListModel(QObject* Parent);
|
2020-03-22 23:44:41 +01:00
|
|
|
~lcPartSelectionListModel();
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2020-03-22 23:44:41 +01:00
|
|
|
int rowCount(const QModelIndex& Parent = QModelIndex()) const override;
|
|
|
|
QVariant data(const QModelIndex& Index, int Role = Qt::DisplayRole) const override;
|
|
|
|
QVariant headerData(int Section, Qt::Orientation Orientation, int Role = Qt::DisplayRole) const override;
|
|
|
|
Qt::ItemFlags flags(const QModelIndex& Index) const override;
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2017-04-21 03:56:35 +02:00
|
|
|
PieceInfo* GetPieceInfo(const QModelIndex& Index) const
|
2016-12-16 18:14:19 +01:00
|
|
|
{
|
2017-04-14 02:26:40 +02:00
|
|
|
return Index.isValid() ? mParts[Index.row()].first : nullptr;
|
2016-12-16 18:14:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
PieceInfo* GetPieceInfo(int Row) const
|
|
|
|
{
|
|
|
|
return mParts[Row].first;
|
|
|
|
}
|
|
|
|
|
2017-07-12 03:09:15 +02:00
|
|
|
bool GetShowDecoratedParts() const
|
|
|
|
{
|
|
|
|
return mShowDecoratedParts;
|
|
|
|
}
|
|
|
|
|
2019-08-04 20:00:41 +02:00
|
|
|
bool GetShowPartAliases() const
|
|
|
|
{
|
|
|
|
return mShowPartAliases;
|
|
|
|
}
|
|
|
|
|
2017-01-28 03:20:44 +01:00
|
|
|
int GetIconSize() const
|
|
|
|
{
|
|
|
|
return mIconSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool GetShowPartNames() const
|
|
|
|
{
|
|
|
|
return mShowPartNames;
|
|
|
|
}
|
|
|
|
|
2017-02-04 22:14:41 +01:00
|
|
|
bool IsColorLocked() const
|
|
|
|
{
|
|
|
|
return mColorLocked;
|
|
|
|
}
|
|
|
|
|
2017-05-29 23:03:46 +02:00
|
|
|
bool IsListMode() const
|
|
|
|
{
|
|
|
|
return mListMode;
|
|
|
|
}
|
|
|
|
|
2016-12-29 16:28:53 +01:00
|
|
|
void Redraw();
|
2017-02-04 22:14:41 +01:00
|
|
|
void SetColorIndex(int ColorIndex);
|
|
|
|
void ToggleColorLocked();
|
2017-05-29 23:03:46 +02:00
|
|
|
void ToggleListMode();
|
2016-12-16 18:14:19 +01:00
|
|
|
void SetCategory(int CategoryIndex);
|
2016-12-19 03:53:25 +01:00
|
|
|
void SetModelsCategory();
|
2019-12-09 04:19:02 +01:00
|
|
|
void SetPaletteCategory(int SetIndex);
|
2017-01-27 04:02:42 +01:00
|
|
|
void SetCurrentModelCategory();
|
2017-07-12 03:09:15 +02:00
|
|
|
void SetFilter(const QString& Filter);
|
2017-01-04 15:45:01 +01:00
|
|
|
void RequestPreview(int InfoIndex);
|
2017-07-12 03:09:15 +02:00
|
|
|
void SetShowDecoratedParts(bool Show);
|
2019-08-04 20:00:41 +02:00
|
|
|
void SetShowPartAliases(bool Show);
|
2016-12-20 23:46:12 +01:00
|
|
|
void SetIconSize(int Size);
|
2017-01-28 03:20:44 +01:00
|
|
|
void SetShowPartNames(bool Show);
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2017-01-11 02:48:05 +01:00
|
|
|
protected slots:
|
2017-01-23 04:28:05 +01:00
|
|
|
void PartLoaded(PieceInfo* Info);
|
2017-01-04 15:45:01 +01:00
|
|
|
|
2017-01-11 02:48:05 +01:00
|
|
|
protected:
|
2017-01-23 04:28:05 +01:00
|
|
|
void ClearRequests();
|
|
|
|
void DrawPreview(int InfoIndex);
|
|
|
|
|
2017-01-11 02:48:05 +01:00
|
|
|
lcPartSelectionListView* mListView;
|
2020-01-01 18:01:10 +01:00
|
|
|
std::vector<std::pair<PieceInfo*, QPixmap>> mParts;
|
2019-05-28 01:22:49 +02:00
|
|
|
std::vector<int> mRequestedPreviews;
|
2016-12-20 23:46:12 +01:00
|
|
|
int mIconSize;
|
2017-02-04 22:14:41 +01:00
|
|
|
bool mColorLocked;
|
|
|
|
int mColorIndex;
|
2017-01-28 03:20:44 +01:00
|
|
|
bool mShowPartNames;
|
2017-05-29 23:03:46 +02:00
|
|
|
bool mListMode;
|
2017-07-12 03:09:15 +02:00
|
|
|
bool mShowDecoratedParts;
|
2019-08-04 20:00:41 +02:00
|
|
|
bool mShowPartAliases;
|
2017-07-12 03:09:15 +02:00
|
|
|
QByteArray mFilter;
|
2017-12-29 15:50:18 +01:00
|
|
|
std::pair<lcFramebuffer, lcFramebuffer> mRenderFramebuffer;
|
2016-12-16 18:14:19 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
class lcPartSelectionListView : public QListView
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
2019-12-09 01:54:12 +01:00
|
|
|
lcPartSelectionListView(QWidget* Parent, lcPartSelectionWidget* PartSelectionWidget);
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2020-03-22 23:44:41 +01:00
|
|
|
void startDrag(Qt::DropActions SupportedActions) override;
|
2016-12-16 18:14:19 +01:00
|
|
|
|
2019-12-09 01:54:12 +01:00
|
|
|
void SetCategory(lcPartCategoryType Type, int Index);
|
|
|
|
|
2016-12-16 18:14:19 +01:00
|
|
|
PieceInfo* GetCurrentPart() const
|
|
|
|
{
|
2017-07-12 03:09:15 +02:00
|
|
|
return mListModel->GetPieceInfo(currentIndex());
|
2016-12-16 18:14:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
lcPartSelectionListModel* GetListModel() const
|
|
|
|
{
|
|
|
|
return mListModel;
|
|
|
|
}
|
|
|
|
|
2019-12-09 01:54:12 +01:00
|
|
|
lcPartSelectionWidget* GetPartSelectionWidget() const
|
|
|
|
{
|
|
|
|
return mPartSelectionWidget;
|
|
|
|
}
|
|
|
|
|
|
|
|
PieceInfo* GetContextInfo() const
|
|
|
|
{
|
|
|
|
return mContextInfo;
|
|
|
|
}
|
2017-05-29 23:03:46 +02:00
|
|
|
|
2019-12-09 01:54:12 +01:00
|
|
|
void UpdateViewMode();
|
2019-12-07 18:52:46 +01:00
|
|
|
|
2017-06-22 06:40:26 +02:00
|
|
|
public slots:
|
2016-12-20 23:46:12 +01:00
|
|
|
void CustomContextMenuRequested(QPoint Pos);
|
2017-01-28 03:20:44 +01:00
|
|
|
void SetNoIcons();
|
2016-12-20 23:46:12 +01:00
|
|
|
void SetSmallIcons();
|
|
|
|
void SetMediumIcons();
|
|
|
|
void SetLargeIcons();
|
2017-02-09 02:47:30 +01:00
|
|
|
void SetExtraLargeIcons();
|
2017-01-28 03:20:44 +01:00
|
|
|
void TogglePartNames();
|
2017-02-04 22:14:41 +01:00
|
|
|
void ToggleDecoratedParts();
|
2019-08-04 20:00:41 +02:00
|
|
|
void TogglePartAliases();
|
2017-05-29 23:03:46 +02:00
|
|
|
void ToggleListMode();
|
2017-02-04 22:14:41 +01:00
|
|
|
void ToggleFixedColor();
|
2016-12-20 23:46:12 +01:00
|
|
|
|
2016-12-16 18:14:19 +01:00
|
|
|
protected:
|
2016-12-20 23:46:12 +01:00
|
|
|
void SetIconSize(int Size);
|
|
|
|
|
2016-12-16 18:14:19 +01:00
|
|
|
lcPartSelectionListModel* mListModel;
|
2019-12-09 01:54:12 +01:00
|
|
|
lcPartSelectionWidget* mPartSelectionWidget;
|
2019-12-07 20:23:50 +01:00
|
|
|
PieceInfo* mContextInfo;
|
2019-12-09 01:54:12 +01:00
|
|
|
lcPartCategoryType mCategoryType;
|
|
|
|
int mCategoryIndex;
|
2016-12-16 18:14:19 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
class lcPartSelectionWidget : public QWidget
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
lcPartSelectionWidget(QWidget* Parent);
|
|
|
|
|
2016-12-28 22:30:31 +01:00
|
|
|
void Redraw();
|
|
|
|
void SetDefaultPart();
|
2016-12-19 03:53:25 +01:00
|
|
|
void UpdateModels();
|
2016-12-20 23:11:19 +01:00
|
|
|
void UpdateCategories();
|
2017-02-06 18:06:52 +01:00
|
|
|
void LoadState(QSettings& Settings);
|
|
|
|
void SaveState(QSettings& Settings);
|
2017-06-22 06:40:26 +02:00
|
|
|
void DisableIconMode();
|
2016-12-19 03:53:25 +01:00
|
|
|
|
2017-02-04 22:14:41 +01:00
|
|
|
void SetColorIndex(int ColorIndex)
|
|
|
|
{
|
|
|
|
mPartsWidget->GetListModel()->SetColorIndex(ColorIndex);
|
|
|
|
}
|
|
|
|
|
2019-12-09 04:19:02 +01:00
|
|
|
const std::vector<lcPartPalette>& GetPartPalettes() const
|
2019-12-09 01:54:12 +01:00
|
|
|
{
|
2019-12-09 04:19:02 +01:00
|
|
|
return mPartPalettes;
|
2019-12-09 01:54:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public slots:
|
2019-12-09 04:19:02 +01:00
|
|
|
void AddToPalette();
|
|
|
|
void RemoveFromPalette();
|
2019-12-09 01:54:12 +01:00
|
|
|
|
2016-12-16 18:14:19 +01:00
|
|
|
protected slots:
|
2017-02-06 18:06:52 +01:00
|
|
|
void DockLocationChanged(Qt::DockWidgetArea Area);
|
2016-12-16 18:14:19 +01:00
|
|
|
void FilterChanged(const QString& Text);
|
2017-02-01 06:12:30 +01:00
|
|
|
void FilterTriggered();
|
2016-12-16 18:14:19 +01:00
|
|
|
void CategoryChanged(QTreeWidgetItem* Current, QTreeWidgetItem* Previous);
|
|
|
|
void PartChanged(const QModelIndex& Current, const QModelIndex& Previous);
|
2019-12-09 01:54:12 +01:00
|
|
|
void OptionsMenuAboutToShow();
|
2019-12-16 04:01:55 +01:00
|
|
|
void EditPartPalettes();
|
2016-12-16 18:14:19 +01:00
|
|
|
|
|
|
|
protected:
|
2019-12-09 04:19:02 +01:00
|
|
|
void LoadPartPalettes();
|
|
|
|
void SavePartPalettes();
|
2019-12-09 01:54:12 +01:00
|
|
|
|
2020-03-22 23:44:41 +01:00
|
|
|
void resizeEvent(QResizeEvent* Event) override;
|
|
|
|
bool event(QEvent* Event) override;
|
2016-12-16 18:14:19 +01:00
|
|
|
|
|
|
|
QTreeWidget* mCategoriesWidget;
|
|
|
|
QLineEdit* mFilterWidget;
|
2017-02-01 06:12:30 +01:00
|
|
|
QAction* mFilterAction;
|
2016-12-16 18:14:19 +01:00
|
|
|
lcPartSelectionListView* mPartsWidget;
|
|
|
|
QSplitter* mSplitter;
|
2019-12-09 04:19:02 +01:00
|
|
|
std::vector<lcPartPalette> mPartPalettes;
|
2016-12-16 18:14:19 +01:00
|
|
|
};
|