New find/replace widget.

This commit is contained in:
Leonardo Zide 2021-01-30 15:37:17 -08:00
parent a257aab9c6
commit b74eb3a81e
14 changed files with 288 additions and 260 deletions

View file

@ -209,24 +209,38 @@ const lcCommand gCommands[] =
// LC_EDIT_FIND
{
QT_TRANSLATE_NOOP("Action", "Edit.Find"),
QT_TRANSLATE_NOOP("Menu", "&Find..."),
QT_TRANSLATE_NOOP("Status", "Find object"),
QT_TRANSLATE_NOOP("Menu", "&Find"),
QT_TRANSLATE_NOOP("Status", "Find piece"),
"Ctrl+F"
},
// LC_EDIT_FIND_NEXT
{
QT_TRANSLATE_NOOP("Action", "Edit.FindNext"),
QT_TRANSLATE_NOOP("Menu", "Find Ne&xt"),
QT_TRANSLATE_NOOP("Status", "Find next object"),
QT_TRANSLATE_NOOP("Status", "Find next piece"),
"F3"
},
// LC_EDIT_FIND_PREVIOUS
{
QT_TRANSLATE_NOOP("Action", "Edit.FindPrevious"),
QT_TRANSLATE_NOOP("Menu", "Find Pre&vious"),
QT_TRANSLATE_NOOP("Status", "Find object"),
QT_TRANSLATE_NOOP("Status", "Find previous piece"),
"Shift+F3"
},
// LC_EDIT_REPLACE
{
QT_TRANSLATE_NOOP("Action", "Edit.Replace"),
QT_TRANSLATE_NOOP("Menu", "&Replace"),
QT_TRANSLATE_NOOP("Status", "Replace piece"),
""
},
// LC_EDIT_REPLACE_NEXT
{
QT_TRANSLATE_NOOP("Action", "Edit.ReplaceNext"),
QT_TRANSLATE_NOOP("Menu", "Replace Next"),
QT_TRANSLATE_NOOP("Status", "Replace next piece"),
""
},
// LC_EDIT_SELECT_ALL
{
QT_TRANSLATE_NOOP("Action", "Edit.SelectAll"),

View file

@ -36,6 +36,8 @@ enum lcCommandId
LC_EDIT_FIND,
LC_EDIT_FIND_NEXT,
LC_EDIT_FIND_PREVIOUS,
LC_EDIT_REPLACE,
LC_EDIT_REPLACE_NEXT,
LC_EDIT_SELECT_ALL,
LC_EDIT_SELECT_NONE,
LC_EDIT_SELECT_INVERT,

View file

@ -0,0 +1,158 @@
#include "lc_global.h"
#include "lc_findreplacewidget.h"
#include "lc_qcolorpicker.h"
#include "lc_library.h"
#include "lc_mainwindow.h"
#include "pieceinf.h"
#include "piece.h"
#include "lc_model.h"
lcFindReplaceWidget::lcFindReplaceWidget(QWidget* Parent, lcModel* Model, bool Replace)
: QWidget(Parent)
{
setAutoFillBackground(true);
QGridLayout* Layout = new QGridLayout(this);
Layout->setContentsMargins(5, 5, 5, 5);
QCheckBox* FindColorCheckBox = new QCheckBox(tr("Find Color"), this);
Layout->addWidget(FindColorCheckBox, 0, 1);
lcQColorPicker* FindColorPicker = new lcQColorPicker(this);
Layout->addWidget(FindColorPicker, 0, 2);
QCheckBox* FindPartCheckBox = new QCheckBox(tr("Find Part"), this);
Layout->addWidget(FindPartCheckBox, 0, 3);
QComboBox* FindPartComboBox = new QComboBox(this);
Layout->addWidget(FindPartComboBox, 0, 4);
QToolButton* FindNextButton = new QToolButton(this);
FindNextButton->setDefaultAction(gMainWindow->mActions[LC_EDIT_FIND_NEXT]);
Layout->addWidget(FindNextButton, 0, 5);
connect(FindColorCheckBox, &QCheckBox::toggled, [](bool Checked)
{
gMainWindow->mSearchOptions.MatchColor = Checked;
});
connect(FindColorPicker, &lcQColorPicker::colorChanged, [](int ColorIndex)
{
gMainWindow->mSearchOptions.ColorIndex = ColorIndex;
});
connect(FindPartCheckBox, &QCheckBox::toggled, [](bool Checked)
{
gMainWindow->mSearchOptions.MatchInfo = Checked;
});
connect(FindPartComboBox, qOverload<int>(&QComboBox::currentIndexChanged), [FindPartComboBox](int Index)
{
gMainWindow->mSearchOptions.Info = (PieceInfo*)FindPartComboBox->itemData(Index).value<void*>();
});
QCheckBox* ReplaceColorCheckBox = nullptr;
lcQColorPicker* ReplaceColorPicker = nullptr;
QCheckBox* ReplacePartCheckBox = nullptr;
QComboBox* ReplacePartComboBox = nullptr;
if (Replace)
{
ReplaceColorCheckBox = new QCheckBox(tr("Replace Color"), this);
Layout->addWidget(ReplaceColorCheckBox, 1, 1);
ReplaceColorPicker = new lcQColorPicker(this);
Layout->addWidget(ReplaceColorPicker, 1, 2);
ReplacePartCheckBox = new QCheckBox(tr("Replace Part"), this);
Layout->addWidget(ReplacePartCheckBox, 1, 3);
ReplacePartComboBox = new QComboBox(this);
Layout->addWidget(ReplacePartComboBox, 1, 4);
QToolButton* ReplaceNextButton = new QToolButton(this);
ReplaceNextButton->setDefaultAction(gMainWindow->mActions[LC_EDIT_REPLACE_NEXT]);
Layout->addWidget(ReplaceNextButton, 1, 5);
connect(ReplaceColorCheckBox, &QCheckBox::toggled, [](bool Checked)
{
gMainWindow->mSearchOptions.ReplaceColor = Checked;
});
connect(ReplaceColorPicker, &lcQColorPicker::colorChanged, [](int ColorIndex)
{
gMainWindow->mSearchOptions.ReplaceColorIndex = ColorIndex;
});
connect(ReplacePartCheckBox, &QCheckBox::toggled, [](bool Checked)
{
gMainWindow->mSearchOptions.ReplaceInfo = Checked;
});
connect(ReplacePartComboBox, qOverload<int>(&QComboBox::currentIndexChanged), [ReplacePartComboBox](int Index)
{
gMainWindow->mSearchOptions.ReplacePieceInfo = (PieceInfo*)ReplacePartComboBox->itemData(Index).value<void*>();
});
ReplacePartComboBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
ReplacePartComboBox->setMinimumContentsLength(1);
lcPiecesLibrary* Library = lcGetPiecesLibrary();
std::vector<PieceInfo*> SortedPieces;
SortedPieces.reserve(Library->mPieces.size());
for (const auto& PartIt : Library->mPieces)
SortedPieces.push_back(PartIt.second);
auto PieceCompare = [](PieceInfo* Info1, PieceInfo* Info2)
{
return strcmp(Info1->m_strDescription, Info2->m_strDescription) < 0;
};
std::sort(SortedPieces.begin(), SortedPieces.end(), PieceCompare);
for (PieceInfo* Info : SortedPieces)
ReplacePartComboBox->addItem(Info->m_strDescription, QVariant::fromValue((void*)Info));
}
lcPartsList PartsList;
Model->GetPartsList(gDefaultColor, false, true, PartsList);
for (const auto& PartIt : PartsList)
FindPartComboBox->addItem(PartIt.first->m_strDescription, QVariant::fromValue((void*)PartIt.first));
FindPartComboBox->model()->sort(0);
lcPiece* Focus = dynamic_cast<lcPiece*>(Model->GetFocusObject());
lcSearchOptions& SearchOptions = gMainWindow->mSearchOptions;
if (!Replace)
{
SearchOptions.ReplaceColor = false;
SearchOptions.ReplaceInfo = false;
}
if (Focus)
{
SearchOptions.SearchValid = true;
SearchOptions.Info = Focus->mPieceInfo;
SearchOptions.ColorIndex = Focus->GetColorIndex();
FindColorCheckBox->setChecked(true);
FindColorPicker->setCurrentColor(SearchOptions.ColorIndex);
FindPartCheckBox->setChecked(true);
FindPartComboBox->setCurrentIndex(FindPartComboBox->findData(QVariant::fromValue((void*)SearchOptions.Info)));
if (Replace)
{
ReplaceColorCheckBox->setChecked(true);
ReplaceColorPicker->setCurrentColor(SearchOptions.ColorIndex);
ReplacePartCheckBox->setChecked(true);
ReplacePartComboBox->setCurrentIndex(ReplacePartComboBox->findData(QVariant::fromValue((void*)SearchOptions.Info)));
}
}
adjustSize();
move(1, 1);
show();
}

View file

@ -0,0 +1,9 @@
#pragma once
class lcFindReplaceWidget : public QWidget
{
Q_OBJECT
public:
lcFindReplaceWidget(QWidget* Parent, lcModel* Model, bool Replace);
};

View file

@ -8,7 +8,6 @@
#include "lc_qcolorlist.h"
#include "lc_qpropertiestree.h"
#include "lc_qutils.h"
#include "lc_qfinddialog.h"
#include "lc_qupdatedialog.h"
#include "lc_qaboutdialog.h"
#include "lc_setsdatabasedialog.h"
@ -24,7 +23,6 @@
#include "pieceinf.h"
#include "lc_library.h"
#include "lc_colors.h"
#include "lc_previewwidget.h"
#if LC_ENABLE_GAMEPAD
@ -493,9 +491,10 @@ void lcMainWindow::CreateMenus()
EditMenu->addAction(mActions[LC_EDIT_PASTE]);
EditMenu->addSeparator();
EditMenu->addAction(mActions[LC_EDIT_FIND]);
EditMenu->addAction(mActions[LC_EDIT_FIND_NEXT]);
EditMenu->addAction(mActions[LC_EDIT_FIND_PREVIOUS]);
EditMenu->addAction(mActions[LC_EDIT_REPLACE]);
EditMenu->addAction(mActions[LC_EDIT_REPLACE_NEXT]);
EditMenu->addSeparator();
EditMenu->addAction(mActions[LC_EDIT_SELECT_ALL]);
EditMenu->addAction(mActions[LC_EDIT_SELECT_NONE]);
@ -1268,22 +1267,6 @@ void lcMainWindow::Print(QPrinter* Printer)
#endif
}
void lcMainWindow::ShowSearchDialog()
{
lcModel* Model = GetActiveModel();
if (!mSearchOptions.SearchValid)
{
lcObject* Focus = Model->GetFocusObject();
if (Focus && Focus->IsPiece())
mSearchOptions.Info = ((lcPiece*)Focus)->mPieceInfo;
}
lcQFindDialog Dialog(this, &mSearchOptions, Model);
if (Dialog.exec() == QDialog::Accepted)
Model->FindPiece(true, true);
}
void lcMainWindow::ShowUpdatesDialog()
{
lcQUpdateDialog Dialog(this, false);
@ -1634,12 +1617,12 @@ void lcMainWindow::SetCurrentModelTab(lcModel* Model)
TabWidget = new lcModelTabWidget(Model);
mModelTabWidget->addTab(TabWidget, Model->GetProperties().mFileName);
QGridLayout* CentralLayout = new QGridLayout(TabWidget);
QVBoxLayout* CentralLayout = new QVBoxLayout(TabWidget);
CentralLayout->setContentsMargins(0, 0, 0, 0);
NewView = CreateView(Model);
ViewWidget = new lcViewWidget(TabWidget, NewView);
CentralLayout->addWidget(ViewWidget, 0, 0, 1, 1);
CentralLayout->addWidget(ViewWidget);
mModelTabWidget->setCurrentWidget(TabWidget);
}
@ -1703,9 +1686,13 @@ void lcMainWindow::RemoveView(lcView* View)
void lcMainWindow::SetActiveView(lcView* ActiveView)
{
lcModelTabWidget* TabWidget = GetTabForView(ActiveView);
if (!TabWidget)
return;
lcView* CurrentActiveView = TabWidget->GetActiveView();
if (!TabWidget || CurrentActiveView == ActiveView)
if (CurrentActiveView == ActiveView)
return;
if (CurrentActiveView)
@ -2726,17 +2713,28 @@ void lcMainWindow::HandleCommand(lcCommandId CommandId)
break;
case LC_EDIT_FIND:
ShowSearchDialog();
if (ActiveView)
ActiveView->ShowFindReplaceWidget(false);
break;
case LC_EDIT_FIND_NEXT:
if (ActiveModel)
ActiveModel->FindPiece(false, true);
ActiveModel->FindReplacePiece(true);
break;
case LC_EDIT_FIND_PREVIOUS:
if (ActiveModel)
ActiveModel->FindPiece(false, false);
ActiveModel->FindReplacePiece(false);
break;
case LC_EDIT_REPLACE:
if (ActiveView)
ActiveView->ShowFindReplaceWidget(true);
break;
case LC_EDIT_REPLACE_NEXT:
if (ActiveModel)
ActiveModel->FindReplacePiece(true);
break;
case LC_EDIT_SELECT_ALL:
@ -3448,7 +3446,7 @@ void lcMainWindow::HandleCommand(lcCommandId CommandId)
break;
case LC_EDIT_CANCEL:
if (ActiveView)
if (ActiveView && !ActiveView->CloseFindReplaceDialog())
ActiveView->CancelTrackingOrClearSelection();
break;

View file

@ -25,10 +25,13 @@ struct lcSearchOptions
bool SearchValid;
bool MatchInfo;
bool MatchColor;
bool MatchName;
bool ReplaceInfo;
bool ReplaceColor;
PieceInfo* Info;
int ColorIndex;
char Name[256];
PieceInfo* ReplacePieceInfo;
int ReplaceColorIndex;
};
class lcTabBar : public QTabBar
@ -375,7 +378,6 @@ protected:
void SetActiveView(lcView* ActiveView);
void ToggleDockWidget(QWidget* DockWidget);
void SplitView(Qt::Orientation Orientation);
void ShowSearchDialog();
void ShowUpdatesDialog();
void ShowAboutDialog();
void ShowHTMLDialog();

View file

@ -3779,29 +3779,51 @@ void lcModel::UnhideAllPieces()
SaveCheckpoint(tr("Unhide"));
}
void lcModel::FindPiece(bool FindFirst, bool SearchForward)
void lcModel::FindReplacePiece(bool SearchForward)
{
if (mPieces.IsEmpty())
return;
int StartIdx = mPieces.GetSize() - 1;
if (!FindFirst)
{
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
{
lcPiece* Piece = mPieces[PieceIdx];
const lcSearchOptions& SearchOptions = gMainWindow->mSearchOptions;
if (Piece->IsFocused() && Piece->IsVisible(mCurrentStep))
if (!SearchOptions.SearchValid)
return;
auto PieceMatches = [](const lcPiece* Piece)
{
const lcSearchOptions& SearchOptions = gMainWindow->mSearchOptions;
return (!SearchOptions.MatchInfo || Piece->mPieceInfo == SearchOptions.Info) && (!SearchOptions.MatchColor || Piece->GetColorIndex() == SearchOptions.ColorIndex);
};
int StartIdx = mPieces.GetSize() - 1;
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
{
lcPiece* Piece = mPieces[PieceIdx];
if (Piece->IsFocused() && Piece->IsVisible(mCurrentStep))
{
if (PieceMatches(Piece))
{
StartIdx = PieceIdx;
break;
if (SearchOptions.ReplaceColor)
Piece->SetColorIndex(SearchOptions.ReplaceColorIndex);
if (SearchOptions.ReplaceInfo)
Piece->SetPieceInfo(SearchOptions.ReplacePieceInfo, QString(), true);
SaveCheckpoint(tr("Replacing Part"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
gMainWindow->UpdateTimeline(false, true);
}
StartIdx = PieceIdx;
break;
}
}
int CurrentIdx = StartIdx;
lcObject* Focus = nullptr;
const lcSearchOptions& SearchOptions = gMainWindow->mSearchOptions;
lcPiece* Focus = nullptr;
for (;;)
{
@ -3815,21 +3837,19 @@ void lcModel::FindPiece(bool FindFirst, bool SearchForward)
else if (CurrentIdx >= mPieces.GetSize())
CurrentIdx = 0;
if (CurrentIdx == StartIdx)
break;
lcPiece* Current = mPieces[CurrentIdx];
if (!Current->IsVisible(mCurrentStep))
continue;
if ((!SearchOptions.MatchInfo || Current->mPieceInfo == SearchOptions.Info) &&
(!SearchOptions.MatchColor || Current->GetColorIndex() == SearchOptions.ColorIndex) &&
(!SearchOptions.MatchName || (Current->GetName().indexOf(SearchOptions.Name, 0, Qt::CaseInsensitive) != -1)))
if (PieceMatches(Current))
{
Focus = Current;
break;
}
if (CurrentIdx == StartIdx)
break;
}
ClearSelectionAndSetFocus(Focus, LC_PIECE_SECTION_POSITION, false);

View file

@ -281,7 +281,7 @@ public:
void UnhideSelectedPieces();
void UnhideAllPieces();
void FindPiece(bool FindFirst, bool SearchForward);
void FindReplacePiece(bool SearchForward);
void UndoAction();
void RedoAction();

View file

@ -12,7 +12,9 @@
#include "lc_scene.h"
#include "lc_context.h"
#include "lc_viewsphere.h"
#include "lc_findreplacewidget.h"
QWidget* lcView::mFindWidget;
lcView* lcView::mLastFocusedView;
std::vector<lcView*> lcView::mViews;
@ -95,7 +97,13 @@ void lcView::SetFocus(bool Focus)
{
if (Focus)
{
mLastFocusedView = this;
if (mLastFocusedView != this)
{
delete mFindWidget;
mFindWidget = nullptr;
mLastFocusedView = this;
}
emit FocusReceived();
}
@ -465,6 +473,25 @@ void lcView::ShowContextMenu() const
delete Popup;
}
bool lcView::CloseFindReplaceDialog()
{
if (mFindWidget && (mWidget->hasFocus() || mFindWidget->focusWidget()))
{
delete mFindWidget;
mFindWidget = nullptr;
return true;
}
return false;
}
void lcView::ShowFindReplaceWidget(bool Replace)
{
delete mFindWidget;
mFindWidget = new lcFindReplaceWidget(mWidget, GetActiveModel(), Replace);
}
lcVector3 lcView::GetMoveDirection(const lcVector3& Direction) const
{
if (lcGetPreferences().mFixedAxes)

View file

@ -231,6 +231,8 @@ public:
void RemoveCamera();
void ShowContextMenu() const;
bool CloseFindReplaceDialog();
void ShowFindReplaceWidget(bool Replace);
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
lcMatrix44 GetPieceInsertPosition(bool IgnoreSelected, PieceInfo* Info) const;
@ -324,10 +326,10 @@ protected:
lcVertexBuffer mGridBuffer;
int mGridSettings[7];
static QWidget* mFindWidget;
static lcView* mLastFocusedView;
static std::vector<lcView*> mViews;
static lcVertexBuffer mRotateMoveVertexBuffer;
static lcIndexBuffer mRotateMoveIndexBuffer;
};

View file

@ -173,6 +173,7 @@ SOURCES += \
common/lc_context.cpp \
common/lc_edgecolordialog.cpp \
common/lc_file.cpp \
common/lc_findreplacewidget.cpp \
common/lc_glextensions.cpp \
common/lc_http.cpp \
common/lc_instructions.cpp \
@ -219,7 +220,6 @@ SOURCES += \
qt/lc_qpropertiestree.cpp \
qt/lc_qcolorpicker.cpp \
qt/lc_qcolorlist.cpp \
qt/lc_qfinddialog.cpp \
qt/lc_qmodellistdialog.cpp \
qt/lc_renderdialog.cpp \
qt/lc_setsdatabasedialog.cpp \
@ -241,6 +241,7 @@ HEADERS += \
common/lc_context.h \
common/lc_edgecolordialog.h \
common/lc_file.h \
common/lc_findreplacewidget.h \
common/lc_glextensions.h \
common/lc_global.h \
common/lc_http.h \
@ -287,7 +288,6 @@ HEADERS += \
qt/lc_qpropertiestree.h \
qt/lc_qcolorpicker.h \
qt/lc_qcolorlist.h \
qt/lc_qfinddialog.h \
qt/lc_qmodellistdialog.h \
qt/lc_renderdialog.h \
qt/lc_setsdatabasedialog.h \
@ -304,7 +304,6 @@ FORMS += \
qt/lc_qcategorydialog.ui \
qt/lc_qimagedialog.ui \
qt/lc_qupdatedialog.ui \
qt/lc_qfinddialog.ui \
qt/lc_qmodellistdialog.ui \
qt/lc_renderdialog.ui \
qt/lc_setsdatabasedialog.ui \

View file

@ -1,51 +0,0 @@
#include "lc_global.h"
#include "lc_qfinddialog.h"
#include "ui_lc_qfinddialog.h"
#include "lc_mainwindow.h"
#include "pieceinf.h"
#include "lc_colors.h"
#include "lc_model.h"
lcQFindDialog::lcQFindDialog(QWidget* Parent, lcSearchOptions* SearchOptions, lcModel* Model)
: QDialog(Parent), ui(new Ui::lcQFindDialog)
{
ui->setupUi(this);
QComboBox *parts = ui->ID;
parts->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
parts->setMinimumContentsLength(1);
lcPartsList PartsList;
Model->GetPartsList(gDefaultColor, false, true, PartsList);
for (const auto& PartIt : PartsList)
parts->addItem(PartIt.first->m_strDescription, QVariant::fromValue((void*)PartIt.first));
parts->model()->sort(0);
mSearchOptions = SearchOptions;
ui->findColor->setChecked(mSearchOptions->MatchColor);
ui->color->setCurrentColor(mSearchOptions->ColorIndex);
ui->findID->setChecked(mSearchOptions->MatchInfo);
parts->setCurrentIndex(parts->findData(QVariant::fromValue((void*)mSearchOptions->Info)));
ui->findName->setChecked(mSearchOptions->MatchName);
ui->name->setText(mSearchOptions->Name);
}
lcQFindDialog::~lcQFindDialog()
{
delete ui;
}
void lcQFindDialog::accept()
{
mSearchOptions->MatchColor = ui->findColor->isChecked();
mSearchOptions->ColorIndex = ui->color->currentColor();
mSearchOptions->MatchInfo= ui->findID->isChecked();
mSearchOptions->Info = (PieceInfo*)ui->ID->itemData(ui->ID->currentIndex()).value<void*>();
mSearchOptions->MatchName = ui->findName->isChecked();
QString name = ui->name->text();
strcpy(mSearchOptions->Name, name.toLocal8Bit().data());
QDialog::accept();
}

View file

@ -1,26 +0,0 @@
#pragma once
#include <QDialog>
struct lcSearchOptions;
namespace Ui {
class lcQFindDialog;
}
class lcQFindDialog : public QDialog
{
Q_OBJECT
public:
lcQFindDialog(QWidget* Parent, lcSearchOptions* SearchOptions, lcModel* Model);
~lcQFindDialog();
lcSearchOptions* mSearchOptions;
public slots:
void accept() override;
private:
Ui::lcQFindDialog *ui;
};

View file

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>lcQFindDialog</class>
<widget class="QDialog" name="lcQFindDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>325</width>
<height>125</height>
</rect>
</property>
<property name="windowTitle">
<string>Find</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QComboBox" name="ID"/>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="name"/>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="findName">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="findID">
<property name="text">
<string>Part ID</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="findColor">
<property name="text">
<string>Color</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="lcQColorPicker" name="color">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</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>
<customwidgets>
<customwidget>
<class>lcQColorPicker</class>
<extends>QToolButton</extends>
<header>lc_qcolorpicker.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>lcQFindDialog</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>lcQFindDialog</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>