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