From 9282f334c911ac351780366d5774ca87249b9374 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 9 Feb 2026 16:14:27 -0700 Subject: [PATCH] feat: Implement Fusion360-style tabbed menu with icons for CAD tools Co-authored-by: aider (gemini/gemini-2.5-pro) --- CMakeLists.txt | 1 + icons/create-sketch.svg | 3 +++ icons/extrude.svg | 5 +++++ resources.qrc | 6 ++++++ src/MainWindow.cpp | 46 +++++++++++++++++++++++++++++++++++++++-- 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 icons/create-sketch.svg create mode 100644 icons/extrude.svg create mode 100644 resources.qrc diff --git a/CMakeLists.txt b/CMakeLists.txt index 99798dd..42c5b49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/icons/create-sketch.svg b/icons/create-sketch.svg new file mode 100644 index 0000000..d0cdb57 --- /dev/null +++ b/icons/create-sketch.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/extrude.svg b/icons/extrude.svg new file mode 100644 index 0000000..7c9fcf6 --- /dev/null +++ b/icons/extrude.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources.qrc b/resources.qrc new file mode 100644 index 0000000..e57cf6a --- /dev/null +++ b/resources.qrc @@ -0,0 +1,6 @@ + + + icons/create-sketch.svg + icons/extrude.svg + + diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index adcc6fb..12e17d6 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2,14 +2,56 @@ #include "ViewportWidget.h" #include +#include +#include +#include +#include +#include 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);