mirror of
https://github.com/NohamR/Reclass.git
synced 2026-05-10 19:59:21 +00:00
fix: type chooser always shows modifiers, tabs show class name, dock buttons restored on re-dock
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
17
src/main.cpp
17
src/main.cpp
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user