Added Palette Edit Dialog.

This commit is contained in:
Leonardo Zide
2019-12-15 19:01:55 -08:00
parent 9c3505b628
commit 75bc3cfaf8
6 changed files with 363 additions and 15 deletions
+151
View File
@@ -0,0 +1,151 @@
#include "lc_global.h"
#include "lc_partpalettedialog.h"
#include "ui_lc_partpalettedialog.h"
#include "lc_partselectionwidget.h"
lcPartPaletteDialog::lcPartPaletteDialog(QWidget* Parent, std::vector<lcPartPalette>& PartPalettes)
: QDialog(Parent), ui(new Ui::lcPartPaletteDialog), mPartPalettes(PartPalettes)
{
ui->setupUi(this);
for (const lcPartPalette& Palette : PartPalettes)
{
QListWidgetItem* Item = new QListWidgetItem(Palette.Name);
Item->setData(Qt::UserRole, qVariantFromValue<uintptr_t>(reinterpret_cast<uintptr_t>(&Palette)));
ui->PaletteList->addItem(Item);
}
ui->PaletteList->setCurrentRow(0);
UpdateButtons();
}
lcPartPaletteDialog::~lcPartPaletteDialog()
{
delete ui;
}
void lcPartPaletteDialog::UpdateButtons()
{
int CurrentPalette = ui->PaletteList->currentRow();
int PaletteCount = ui->PaletteList->count();
ui->DeleteButton->setEnabled(PaletteCount > 1);
ui->MoveUpButton->setEnabled(PaletteCount > 1 && CurrentPalette > 0);
ui->MoveDownButton->setEnabled(PaletteCount > 1 && CurrentPalette < PaletteCount - 1);
}
void lcPartPaletteDialog::accept()
{
std::vector<lcPartPalette> PartPalettes;
PartPalettes.reserve(ui->PaletteList->count());
for (int ItemIdx = 0; ItemIdx < ui->PaletteList->count(); ItemIdx++)
{
QListWidgetItem* Item = ui->PaletteList->item(ItemIdx);
lcPartPalette* OldPalette = reinterpret_cast<lcPartPalette*>(Item->data(Qt::UserRole).value<uintptr_t>());
lcPartPalette Palette;
Palette.Name = Item->text();
if (OldPalette)
Palette.Parts = std::move(OldPalette->Parts);
PartPalettes.emplace_back(std::move(Palette));
}
mPartPalettes = std::move(PartPalettes);
QDialog::accept();
}
void lcPartPaletteDialog::on_NewButton_clicked()
{
bool Ok = false;
QString Name = QInputDialog::getText(this, tr("New Part Palette"), tr("Palette Name:"), QLineEdit::Normal, QString(), &Ok);
if (!Ok || Name.isEmpty())
return;
QListWidgetItem* Item = new QListWidgetItem(Name);
Item->setData(Qt::UserRole, qVariantFromValue<uintptr_t>(0));
ui->PaletteList->addItem(Item);
ui->PaletteList->setCurrentRow(ui->PaletteList->count() - 1);
UpdateButtons();
}
void lcPartPaletteDialog::on_DeleteButton_clicked()
{
QList<QListWidgetItem*> SelectedItems = ui->PaletteList->selectedItems();
if (SelectedItems.isEmpty())
return;
QString Prompt = tr("Are you sure you want to delete the palette '%1'?").arg(SelectedItems[0]->text());
if (QMessageBox::question(this, tr("Delete Part Palette"), Prompt, QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
return;
QListWidgetItem* SelectedItem = SelectedItems.first();
delete SelectedItem;
UpdateButtons();
}
void lcPartPaletteDialog::on_RenameButton_clicked()
{
QList<QListWidgetItem*> SelectedItems = ui->PaletteList->selectedItems();
if (SelectedItems.isEmpty())
return;
bool Ok = false;
QString Name = SelectedItems[0]->text();
Name = QInputDialog::getText(this, tr("Rename Part Palette"), tr("Palette Name:"), QLineEdit::Normal, Name, &Ok);
if (!Ok || Name.isEmpty())
return;
if (!Name.isEmpty())
SelectedItems[0]->setText(Name);
}
void lcPartPaletteDialog::on_MoveUpButton_clicked()
{
QList<QListWidgetItem*> SelectedItems = ui->PaletteList->selectedItems();
if (SelectedItems.isEmpty())
return;
QListWidgetItem* Item = SelectedItems[0];
int Row = ui->PaletteList->row(Item);
if (Row == 0)
return;
ui->PaletteList->takeItem(Row);
ui->PaletteList->insertItem(Row - 1, Item);
ui->PaletteList->setCurrentItem(Item);
UpdateButtons();
}
void lcPartPaletteDialog::on_MoveDownButton_clicked()
{
QList<QListWidgetItem*> SelectedItems = ui->PaletteList->selectedItems();
if (SelectedItems.isEmpty())
return;
QListWidgetItem* Item = SelectedItems[0];
int Row = ui->PaletteList->row(Item);
ui->PaletteList->takeItem(Row);
ui->PaletteList->insertItem(Row + 1, Item);
ui->PaletteList->setCurrentItem(Item);
UpdateButtons();
}
void lcPartPaletteDialog::on_PaletteList_currentRowChanged(int CurrentRow)
{
Q_UNUSED(CurrentRow);
UpdateButtons();
}
+31
View File
@@ -0,0 +1,31 @@
#pragma once
namespace Ui {
class lcPartPaletteDialog;
}
struct lcPartPalette;
class lcPartPaletteDialog : public QDialog
{
Q_OBJECT
public:
lcPartPaletteDialog(QWidget* Parent, std::vector<lcPartPalette>& PartPalettes);
~lcPartPaletteDialog();
protected slots:
void accept();
void on_NewButton_clicked();
void on_DeleteButton_clicked();
void on_RenameButton_clicked();
void on_MoveUpButton_clicked();
void on_MoveDownButton_clicked();
void on_PaletteList_currentRowChanged(int CurrentRow);
private:
void UpdateButtons();
Ui::lcPartPaletteDialog* ui;
std::vector<lcPartPalette>& mPartPalettes;
};
+131
View File
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>lcPartPaletteDialog</class>
<widget class="QDialog" name="lcPartPaletteDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Part Palettes</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QListWidget" name="PaletteList"/>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QPushButton" name="NewButton">
<property name="text">
<string>New...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DeleteButton">
<property name="text">
<string>Delete...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="RenameButton">
<property name="text">
<string>Rename...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="MoveUpButton">
<property name="text">
<string>Move Up</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="MoveDownButton">
<property name="text">
<string>Move Down</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>PaletteList</tabstop>
<tabstop>NewButton</tabstop>
<tabstop>DeleteButton</tabstop>
<tabstop>RenameButton</tabstop>
<tabstop>MoveUpButton</tabstop>
<tabstop>MoveDownButton</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>lcPartPaletteDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>lcPartPaletteDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+41 -10
View File
@@ -1,5 +1,6 @@
#include "lc_global.h"
#include "lc_partselectionwidget.h"
#include "lc_partpalettedialog.h"
#include "lc_profile.h"
#include "lc_application.h"
#include "lc_mainwindow.h"
@@ -844,7 +845,7 @@ void lcPartSelectionWidget::OptionsMenuAboutToShow()
QMenu* Menu = (QMenu*)sender();
Menu->clear();
Menu->addAction("Configure Palettes...", this, SLOT(ConfigurePartPalettes()));
Menu->addAction("Edit Palettes...", this, SLOT(EditPartPalettes()));
Menu->addSeparator();
lcPartSelectionListModel* ListModel = mPartsWidget->GetListModel();
@@ -908,9 +909,15 @@ void lcPartSelectionWidget::OptionsMenuAboutToShow()
}
}
void lcPartSelectionWidget::ConfigurePartPalettes()
void lcPartSelectionWidget::EditPartPalettes()
{
lcPartPaletteDialog Dialog(this, mPartPalettes);
if (Dialog.exec() != QDialog::Accepted)
return;
SavePartPalettes();
UpdateCategories();
}
void lcPartSelectionWidget::Redraw()
@@ -1045,25 +1052,46 @@ void lcPartSelectionWidget::RemoveFromPalette()
void lcPartSelectionWidget::UpdateCategories()
{
int CurrentIndex = mCategoriesWidget->indexOfTopLevelItem(mCategoriesWidget->currentItem());
QTreeWidgetItem* CurrentItem = mCategoriesWidget->currentItem();
lcPartCategoryType CurrentType = lcPartCategoryType::Count;
int CurrentIndex = -1;
if (CurrentItem)
{
CurrentType = static_cast<lcPartCategoryType>(CurrentItem->data(0, static_cast<int>(lcPartCategoryRole::Type)).toInt());
CurrentIndex = CurrentItem->data(0, static_cast<int>(lcPartCategoryRole::Index)).toInt();
CurrentItem = nullptr;
}
mCategoriesWidget->clear();
QTreeWidgetItem* AllPartsCategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(tr("All Parts")));
AllPartsCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::AllParts));
if (CurrentType == lcPartCategoryType::AllParts && CurrentIndex == 0)
CurrentItem = AllPartsCategoryItem;
QTreeWidgetItem* CurrentModelCategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(tr("Parts In Use")));
CurrentModelCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::PartsInUse));
if (CurrentType == lcPartCategoryType::PartsInUse && CurrentIndex == 0)
CurrentItem = AllPartsCategoryItem;
QTreeWidgetItem* SubmodelsCategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(tr("Submodels")));
SubmodelsCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::Submodels));
for (int SetIdx = 0; SetIdx < static_cast<int>(mPartPalettes.size()); SetIdx++)
if (CurrentType == lcPartCategoryType::Submodels && CurrentIndex == 0)
CurrentItem = AllPartsCategoryItem;
for (int PaletteIdx = 0; PaletteIdx < static_cast<int>(mPartPalettes.size()); PaletteIdx++)
{
const lcPartPalette& Set = mPartPalettes[SetIdx];
QTreeWidgetItem* SetCategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(Set.Name));
SetCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::Palette));
SetCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Index), SetIdx);
const lcPartPalette& Set = mPartPalettes[PaletteIdx];
QTreeWidgetItem* PaletteCategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(Set.Name));
PaletteCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::Palette));
PaletteCategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Index), PaletteIdx);
if (CurrentType == lcPartCategoryType::Palette && CurrentIndex == PaletteIdx)
CurrentItem = PaletteCategoryItem;
}
for (int CategoryIdx = 0; CategoryIdx < gCategories.GetSize(); CategoryIdx++)
@@ -1071,10 +1099,13 @@ void lcPartSelectionWidget::UpdateCategories()
QTreeWidgetItem* CategoryItem = new QTreeWidgetItem(mCategoriesWidget, QStringList(gCategories[CategoryIdx].Name));
CategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Type), static_cast<int>(lcPartCategoryType::Category));
CategoryItem->setData(0, static_cast<int>(lcPartCategoryRole::Index), CategoryIdx);
if (CurrentType == lcPartCategoryType::Category && CurrentIndex == CategoryIdx)
CurrentItem = CategoryItem;
}
if (CurrentIndex != -1)
mCategoriesWidget->setCurrentItem(mCategoriesWidget->topLevelItem(CurrentIndex));
if (CurrentItem)
mCategoriesWidget->setCurrentItem(CurrentItem);
}
void lcPartSelectionWidget::UpdateModels()
+3 -2
View File
@@ -12,7 +12,8 @@ enum class lcPartCategoryType
PartsInUse,
Submodels,
Palette,
Category
Category,
Count
};
enum class lcPartCategoryRole
@@ -225,7 +226,7 @@ protected slots:
void CategoryChanged(QTreeWidgetItem* Current, QTreeWidgetItem* Previous);
void PartChanged(const QModelIndex& Current, const QModelIndex& Previous);
void OptionsMenuAboutToShow();
void ConfigurePartPalettes();
void EditPartPalettes();
protected:
void LoadPartPalettes();
+6 -3
View File
@@ -213,7 +213,8 @@ SOURCES += common/view.cpp \
common/lc_partselectionwidget.cpp \
common/lc_timelinewidget.cpp \
qt/lc_renderdialog.cpp \
qt/lc_setsdatabasedialog.cpp
qt/lc_setsdatabasedialog.cpp \
common/lc_partpalettedialog.cpp
HEADERS += \
common/view.h \
common/texfont.h \
@@ -277,7 +278,8 @@ HEADERS += \
common/lc_partselectionwidget.h \
common/lc_timelinewidget.h \
qt/lc_renderdialog.h \
qt/lc_setsdatabasedialog.h
qt/lc_setsdatabasedialog.h \
common/lc_partpalettedialog.h
FORMS += \
qt/lc_qarraydialog.ui \
qt/lc_qgroupdialog.ui \
@@ -294,7 +296,8 @@ FORMS += \
qt/lc_qfinddialog.ui \
qt/lc_qmodellistdialog.ui \
qt/lc_renderdialog.ui \
qt/lc_setsdatabasedialog.ui
qt/lc_setsdatabasedialog.ui \
common/lc_partpalettedialog.ui
OTHER_FILES +=
RESOURCES += leocad.qrc