1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_folder_editor_controller.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_model.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkFolderEditorController::~BookmarkFolderEditorController() {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (model_)
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    model_->RemoveObserver(this);
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkFolderEditorController::Show(Profile* profile,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          gfx::NativeWindow wnd,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const BookmarkNode* node,
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          int index,
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                          Type type) {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // BookmarkFolderEditorController deletes itself when done.
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  new BookmarkFolderEditorController(profile, wnd, node, index, type);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkFolderEditorController::BookmarkFolderEditorController(
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gfx::NativeWindow wnd,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const BookmarkNode* node,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int index,
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    Type type)
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : profile_(profile),
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      model_(profile->GetBookmarkModel()),
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      node_(node),
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      index_(index),
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      is_new_(type == NEW_BOOKMARK) {
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  DCHECK(is_new_ || node);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  string16 title = is_new_ ?
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      l10n_util::GetStringUTF16(IDS_BOOMARK_FOLDER_EDITOR_WINDOW_TITLE_NEW) :
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      l10n_util::GetStringUTF16(IDS_BOOMARK_FOLDER_EDITOR_WINDOW_TITLE);
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  string16 label =
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      l10n_util::GetStringUTF16(IDS_BOOMARK_BAR_EDIT_FOLDER_LABEL);
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  string16 contents = is_new_ ?
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      l10n_util::GetStringUTF16(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME) :
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      node_->GetTitle();
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  dialog_ = InputWindowDialog::Create(wnd,
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                      UTF16ToWideHack(title),
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                      UTF16ToWideHack(label),
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                      UTF16ToWideHack(contents),
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                      this);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  model_->AddObserver(this);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dialog_->Show();
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BookmarkFolderEditorController::IsValid(const std::wstring& text) {
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return !text.empty();
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkFolderEditorController::InputAccepted(const std::wstring& text) {
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (is_new_)
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    model_->AddFolder(node_, index_, WideToUTF16Hack(text));
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  else
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    model_->SetTitle(node_, WideToUTF16Hack(text));
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkFolderEditorController::InputCanceled() {
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkFolderEditorController::BookmarkModelChanged() {
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dialog_->Close();
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkFolderEditorController::BookmarkModelBeingDeleted(
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BookmarkModel* model) {
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  model_->RemoveObserver(this);
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  model_ = NULL;
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkModelChanged();
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
85