diff options
author | Lasse Holmstedt <lasse.holmstedt@nokia.com> | 2010-04-29 11:59:42 +0200 |
---|---|---|
committer | Lasse Holmstedt <lasse.holmstedt@nokia.com> | 2010-04-29 13:50:21 +0200 |
commit | 7ba6fc883400acd99651c9a9722a9575e2dc8e4b (patch) | |
tree | b380726824ae3b4fae949ba0fc217eb1c49194f8 /src/plugins/coreplugin/sidebar.cpp | |
parent | 3fd04c233c9a535e4a3e334047c1c5379789298c (diff) | |
download | qt-creator-7ba6fc883400acd99651c9a9722a9575e2dc8e4b.tar.gz |
Fixed localization issues with SideBar
When changing the language, the sidebar items would break because
their localized window titles were used for storing the settings. Now,
id's are used.
Reviewed-by: con
Diffstat (limited to 'src/plugins/coreplugin/sidebar.cpp')
-rw-r--r-- | src/plugins/coreplugin/sidebar.cpp | 159 |
1 files changed, 98 insertions, 61 deletions
diff --git a/src/plugins/coreplugin/sidebar.cpp b/src/plugins/coreplugin/sidebar.cpp index 27e9a81f8e..4bec8a9dc8 100644 --- a/src/plugins/coreplugin/sidebar.cpp +++ b/src/plugins/coreplugin/sidebar.cpp @@ -33,7 +33,6 @@ #include "actionmanager/actionmanager.h" #include "actionmanager/command.h" -#include <QtCore/QDebug> #include <QtCore/QEvent> #include <QtCore/QSettings> #include <QtGui/QLayout> @@ -55,16 +54,16 @@ SideBar::SideBar(QList<SideBarItem*> itemList, { setOrientation(Qt::Vertical); foreach (SideBarItem *item, itemList) { - const QString title = item->widget()->windowTitle(); - m_itemMap.insert(title, item); + m_itemMap.insert(item->id(), item); + m_availableItemIds.append(item->id()); + m_availableItemTitles.append(item->title()); } + foreach (SideBarItem *item, defaultVisible) { if (!itemList.contains(item)) continue; - m_defaultVisible.append(item->widget()->windowTitle()); + m_defaultVisible.append(item->id()); } - - m_availableItems = m_itemMap.keys(); } SideBar::~SideBar() @@ -77,14 +76,30 @@ SideBar::~SideBar() } } -QStringList SideBar::availableItems() const +QString SideBar::idForTitle(const QString &title) const +{ + QMapIterator<QString, QWeakPointer<SideBarItem> > iter(m_itemMap); + while(iter.hasNext()) { + iter.next(); + if (iter.value().data()->title() == title) + return iter.key(); + } + return QString(); +} + +QStringList SideBar::availableItemIds() const +{ + return m_availableItemIds; +} + +QStringList SideBar::availableItemTitles() const { - return m_availableItems; + return m_availableItemTitles; } -QStringList SideBar::unavailableItems() const +QStringList SideBar::unavailableItemIds() const { - return m_unavailableItems; + return m_unavailableItemIds; } bool SideBar::closeWhenEmpty() const @@ -101,9 +116,10 @@ void SideBar::makeItemAvailable(SideBarItem *item) QMap<QString, QWeakPointer<SideBarItem> >::const_iterator it = m_itemMap.constBegin(); while (it != m_itemMap.constEnd()) { if (it.value().data() == item) { - m_availableItems.append(it.key()); - m_unavailableItems.removeAll(it.key()); - qSort(m_availableItems); + m_availableItemIds.append(it.key()); + m_availableItemTitles.append(it.value().data()->title()); + m_unavailableItemIds.removeAll(it.key()); + qSort(m_availableItemTitles); emit availableItemsChanged(); //updateWidgets(); break; @@ -114,40 +130,44 @@ void SideBar::makeItemAvailable(SideBarItem *item) // sets a list of externally used, unavailable items. For example, // another sidebar could set -void SideBar::setUnavailableItems(const QStringList &itemTitles) +void SideBar::setUnavailableItemIds(const QStringList &itemIds) { // re-enable previous items - foreach(const QString &title, m_unavailableItems) - m_availableItems.append(title); + foreach(const QString &id, m_unavailableItemIds) { + m_availableItemIds.append(id); + m_availableItemTitles.append(m_itemMap.value(id).data()->title()); + } - m_unavailableItems.clear(); + m_unavailableItemIds.clear(); - foreach (const QString &title, itemTitles) { - if (!m_unavailableItems.contains(title)) - m_unavailableItems.append(title); - m_availableItems.removeAll(title); + foreach (const QString &id, itemIds) { + if (!m_unavailableItemIds.contains(id)) + m_unavailableItemIds.append(id); + m_availableItemIds.removeAll(id); + m_availableItemTitles.removeAll(m_itemMap.value(id).data()->title()); } - qSort(m_availableItems); + qSort(m_availableItemTitles); updateWidgets(); } -SideBarItem *SideBar::item(const QString &title) +SideBarItem *SideBar::item(const QString &id) { - if (m_itemMap.contains(title)) { - m_availableItems.removeAll(title); + if (m_itemMap.contains(id)) { + m_availableItemIds.removeAll(id); + m_availableItemTitles.removeAll(m_itemMap.value(id).data()->title()); - if (!m_unavailableItems.contains(title)) - m_unavailableItems.append(title); + if (!m_unavailableItemIds.contains(id)) + m_unavailableItemIds.append(id); emit availableItemsChanged(); - return m_itemMap.value(title).data(); + return m_itemMap.value(id).data(); } return 0; } -SideBarWidget *SideBar::insertSideBarWidget(int position, const QString &title) +SideBarWidget *SideBar::insertSideBarWidget(int position, const QString &id) { - SideBarWidget *item = new SideBarWidget(this, title); + SideBarWidget *item = new SideBarWidget(this, id); connect(item, SIGNAL(splitMe()), this, SLOT(splitSubWidget())); connect(item, SIGNAL(closeMe()), this, SLOT(closeSubWidget())); connect(item, SIGNAL(currentWidgetChanged()), this, SLOT(updateWidgets())); @@ -199,7 +219,8 @@ void SideBar::saveSettings(QSettings *settings, const QString &name) QStringList views; for (int i = 0; i < m_widgets.count(); ++i) - views.append(m_widgets.at(i)->currentItemTitle()); + views.append(m_widgets.at(i)->currentItemId()); + settings->setValue(prefix + "Views", views); settings->setValue(prefix + "Visible", true);//isVisible()); settings->setValue(prefix + "VerticalPosition", saveState()); @@ -221,14 +242,14 @@ void SideBar::readSettings(QSettings *settings, const QString &name) if (settings->contains(prefix + "Views")) { QStringList views = settings->value(prefix + "Views").toStringList(); if (views.count()) { - foreach (const QString &title, views) - insertSideBarWidget(m_widgets.count(), title); + foreach (const QString &id, views) + insertSideBarWidget(m_widgets.count(), id); } else { insertSideBarWidget(0); } } else { - foreach (const QString &title, m_defaultVisible) - insertSideBarWidget(m_widgets.count(), title); + foreach (const QString &id, m_defaultVisible) + insertSideBarWidget(m_widgets.count(), id); } if (settings->contains(prefix + "Visible")) @@ -247,27 +268,27 @@ void SideBar::readSettings(QSettings *settings, const QString &name) void SideBar::activateItem(SideBarItem *item) { QMap<QString, QWeakPointer<SideBarItem> >::const_iterator it = m_itemMap.constBegin(); - QString title; + QString id; while (it != m_itemMap.constEnd()) { if (it.value().data() == item) { - title = it.key(); + id = it.key(); break; } ++it; } - if (title.isEmpty()) + if (id.isEmpty()) return; for (int i = 0; i < m_widgets.count(); ++i) { - if (m_widgets.at(i)->currentItemTitle() == title) { + if (m_widgets.at(i)->currentItemId() == id) { item->widget()->setFocus(); return; } } SideBarWidget *widget = m_widgets.first(); - widget->setCurrentItem(title); + widget->setCurrentItem(id); updateWidgets(); item->widget()->setFocus(); } @@ -282,7 +303,7 @@ QMap<QString, Core::Command*> SideBar::shortcutMap() const return m_shortcutMap; } -SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &title) +SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &id) : m_currentItem(0) , m_sideBar(sideBar) { @@ -316,13 +337,16 @@ SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &title) setLayout(lay); lay->addWidget(m_toolbar); - const QStringList lst = m_sideBar->availableItems(); - QString t = title; - if (lst.count()) { - m_comboBox->addItems(lst); + QStringList titleList = m_sideBar->availableItemTitles(); + qSort(titleList); + QString t = id; + if (titleList.count()) { + foreach(const QString &itemTitle, titleList) + m_comboBox->addItem(itemTitle, m_sideBar->idForTitle(itemTitle)); + m_comboBox->setCurrentIndex(0); if (t.isEmpty()) - t = m_comboBox->currentText(); + t = m_comboBox->itemData(0, ComboBox::IdRole).toString(); } setCurrentItem(t); @@ -339,18 +363,25 @@ QString SideBarWidget::currentItemTitle() const return m_comboBox->currentText(); } -void SideBarWidget::setCurrentItem(const QString &title) +QString SideBarWidget::currentItemId() const +{ + return m_currentItem->id(); +} + +void SideBarWidget::setCurrentItem(const QString &id) { - if (!title.isEmpty()) { - int idx = m_comboBox->findText(title); + if (!id.isEmpty()) { + int idx = m_comboBox->findData(QVariant(id), ComboBox::IdRole); + if (idx < 0) idx = 0; + bool blocked = m_comboBox->blockSignals(true); m_comboBox->setCurrentIndex(idx); m_comboBox->blockSignals(blocked); } - SideBarItem *item = m_sideBar->item(title); + SideBarItem *item = m_sideBar->item(id); if (!item) return; removeCurrentItem(); @@ -366,18 +397,23 @@ void SideBarWidget::setCurrentItem(const QString &title) void SideBarWidget::updateAvailableItems() { bool blocked = m_comboBox->blockSignals(true); - QString current = m_comboBox->currentText(); + QString currentTitle = m_comboBox->currentText(); m_comboBox->clear(); - QStringList itms = m_sideBar->availableItems(); - if (!current.isEmpty() && !itms.contains(current)) - itms.append(current); - qSort(itms); - m_comboBox->addItems(itms); - int idx = m_comboBox->findText(current); + QStringList titleList = m_sideBar->availableItemTitles(); + if (!currentTitle.isEmpty() && !titleList.contains(currentTitle)) + titleList.append(currentTitle); + qSort(titleList); + + foreach(const QString &itemTitle, titleList) + m_comboBox->addItem(itemTitle, m_sideBar->idForTitle(itemTitle)); + + int idx = m_comboBox->findText(currentTitle); + if (idx < 0) idx = 0; + m_comboBox->setCurrentIndex(idx); - m_splitButton->setEnabled(itms.count() > 1); + m_splitButton->setEnabled(titleList.count() > 1); m_comboBox->blockSignals(blocked); } @@ -400,14 +436,15 @@ void SideBarWidget::removeCurrentItem() void SideBarWidget::setCurrentIndex(int) { - setCurrentItem(m_comboBox->currentText()); + setCurrentItem(m_comboBox->itemData(m_comboBox->currentIndex(), + ComboBox::IdRole).toString()); emit currentWidgetChanged(); } -Core::Command *SideBarWidget::command(const QString &title) const +Core::Command *SideBarWidget::command(const QString &id) const { const QMap<QString, Core::Command*> shortcutMap = m_sideBar->shortcutMap(); - QMap<QString, Core::Command*>::const_iterator r = shortcutMap.find(title); + QMap<QString, Core::Command*>::const_iterator r = shortcutMap.find(id); if (r != shortcutMap.end()) return r.value(); return 0; |