Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1285)

Unified Diff: chrome/browser/views/bookmark_table_view.cc

Issue 1730015: Windows/Views: delete native bookmark manager code. (Closed)
Patch Set: Patch with fixed file perms. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/bookmark_table_view.h ('k') | chrome/browser/views/dialog_stubs_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/bookmark_table_view.cc
diff --git a/chrome/browser/views/bookmark_table_view.cc b/chrome/browser/views/bookmark_table_view.cc
deleted file mode 100644
index 7a48cefe870b6a9270173953fc7ea5c14680d681..0000000000000000000000000000000000000000
--- a/chrome/browser/views/bookmark_table_view.cc
+++ /dev/null
@@ -1,404 +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/views/bookmark_table_view.h"
-
-#include <commctrl.h>
-
-#include "app/drag_drop_types.h"
-#include "app/l10n_util.h"
-#include "app/os_exchange_data.h"
-#include "app/os_exchange_data_provider_win.h"
-#include "app/resource_bundle.h"
-#include "base/base_drag_source.h"
-#include "chrome/browser/bookmarks/bookmark_utils.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_table_model.h"
-#include "chrome/browser/pref_service.h"
-#include "chrome/browser/profile.h"
-#include "chrome/common/pref_names.h"
-#include "gfx/canvas.h"
-#include "grit/generated_resources.h"
-#include "views/controls/table/table_view_observer.h"
-#include "views/view_constants.h"
-
-namespace {
-
-// Height of the drop indicator used when dropping between rows.
-const int kDropHighlightHeight = 2;
-
-int GetWidthOfColumn(const std::vector<TableColumn>& columns,
- const std::vector<int> widths,
- int column_id) {
- for (size_t i = 0; i < columns.size(); ++i) {
- if (columns[i].id == column_id)
- return widths[i];
- }
- NOTREACHED();
- return -1;
-}
-
-} // namespace
-
-void BookmarkTableView::DropInfo::Scrolled() {
- view_->UpdateDropInfo();
-}
-
-BookmarkTableView::BookmarkTableView(Profile* profile,
- BookmarkTableModel* model)
- : views::TableView(model, std::vector<TableColumn>(),
- views::ICON_AND_TEXT, false, true, true),
- profile_(profile),
- show_path_column_(false) {
- UpdateColumns();
-}
-
-bool BookmarkTableView::CanDrop(const OSExchangeData& data) {
- if (!parent_node_ || !profile_->GetBookmarkModel()->IsLoaded())
- return false;
-
- BookmarkDragData drag_data;
- if (!drag_data.Read(data))
- return false;
-
- // Don't allow the user to drop an ancestor of the parent node onto the
- // parent node. This would create a cycle, which is definitely a no-no.
- std::vector<const BookmarkNode*> nodes = drag_data.GetNodes(profile_);
- for (size_t i = 0; i < nodes.size(); ++i) {
- if (parent_node_->HasAncestor(nodes[i]))
- return false;
- }
-
- drop_info_.reset(new DropInfo(this));
- drop_info_->SetData(drag_data);
- return true;
-}
-
-void BookmarkTableView::OnDragEntered(const views::DropTargetEvent& event) {
-}
-
-int BookmarkTableView::OnDragUpdated(const views::DropTargetEvent& event) {
- if (!parent_node_ || !drop_info_.get()) {
- drop_info_.reset(NULL);
- return false;
- }
-
- drop_info_->Update(event);
- return UpdateDropInfo();
-}
-
-void BookmarkTableView::OnDragExited() {
- SetDropPosition(DropPosition());
- drop_info_.reset();
-}
-
-int BookmarkTableView::OnPerformDrop(const views::DropTargetEvent& event) {
- OnPerformDropImpl();
- int drop_operation = drop_info_->drop_operation();
- SetDropPosition(DropPosition());
- drop_info_.reset();
- return drop_operation;
-}
-
-BookmarkTableModel* BookmarkTableView::bookmark_table_model() const {
- return static_cast<BookmarkTableModel*>(model());
-}
-
-void BookmarkTableView::SaveColumnConfiguration() {
- PrefService* prefs = profile_->GetPrefs();
- if (!prefs)
- return;
-
- if (show_path_column_) {
- prefs->SetInteger(prefs::kBookmarkTableNameWidth2,
- GetColumnWidth(IDS_BOOKMARK_TABLE_TITLE));
- prefs->SetInteger(prefs::kBookmarkTableURLWidth2,
- GetColumnWidth(IDS_BOOKMARK_TABLE_URL));
- prefs->SetInteger(prefs::kBookmarkTablePathWidth,
- GetColumnWidth(IDS_BOOKMARK_TABLE_PATH));
- } else {
- prefs->SetInteger(prefs::kBookmarkTableNameWidth1,
- GetColumnWidth(IDS_BOOKMARK_TABLE_TITLE));
- prefs->SetInteger(prefs::kBookmarkTableURLWidth1,
- GetColumnWidth(IDS_BOOKMARK_TABLE_URL));
- }
-}
-
-void BookmarkTableView::SetShowPathColumn(bool show_path_column) {
- if (show_path_column == show_path_column_)
- return;
-
- SaveColumnConfiguration();
-
- show_path_column_ = show_path_column;
- UpdateColumns();
-}
-
-void BookmarkTableView::PostPaint() {
- PaintAltText();
-
- if (!drop_info_.get() || drop_info_->position().index == -1 ||
- drop_info_->position().on) {
- return;
- }
-
- RECT bounds = GetDropBetweenHighlightRect(drop_info_->position().index);
- HDC dc = GetDC(GetNativeControlHWND());
- HBRUSH brush = CreateSolidBrush(GetSysColor(COLOR_WINDOWTEXT));
- FillRect(dc, &bounds, brush);
- DeleteObject(brush);
- ReleaseDC(GetNativeControlHWND(), dc);
-}
-
-LRESULT BookmarkTableView::OnNotify(int w_param, LPNMHDR l_param) {
- switch (l_param->code) {
- case LVN_BEGINDRAG:
- BeginDrag();
- return 0; // Return value doesn't matter for this message.
- }
-
- return TableView::OnNotify(w_param, l_param);
-}
-
-int BookmarkTableView::UpdateDropInfo() {
- DropPosition position = CalculateDropPosition(drop_info_->last_y());
-
- drop_info_->set_drop_operation(CalculateDropOperation(position));
-
- if (drop_info_->drop_operation() == DragDropTypes::DRAG_NONE)
- position = DropPosition();
-
- SetDropPosition(position);
-
- return drop_info_->drop_operation();
-}
-
-void BookmarkTableView::BeginDrag() {
- std::vector<const BookmarkNode*> nodes_to_drag;
- for (TableView::iterator i = SelectionBegin(); i != SelectionEnd(); ++i)
- nodes_to_drag.push_back(bookmark_table_model()->GetNodeForRow(*i));
- if (nodes_to_drag.empty())
- return; // Nothing to drag.
-
- // Reverse the nodes so that they are put on the clipboard in visual order.
- // We do this as SelectionBegin starts at the end of the visual order.
- std::reverse(nodes_to_drag.begin(), nodes_to_drag.end());
-
- OSExchangeData data;
- BookmarkDragData(nodes_to_drag).Write(profile_, &data);
- scoped_refptr<BaseDragSource> drag_source(new BaseDragSource);
- DWORD effects;
- DoDragDrop(OSExchangeDataProviderWin::GetIDataObject(data), drag_source,
- DROPEFFECT_LINK | DROPEFFECT_COPY | DROPEFFECT_MOVE, &effects);
-}
-
-int BookmarkTableView::CalculateDropOperation(const DropPosition& position) {
- if (drop_info_->data().IsFromProfile(profile_)) {
- // Data from the same profile. Prefer move, but do copy if the user wants
- // that.
- if (drop_info_->is_control_down())
- return DragDropTypes::DRAG_COPY;
-
- int real_drop_index;
- const BookmarkNode* drop_parent = GetDropParentAndIndex(position,
- &real_drop_index);
- if (!bookmark_utils::IsValidDropLocation(
- profile_, drop_info_->data(), drop_parent, real_drop_index)) {
- return DragDropTypes::DRAG_NONE;
- }
- return DragDropTypes::DRAG_MOVE;
- }
- // We're going to copy, but return an operation compatible with the source
- // operations so that the user can drop.
- return bookmark_utils::PreferredDropOperation(
- drop_info_->source_operations(),
- DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_LINK);
-}
-
-void BookmarkTableView::OnPerformDropImpl() {
- int drop_index;
- const BookmarkNode* drop_parent = GetDropParentAndIndex(
- drop_info_->position(), &drop_index);
- BookmarkModel* model = profile_->GetBookmarkModel();
- int min_selection;
- int max_selection;
- // If the data is not from this profile we return an operation compatible
- // with the source. As such, we need to need to check the data here too.
- if (!drop_info_->data().IsFromProfile(profile_) ||
- drop_info_->drop_operation() == DragDropTypes::DRAG_COPY) {
- bookmark_utils::CloneDragData(model, drop_info_->data().elements,
- drop_parent, drop_index);
- min_selection = drop_index;
- max_selection = drop_index +
- static_cast<int>(drop_info_->data().elements.size());
- } else {
- // else, move.
- std::vector<const BookmarkNode*> nodes =
- drop_info_->data().GetNodes(profile_);
- if (nodes.empty())
- return;
-
- for (size_t i = 0; i < nodes.size(); ++i) {
- model->Move(nodes[i], drop_parent, drop_index);
- // Reset the drop_index, just in case the index didn't really change.
- drop_index = drop_parent->IndexOfChild(nodes[i]) + 1;
- }
- min_selection = drop_parent->IndexOfChild(nodes[0]);
- max_selection = min_selection + static_cast<int>(nodes.size());
- }
- if (drop_info_->position().on) {
- // The user dropped on a folder, select it.
- int index = parent_node_->IndexOfChild(drop_parent);
- if (index != -1)
- Select(index);
- } else if (min_selection < RowCount() && max_selection <= RowCount()) {
- // Select the moved/copied rows.
- Select(min_selection);
- if (min_selection + 1 < max_selection) {
- // SetSelectedState doesn't send notification, so we manually do it.
- for (int i = min_selection + 1; i < max_selection; ++i)
- SetSelectedState(i, true);
- if (observer())
- observer()->OnSelectionChanged();
- }
- }
-}
-
-void BookmarkTableView::SetDropPosition(const DropPosition& position) {
- if (drop_info_->position().equals(position))
- return;
-
- UpdateDropIndicator(drop_info_->position(), false);
-
- drop_info_->set_position(position);
-
- UpdateDropIndicator(drop_info_->position(), true);
-}
-
-void BookmarkTableView::UpdateDropIndicator(const DropPosition& position,
- bool turn_on) {
- if (position.index == -1)
- return;
-
- if (position.on) {
- ListView_SetItemState(GetNativeControlHWND(), position.index,
- turn_on ? LVIS_DROPHILITED : 0, LVIS_DROPHILITED);
- } else {
- RECT bounds = GetDropBetweenHighlightRect(position.index);
- InvalidateRect(GetNativeControlHWND(), &bounds, FALSE);
- }
-}
-
-BookmarkTableView::DropPosition
- BookmarkTableView::CalculateDropPosition(int y) {
- HWND hwnd = GetNativeControlHWND();
- int row_count = RowCount();
- int top_index = ListView_GetTopIndex(hwnd);
- if (row_count == 0 || top_index < 0)
- return DropPosition(0, false);
-
- for (int i = top_index; i < row_count; ++i) {
- RECT bounds;
- ListView_GetItemRect(hwnd, i, &bounds, LVIR_BOUNDS);
- if (y < bounds.top)
- return DropPosition(i, false);
- if (y < bounds.bottom) {
- if (bookmark_table_model()->GetNodeForRow(i)->is_folder()) {
- if (y < bounds.top + views::kDropBetweenPixels)
- return DropPosition(i, false);
- if (y >= bounds.bottom - views::kDropBetweenPixels)
- return DropPosition(i + 1, false);
- return DropPosition(i, true);
- }
- if (y < (bounds.bottom - bounds.top) / 2 + bounds.top)
- return DropPosition(i, false);
- return DropPosition(i + 1, false);
- }
- }
- return DropPosition(row_count, false);
-}
-
-const BookmarkNode* BookmarkTableView::GetDropParentAndIndex(
- const DropPosition& position,
- int* index) {
- if (position.on) {
- const BookmarkNode* parent = parent_node_->GetChild(position.index);
- *index = parent->GetChildCount();
- return parent;
- }
- *index = position.index;
- return parent_node_;
-}
-
-RECT BookmarkTableView::GetDropBetweenHighlightRect(int index) {
- RECT bounds = { 0 };
- if (RowCount() == 0) {
- bounds.top = content_offset();
- bounds.left = 0;
- bounds.right = width();
- } else if (index >= RowCount()) {
- ListView_GetItemRect(GetNativeControlHWND(), index - 1, &bounds,
- LVIR_BOUNDS);
- bounds.top = bounds.bottom - kDropHighlightHeight / 2;
- } else {
- ListView_GetItemRect(GetNativeControlHWND(), index, &bounds, LVIR_BOUNDS);
- bounds.top -= kDropHighlightHeight / 2;
- }
- bounds.bottom = bounds.top + kDropHighlightHeight;
- return bounds;
-}
-
-void BookmarkTableView::UpdateColumns() {
- PrefService* prefs = profile_->GetPrefs();
- TableColumn name_column =
- TableColumn(IDS_BOOKMARK_TABLE_TITLE, TableColumn::LEFT, -1);
- TableColumn url_column =
- TableColumn(IDS_BOOKMARK_TABLE_URL, TableColumn::LEFT, -1);
- TableColumn path_column =
- TableColumn(IDS_BOOKMARK_TABLE_PATH, TableColumn::LEFT, -1);
-
- std::vector<TableColumn> columns;
- if (show_path_column_) {
- int name_width = -1;
- int url_width = -1;
- int path_width = -1;
- if (prefs) {
- name_width = prefs->GetInteger(prefs::kBookmarkTableNameWidth2);
- url_width = prefs->GetInteger(prefs::kBookmarkTableURLWidth2);
- path_width = prefs->GetInteger(prefs::kBookmarkTablePathWidth);
- }
- if (name_width != -1 && url_width != -1 && path_width != -1) {
- name_column.width = name_width;
- url_column.width = url_width;
- path_column.width = path_width;
- } else {
- name_column.percent = .5;
- url_column.percent = .25;
- path_column.percent= .25;
- }
- columns.push_back(name_column);
- columns.push_back(url_column);
- columns.push_back(path_column);
- } else {
- int name_width = -1;
- int url_width = -1;
- if (prefs) {
- name_width = prefs->GetInteger(prefs::kBookmarkTableNameWidth1);
- url_width = prefs->GetInteger(prefs::kBookmarkTableURLWidth1);
- }
- if (name_width != -1 && url_width != -1) {
- name_column.width = name_width;
- url_column.width = url_width;
- } else {
- name_column.percent = .5;
- url_column.percent = .5;
- }
- columns.push_back(name_column);
- columns.push_back(url_column);
- }
- SetColumns(columns);
- for (size_t i = 0; i < columns.size(); ++i)
- SetColumnVisibility(columns[i].id, true);
- OnModelChanged();
-}
« no previous file with comments | « chrome/browser/views/bookmark_table_view.h ('k') | chrome/browser/views/dialog_stubs_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698