NavigationWidget: Move statics outside of class

Change-Id: Ibbdb867b52eff75000fbdbc5e15694ab5b5f5646
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2024-01-10 23:51:10 +01:00
parent d8663701ab
commit b653dc3e80
2 changed files with 39 additions and 49 deletions

View File

@@ -33,6 +33,26 @@ using namespace Utils;
namespace Core {
struct ActivationInfo {
Side side;
int position;
};
using ActivationsMap = QHash<Id, ActivationInfo>;
static NavigationWidget *s_instanceLeft = nullptr;
static NavigationWidget *s_instanceRight = nullptr;
static ActivationsMap s_activationsMap = {};
static void addActivationInfo(Id activatedId, const ActivationInfo &activationInfo)
{
s_activationsMap.insert(activatedId, activationInfo);
}
NavigationWidget *instance(Side side)
{
return side == Side::Left ? s_instanceLeft : s_instanceRight;
}
NavigationWidgetPlaceHolder *NavigationWidgetPlaceHolder::s_currentLeft = nullptr;
NavigationWidgetPlaceHolder *NavigationWidgetPlaceHolder::s_currentRight = nullptr;
@@ -61,7 +81,7 @@ NavigationWidgetPlaceHolder::NavigationWidgetPlaceHolder(Id mode, Side side, QWi
NavigationWidgetPlaceHolder::~NavigationWidgetPlaceHolder()
{
if (NavigationWidgetPlaceHolder::current(m_side) == this) {
if (NavigationWidget *nw = NavigationWidget::instance(m_side)) {
if (NavigationWidget *nw = instance(m_side)) {
nw->setParent(nullptr);
nw->hide();
}
@@ -106,7 +126,7 @@ void NavigationWidgetPlaceHolder::applyStoredSize()
// And that the parent of the NavigationWidget gets the correct parent
void NavigationWidgetPlaceHolder::currentModeAboutToChange(Id mode)
{
NavigationWidget *navigationWidget = NavigationWidget::instance(m_side);
NavigationWidget *navigationWidget = instance(m_side);
NavigationWidgetPlaceHolder *current = NavigationWidgetPlaceHolder::current(m_side);
if (current == this) {
@@ -130,15 +150,9 @@ void NavigationWidgetPlaceHolder::currentModeAboutToChange(Id mode)
int NavigationWidgetPlaceHolder::storedWidth() const
{
return NavigationWidget::instance(m_side)->storedWidth();
return instance(m_side)->storedWidth();
}
struct ActivationInfo {
Side side;
int position;
};
using ActivationsMap = QHash<Id, ActivationInfo>;
struct NavigationWidgetPrivate
{
explicit NavigationWidgetPrivate(QAction *toggleSideBarAction, Side side);
@@ -154,14 +168,6 @@ struct NavigationWidgetPrivate
int m_width;
QAction *m_toggleSideBarAction; // does not take ownership
Side m_side;
static NavigationWidget *s_instanceLeft;
static NavigationWidget *s_instanceRight;
static ActivationsMap s_activationsMap;
static void updateActivationsMap(Id activatedId, const ActivationInfo &activationInfo);
static void removeFromActivationsMap(const ActivationInfo &activationInfo);
};
NavigationWidgetPrivate::NavigationWidgetPrivate(QAction *toggleSideBarAction, Side side) :
@@ -173,15 +179,6 @@ NavigationWidgetPrivate::NavigationWidgetPrivate(QAction *toggleSideBarAction, S
{
}
void NavigationWidgetPrivate::updateActivationsMap(Id activatedId, const ActivationInfo &activationInfo)
{
s_activationsMap.insert(activatedId, activationInfo);
}
NavigationWidget *NavigationWidgetPrivate::s_instanceLeft = nullptr;
NavigationWidget *NavigationWidgetPrivate::s_instanceRight = nullptr;
ActivationsMap NavigationWidgetPrivate::s_activationsMap;
NavigationWidget::NavigationWidget(QAction *toggleSideBarAction, Side side) :
d(new NavigationWidgetPrivate(toggleSideBarAction, side))
{
@@ -189,9 +186,9 @@ NavigationWidget::NavigationWidget(QAction *toggleSideBarAction, Side side) :
setOrientation(Qt::Vertical);
if (side == Side::Left)
NavigationWidgetPrivate::s_instanceLeft = this;
s_instanceLeft = this;
else
NavigationWidgetPrivate::s_instanceRight = this;
s_instanceRight = this;
connect(ModeManager::instance(),
&ModeManager::currentMainWindowChanged,
@@ -202,27 +199,21 @@ NavigationWidget::NavigationWidget(QAction *toggleSideBarAction, Side side) :
NavigationWidget::~NavigationWidget()
{
if (d->m_side == Side::Left)
NavigationWidgetPrivate::s_instanceLeft = nullptr;
s_instanceLeft = nullptr;
else
NavigationWidgetPrivate::s_instanceRight = nullptr;
s_instanceRight = nullptr;
delete d;
}
NavigationWidget *NavigationWidget::instance(Side side)
{
return side == Side::Left ? NavigationWidgetPrivate::s_instanceLeft
: NavigationWidgetPrivate::s_instanceRight;
}
QWidget *NavigationWidget::activateSubWidget(Id factoryId, Side fallbackSide)
{
NavigationWidget *navigationWidget = NavigationWidget::instance(fallbackSide);
NavigationWidget *navigationWidget = instance(fallbackSide);
int preferredPosition = -1;
if (NavigationWidgetPrivate::s_activationsMap.contains(factoryId)) {
const ActivationInfo info = NavigationWidgetPrivate::s_activationsMap.value(factoryId);
navigationWidget = NavigationWidget::instance(info.side);
// TODO: Use find
if (s_activationsMap.contains(factoryId)) {
const ActivationInfo info = s_activationsMap.value(factoryId);
navigationWidget = instance(info.side);
preferredPosition = info.position;
}
@@ -333,7 +324,7 @@ Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position,
for (int pos = position + 1; pos < d->m_subWidgets.size(); ++pos) {
Internal::NavigationSubWidget *nsw = d->m_subWidgets.at(pos);
nsw->setPosition(pos + 1);
NavigationWidgetPrivate::updateActivationsMap(nsw->factory()->id(), {d->m_side, pos + 1});
addActivationInfo(nsw->factory()->id(), {d->m_side, pos + 1});
}
if (!d->m_subWidgets.isEmpty()) // Make all icons the bottom icon
@@ -348,14 +339,14 @@ Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position,
});
connect(nsw, &Internal::NavigationSubWidget::factoryIndexChanged, this, [this, nsw] {
const Id factoryId = nsw->factory()->id();
NavigationWidgetPrivate::updateActivationsMap(factoryId, {d->m_side, nsw->position()});
addActivationInfo(factoryId, {d->m_side, nsw->position()});
});
insertWidget(position, nsw);
d->m_subWidgets.insert(position, nsw);
d->m_subWidgets.at(0)->setCloseIcon(closeIconForSide(d->m_side, d->m_subWidgets.size()));
if (updateActivationsMap)
NavigationWidgetPrivate::updateActivationsMap(nsw->factory()->id(), {d->m_side, position});
addActivationInfo(nsw->factory()->id(), {d->m_side, position});
return nsw;
}
@@ -392,7 +383,7 @@ void NavigationWidget::closeSubWidget(Internal::NavigationSubWidget *subWidget)
for (int pos = position + 1; pos < d->m_subWidgets.size(); ++pos) {
Internal::NavigationSubWidget *nsw = d->m_subWidgets.at(pos);
nsw->setPosition(pos - 1);
NavigationWidgetPrivate::updateActivationsMap(nsw->factory()->id(), {d->m_side, pos - 1});
addActivationInfo(nsw->factory()->id(), {d->m_side, pos - 1});
}
d->m_subWidgets.removeOne(subWidget);
@@ -460,9 +451,9 @@ void NavigationWidget::saveSettings(QtcSettings *settings)
settings->setValue(settingsKey("Width"), d->m_width);
const Key activationKey = "ActivationPosition.";
const auto keys = NavigationWidgetPrivate::s_activationsMap.keys();
const auto keys = s_activationsMap.keys();
for (const auto &factoryId : keys) {
const auto &info = NavigationWidgetPrivate::s_activationsMap[factoryId];
const auto &info = s_activationsMap[factoryId];
const Utils::Key key = settingsKey(activationKey + factoryId.name());
if (info.side == d->m_side)
settings->setValue(key, info.position);
@@ -543,7 +534,7 @@ void NavigationWidget::restoreSettings(QtcSettings *settings)
int position = settings->value(keyFromString(key)).toInt();
Id factoryId = Id::fromString(key.mid(activationKey.length()));
NavigationWidgetPrivate::updateActivationsMap(factoryId, {d->m_side, position});
addActivationInfo(factoryId, {d->m_side, position});
}
settings->endGroup();
}

View File

@@ -80,7 +80,6 @@ public:
bool isShown() const;
void setShown(bool b);
static NavigationWidget *instance(Side side);
static QWidget *activateSubWidget(Utils::Id factoryId, Side fallbackSide);
int storedWidth();