src/mainwindow.cpp

changeset 354
91053052bb28
parent 201
5d201ee4a9c3
child 355
e81f4ad53efd
--- a/src/mainwindow.cpp	Sat Apr 08 16:12:12 2023 +0300
+++ b/src/mainwindow.cpp	Sat Apr 08 16:41:40 2023 +0300
@@ -1,17 +1,33 @@
-/*
- *  LDForge: LDraw parts authoring CAD
- *  Copyright (C) 2013 - 2020 Teemu Piippo
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
+#include "mainwindow.h"
+
+static constexpr MemberData<MainWindow, QAction*, gl::RenderStyle> renderStyleButtons[] = {
+	{ offsetof(MainWindow, actionRenderStyleNormal), gl::RenderStyle::Normal },
+	{ offsetof(MainWindow, actionRenderStyleBfc), gl::RenderStyle::BfcRedGreen },
+	{ offsetof(MainWindow, actionRenderStyleRandom), gl::RenderStyle::RandomColors },
+	{ offsetof(MainWindow, actionRenderStylePickScene), gl::RenderStyle::PickScene },
+};
+
+MainWindow::MainWindow(QWidget *parent)
+: QMainWindow{parent}
+{
+	this->setupUi(this);
+	for (const auto& memberData : ::renderStyleButtons)
+	{
+		QAction* action = memberData.memberInstance(this);
+		const gl::RenderStyle newStyle = memberData.payload;
+		QObject::connect(action, &QAction::triggered, [this, newStyle]{
+			Q_EMIT this->renderStyleSelected(newStyle);
+			this->setRenderStyle(newStyle);
+		});
+	}
+}
+
+void MainWindow::setRenderStyle(gl::RenderStyle style)
+{
+	for (const auto& memberData : ::renderStyleButtons)
+	{
+		QAction* const action = memberData.memberInstance(this);
+		const gl::RenderStyle buttonRenderStyle = memberData.payload;
+		action->setChecked(style == buttonRenderStyle);
+	}
+}

mercurial