fix: type chooser always shows modifiers, tabs show class name, dock buttons restored on re-dock

This commit is contained in:
IChooseYou
2026-03-06 09:23:36 -07:00
committed by IChooseYou
parent b7eebedf50
commit 03c49d19dd
3 changed files with 15 additions and 30 deletions

View File

@@ -231,17 +231,7 @@ void RcxController::connectEditor(RcxEditor* editor) {
TypePopupMode mode = TypePopupMode::FieldType; TypePopupMode mode = TypePopupMode::FieldType;
if (target == EditTarget::ArrayElementType) if (target == EditTarget::ArrayElementType)
mode = TypePopupMode::ArrayElement; mode = TypePopupMode::ArrayElement;
else if (target == EditTarget::PointerTarget) { // PointerTarget is handled as FieldType — modifiers * / ** will be pre-selected
// Primitive pointers (ptrDepth>0) should open FieldType with
// the base type selected and *//** preselected — not PointerTarget.
bool isPrimPtr = false;
if (nodeIdx >= 0 && nodeIdx < m_doc->tree.nodes.size()) {
const auto& n = m_doc->tree.nodes[nodeIdx];
isPrimPtr = n.ptrDepth > 0 && n.refId == 0;
}
mode = isPrimPtr ? TypePopupMode::FieldType
: TypePopupMode::PointerTarget;
}
showTypePopup(editor, mode, nodeIdx, globalPos); showTypePopup(editor, mode, nodeIdx, globalPos);
}); });

View File

@@ -1441,8 +1441,7 @@ QDockWidget* MainWindow::createTab(RcxDocument* doc) {
splitter->setHandleWidth(1); splitter->setHandleWidth(1);
auto* ctrl = new RcxController(doc, splitter); auto* ctrl = new RcxController(doc, splitter);
QString title = doc->filePath.isEmpty() QString title = rootName(doc->tree);
? rootName(doc->tree) : QFileInfo(doc->filePath).fileName();
auto* dock = new QDockWidget(title, this); auto* dock = new QDockWidget(title, this);
dock->setObjectName(QStringLiteral("DocDock_%1").arg(quintptr(dock), 0, 16)); dock->setObjectName(QStringLiteral("DocDock_%1").arg(quintptr(dock), 0, 16));
dock->setFeatures(QDockWidget::DockWidgetClosable | dock->setFeatures(QDockWidget::DockWidgetClosable |
@@ -1532,7 +1531,7 @@ QDockWidget* MainWindow::createTab(RcxDocument* doc) {
dockGrip->hide(); dockGrip->hide();
// Swap title bar when floating/docking, show/hide border + grip // Swap title bar when floating/docking, show/hide border + grip
connect(dock, &QDockWidget::topLevelChanged, this, [dock, emptyTitleBar, floatTitleBar, dockBorder, dockGrip](bool floating) { connect(dock, &QDockWidget::topLevelChanged, this, [this, dock, emptyTitleBar, floatTitleBar, dockBorder, dockGrip](bool floating) {
dock->setTitleBarWidget(floating ? floatTitleBar : emptyTitleBar); dock->setTitleBarWidget(floating ? floatTitleBar : emptyTitleBar);
if (floating) { if (floating) {
dockBorder->setGeometry(0, 0, dock->width(), dock->height()); dockBorder->setGeometry(0, 0, dock->width(), dock->height());
@@ -1544,6 +1543,8 @@ QDockWidget* MainWindow::createTab(RcxDocument* doc) {
} else { } else {
dockBorder->hide(); dockBorder->hide();
dockGrip->hide(); dockGrip->hide();
// Re-docking creates a new tab bar — reinstall pin/close buttons
QTimer::singleShot(0, this, [this]() { setupDockTabBars(); });
} }
}); });
dock->installEventFilter(new DockBorderFilter(dockBorder, dockGrip, dock)); dock->installEventFilter(new DockBorderFilter(dockBorder, dockGrip, dock));
@@ -1667,7 +1668,6 @@ QDockWidget* MainWindow::createTab(RcxDocument* doc) {
auto it2 = m_tabs.find(dockGuard); auto it2 = m_tabs.find(dockGuard);
if (it2 != m_tabs.end()) { if (it2 != m_tabs.end()) {
updateAllRenderedPanes(*it2); updateAllRenderedPanes(*it2);
if (it2->doc->filePath.isEmpty())
dockGuard->setWindowTitle(rootName(it2->doc->tree, it2->ctrl->viewRootId())); dockGuard->setWindowTitle(rootName(it2->doc->tree, it2->ctrl->viewRootId()));
} }
rebuildWorkspaceModel(); rebuildWorkspaceModel();
@@ -1684,7 +1684,6 @@ QDockWidget* MainWindow::createTab(RcxDocument* doc) {
auto it2 = m_tabs.find(dockGuard); auto it2 = m_tabs.find(dockGuard);
if (it2 != m_tabs.end()) { if (it2 != m_tabs.end()) {
updateAllRenderedPanes(*it2); updateAllRenderedPanes(*it2);
if (it2->doc->filePath.isEmpty())
dockGuard->setWindowTitle(rootName(it2->doc->tree, it2->ctrl->viewRootId())); dockGuard->setWindowTitle(rootName(it2->doc->tree, it2->ctrl->viewRootId()));
} }
updateWindowTitle(); updateWindowTitle();
@@ -2639,9 +2638,7 @@ void MainWindow::updateWindowTitle() {
auto* activeDock = m_activeDocDock; auto* activeDock = m_activeDocDock;
if (activeDock && m_tabs.contains(activeDock)) { if (activeDock && m_tabs.contains(activeDock)) {
auto& tab = m_tabs[activeDock]; auto& tab = m_tabs[activeDock];
QString name = tab.doc->filePath.isEmpty() QString name = rootName(tab.doc->tree, tab.ctrl->viewRootId());
? rootName(tab.doc->tree, tab.ctrl->viewRootId())
: QFileInfo(tab.doc->filePath).fileName();
if (tab.doc->modified) name += " *"; if (tab.doc->modified) name += " *";
title = name + " - Reclass"; title = name + " - Reclass";
} else { } else {
@@ -3713,9 +3710,7 @@ void MainWindow::rebuildWorkspaceModel() {
TabState& tab = it.value(); TabState& tab = it.value();
if (seenDocs.contains(tab.doc)) continue; // skip duplicate doc views if (seenDocs.contains(tab.doc)) continue; // skip duplicate doc views
seenDocs.insert(tab.doc); seenDocs.insert(tab.doc);
QString name = tab.doc->filePath.isEmpty() QString name = rootName(tab.doc->tree, tab.ctrl->viewRootId());
? rootName(tab.doc->tree, tab.ctrl->viewRootId())
: QFileInfo(tab.doc->filePath).fileName();
tabs.append({ &tab.doc->tree, name, static_cast<void*>(it.key()) }); tabs.append({ &tab.doc->tree, name, static_cast<void*>(it.key()) });
} }
rcx::buildProjectExplorer(m_workspaceModel, tabs); rcx::buildProjectExplorer(m_workspaceModel, tabs);

View File

@@ -415,9 +415,9 @@ TypeSelectorPopup::TypeSelectorPopup(QWidget* parent)
return btn; return btn;
}; };
m_chipPrim = makeChip(QStringLiteral("P")); m_chipPrim = makeChip(QStringLiteral("Built-in"));
m_chipTypes = makeChip(QStringLiteral("T")); m_chipTypes = makeChip(QStringLiteral("Types"));
m_chipEnums = makeChip(QStringLiteral("E")); m_chipEnums = makeChip(QStringLiteral("Enum"));
m_chipPrim->setAccessibleName(QStringLiteral("Show primitives")); m_chipPrim->setAccessibleName(QStringLiteral("Show primitives"));
m_chipTypes->setAccessibleName(QStringLiteral("Show composites")); m_chipTypes->setAccessibleName(QStringLiteral("Show composites"));
m_chipEnums->setAccessibleName(QStringLiteral("Show enums")); m_chipEnums->setAccessibleName(QStringLiteral("Show enums"));
@@ -1080,9 +1080,9 @@ void TypeSelectorPopup::applyFilter(const QString& text) {
auto updateChipLabel = [](QToolButton* btn, const QString& abbrev, int count) { auto updateChipLabel = [](QToolButton* btn, const QString& abbrev, int count) {
btn->setText(QStringLiteral("%1 (%2)").arg(abbrev).arg(count)); btn->setText(QStringLiteral("%1 (%2)").arg(abbrev).arg(count));
}; };
if (m_chipPrim) updateChipLabel(m_chipPrim, QStringLiteral("P"), primCount); if (m_chipPrim) updateChipLabel(m_chipPrim, QStringLiteral("Built-in"), primCount);
if (m_chipTypes) updateChipLabel(m_chipTypes, QStringLiteral("T"), typeCount); if (m_chipTypes) updateChipLabel(m_chipTypes, QStringLiteral("Types"), typeCount);
if (m_chipEnums) updateChipLabel(m_chipEnums, QStringLiteral("E"), enumCount); if (m_chipEnums) updateChipLabel(m_chipEnums, QStringLiteral("Enum"), enumCount);
if (m_statusLabel) if (m_statusLabel)
m_statusLabel->setText(QStringLiteral("%1 results").arg(resultCount)); m_statusLabel->setText(QStringLiteral("%1 results").arg(resultCount));