summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_shelf_model.cc
diff options
context:
space:
mode:
authorerikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-13 21:40:33 +0000
committererikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-13 21:40:33 +0000
commitdf0d9880016f04f8ee26b81843fe8b57807f9e12 (patch)
treee24a2d065e4656f706c61bb898b8844849ea8f70 /chrome/browser/extensions/extension_shelf_model.cc
parent9cb52500ca39aff089dd21340cd2144bb628e309 (diff)
downloadchromium_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.cc54
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);