feat: Implement Fusion360-style tabbed menu with icons for CAD tools

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-09 16:14:27 -07:00
parent 86a1d18822
commit 9282f334c9
5 changed files with 59 additions and 2 deletions

View File

@@ -15,6 +15,7 @@ add_executable(OpenCAD
src/MainWindow.cpp
src/ViewportWidget.cpp
src/ViewCube.cpp
resources.qrc
)
target_link_libraries(OpenCAD PRIVATE Qt6::Widgets Qt6::OpenGLWidgets)

3
icons/create-sketch.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path>
</svg>

After

Width:  |  Height:  |  Size: 267 B

5
icons/extrude.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path>
<polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline>
<line x1="12" y1="22.08" x2="12" y2="12"></line>
</svg>

After

Width:  |  Height:  |  Size: 451 B

6
resources.qrc Normal file
View File

@@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/">
<file>icons/create-sketch.svg</file>
<file>icons/extrude.svg</file>
</qresource>
</RCC>

View File

@@ -2,14 +2,56 @@
#include "ViewportWidget.h"
#include <QToolBar>
#include <QTabWidget>
#include <QWidget>
#include <QHBoxLayout>
#include <QToolButton>
#include <QIcon>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle("OpenCAD");
resize(800, 600);
resize(1280, 720);
QToolBar *toolBar = addToolBar("Tools");
QToolBar* mainToolBar = addToolBar("Main Toolbar");
mainToolBar->setMovable(false);
mainToolBar->setFloatable(false);
mainToolBar->setStyleSheet("QToolBar { border: 0px }");
QTabWidget *tabWidget = new QTabWidget();
mainToolBar->addWidget(tabWidget);
// --- SOLID Tab ---
QWidget *solidTab = new QWidget();
QHBoxLayout *solidLayout = new QHBoxLayout(solidTab);
solidLayout->setContentsMargins(5, 5, 5, 5);
solidLayout->setSpacing(5);
solidLayout->setAlignment(Qt::AlignLeft);
QToolButton *createSketchButton = new QToolButton();
createSketchButton->setText("Create Sketch");
createSketchButton->setIcon(QIcon(":/icons/create-sketch.svg"));
createSketchButton->setIconSize(QSize(48, 48));
createSketchButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
solidLayout->addWidget(createSketchButton);
QToolButton *extrudeButton = new QToolButton();
extrudeButton->setText("Extrude");
extrudeButton->setIcon(QIcon(":/icons/extrude.svg"));
extrudeButton->setIconSize(QSize(48, 48));
extrudeButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
solidLayout->addWidget(extrudeButton);
tabWidget->addTab(solidTab, "SOLID");
// --- SURFACE Tab ---
QWidget *surfaceTab = new QWidget();
tabWidget->addTab(surfaceTab, "SURFACE");
// --- TOOLS Tab ---
QWidget *toolsTab = new QWidget();
tabWidget->addTab(toolsTab, "TOOLS");
ViewportWidget *viewport = new ViewportWidget;
setCentralWidget(viewport);