forked from qt-creator/qt-creator
NavigationWidget: Move statics outside of class
Change-Id: Ibbdb867b52eff75000fbdbc5e15694ab5b5f5646 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user