| Index: chrome/browser/bookmarks/bookmark_table_model.cc
|
| diff --git a/chrome/browser/bookmarks/bookmark_table_model.cc b/chrome/browser/bookmarks/bookmark_table_model.cc
|
| deleted file mode 100644
|
| index 0ac5416cc30eb9289b079b0ed8bc9d3c6145d247..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/bookmarks/bookmark_table_model.cc
|
| +++ /dev/null
|
| @@ -1,412 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/bookmarks/bookmark_table_model.h"
|
| -
|
| -#include <limits>
|
| -
|
| -#include "app/l10n_util.h"
|
| -#include "app/resource_bundle.h"
|
| -#include "app/table_model_observer.h"
|
| -#include "base/i18n/rtl.h"
|
| -#include "base/i18n/time_formatting.h"
|
| -#include "base/string_util.h"
|
| -#include "chrome/browser/bookmarks/bookmark_model.h"
|
| -#include "chrome/browser/bookmarks/bookmark_utils.h"
|
| -#include "chrome/browser/pref_service.h"
|
| -#include "chrome/browser/profile.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "grit/app_resources.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/net_util.h"
|
| -
|
| -namespace {
|
| -
|
| -// Number of bookmarks shown in recently bookmarked.
|
| -const int kRecentlyBookmarkedCount = 50;
|
| -
|
| -// VectorBackedBookmarkTableModel ----------------------------------------------
|
| -
|
| -class VectorBackedBookmarkTableModel : public BookmarkTableModel {
|
| - public:
|
| - explicit VectorBackedBookmarkTableModel(BookmarkModel* model)
|
| - : BookmarkTableModel(model) {
|
| - }
|
| -
|
| - virtual const BookmarkNode* GetNodeForRow(int row) {
|
| - return nodes_[row];
|
| - }
|
| -
|
| - virtual int RowCount() {
|
| - return static_cast<int>(nodes_.size());
|
| - }
|
| -
|
| - virtual void BookmarkNodeMoved(BookmarkModel* model,
|
| - const BookmarkNode* old_parent,
|
| - int old_index,
|
| - const BookmarkNode* new_parent,
|
| - int new_index) {
|
| - NotifyObserverOfChange(new_parent->GetChild(new_index));
|
| - }
|
| -
|
| - virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - NotifyObserverOfChange(node);
|
| - }
|
| -
|
| - virtual void BookmarkNodeChanged(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - NotifyObserverOfChange(node);
|
| - }
|
| -
|
| - protected:
|
| - void NotifyObserverOfChange(const BookmarkNode* node) {
|
| - if (!observer())
|
| - return;
|
| -
|
| - int index = IndexOfNode(node);
|
| - if (index != -1)
|
| - observer()->OnItemsChanged(index, 1);
|
| - }
|
| -
|
| - typedef std::vector<const BookmarkNode*> Nodes;
|
| - Nodes& nodes() { return nodes_; }
|
| -
|
| - private:
|
| - Nodes nodes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(VectorBackedBookmarkTableModel);
|
| -};
|
| -
|
| -// FolderBookmarkTableModel ----------------------------------------------------
|
| -
|
| -// FolderBookmarkTableModel is a TableModel implementation backed by the
|
| -// contents of a bookmark folder. FolderBookmarkTableModel caches the contents
|
| -// of the folder so that it can send out the correct events when a bookmark
|
| -// node is moved.
|
| -class FolderBookmarkTableModel : public VectorBackedBookmarkTableModel {
|
| - public:
|
| - FolderBookmarkTableModel(BookmarkModel* model, const BookmarkNode* root_node)
|
| - : VectorBackedBookmarkTableModel(model),
|
| - root_node_(root_node) {
|
| - PopulateNodesFromRoot();
|
| - }
|
| -
|
| - virtual void BookmarkNodeMoved(BookmarkModel* model,
|
| - const BookmarkNode* old_parent,
|
| - int old_index,
|
| - const BookmarkNode* new_parent,
|
| - int new_index) {
|
| - if (old_parent == root_node_) {
|
| - nodes().erase(nodes().begin() + old_index);
|
| - if (observer())
|
| - observer()->OnItemsRemoved(old_index, 1);
|
| - }
|
| - if (new_parent == root_node_) {
|
| - nodes().insert(nodes().begin() + new_index,
|
| - root_node_->GetChild(new_index));
|
| - if (observer())
|
| - observer()->OnItemsAdded(new_index, 1);
|
| - }
|
| - }
|
| -
|
| - virtual void BookmarkNodeAdded(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index) {
|
| - if (root_node_ == parent) {
|
| - nodes().insert(nodes().begin() + index, parent->GetChild(index));
|
| - if (observer())
|
| - observer()->OnItemsAdded(index, 1);
|
| - }
|
| - }
|
| -
|
| - virtual void BookmarkNodeRemoved(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index,
|
| - const BookmarkNode* node) {
|
| - if (root_node_->HasAncestor(node)) {
|
| - // We, or one of our ancestors was removed.
|
| - root_node_ = NULL;
|
| - nodes().clear();
|
| - if (observer())
|
| - observer()->OnModelChanged();
|
| - return;
|
| - }
|
| - if (root_node_ == parent) {
|
| - nodes().erase(nodes().begin() + index);
|
| - if (observer())
|
| - observer()->OnItemsRemoved(index, 1);
|
| - }
|
| - }
|
| -
|
| - virtual void BookmarkNodeChanged(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - NotifyChanged(node);
|
| - }
|
| -
|
| - virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - NotifyChanged(node);
|
| - }
|
| -
|
| - virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - if (node != root_node_)
|
| - return;
|
| -
|
| - nodes().clear();
|
| - PopulateNodesFromRoot();
|
| -
|
| - if (observer())
|
| - observer()->OnModelChanged();
|
| - }
|
| -
|
| - private:
|
| - void NotifyChanged(const BookmarkNode* node) {
|
| - if (node->GetParent() == root_node_ && observer())
|
| - observer()->OnItemsChanged(node->GetParent()->IndexOfChild(node), 1);
|
| - }
|
| -
|
| - void PopulateNodesFromRoot() {
|
| - for (int i = 0; i < root_node_->GetChildCount(); ++i)
|
| - nodes().push_back(root_node_->GetChild(i));
|
| - }
|
| -
|
| - // The node we're showing the children of. This is set to NULL if the node
|
| - // (or one of its ancestors) is removed from the model.
|
| - const BookmarkNode* root_node_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FolderBookmarkTableModel);
|
| -};
|
| -
|
| -// RecentlyBookmarkedTableModel ------------------------------------------------
|
| -
|
| -class RecentlyBookmarkedTableModel : public VectorBackedBookmarkTableModel {
|
| - public:
|
| - explicit RecentlyBookmarkedTableModel(BookmarkModel* model)
|
| - : VectorBackedBookmarkTableModel(model) {
|
| - UpdateRecentlyBookmarked();
|
| - }
|
| -
|
| - virtual void BookmarkNodeAdded(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index) {
|
| - if (parent->GetChild(index)->is_url())
|
| - UpdateRecentlyBookmarked();
|
| - }
|
| -
|
| - virtual void BookmarkNodeRemoved(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int old_index,
|
| - const BookmarkNode* old_node) {
|
| - if (old_node->is_url())
|
| - UpdateRecentlyBookmarked();
|
| - }
|
| -
|
| - private:
|
| - void UpdateRecentlyBookmarked() {
|
| - nodes().clear();
|
| - bookmark_utils::GetMostRecentlyAddedEntries(model(),
|
| - kRecentlyBookmarkedCount,
|
| - &nodes());
|
| - if (observer())
|
| - observer()->OnModelChanged();
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RecentlyBookmarkedTableModel);
|
| -};
|
| -
|
| -// BookmarkSearchTableModel ----------------------------------------------------
|
| -
|
| -class BookmarkSearchTableModel : public VectorBackedBookmarkTableModel {
|
| - public:
|
| - BookmarkSearchTableModel(BookmarkModel* model,
|
| - const std::wstring& search_text,
|
| - const std::wstring& languages)
|
| - : VectorBackedBookmarkTableModel(model),
|
| - search_text_(search_text),
|
| - languages_(languages) {
|
| - bookmark_utils::GetBookmarksContainingText(
|
| - model, search_text, std::numeric_limits<int>::max(),
|
| - languages, &nodes());
|
| - }
|
| -
|
| - virtual void BookmarkNodeAdded(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index) {
|
| - const BookmarkNode* node = parent->GetChild(index);
|
| - if (bookmark_utils::DoesBookmarkContainText(
|
| - node, search_text_, languages_)) {
|
| - nodes().push_back(node);
|
| - if (observer())
|
| - observer()->OnItemsAdded(static_cast<int>(nodes().size() - 1), 1);
|
| - }
|
| - }
|
| -
|
| - virtual void BookmarkNodeRemoved(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index,
|
| - const BookmarkNode* node) {
|
| - int internal_index = IndexOfNode(node);
|
| - if (internal_index == -1)
|
| - return;
|
| -
|
| - nodes().erase(nodes().begin() + static_cast<int>(internal_index));
|
| - if (observer())
|
| - observer()->OnItemsRemoved(internal_index, 1);
|
| - }
|
| -
|
| - private:
|
| - const std::wstring search_text_;
|
| - const std::wstring languages_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkSearchTableModel);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// BookmarkTableModel ----------------------------------------------------------
|
| -
|
| -// static
|
| -BookmarkTableModel* BookmarkTableModel::CreateRecentlyBookmarkedModel(
|
| - BookmarkModel* model) {
|
| - return new RecentlyBookmarkedTableModel(model);
|
| -}
|
| -
|
| -// static
|
| -BookmarkTableModel* BookmarkTableModel::CreateBookmarkTableModelForFolder(
|
| - BookmarkModel* model, const BookmarkNode* node) {
|
| - return new FolderBookmarkTableModel(model, node);
|
| -}
|
| -
|
| -// static
|
| -BookmarkTableModel* BookmarkTableModel::CreateSearchTableModel(
|
| - BookmarkModel* model,
|
| - const std::wstring& text,
|
| - const std::wstring& languages) {
|
| - return new BookmarkSearchTableModel(model, text, languages);
|
| -}
|
| -
|
| -BookmarkTableModel::BookmarkTableModel(BookmarkModel* model)
|
| - : model_(model),
|
| - observer_(NULL) {
|
| - model_->AddObserver(this);
|
| -}
|
| -
|
| -BookmarkTableModel::~BookmarkTableModel() {
|
| - if (model_)
|
| - model_->RemoveObserver(this);
|
| -}
|
| -
|
| -std::wstring BookmarkTableModel::GetText(int row, int column_id) {
|
| - const BookmarkNode* node = GetNodeForRow(row);
|
| - switch (column_id) {
|
| - case IDS_BOOKMARK_TABLE_TITLE: {
|
| - std::wstring title = node->GetTitle();
|
| - // Adjust the text as well, for example, put LRE-PDF pair around LTR text
|
| - // in RTL enviroment, so that the ending punctuation in the text will not
|
| - // be rendered incorrectly (such as rendered as the leftmost character,
|
| - // and/or rendered as a mirrored punctuation character).
|
| - //
|
| - // TODO(xji): Consider adding a special case if the title text is a URL,
|
| - // since those should always be displayed LTR. Please refer to
|
| - // http://crbug.com/6726 for more information.
|
| - base::i18n::AdjustStringForLocaleDirection(title, &title);
|
| - return title;
|
| - }
|
| -
|
| - case IDS_BOOKMARK_TABLE_URL: {
|
| - if (!node->is_url())
|
| - return std::wstring();
|
| - std::wstring languages = model_ && model_->profile()
|
| - ? model_->profile()->GetPrefs()->GetString(prefs::kAcceptLanguages)
|
| - : std::wstring();
|
| - std::wstring url_text = net::FormatUrl(node->GetURL(), languages,
|
| - net::kFormatUrlOmitAll, UnescapeRule::SPACES, NULL, NULL, NULL);
|
| - if (base::i18n::IsRTL())
|
| - base::i18n::WrapStringWithLTRFormatting(&url_text);
|
| - return url_text;
|
| - }
|
| -
|
| - case IDS_BOOKMARK_TABLE_PATH: {
|
| - std::wstring path;
|
| - BuildPath(node->GetParent(), &path);
|
| - // Force path to have LTR directionality. The whole path (but not every
|
| - // single path component) is marked with LRE-PDF. For example,
|
| - // ALEPH/BET/GIMEL (using uppercase English for Hebrew) is supposed to
|
| - // appear (visually) as LEMIG/TEB/HPELA; foo/C/B/A.doc refers to file
|
| - // C.doc in directory B in directory A in directory foo, not to file
|
| - // A.doc in directory B in directory C in directory foo. The reason to
|
| - // mark the whole path, but not every single path component, as LTR is
|
| - // because paths need to get written in text documents, and that is how
|
| - // they will appear there. Being a saint and doing the tedious formatting
|
| - // to every single path component to get it to come out in the logical
|
| - // order will accomplish nothing but confuse people, since they will now
|
| - // see both formats being used, and will never know what anything means.
|
| - // Furthermore, doing the "logical" formatting with characters like LRM,
|
| - // LRE, and PDF to every single path component means that when someone
|
| - // copy/pastes your path, it will still contain those characters, and
|
| - // trying to access the file will fail because of them. Windows Explorer,
|
| - // Firefox, IE, Nautilus, gedit choose to format only the whole path as
|
| - // LTR too. The point here is to display the path the same way as it's
|
| - // displayed by other software.
|
| - if (base::i18n::IsRTL())
|
| - base::i18n::WrapStringWithLTRFormatting(&path);
|
| - return path;
|
| - }
|
| - }
|
| - NOTREACHED();
|
| - return std::wstring();
|
| -}
|
| -
|
| -SkBitmap BookmarkTableModel::GetIcon(int row) {
|
| - static SkBitmap* folder_icon = ResourceBundle::GetSharedInstance().
|
| - GetBitmapNamed(IDR_BOOKMARK_BAR_FOLDER);
|
| - static SkBitmap* default_icon = ResourceBundle::GetSharedInstance().
|
| - GetBitmapNamed(IDR_DEFAULT_FAVICON);
|
| -
|
| - const BookmarkNode* node = GetNodeForRow(row);
|
| - if (node->is_folder())
|
| - return *folder_icon;
|
| -
|
| - if (model_->GetFavIcon(node).empty())
|
| - return *default_icon;
|
| -
|
| - return model_->GetFavIcon(node);
|
| -}
|
| -
|
| -void BookmarkTableModel::BookmarkModelBeingDeleted(BookmarkModel* model) {
|
| - model_->RemoveObserver(this);
|
| - model_ = NULL;
|
| -}
|
| -
|
| -int BookmarkTableModel::IndexOfNode(const BookmarkNode* node) {
|
| - for (int i = RowCount() - 1; i >= 0; --i) {
|
| - if (GetNodeForRow(i) == node)
|
| - return i;
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| -void BookmarkTableModel::BuildPath(const BookmarkNode* node,
|
| - std::wstring* path) {
|
| - if (!node) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - if (node == model()->GetBookmarkBarNode()) {
|
| - *path = l10n_util::GetString(IDS_BOOKMARK_TABLE_BOOKMARK_BAR_PATH);
|
| - return;
|
| - }
|
| - if (node == model()->other_node()) {
|
| - *path = l10n_util::GetString(IDS_BOOKMARK_TABLE_OTHER_BOOKMARKS_PATH);
|
| - return;
|
| - }
|
| - BuildPath(node->GetParent(), path);
|
| - path->append(l10n_util::GetString(IDS_BOOKMARK_TABLE_PATH_SEPARATOR));
|
| - path->append(node->GetTitle());
|
| -}
|
|
|