feat: Add feature browser dock widget with document synchronization
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -19,12 +19,14 @@ Document::~Document()
|
|||||||
void Document::addFeature(Feature* feature)
|
void Document::addFeature(Feature* feature)
|
||||||
{
|
{
|
||||||
m_features.append(feature);
|
m_features.append(feature);
|
||||||
|
emit featureAdded(feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Document::clear()
|
void Document::clear()
|
||||||
{
|
{
|
||||||
qDeleteAll(m_features);
|
qDeleteAll(m_features);
|
||||||
m_features.clear();
|
m_features.clear();
|
||||||
|
emit cleared();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Document::save(const QString& path) const
|
bool Document::save(const QString& path) const
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ public:
|
|||||||
bool save(const QString& path) const;
|
bool save(const QString& path) const;
|
||||||
bool load(const QString& path);
|
bool load(const QString& path);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void featureAdded(Feature* feature);
|
||||||
|
void cleared();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<Feature*> m_features;
|
QList<Feature*> m_features;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,11 +2,15 @@
|
|||||||
#include "ViewportWidget.h"
|
#include "ViewportWidget.h"
|
||||||
#include "Document.h"
|
#include "Document.h"
|
||||||
#include "SketchFeature.h"
|
#include "SketchFeature.h"
|
||||||
|
#include "Feature.h"
|
||||||
|
|
||||||
#include <QMenuBar>
|
#include <QMenuBar>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QDockWidget>
|
||||||
|
#include <QTreeWidget>
|
||||||
|
#include <QTreeWidgetItem>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
@@ -80,6 +84,18 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
setCentralWidget(m_viewport);
|
setCentralWidget(m_viewport);
|
||||||
|
|
||||||
m_document = new Document(this);
|
m_document = new Document(this);
|
||||||
|
connect(m_document, &Document::featureAdded, this, &MainWindow::onFeatureAdded);
|
||||||
|
connect(m_document, &Document::cleared, this, &MainWindow::onDocumentCleared);
|
||||||
|
|
||||||
|
QDockWidget *dock = new QDockWidget("Browser", this);
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, dock);
|
||||||
|
|
||||||
|
m_featureTree = new QTreeWidget(dock);
|
||||||
|
m_featureTree->setHeaderHidden(true);
|
||||||
|
dock->setWidget(m_featureTree);
|
||||||
|
|
||||||
|
m_rootItem = new QTreeWidgetItem(m_featureTree);
|
||||||
|
|
||||||
setCurrentFile(QString());
|
setCurrentFile(QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,6 +177,22 @@ void MainWindow::setCurrentFile(const QString &fileName)
|
|||||||
|
|
||||||
QString shownName = m_currentFile;
|
QString shownName = m_currentFile;
|
||||||
if (m_currentFile.isEmpty())
|
if (m_currentFile.isEmpty())
|
||||||
shownName = "untitled.json";
|
shownName = "Untitled";
|
||||||
setWindowTitle(tr("%1[*] - %2").arg(QFileInfo(shownName).fileName(), tr("OpenCAD")));
|
setWindowTitle(tr("%1[*] - %2").arg(QFileInfo(shownName).fileName(), tr("OpenCAD")));
|
||||||
|
|
||||||
|
if (m_rootItem) {
|
||||||
|
m_rootItem->setText(0, QFileInfo(shownName).fileName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onFeatureAdded(Feature* feature)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *item = new QTreeWidgetItem(m_rootItem);
|
||||||
|
item->setText(0, feature->name());
|
||||||
|
m_rootItem->setExpanded(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onDocumentCleared()
|
||||||
|
{
|
||||||
|
qDeleteAll(m_rootItem->takeChildren());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
class ViewportWidget;
|
class ViewportWidget;
|
||||||
class Document;
|
class Document;
|
||||||
|
class Feature;
|
||||||
|
class QTreeWidget;
|
||||||
|
class QTreeWidgetItem;
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
@@ -20,12 +23,18 @@ private slots:
|
|||||||
bool saveAs();
|
bool saveAs();
|
||||||
void createSketch();
|
void createSketch();
|
||||||
|
|
||||||
|
void onFeatureAdded(Feature* feature);
|
||||||
|
void onDocumentCleared();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setCurrentFile(const QString &fileName);
|
void setCurrentFile(const QString &fileName);
|
||||||
|
|
||||||
ViewportWidget *m_viewport;
|
ViewportWidget *m_viewport;
|
||||||
Document *m_document;
|
Document *m_document;
|
||||||
QString m_currentFile;
|
QString m_currentFile;
|
||||||
|
|
||||||
|
QTreeWidget* m_featureTree;
|
||||||
|
QTreeWidgetItem* m_rootItem;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
Reference in New Issue
Block a user