diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 02:12:07 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 02:12:07 +0000 |
commit | ffd87ddce66fe585c49efeca0602fece11339ed0 (patch) | |
tree | 6ac044506d104a3f38cf64266eafcbe6c0eee1b3 /chrome/browser/views/bookmark_manager_view.cc | |
parent | 13ac7b415d9c03f7861b634695af5c4887574013 (diff) | |
download | chromium_src-ffd87ddce66fe585c49efeca0602fece11339ed0.zip chromium_src-ffd87ddce66fe585c49efeca0602fece11339ed0.tar.gz chromium_src-ffd87ddce66fe585c49efeca0602fece11339ed0.tar.bz2 |
Windows/Views: delete native bookmark manager code.
Context menu code still needs cleanup/refactoring.
String resources still need to be deleted.
BUG=38908
TEST=everything still works
Review URL: http://codereview.chromium.org/1730015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45776 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/bookmark_manager_view.cc')
-rw-r--r-- | chrome/browser/views/bookmark_manager_view.cc | 859 |
1 files changed, 0 insertions, 859 deletions
diff --git a/chrome/browser/views/bookmark_manager_view.cc b/chrome/browser/views/bookmark_manager_view.cc deleted file mode 100644 index 2a99fdf..0000000 --- a/chrome/browser/views/bookmark_manager_view.cc +++ /dev/null @@ -1,859 +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_manager_view.h" - -#include <algorithm> - -#include "app/l10n_util.h" -#include "app/resource_bundle.h" -#include "base/keyboard_codes.h" -#include "base/thread.h" -#include "chrome/browser/bookmarks/bookmark_folder_tree_model.h" -#include "chrome/browser/bookmarks/bookmark_html_writer.h" -#include "chrome/browser/bookmarks/bookmark_manager.h" -#include "chrome/browser/bookmarks/bookmark_model.h" -#include "chrome/browser/bookmarks/bookmark_table_model.h" -#include "chrome/browser/bookmarks/bookmark_utils.h" -#include "chrome/browser/browser_list.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/importer/importer.h" -#include "chrome/browser/importer/importer_data_types.h" -#include "chrome/browser/metrics/user_metrics.h" -#include "chrome/browser/pref_service.h" -#include "chrome/browser/profile.h" -#include "chrome/browser/sync/sync_ui_util.h" -#include "chrome/browser/views/bookmark_editor_view.h" -#include "chrome/browser/views/bookmark_folder_tree_view.h" -#include "chrome/browser/views/bookmark_table_view.h" -#include "chrome/common/pref_names.h" -#include "gfx/canvas.h" -#include "gfx/color_utils.h" -#include "gfx/skia_util.h" -#include "grit/generated_resources.h" -#include "grit/locale_settings.h" -#include "grit/theme_resources.h" -#include "third_party/skia/include/core/SkShader.h" -#include "views/controls/button/menu_button.h" -#include "views/controls/label.h" -#include "views/controls/menu/menu_item_view.h" -#include "views/controls/single_split_view.h" -#include "views/grid_layout.h" -#include "views/standard_layout.h" -#include "views/widget/widget.h" -#include "views/window/window.h" - -// If non-null, there is an open editor and this is the window it is contained -// in it. -static views::Window* open_window = NULL; -// And this is the manager contained in it. -static BookmarkManagerView* manager = NULL; - -// Delay, in ms, between when the user types and when we run the search. -static const int kSearchDelayMS = 200; - -static const int kOrganizeMenuButtonID = 1; -static const int kToolsMenuButtonID = 2; - -// Background color. -static const SkColor kBackgroundColorTop = SkColorSetRGB(242, 247, 253); -static const SkColor kBackgroundColorBottom = SkColorSetRGB(223, 234, 248); -static const int kBackgroundGradientHeight = 28; - -namespace { - -// Observer installed on the importer. When done importing the newly created -// folder is selected in the bookmark manager. -class ImportObserverImpl : public ImportObserver { - public: - explicit ImportObserverImpl(Profile* profile) : profile_(profile) { - BookmarkModel* model = profile->GetBookmarkModel(); - initial_other_count_ = model->other_node()->GetChildCount(); - } - - virtual void ImportCanceled() { - delete this; - } - - virtual void ImportComplete() { - // We aren't needed anymore. - MessageLoop::current()->DeleteSoon(FROM_HERE, this); - - BookmarkManagerView* manager = BookmarkManagerView::current(); - if (!manager || manager->profile() != profile_) - return; - - BookmarkModel* model = profile_->GetBookmarkModel(); - int other_count = model->other_node()->GetChildCount(); - if (other_count == initial_other_count_ + 1) { - const BookmarkNode* imported_node = - model->other_node()->GetChild(initial_other_count_); - manager->SelectInTree(imported_node); - manager->ExpandAll(imported_node); - } - } - - private: - Profile* profile_; - // Number of children in the other bookmarks folder at the time we were - // created. - int initial_other_count_; - - DISALLOW_COPY_AND_ASSIGN(ImportObserverImpl); -}; - -// Converts a virtual keycode into the CutCopyPasteType. -BookmarkManagerView::CutCopyPasteType KeyCodeToCutCopyPaste( - base::KeyboardCode keycode) { - switch (keycode) { - case base::VKEY_INSERT: - if (GetKeyState(VK_CONTROL) < 0) - return BookmarkManagerView::COPY; - if (GetKeyState(VK_SHIFT) < 0) - return BookmarkManagerView::PASTE; - return BookmarkManagerView::NONE; - - case base::VKEY_DELETE: - if (GetKeyState(VK_SHIFT) < 0) - return BookmarkManagerView::CUT; - return BookmarkManagerView::NONE; - - case base::VKEY_C: - if (GetKeyState(VK_CONTROL) < 0) - return BookmarkManagerView::COPY; - return BookmarkManagerView::NONE; - - case base::VKEY_V: - if (GetKeyState(VK_CONTROL) < 0) - return BookmarkManagerView::PASTE; - return BookmarkManagerView::NONE; - - case base::VKEY_X: - if (GetKeyState(VK_CONTROL) < 0) - return BookmarkManagerView::CUT; - return BookmarkManagerView::NONE; - - default: - return BookmarkManagerView::NONE; - } -} - -} // namespace - -namespace browser { - -// Declared in browser_dialogs.h so others don't need to depend on our header. -void ShowBookmarkManagerView(Profile* profile) { - BookmarkManagerView::Show(profile); -} - -} // namespace browser - -// BookmarkManager ------------------------------------------------------------- - -void BookmarkManager::SelectInTree(Profile* profile, const BookmarkNode* node) { - if (manager && manager->profile() == profile) - manager->SelectInTree(node); -} - -void BookmarkManager::Show(Profile* profile) { - BookmarkManagerView::Show(profile); -} - -// ----------------------------------------------------------------------------- - -BookmarkManagerView::BookmarkManagerView(Profile* profile) - : profile_(profile->GetOriginalProfile()), - table_view_(NULL), - tree_view_(NULL), - sync_status_button_(NULL), - sync_service_(NULL), - sync_relogin_required_(false), - ALLOW_THIS_IN_INITIALIZER_LIST(search_factory_(this)) { - views::Label* search_label = new views::Label( - l10n_util::GetString(IDS_BOOKMARK_MANAGER_SEARCH_TITLE)); - search_tf_ = new views::Textfield(); - search_tf_->set_default_width_in_chars(30); - search_tf_->SetAccessibleName(search_label->GetText()); - - table_view_ = new BookmarkTableView(profile_, NULL); - table_view_->SetObserver(this); - table_view_->SetContextMenuController(this); - - tree_view_ = new BookmarkFolderTreeView(profile_, NULL); - tree_view_->SetController(this); - tree_view_->SetContextMenuController(this); - - views::MenuButton* organize_menu_button = new views::MenuButton( - NULL, l10n_util::GetString(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU), - this, true); - organize_menu_button->SetID(kOrganizeMenuButtonID); - - views::MenuButton* tools_menu_button = new views::MenuButton( - NULL, l10n_util::GetString(IDS_BOOKMARK_MANAGER_TOOLS_MENU), - this, true); - tools_menu_button->SetID(kToolsMenuButtonID); - - split_view_ = new views::SingleSplitView(tree_view_, table_view_, - views::SingleSplitView::HORIZONTAL_SPLIT); - split_view_->set_resize_leading_on_bounds_change(false); - split_view_->set_background( - views::Background::CreateSolidBackground(kBackgroundColorBottom)); - - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); - const int top_id = 1; - const int split_cs_id = 2; - layout->SetInsets(2, 0, 0, 0); // 2px padding above content. - views::ColumnSet* column_set = layout->AddColumnSet(top_id); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, - 0, views::GridLayout::USE_PREF, 0, 0); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, - 0, views::GridLayout::USE_PREF, 0, 0); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, - 0, views::GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(1, kUnrelatedControlHorizontalSpacing); - column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, - 0, views::GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - column_set->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, - 0, views::GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(0, 3); // 3px padding at end of row. - - column_set = layout->AddColumnSet(split_cs_id); - column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, - views::GridLayout::USE_PREF, 0, 0); - - layout->StartRow(0, top_id); - layout->AddView(organize_menu_button); - layout->AddView(tools_menu_button); - sync_status_button_ = new views::TextButton(this, std::wstring()); - layout->AddView(sync_status_button_); - layout->AddView(search_label); - layout->AddView(search_tf_); - - layout->AddPaddingRow(0, 3); // 3px padding between rows. - - layout->StartRow(1, split_cs_id); - layout->AddView(split_view_); - - // Press Ctrl-W to close bookmark manager window. - AddAccelerator(views::Accelerator(base::VKEY_W, false, true, false)); - - BookmarkModel* bookmark_model = profile_->GetBookmarkModel(); - if (!bookmark_model->IsLoaded()) - bookmark_model->AddObserver(this); - - if (profile_->GetProfileSyncService()) { - sync_service_ = profile_->GetProfileSyncService(); - sync_service_->AddObserver(this); - UpdateSyncStatus(); - } -} - -BookmarkManagerView::~BookmarkManagerView() { - if (select_file_dialog_.get()) - select_file_dialog_->ListenerDestroyed(); - - if (!GetBookmarkModel()->IsLoaded()) { - GetBookmarkModel()->RemoveObserver(this); - } else { - // The models are deleted before the views. Make sure we set the models of - // the views to NULL so that they aren't left holding a reference to a - // deleted model. - table_view_->SetModel(NULL); - tree_view_->SetModel(NULL); - } - manager = NULL; - open_window = NULL; - - if (sync_service_) - sync_service_->RemoveObserver(this); -} - -// static -void BookmarkManagerView::Show(Profile* profile) { - if (!profile->GetBookmarkModel()) - return; - - if (open_window != NULL) { - open_window->Activate(); - return; - } - - // Both of these will be deleted when the dialog closes. - manager = new BookmarkManagerView(profile); - - // Create the window. - open_window = views::Window::CreateChromeWindow(NULL, gfx::Rect(), manager); - // Let the manager know it's parented. - manager->PrepareForShow(); - // And show it. - open_window->Show(); - - // Give initial focus to the search field. - manager->search_tf_->RequestFocus(); -} - -// static -BookmarkManagerView* BookmarkManagerView::current() { - return manager; -} - -void BookmarkManagerView::SelectInTree(const BookmarkNode* node) { - if (!node) - return; - - const BookmarkNode* parent = node->is_url() ? node->GetParent() : node; - FolderNode* folder_node = tree_model_->GetFolderNodeForBookmarkNode(parent); - if (!folder_node) { - NOTREACHED(); - return; - } - - tree_view_->SetSelectedNode(folder_node); - - if (node->is_url()) { - int index = table_model_->IndexOfNode(node); - if (index != -1) - table_view_->Select(index); - // TODO(sky): this doesn't work when invoked from add page. - table_view_->RequestFocus(); - } -} - -void BookmarkManagerView::ExpandAll(const BookmarkNode* node) { - const BookmarkNode* parent = node->is_url() ? node->GetParent() : node; - FolderNode* folder_node = tree_model_->GetFolderNodeForBookmarkNode(parent); - if (!folder_node) { - NOTREACHED(); - return; - } - tree_view_->ExpandAll(folder_node); -} - -const BookmarkNode* BookmarkManagerView::GetSelectedFolder() { - return tree_view_->GetSelectedBookmarkNode(); -} - -std::vector<const BookmarkNode*> BookmarkManagerView::GetSelectedTableNodes() { - std::vector<const BookmarkNode*> nodes; - for (views::TableView::iterator i = table_view_->SelectionBegin(); - i != table_view_->SelectionEnd(); ++i) { - nodes.push_back(table_model_->GetNodeForRow(*i)); - } - // TableViews iterator iterates in reverse order. Reverse the nodes so they - // are opened in visual order. - std::reverse(nodes.begin(), nodes.end()); - return nodes; -} - -void BookmarkManagerView::PaintBackground(gfx::Canvas* canvas) { - canvas->drawColor(kBackgroundColorBottom, SkXfermode::kSrc_Mode); - - SkPaint paint; - paint.setShader(gfx::CreateGradientShader(0, kBackgroundGradientHeight, - kBackgroundColorTop, - kBackgroundColorBottom))->safeUnref(); - canvas->FillRectInt(0, 0, width(), kBackgroundGradientHeight, paint); -} - -gfx::Size BookmarkManagerView::GetPreferredSize() { - return gfx::Size(views::Window::GetLocalizedContentsSize( - IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS, - IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES)); -} - -std::wstring BookmarkManagerView::GetWindowTitle() const { - return l10n_util::GetString(IDS_BOOKMARK_MANAGER_TITLE); -} - -std::wstring BookmarkManagerView::GetWindowName() const { - return prefs::kBookmarkManagerPlacement; -} - -void BookmarkManagerView::WindowClosing() { - g_browser_process->local_state()->SetInteger( - prefs::kBookmarkManagerSplitLocation, split_view_->divider_offset()); -} - -void BookmarkManagerView::OnStateChanged() { - UpdateSyncStatus(); -} - -bool BookmarkManagerView::AcceleratorPressed( - const views::Accelerator& accelerator) { - // Ctrl-W to close bookmark manager. - DCHECK(accelerator.GetKeyCode() == 'W' && accelerator.IsCtrlDown()); - window()->Close(); - return true; -} - -void BookmarkManagerView::OnDoubleClick() { - std::vector<const BookmarkNode*> nodes = GetSelectedTableNodes(); - if (nodes.empty()) - return; - if (nodes.size() == 1 && nodes[0]->is_folder()) { - // Double click on a folder descends into the folder. - SelectInTree(nodes[0]); - return; - } - // TODO(sky): OnDoubleClick needs a handle to the current mouse event so that - // we can use - // event_utils::DispositionFromEventFlags(sender->mouse_event_flags()) . - bookmark_utils::OpenAll( - GetWidget()->GetNativeView(), profile_, NULL, nodes, CURRENT_TAB); -} - -void BookmarkManagerView::OnMiddleClick() { - std::vector<const BookmarkNode*> nodes = GetSelectedTableNodes(); - if (nodes.empty()) - return; - if (nodes.size() == 1 && nodes[0]->is_folder()) { - // Middle clicking on a folder results in no action. - return; - } - - bookmark_utils::OpenAll( - GetWidget()->GetNativeView(), profile_, NULL, nodes, NEW_FOREGROUND_TAB); -} - -void BookmarkManagerView::OnTableViewDelete(views::TableView* table) { - std::vector<const BookmarkNode*> nodes = GetSelectedTableNodes(); - if (nodes.empty()) - return; - for (size_t i = 0; i < nodes.size(); ++i) { - GetBookmarkModel()->Remove(nodes[i]->GetParent(), - nodes[i]->GetParent()->IndexOfChild(nodes[i])); - } -} - -void BookmarkManagerView::OnKeyDown(base::KeyboardCode keycode) { - switch (keycode) { - case base::VKEY_RETURN: { - std::vector<const BookmarkNode*> selected_nodes = GetSelectedTableNodes(); - if (selected_nodes.size() == 1 && selected_nodes[0]->is_folder()) { - SelectInTree(selected_nodes[0]); - } else { - bookmark_utils::OpenAll( - GetWidget()->GetNativeView(), profile_, NULL, selected_nodes, - CURRENT_TAB); - } - break; - } - - case base::VKEY_BACK: { - const BookmarkNode* selected_folder = GetSelectedFolder(); - if (selected_folder != NULL && - selected_folder->GetParent() != GetBookmarkModel()->root_node()) { - SelectInTree(selected_folder->GetParent()); - } - break; - } - - default: - OnCutCopyPaste(KeyCodeToCutCopyPaste(keycode), true); - break; - } -} - -void BookmarkManagerView::OnTreeViewSelectionChanged( - views::TreeView* tree_view) { - TreeModelNode* node = tree_view_->GetSelectedNode(); - - BookmarkTableModel* new_table_model = NULL; - const BookmarkNode* table_parent_node = NULL; - bool is_search = false; - - if (node) { - switch (tree_model_->GetNodeType(node)) { - case BookmarkFolderTreeModel::BOOKMARK: - table_parent_node = tree_model_->TreeNodeAsBookmarkNode(node); - new_table_model = - BookmarkTableModel::CreateBookmarkTableModelForFolder( - profile_->GetBookmarkModel(), - table_parent_node); - break; - - case BookmarkFolderTreeModel::RECENTLY_BOOKMARKED: - new_table_model = BookmarkTableModel::CreateRecentlyBookmarkedModel( - profile_->GetBookmarkModel()); - break; - - case BookmarkFolderTreeModel::SEARCH: - is_search = true; - search_factory_.RevokeAll(); - new_table_model = CreateSearchTableModel(); - break; - - default: - NOTREACHED(); - break; - } - } - - SetTableModel(new_table_model, table_parent_node, is_search); -} - -void BookmarkManagerView::OnTreeViewKeyDown(base::KeyboardCode keycode) { - switch (keycode) { - case base::VKEY_DELETE: { - const BookmarkNode* node = GetSelectedFolder(); - if (!node || node->GetParent() == GetBookmarkModel()->root_node()) - return; - - const BookmarkNode* parent = node->GetParent(); - GetBookmarkModel()->Remove(parent, parent->IndexOfChild(node)); - break; - } - - default: - OnCutCopyPaste(KeyCodeToCutCopyPaste(keycode), false); - break; - } -} - -void BookmarkManagerView::ButtonPressed(views::Button* sender, - const views::Event& event) { - if (sender == sync_status_button_) { - if (sync_relogin_required_) { - DCHECK(sync_service_); - sync_service_->ShowLoginDialog(); - } else { - UserMetrics::RecordAction(UserMetricsAction("BookmarkManager_Sync"), - profile_); - sync_ui_util::OpenSyncMyBookmarksDialog( - profile_, ProfileSyncService::START_FROM_BOOKMARK_MANAGER); - } - } -} - -void BookmarkManagerView::Loaded(BookmarkModel* model) { - model->RemoveObserver(this); - LoadedImpl(); -} - -void BookmarkManagerView::ContentsChanged(views::Textfield* sender, - const std::wstring& new_contents) { - search_factory_.RevokeAll(); - MessageLoop::current()->PostDelayedTask(FROM_HERE, - search_factory_.NewRunnableMethod(&BookmarkManagerView::PerformSearch), - kSearchDelayMS); -} - -bool BookmarkManagerView::HandleKeystroke( - views::Textfield* sender, - const views::Textfield::Keystroke& key) { - if (key.GetKeyboardCode() == base::VKEY_RETURN) { - PerformSearch(); - search_tf_->SelectAll(); - } - - return false; -} - -void BookmarkManagerView::ShowContextMenu(views::View* source, - const gfx::Point& p, - bool is_mouse_gesture) { - DCHECK(source == table_view_ || source == tree_view_); - bool is_table = (source == table_view_); - ShowMenu(p, is_table ? - BookmarkContextMenuControllerViews::BOOKMARK_MANAGER_TABLE : - BookmarkContextMenuControllerViews::BOOKMARK_MANAGER_TREE); -} - -void BookmarkManagerView::RunMenu(views::View* source, const gfx::Point& pt) { - // TODO(glen): when you change the buttons around and what not, futz with - // this to make it look good. If you end up keeping padding numbers make them - // constants. - if (!GetBookmarkModel()->IsLoaded()) - return; - - gfx::Point menu_pt(pt); - menu_pt.Offset(UILayoutIsRightToLeft() ? - (source->width() - 5) : (-source->width() + 5), 2); - if (source->GetID() == kOrganizeMenuButtonID) { - ShowMenu(menu_pt, - BookmarkContextMenuControllerViews::BOOKMARK_MANAGER_ORGANIZE_MENU); - } else if (source->GetID() == kToolsMenuButtonID) { - ShowToolsMenu(menu_pt); - } else { - NOTREACHED(); - } -} - -void BookmarkManagerView::ExecuteCommand(int id) { - switch (id) { - case IDS_BOOKMARK_MANAGER_IMPORT_MENU: - UserMetrics::RecordAction(UserMetricsAction("BookmarkManager_Import"), - profile_); - ShowImportBookmarksFileChooser(); - break; - - case IDS_BOOKMARK_MANAGER_EXPORT_MENU: - UserMetrics::RecordAction(UserMetricsAction("BookmarkManager_Export"), - profile_); - ShowExportBookmarksFileChooser(); - break; - - default: - NOTREACHED(); - break; - } -} - -void BookmarkManagerView::FileSelected(const FilePath& path, - int index, - void* params) { - int id = reinterpret_cast<int>(params); - if (id == IDS_BOOKMARK_MANAGER_IMPORT_MENU) { - // ImporterHost is ref counted and will delete itself when done. - ImporterHost* host = new ImporterHost(); - ProfileInfo profile_info; - profile_info.browser_type = importer::BOOKMARKS_HTML; - profile_info.source_path = path.ToWStringHack(); - StartImportingWithUI(GetWidget()->GetNativeView(), importer::FAVORITES, - host, profile_info, profile_, - new ImportObserverImpl(profile()), false); - } else if (id == IDS_BOOKMARK_MANAGER_EXPORT_MENU) { - bookmark_html_writer::WriteBookmarks(profile(), path, NULL); - } else { - NOTREACHED(); - } -} - -void BookmarkManagerView::FileSelectionCanceled(void* params) { - select_file_dialog_ = NULL; -} - -BookmarkTableModel* BookmarkManagerView::CreateSearchTableModel() { - std::wstring search_text = search_tf_->text(); - if (search_text.empty()) - return NULL; - std::wstring languages = - profile_->GetPrefs()->GetString(prefs::kAcceptLanguages); - return BookmarkTableModel::CreateSearchTableModel( - GetBookmarkModel(), search_text, languages); -} - -void BookmarkManagerView::SetTableModel(BookmarkTableModel* new_table_model, - const BookmarkNode* parent_node, - bool is_search) { - // Be sure and reset the model on the view before updating table_model_. - // Otherwise the view will attempt to use the deleted model when we set the - // new one. - table_view_->SetModel(NULL); - table_view_->SetShowPathColumn(!parent_node); - table_view_->SetModel(new_table_model); - table_view_->set_parent_node(parent_node); - table_model_.reset(new_table_model); - if (!is_search || (new_table_model && new_table_model->RowCount() > 0)) { - table_view_->SetAltText(std::wstring()); - } else if (search_tf_->text().empty()) { - table_view_->SetAltText( - l10n_util::GetString(IDS_BOOKMARK_MANAGER_NO_SEARCH_TEXT)); - } else { - table_view_->SetAltText( - l10n_util::GetStringF(IDS_BOOKMARK_MANAGER_NO_RESULTS, - search_tf_->text())); - } -} - -void BookmarkManagerView::PerformSearch() { - search_factory_.RevokeAll(); - // Reset the controller, otherwise when we change the selection we'll get - // notified and update the model twice. - tree_view_->SetController(NULL); - tree_view_->SetSelectedNode(tree_model_->search_node()); - tree_view_->SetController(this); - SetTableModel(CreateSearchTableModel(), NULL, true); -} - -void BookmarkManagerView::PrepareForShow() { - // Restore the split location, but don't let it get too small (or big), - // otherwise users might inadvertently not see the divider. - int split_x = g_browser_process->local_state()->GetInteger( - prefs::kBookmarkManagerSplitLocation); - if (split_x == -1) { - // First time running the bookmark manager, give a third of the width to - // the tree. - split_x = split_view_->width() / 3; - } - int min_split_size = split_view_->width() / 8; - // Make sure the user can see both the tree/table. - split_x = std::min(split_view_->width() - min_split_size, - std::max(min_split_size, split_x)); - split_view_->set_divider_offset(split_x); - if (!GetBookmarkModel()->IsLoaded()) { - search_tf_->SetReadOnly(true); - return; - } - - LoadedImpl(); -} - -void BookmarkManagerView::LoadedImpl() { - BookmarkModel* bookmark_model = GetBookmarkModel(); - const BookmarkNode* bookmark_bar_node = bookmark_model->GetBookmarkBarNode(); - table_model_.reset( - BookmarkTableModel::CreateBookmarkTableModelForFolder(bookmark_model, - bookmark_bar_node)); - table_view_->SetModel(table_model_.get()); - table_view_->set_parent_node(bookmark_bar_node); - - tree_model_.reset(new BookmarkFolderTreeModel(bookmark_model)); - tree_view_->SetModel(tree_model_.get()); - - tree_view_->ExpandAll(); - - tree_view_->SetSelectedNode( - tree_model_->GetFolderNodeForBookmarkNode(bookmark_bar_node)); - - search_tf_->SetReadOnly(false); - search_tf_->SetController(this); - - Layout(); - SchedulePaint(); -} - -BookmarkModel* BookmarkManagerView::GetBookmarkModel() const { - return profile_->GetBookmarkModel(); -} - -void BookmarkManagerView::ShowMenu( - const gfx::Point& p, - BookmarkContextMenuControllerViews::ConfigurationType config) { - if (!GetBookmarkModel()->IsLoaded()) - return; - - const BookmarkNode* parent = GetSelectedFolder(); - std::vector<const BookmarkNode*> nodes; - typedef BookmarkContextMenuControllerViews BCMCV; // Such a long name! - if (config == BCMCV::BOOKMARK_MANAGER_TABLE || - (config == BCMCV::BOOKMARK_MANAGER_ORGANIZE_MENU && - table_view_->HasFocus())) { - nodes = GetSelectedTableNodes(); - if (!parent) { - config = (config == BCMCV::BOOKMARK_MANAGER_TABLE) ? - BCMCV::BOOKMARK_MANAGER_TABLE_OTHER : - BCMCV::BOOKMARK_MANAGER_ORGANIZE_MENU_OTHER; - } - } else { - if (parent) - nodes.push_back(parent); - } - BookmarkContextMenu menu(GetWidget()->GetNativeView(), profile_, NULL, parent, - nodes, config); - menu.RunMenuAt(p); -} - -void BookmarkManagerView::OnCutCopyPaste(CutCopyPasteType type, - bool from_table) { - if (type == CUT || type == COPY) { - std::vector<const BookmarkNode*> nodes; - if (from_table) { - nodes = GetSelectedTableNodes(); - } else { - const BookmarkNode* node = GetSelectedFolder(); - if (!node || node->GetParent() == GetBookmarkModel()->root_node()) - return; - nodes.push_back(node); - } - if (nodes.empty()) - return; - - bookmark_utils::CopyToClipboard(GetBookmarkModel(), nodes, type == CUT); - } else if (type == PASTE) { - int index = from_table ? table_view_->FirstSelectedRow() : -1; - if (index != -1) - index++; - bookmark_utils::PasteFromClipboard(GetBookmarkModel(), GetSelectedFolder(), - index); - } -} - -void BookmarkManagerView::ShowToolsMenu(const gfx::Point& p) { - views::MenuItemView menu(this); - menu.AppendMenuItemWithLabel( - IDS_BOOKMARK_MANAGER_IMPORT_MENU, - l10n_util::GetString(IDS_BOOKMARK_MANAGER_IMPORT_MENU)); - menu.AppendMenuItemWithLabel( - IDS_BOOKMARK_MANAGER_EXPORT_MENU, - l10n_util::GetString(IDS_BOOKMARK_MANAGER_EXPORT_MENU)); - views::MenuItemView::AnchorPosition anchor = UILayoutIsRightToLeft() ? - views::MenuItemView::TOPRIGHT : views::MenuItemView::TOPLEFT; - menu.RunMenuAt(GetWidget()->GetNativeView(), NULL, gfx::Rect(p, gfx::Size()), - anchor, true); -} - -void BookmarkManagerView::ShowImportBookmarksFileChooser() { - if (select_file_dialog_.get()) - select_file_dialog_->ListenerDestroyed(); - - SelectFileDialog::FileTypeInfo file_type_info; - file_type_info.extensions.resize(1); - file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html")); - file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("htm")); - file_type_info.include_all_files = true; - select_file_dialog_ = SelectFileDialog::Create(this); - select_file_dialog_->SelectFile( - SelectFileDialog::SELECT_OPEN_FILE, std::wstring(), - FilePath(FILE_PATH_LITERAL("bookmarks.html")), &file_type_info, 0, - std::wstring(), GetWidget()->GetNativeView(), - reinterpret_cast<void*>(IDS_BOOKMARK_MANAGER_IMPORT_MENU)); -} - -void BookmarkManagerView::ShowExportBookmarksFileChooser() { - if (select_file_dialog_.get()) - select_file_dialog_->ListenerDestroyed(); - - SelectFileDialog::FileTypeInfo file_type_info; - file_type_info.extensions.resize(1); - file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html")); - file_type_info.include_all_files = true; - select_file_dialog_ = SelectFileDialog::Create(this); - select_file_dialog_->SelectFile( - SelectFileDialog::SELECT_SAVEAS_FILE, std::wstring(), - FilePath(FILE_PATH_LITERAL("bookmarks.html")), &file_type_info, 0, - L"html", GetWidget()->GetNativeView(), - reinterpret_cast<void*>(IDS_BOOKMARK_MANAGER_EXPORT_MENU)); -} - -void BookmarkManagerView::UpdateSyncStatus() { - DCHECK(sync_service_); - string16 status_label; - string16 link_label; - sync_relogin_required_ = sync_ui_util::GetStatusLabels(sync_service_, - &status_label, &link_label) == sync_ui_util::SYNC_ERROR; - - if (sync_relogin_required_) { - sync_status_button_->SetText( - l10n_util::GetString(IDS_SYNC_BOOKMARK_BAR_ERROR)); - // The tooltip is the only way we have to display text explaining the error - // to the user. - sync_status_button_->SetTooltipText( - l10n_util::GetString(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC)); - sync_status_button_->SetAccessibleName( - l10n_util::GetString(IDS_ACCNAME_SYNC_ERROR_BUTTON)); - sync_status_button_->SetIcon( - *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); - sync_status_button_->GetParent()->Layout(); - return; - } - - if (sync_service_->HasSyncSetupCompleted()) { - string16 username = sync_service_->GetAuthenticatedUsername(); - status_label = l10n_util::GetStringFUTF16(IDS_SYNC_NTP_SYNCED_TO, - username); - } else if (sync_service_->SetupInProgress()) { - status_label = l10n_util::GetStringUTF16(IDS_SYNC_NTP_SETUP_IN_PROGRESS); - } else { - status_label = l10n_util::GetStringUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL); - } - sync_status_button_->SetText(status_label); - sync_status_button_->SetTooltipText(L""); - sync_status_button_->SetAccessibleName(L""); - sync_status_button_->SetIcon(SkBitmap()); - sync_status_button_->GetParent()->Layout(); -} |