diff options
author | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-28 20:28:40 +0000 |
---|---|---|
committer | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-28 20:28:40 +0000 |
commit | 492c0d072fcb858ac4142d15d30dc8cc1fe39151 (patch) | |
tree | 4024d3777a50e5bd9828390bbab4357e60e603ae /chrome/browser/bookmarks | |
parent | 230b3f1cfd01dfeb78d71d51dfe1be409cc2d2e2 (diff) | |
download | chromium_src-492c0d072fcb858ac4142d15d30dc8cc1fe39151.zip chromium_src-492c0d072fcb858ac4142d15d30dc8cc1fe39151.tar.gz chromium_src-492c0d072fcb858ac4142d15d30dc8cc1fe39151.tar.bz2 |
Restore bookmark folder editor controller.
This restores the bookmark folder editor controller that is used when renaming bookmarks.
BUG=115858
TEST=Right click on a bookmark folder, click rename. An InputWindowDialog containing just the bookmark name will come up.
Review URL: https://chromiumcodereview.appspot.com/9494016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124016 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bookmarks')
3 files changed, 215 insertions, 5 deletions
diff --git a/chrome/browser/bookmarks/bookmark_context_menu_controller.cc b/chrome/browser/bookmarks/bookmark_context_menu_controller.cc index 04c00eb..0335e59 100644 --- a/chrome/browser/bookmarks/bookmark_context_menu_controller.cc +++ b/chrome/browser/bookmarks/bookmark_context_menu_controller.cc @@ -7,6 +7,7 @@ #include "base/compiler_specific.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/bookmarks/bookmark_editor.h" +#include "chrome/browser/bookmarks/bookmark_input_window_dialog_controller.h" #include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/bookmarks/bookmark_utils.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" @@ -140,11 +141,18 @@ void BookmarkContextMenuController::ExecuteCommand(int id) { break; } - BookmarkEditor::Show( - parent_window_, - profile_, - BookmarkEditor::EditDetails::EditNode(selection_[0]), - BookmarkEditor::SHOW_TREE); + if (selection_[0]->is_url()) { + BookmarkEditor::Show( + parent_window_, + profile_, + BookmarkEditor::EditDetails::EditNode(selection_[0]), + BookmarkEditor::SHOW_TREE); + } else { + BookmarkInputWindowDialogController::Show( + profile_, + parent_window_, + BookmarkEditor::EditDetails::EditNode(selection_[0])); + } break; case IDC_BOOKMARK_BAR_REMOVE: { diff --git a/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.cc b/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.cc new file mode 100644 index 0000000..19e265e --- /dev/null +++ b/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.cc @@ -0,0 +1,145 @@ +// Copyright (c) 2012 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_input_window_dialog_controller.h" + +#include "base/string16.h" +#include "base/utf_string_conversions.h" +#include "chrome/browser/bookmarks/bookmark_model.h" +#include "chrome/browser/bookmarks/bookmark_utils.h" +#include "chrome/browser/profiles/profile.h" +#include "grit/generated_resources.h" +#include "ui/base/l10n/l10n_util.h" + +namespace { +string16 GetWindowTitle(const BookmarkEditor::EditDetails& details) { + int title_id = 0; + switch (details.type) { + case BookmarkEditor::EditDetails::EXISTING_NODE: + if (details.existing_node->is_url()) { + title_id = IDS_BOOKMARK_EDITOR_TITLE; + } else { + title_id = IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE; + } + break; + case BookmarkEditor::EditDetails::NEW_URL: + title_id = IDS_BOOKMARK_EDITOR_TITLE; + break; + case BookmarkEditor::EditDetails::NEW_FOLDER: + title_id = IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE_NEW; + break; + default: + NOTREACHED(); + break; + } + return l10n_util::GetStringUTF16(title_id); +} +} // namespace + +BookmarkInputWindowDialogController::~BookmarkInputWindowDialogController() { + if (model_) + model_->RemoveObserver(this); +} + +// static +void BookmarkInputWindowDialogController::Show( + Profile* profile, + gfx::NativeWindow wnd, + const BookmarkEditor::EditDetails& details) { + // BookmarkInputWindowDialogController deletes itself when done. + new BookmarkInputWindowDialogController(profile, wnd, details); +} + +BookmarkInputWindowDialogController::BookmarkInputWindowDialogController( + Profile* profile, + gfx::NativeWindow wnd, + const BookmarkEditor::EditDetails& details) + : model_(profile->GetBookmarkModel()), + details_(details) { + + model_->AddObserver(this); + + InputWindowDialog::LabelContentsPairs label_contents_pairs; + string16 name_label = + l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_EDIT_FOLDER_LABEL); + if ((details.type == BookmarkEditor::EditDetails::EXISTING_NODE && + details.existing_node->is_url()) || + details.type == BookmarkEditor::EditDetails::NEW_URL) { + string16 url_label = + l10n_util::GetStringUTF16(IDS_BOOKMARK_EDITOR_URL_LABEL); + string16 name; + GURL url; + if (details.type == BookmarkEditor::EditDetails::NEW_URL) { + bookmark_utils::GetURLAndTitleToBookmarkFromCurrentTab(profile, + &url, + &name); + } else { + url = details.existing_node->url(); + name = details.existing_node->GetTitle(); + } + label_contents_pairs.push_back(std::make_pair(name_label, name)); + label_contents_pairs.push_back(std::make_pair(url_label, + UTF8ToUTF16(url.spec()))); + } else { + string16 name = (details.type == BookmarkEditor::EditDetails::NEW_FOLDER) ? + l10n_util::GetStringUTF16(IDS_BOOKMARK_EDITOR_NEW_FOLDER_NAME) : + details.existing_node->GetTitle(); + label_contents_pairs.push_back(std::make_pair(name_label, name)); + } + + const InputWindowDialog::ButtonType button_type = + (details.type == BookmarkEditor::EditDetails::NEW_URL || + details.type == BookmarkEditor::EditDetails::NEW_FOLDER) ? + InputWindowDialog::BUTTON_TYPE_ADD : InputWindowDialog::BUTTON_TYPE_SAVE; + dialog_ = InputWindowDialog::Create(wnd, + GetWindowTitle(details), + label_contents_pairs, this, button_type); + dialog_->Show(); +} + +bool BookmarkInputWindowDialogController::IsValid( + const InputWindowDialog::InputTexts& texts) { + if (texts.size() != 1 && texts.size() != 2) { + return false; + } + if (texts[0].empty() || (texts.size() == 2 && texts[1].empty())) { + return false; + } + return true; +} + +void BookmarkInputWindowDialogController::InputAccepted( + const InputWindowDialog::InputTexts& texts) { + if (details_.type == BookmarkEditor::EditDetails::EXISTING_NODE) { + if (details_.existing_node->is_url()) { + DCHECK_EQ(2U, texts.size()); + model_->SetTitle(details_.existing_node, texts[0]); + model_->SetURL(details_.existing_node, GURL(texts[1])); + } else { + DCHECK_EQ(1U, texts.size()); + model_->SetTitle(details_.existing_node, texts[0]); + } + } else if (details_.type == BookmarkEditor::EditDetails::NEW_FOLDER) { + DCHECK_EQ(1U, texts.size()); + // TODO(mazda): Add |details_.urls| to AddFolder. + model_->AddFolder(details_.parent_node, details_.index, texts[0]); + } else if (details_.type == BookmarkEditor::EditDetails::NEW_URL) { + DCHECK_EQ(2U, texts.size()); + model_->AddURL(details_.parent_node, details_.index, texts[0], + GURL(texts[1])); + } +} + +void BookmarkInputWindowDialogController::InputCanceled() { +} + +void BookmarkInputWindowDialogController::BookmarkModelChanged() { +} + +void BookmarkInputWindowDialogController::BookmarkModelBeingDeleted( + BookmarkModel* model) { + model_->RemoveObserver(this); + model_ = NULL; + BookmarkModelChanged(); +} diff --git a/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.h b/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.h new file mode 100644 index 0000000..ec30949 --- /dev/null +++ b/chrome/browser/bookmarks/bookmark_input_window_dialog_controller.h @@ -0,0 +1,57 @@ +// Copyright (c) 2012 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. + +#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_INPUT_WINDOW_DIALOG_CONTROLLER_H_ +#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_INPUT_WINDOW_DIALOG_CONTROLLER_H_ +#pragma once + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "chrome/browser/bookmarks/base_bookmark_model_observer.h" +#include "chrome/browser/bookmarks/bookmark_editor.h" +#include "chrome/browser/ui/input_window_dialog.h" +#include "ui/gfx/native_widget_types.h" + +class Profile; + +// BookmarkInputWindowDialogController manages the editing and/or creation of a +// bookmark page or a bookmark folder. If the user presses ok, the name change +// is committed to the model. +// +// BookmarkInputWindowDialogController deletes itself when the window is closed. +class BookmarkInputWindowDialogController : public InputWindowDialog::Delegate, + public BaseBookmarkModelObserver { + public: + virtual ~BookmarkInputWindowDialogController(); + + static void Show(Profile* profile, + gfx::NativeWindow wnd, + const BookmarkEditor::EditDetails& details); + + private: + BookmarkInputWindowDialogController( + Profile* profile, + gfx::NativeWindow wnd, + const BookmarkEditor::EditDetails& details); + + // InputWindowDialog::Delegate: + virtual bool IsValid(const InputWindowDialog::InputTexts& texts) OVERRIDE; + virtual void InputAccepted( + const InputWindowDialog::InputTexts& texts) OVERRIDE; + virtual void InputCanceled() OVERRIDE; + + // BaseBookmarkModelObserver: + virtual void BookmarkModelChanged() OVERRIDE; + virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; + + BookmarkModel* model_; + + BookmarkEditor::EditDetails details_; + + InputWindowDialog* dialog_; + + DISALLOW_COPY_AND_ASSIGN(BookmarkInputWindowDialogController); +}; + +#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_INPUT_WINDOW_DIALOG_CONTROLLER_H_ |