summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmarks
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-28 20:28:40 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-28 20:28:40 +0000
commit492c0d072fcb858ac4142d15d30dc8cc1fe39151 (patch)
tree4024d3777a50e5bd9828390bbab4357e60e603ae /chrome/browser/bookmarks
parent230b3f1cfd01dfeb78d71d51dfe1be409cc2d2e2 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/bookmarks/bookmark_context_menu_controller.cc18
-rw-r--r--chrome/browser/bookmarks/bookmark_input_window_dialog_controller.cc145
-rw-r--r--chrome/browser/bookmarks/bookmark_input_window_dialog_controller.h57
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_