Add secondary toolbar ( not finished )

This commit is contained in:
EIntemporel
2022-10-24 21:40:34 +02:00
parent 9866140a0f
commit 33f9fad28b
4 changed files with 211 additions and 54 deletions

View File

@@ -231,7 +231,7 @@ void MapView::set_editing_mode(editing_mode mode)
{ {
_world->renderer()->getTerrainParamsUniformBlock()->draw_areaid_overlay = false; _world->renderer()->getTerrainParamsUniformBlock()->draw_areaid_overlay = false;
_world->renderer()->getTerrainParamsUniformBlock()->draw_impass_overlay = false; _world->renderer()->getTerrainParamsUniformBlock()->draw_impass_overlay = false;
_world->renderer()->getTerrainParamsUniformBlock()->draw_paintability_overlay = _left_sec_toolbar->showUnpaintableChunk(); _world->renderer()->getTerrainParamsUniformBlock()->draw_paintability_overlay = false;
_world->renderer()->getTerrainParamsUniformBlock()->draw_selection_overlay = false; _world->renderer()->getTerrainParamsUniformBlock()->draw_selection_overlay = false;
_minimap->use_selection(nullptr); _minimap->use_selection(nullptr);
@@ -248,6 +248,10 @@ void MapView::set_editing_mode(editing_mode mode)
{ {
texturingTool->updateMaskImage(); texturingTool->updateMaskImage();
} }
if (_left_sec_toolbar->showUnpaintableChunk())
{
_world->renderer()->getTerrainParamsUniformBlock()->draw_paintability_overlay = true;
}
break; break;
case editing_mode::mccv: case editing_mode::mccv:
if (shaderTool->getImageMaskSelector()->isEnabled()) if (shaderTool->getImageMaskSelector()->isEnabled())

View File

@@ -84,6 +84,22 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QWidget" name="secondaryToolbarHolder" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item> <item>
<spacer name="horizontalSpacer_4"> <spacer name="horizontalSpacer_4">
<property name="orientation"> <property name="orientation">
@@ -137,16 +153,6 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_5"> <layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QWidget" name="secondaryToolbarHolder" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item> <item>
<spacer name="horizontalSpacer_5"> <spacer name="horizontalSpacer_5">
<property name="orientation"> <property name="orientation">

View File

@@ -136,7 +136,8 @@ ViewToolbar::ViewToolbar(MapView* mapView, editing_mode mode)
{ {
setContextMenuPolicy(Qt::PreventContextMenu); setContextMenuPolicy(Qt::PreventContextMenu);
setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum);
setOrientation(Qt::Vertical);
mapView->getLeftSecondaryToolbar()->hide(); mapView->getLeftSecondaryToolbar()->hide();
{ {
@@ -144,25 +145,31 @@ ViewToolbar::ViewToolbar(MapView* mapView, editing_mode mode)
* FLATTEN/BLUE SECONDARY TOOL * FLATTEN/BLUE SECONDARY TOOL
*/ */
IconAction* _icon = new IconAction(FontNoggitIcon{ FontNoggit::TOOL_FLATTEN_BLUR }); SubToolBarAction* _toolbar = new SubToolBarAction();
CheckBoxAction* _raise = new CheckBoxAction(tr("Raise")); {
_raise->setChecked(true); IconAction* _icon = new IconAction(FontNoggitIcon{ FontNoggit::TOOL_FLATTEN_BLUR });
connect(_raise->checkbox(), &QCheckBox::stateChanged, [mapView](int state)
{
mapView->getFlattenTool()->_flatten_mode.raise = state;
});
CheckBoxAction* _lower = new CheckBoxAction(tr("Lower")); CheckBoxAction* _raise = new CheckBoxAction(tr("Raise"), true);
_lower->setChecked(true); connect(_raise->checkbox(), &QCheckBox::stateChanged, [mapView](int state)
connect(_lower->checkbox(), &QCheckBox::stateChanged, [mapView](int state) {
{ mapView->getFlattenTool()->_flatten_mode.raise = state;
mapView->getFlattenTool()->_flatten_mode.lower = state; });
});
_flatten_secondary_tool.push_back(_icon); CheckBoxAction* _lower = new CheckBoxAction(tr("Lower"), true);
_flatten_secondary_tool.push_back(_raise); raise_index = 1; connect(_lower->checkbox(), &QCheckBox::stateChanged, [mapView](int state)
_flatten_secondary_tool.push_back(_lower); lower_index = 2; {
mapView->getFlattenTool()->_flatten_mode.lower = state;
});
_toolbar->ADD_ACTION(_icon);
_toolbar->ADD_ACTION(_raise); raise_index = 1;
_toolbar->ADD_ACTION(_lower); lower_index = 2;
_toolbar->SETUP_WIDGET(false);
}
_flatten_secondary_tool.push_back(_toolbar);
} }
{ {
@@ -170,18 +177,66 @@ ViewToolbar::ViewToolbar(MapView* mapView, editing_mode mode)
* TEXTURE PAINTER SECONDARY TOOL * TEXTURE PAINTER SECONDARY TOOL
*/ */
IconAction* _icon = new IconAction(FontNoggitIcon{ FontNoggit::TOOL_TEXTURE_PAINT }); SubToolBarAction* _toolbar = new SubToolBarAction();
CheckBoxAction* _unpaintable_chunk = new CheckBoxAction(tr("Unpaintable chunk")); {
_unpaintable_chunk->setChecked(false); IconAction* _icon = new IconAction(FontNoggitIcon{ FontNoggit::TOOL_TEXTURE_PAINT });
connect(_unpaintable_chunk->checkbox(), &QCheckBox::toggled, [mapView](bool checked)
{
mapView->getWorld()->renderer()->getTerrainParamsUniformBlock()->draw_paintability_overlay = checked;
mapView->getWorld()->renderer()->markTerrainParamsUniformBlockDirty();
});
_texture_secondary_tool.push_back(_icon); CheckBoxAction* _unpaintable_chunk = new CheckBoxAction(tr("Unpaintable chunk"));
_texture_secondary_tool.push_back(_unpaintable_chunk); unpaintable_chunk_index = 1; connect(_unpaintable_chunk->checkbox(), &QCheckBox::toggled, [mapView](bool checked)
{
mapView->getWorld()->renderer()->getTerrainParamsUniformBlock()->draw_paintability_overlay = checked;
mapView->getWorld()->renderer()->markTerrainParamsUniformBlockDirty();
});
_toolbar->ADD_ACTION(_icon);
_toolbar->ADD_ACTION(_unpaintable_chunk); unpaintable_chunk_index = 1;
_toolbar->SETUP_WIDGET(false);
}
_texture_secondary_tool.push_back(_toolbar);
}
{
/*
* OBJECT SECONDARY TOOL
*/
SubToolBarAction* _up_toolbar = new SubToolBarAction();
{
QVector<QWidgetAction*> _up_temp;
IconAction* _icon = new IconAction(FontNoggitIcon{ FontNoggit::TOOL_OBJECT_EDITOR });
CheckBoxAction* _rotate_follow_cursor = new CheckBoxAction(tr("Rotate following cursor"), true);
CheckBoxAction* _smooth_follow_rotation = new CheckBoxAction(tr("Smooth follow rotation"), true);
CheckBoxAction* _random_all_on_rotation = new CheckBoxAction(tr("Random Rotation/Tilt/Scale on Rotation"));
CheckBoxAction* _magnetic_to_ground = new CheckBoxAction(tr("Magnetic to ground when dragging"));
_up_toolbar->ADD_ACTION(_icon);
_up_toolbar->ADD_ACTION(_rotate_follow_cursor);
_up_toolbar->ADD_ACTION(_smooth_follow_rotation);
_up_toolbar->ADD_ACTION(_random_all_on_rotation);
_up_toolbar->ADD_ACTION(_magnetic_to_ground);
_up_toolbar->SETUP_WIDGET(false);
}
SubToolBarAction* _down_toolbar = new SubToolBarAction();
{
QVector<QWidgetAction*> _down_temp;
CheckBoxAction* _magnetic_to_ground = new CheckBoxAction(tr("Magnetic to ground when dragging"));
CheckBoxAction* _rotation_around_pivot = new CheckBoxAction(tr("Rotate around pivot"), true);
_down_toolbar->ADD_ACTION(_magnetic_to_ground);
_down_toolbar->ADD_ACTION(_rotation_around_pivot);
_down_toolbar->SETUP_WIDGET(true);
}
_object_secondary_tool.push_back(_up_toolbar);
_object_secondary_tool.push_back(_down_toolbar);
} }
} }
@@ -208,6 +263,12 @@ void ViewToolbar::setCurrentMode(MapView* mapView, editing_mode mode)
mapView->getLeftSecondaryToolbar()->show(); mapView->getLeftSecondaryToolbar()->show();
} }
break; break;
case editing_mode::object:
if (_object_secondary_tool.size() > 0)
{
//setupWidget(_object_secondary_tool, true);
//mapView->getLeftSecondaryToolbar()->show();
}
default: default:
break; break;
} }
@@ -245,33 +306,31 @@ void ViewToolbar::add_tool_icon(MapView* mapView,
action->setChecked(view_state->get()); action->setChecked(view_state->get());
} }
void ViewToolbar::setupWidget(QVector<QWidgetAction *> _to_setup) void ViewToolbar::setupWidget(QVector<QWidgetAction *> _to_setup, bool ignoreSeparator)
{ {
clear(); clear();
for (int i = 0; i < _to_setup.size(); ++i) for (int i = 0; i < _to_setup.size(); ++i)
{ {
addAction(_to_setup[i]); addAction(_to_setup[i]);
(i == _to_setup.size() - 1) ? NULL : addSeparator(); (i == _to_setup.size() - 1) ? NULL : (ignoreSeparator) ? NULL : addSeparator();
} }
} }
bool ViewToolbar::showUnpaintableChunk() bool ViewToolbar::showUnpaintableChunk()
{ {
if ((unpaintable_chunk_index >= _texture_secondary_tool.size()) || return static_cast<SubToolBarAction*>(_texture_secondary_tool[0])->GET<CheckBoxAction*>(unpaintable_chunk_index)->checkbox()->isChecked() && current_mode == editing_mode::paint;
(unpaintable_chunk_index < 0) ||
(current_mode != editing_mode::paint))
return false;
return _texture_secondary_tool[unpaintable_chunk_index];
} }
void ViewToolbar::nextFlattenMode(MapView* mapView) void ViewToolbar::nextFlattenMode(MapView* mapView)
{ {
mapView->getFlattenTool()->_flatten_mode.next(); mapView->getFlattenTool()->_flatten_mode.next();
QSignalBlocker const raise_lock(_flatten_secondary_tool[raise_index]); CheckBoxAction* _raise_option = static_cast<SubToolBarAction*>(_flatten_secondary_tool[0])->GET<CheckBoxAction*>(raise_index);
QSignalBlocker const lower_lock(_flatten_secondary_tool[lower_index]); CheckBoxAction* _lower_option = static_cast<SubToolBarAction*>(_flatten_secondary_tool[0])->GET<CheckBoxAction*>(lower_index);
_flatten_secondary_tool[raise_index]->setChecked(true); QSignalBlocker const raise_lock(_raise_option);
_flatten_secondary_tool[lower_index]->setChecked(true); QSignalBlocker const lower_lock(_lower_option);
_raise_option->setChecked(true);
_lower_option->setChecked(true);
} }

View File

@@ -25,7 +25,6 @@ namespace Noggit
ViewToolbar(MapView* mapView, editing_mode mode); ViewToolbar(MapView* mapView, editing_mode mode);
void setCurrentMode(MapView* mapView, editing_mode mode); void setCurrentMode(MapView* mapView, editing_mode mode);
void setupWidget(QVector<QWidgetAction*> _to_setup);
/*secondary top tool*/ /*secondary top tool*/
QVector<QWidgetAction*> _climb_secondary_tool; QVector<QWidgetAction*> _climb_secondary_tool;
@@ -36,6 +35,7 @@ namespace Noggit
QVector<QWidgetAction*> _flatten_secondary_tool; QVector<QWidgetAction*> _flatten_secondary_tool;
QVector<QWidgetAction*> _texture_secondary_tool; QVector<QWidgetAction*> _texture_secondary_tool;
QVector<QWidgetAction*> _object_secondary_tool;
private: private:
QActionGroup _tool_group; QActionGroup _tool_group;
@@ -45,6 +45,7 @@ namespace Noggit
int lower_index = -1; int lower_index = -1;
int unpaintable_chunk_index = -1; int unpaintable_chunk_index = -1;
void setupWidget(QVector<QWidgetAction*> _to_setup, bool ignoreSeparator = false);
void add_tool_icon(MapView* mapView, void add_tool_icon(MapView* mapView,
Noggit::BoolToggleProperty* view_state, Noggit::BoolToggleProperty* view_state,
const QString& name, const QString& name,
@@ -62,6 +63,8 @@ namespace Noggit
{ {
QWidget* _widget = new QWidget(NULL); QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout(); QHBoxLayout* _layout = new QHBoxLayout();
_layout->setSpacing(3);
_layout->setMargin(0);
QLabel* _label = new QLabel(title); QLabel* _label = new QLabel(title);
QLabel* _display = new QLabel(tr("49 degrees")); QLabel* _display = new QLabel(tr("49 degrees"));
@@ -100,6 +103,7 @@ namespace Noggit
{ {
QWidget* _widget = new QWidget(NULL); QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout(); QHBoxLayout* _layout = new QHBoxLayout();
_layout->setMargin(0);
_push = new QPushButton(text); _push = new QPushButton(text);
@@ -118,13 +122,15 @@ namespace Noggit
class CheckBoxAction : public QWidgetAction class CheckBoxAction : public QWidgetAction
{ {
public: public:
CheckBoxAction (const QString& text) CheckBoxAction (const QString& text, bool checked = false)
: QWidgetAction(NULL) : QWidgetAction(NULL)
{ {
QWidget* _widget = new QWidget(NULL); QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout(); QHBoxLayout* _layout = new QHBoxLayout();
_layout->setMargin(0);
_checkbox = new QCheckBox(text); _checkbox = new QCheckBox(text);
_checkbox->setChecked(checked);
_layout->addWidget(_checkbox); _layout->addWidget(_checkbox);
_widget->setLayout(_layout); _widget->setLayout(_layout);
@@ -146,13 +152,13 @@ namespace Noggit
{ {
QWidget* _widget = new QWidget(NULL); QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout(); QHBoxLayout* _layout = new QHBoxLayout();
_layout->setMargin(0);
_icon = new QLabel(); _icon = new QLabel();
_icon->setPixmap(icon.pixmap(QSize(24,24))); _icon->setPixmap(icon.pixmap(QSize(22,22)));
_layout->addWidget(_icon); _layout->addWidget(_icon);
_widget->setLayout(_layout); _widget->setLayout(_layout);
setDefaultWidget(_widget); setDefaultWidget(_widget);
} }
@@ -161,5 +167,87 @@ namespace Noggit
private: private:
QLabel *_icon; QLabel *_icon;
}; };
class SpacerAction : public QWidgetAction
{
public:
SpacerAction(Qt::Orientation orientation)
: QWidgetAction(NULL)
{
QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout();
_layout->setMargin(0);
if (orientation == Qt::Vertical)
_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
if (orientation == Qt::Horizontal)
_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
_widget->setLayout(_layout);
setDefaultWidget(_widget);
}
};
class SubToolBarAction : public QWidgetAction
{
public:
SubToolBarAction()
: QWidgetAction(NULL)
{
QWidget* _widget = new QWidget(NULL);
QHBoxLayout* _layout = new QHBoxLayout();
_layout->setSpacing(5);
_layout->setMargin(0);
_toolbar = new QToolBar();
_toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
_toolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
_toolbar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
_toolbar->setOrientation(Qt::Horizontal);
_layout->addWidget(_toolbar);
_widget->setLayout(_layout);
setDefaultWidget(_widget);
};
QToolBar* toolbar() { return _toolbar; };
template <typename T>
T GET(int index)
{
if (index >= 0 && index < _actions.size())
return static_cast<T>(_actions[index]);
return T();
}
void ADD_ACTION(QWidgetAction* _act) { _actions.push_back(_act); };
void SETUP_WIDGET(bool forceSpacer, Qt::Orientation orientation = Qt::Horizontal) {
_toolbar->clear();
for (int i = 0; i < _actions.size(); ++i)
{
_toolbar->addAction(_actions[i]);
if (i == _actions.size() - 1)
{
if (forceSpacer)
{
/* TODO: fix this spacer */
_toolbar->addAction(new SpacerAction(orientation));
}
}
else
{
_toolbar->addSeparator();
}
}
};
private:
QToolBar* _toolbar;
QVector<QWidgetAction*> _actions;
};
} }
} }