diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-13 21:40:33 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-13 21:40:33 +0000 |
commit | df0d9880016f04f8ee26b81843fe8b57807f9e12 (patch) | |
tree | e24a2d065e4656f706c61bb898b8844849ea8f70 /chrome/browser/extensions/extension_shelf_model.cc | |
parent | 9cb52500ca39aff089dd21340cd2144bb628e309 (diff) | |
download | chromium_src-df0d9880016f04f8ee26b81843fe8b57807f9e12.zip chromium_src-df0d9880016f04f8ee26b81843fe8b57807f9e12.tar.gz chromium_src-df0d9880016f04f8ee26b81843fe8b57807f9e12.tar.bz2 |
Refactoring handle and dragging a bit in preparation for moles. The primary change for this is to get rid of the concept of a "current" toolstrip and the idea that there's only one handle around. Instead, each toolstrip has its own handle and each can be displaying it independently. There's some initial work for moles in there, but it's disabled since this will require some other plumbing to hook up properly.
Review URL: http://codereview.chromium.org/155192
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20544 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_shelf_model.cc')
-rw-r--r-- | chrome/browser/extensions/extension_shelf_model.cc | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/chrome/browser/extensions/extension_shelf_model.cc b/chrome/browser/extensions/extension_shelf_model.cc index 69bcfad..05f848a 100644 --- a/chrome/browser/extensions/extension_shelf_model.cc +++ b/chrome/browser/extensions/extension_shelf_model.cc @@ -4,6 +4,7 @@ #include "chrome/browser/extensions/extension_shelf_model.h" +#include "base/stl_util-inl.h" #include "chrome/browser/browser.h" #include "chrome/browser/profile.h" #include "chrome/browser/extensions/extension_host.h" @@ -12,8 +13,6 @@ #include "chrome/common/extensions/extension.h" #include "chrome/common/notification_service.h" -///////////////////////////// - ExtensionShelfModel::ExtensionShelfModel(Browser* browser) : browser_(browser), ready_(false) { // Watch extensions loaded and unloaded notifications. @@ -40,12 +39,11 @@ ExtensionShelfModel::ExtensionShelfModel(Browser* browser) } ExtensionShelfModel::~ExtensionShelfModel() { - int count = toolstrips_.size(); - while (count) { - count--; - RemoveToolstripAt(count); - } - DCHECK(observers_.size() == 0); + while (observers_.size()) + observers_.RemoveObserver(observers_.GetElementAt(0)); + + STLDeleteContainerPairFirstPointers(toolstrips_.begin(), toolstrips_.end()); + toolstrips_.clear(); } void ExtensionShelfModel::AddObserver(ExtensionShelfModelObserver* observer) { @@ -58,12 +56,14 @@ void ExtensionShelfModel::RemoveObserver( } void ExtensionShelfModel::AppendToolstrip(ExtensionHost* toolstrip) { - InsertToolstripAt(count(), toolstrip); + InsertToolstripAt(count(), toolstrip, NULL); } void ExtensionShelfModel::InsertToolstripAt(int index, - ExtensionHost* toolstrip) { - toolstrips_.insert(toolstrips_.begin() + index, toolstrip); + ExtensionHost* toolstrip, + void* data) { + toolstrips_.insert(toolstrips_.begin() + index, + ToolstripItem(toolstrip, data)); if (ready_) { FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, ToolstripInsertedAt(toolstrip, index)); @@ -79,29 +79,43 @@ void ExtensionShelfModel::RemoveToolstripAt(int index) { } void ExtensionShelfModel::MoveToolstripAt(int index, int to_index) { + DCHECK(index >= 0); + DCHECK(to_index >= 0); if (index == to_index) return; - ExtensionHost* toolstrip = toolstrips_.at(index); + ToolstripItem toolstrip = toolstrips_[index]; toolstrips_.erase(toolstrips_.begin() + index); toolstrips_.insert(toolstrips_.begin() + to_index, toolstrip); FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, - ToolstripMoved(toolstrip, index, to_index)); + ToolstripMoved(toolstrip.first, index, to_index)); UpdatePrefs(); } int ExtensionShelfModel::IndexOfToolstrip(ExtensionHost* toolstrip) { - ExtensionToolstrips::iterator i = - std::find(toolstrips_.begin(), toolstrips_.end(), toolstrip); - if (i == toolstrips_.end()) - return -1; - return i - toolstrips_.begin(); + ExtensionToolstrips::iterator i; + for (i = toolstrips_.begin(); i != toolstrips_.end(); ++i) { + if (i->first == toolstrip) + return i - toolstrips_.begin(); + } + return -1; } ExtensionHost* ExtensionShelfModel::ToolstripAt(int index) { - return toolstrips_[index]; + DCHECK(index >= 0); + return toolstrips_[index].first; +} + +void* ExtensionShelfModel::ToolstripDataAt(int index) { + DCHECK(index >= 0); + return toolstrips_[index].second; +} + +void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) { + DCHECK(index >= 0); + toolstrips_[index].second = data; } void ExtensionShelfModel::Observe(NotificationType type, @@ -201,7 +215,7 @@ void ExtensionShelfModel::SortToolstrips() { GURL& url = urls[i]; for (ExtensionToolstrips::iterator toolstrip = copy.begin(); toolstrip != copy.end(); ++toolstrip) { - if (url == (*toolstrip)->GetURL()) { + if (url == (*toolstrip).first->GetURL()) { // Note that it's technically possible for the same URL to appear in // multiple toolstrips, so we don't do any testing for uniqueness. toolstrips_.push_back(*toolstrip); |