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

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

Issue 12895: Chromium-MultiProfile-Prototype... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years 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/select_profile_dialog.h ('k') | chrome/browser/views/toolbar_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/select_profile_dialog.cc
===================================================================
--- chrome/browser/views/select_profile_dialog.cc (revision 0)
+++ chrome/browser/views/select_profile_dialog.cc (revision 0)
@@ -0,0 +1,163 @@
+// Copyright (c) 2006-2008 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/select_profile_dialog.h"
+
+#include <string>
+
+#include "base/logging.h"
+#include "base/string_util.h"
+#include "chrome/app/locales/locale_settings.h"
+#include "chrome/browser/user_data_manager.h"
+#include "chrome/browser/views/new_profile_dialog.h"
+#include "chrome/browser/views/standard_layout.h"
+#include "chrome/common/l10n_util.h"
+#include "chrome/views/combo_box.h"
+#include "chrome/views/grid_layout.h"
+#include "chrome/views/label.h"
+#include "chrome/views/message_box_view.h"
+#include "chrome/views/view.h"
+#include "chrome/views/window.h"
+
+#include "chromium_strings.h"
+#include "generated_resources.h"
+
+using views::ColumnSet;
+using views::GridLayout;
+
+// static
+void SelectProfileDialog::RunDialog() {
+ // When the window closes, it will delete itself.
+ SelectProfileDialog* dlg = new SelectProfileDialog();
+ views::Window::CreateChromeWindow(NULL, gfx::Rect(), dlg)->Show();
+}
+
+SelectProfileDialog::SelectProfileDialog()
+ : helper_(new GetProfilesHelper(this)) {
+ // We first create an instance of the helper and then setup controls. This
+ // doesn't lead to race condition because once the helper is done with
+ // enumerating profiles by examining the file system, it posts a task on the
+ // thread it was called on. This is the same thread that the current code is
+ // running on. So that task wouldn't get executed until we are done with
+ // setup controls. Given that, we start the helper before setup controls so
+ // that file enumeration can be done as soon as possible.
+ helper_->GetProfiles(NULL);
+ SetupControls();
+}
+
+SelectProfileDialog::~SelectProfileDialog() {
+ helper_->OnDelegateDeleted();
+}
+
+gfx::Size SelectProfileDialog::GetPreferredSize() {
+ return gfx::Size(views::Window::GetLocalizedContentsSize(
+ IDS_SELECT_PROFILE_DIALOG_WIDTH_CHARS,
+ IDS_SELECT_PROFILE_DIALOG_HEIGHT_LINES));
+}
+
+void SelectProfileDialog::PopulateProfilesComboBox(
+ const std::vector<std::wstring>& profiles) {
+ profiles_.insert(profiles_.begin(), profiles.begin(), profiles.end());
+ profile_combobox_->ModelChanged();
+ GetDialogClientView()->UpdateDialogButtons();
+}
+
+void SelectProfileDialog::Layout() {
+ GetLayoutManager()->Layout(this);
+}
+
+int SelectProfileDialog::GetDialogButtons() const {
+ return DIALOGBUTTON_OK | DIALOGBUTTON_CANCEL;
+}
+
+views::View* SelectProfileDialog::GetInitiallyFocusedView() const {
+ return profile_combobox_;
+}
+
+std::wstring SelectProfileDialog::GetWindowTitle() const {
+ return l10n_util::GetString(IDS_SELECT_PROFILE_DIALOG_TITLE);
+}
+
+bool SelectProfileDialog::Accept() {
+ int index = profile_combobox_->GetSelectedItem();
+ if (index < 0) {
+ NOTREACHED();
+ return true;
+ }
+
+ // If the user has selected <New Profile> from the drop down, then show the
+ // new profile dialog to the user.
+ if (index == profiles_.size()) {
+ NewProfileDialog::RunDialog();
+ return true;
+ }
+
+ std::wstring profile_name = profiles_[index];
+ UserDataManager::Get()->LaunchChromeForProfile(profile_name);
+ return true;
+}
+
+bool SelectProfileDialog::Cancel() {
+ return true;
+}
+
+views::View* SelectProfileDialog::GetContentsView() {
+ return this;
+}
+
+bool SelectProfileDialog::IsDialogButtonEnabled(DialogButton button) const {
+ // Only enable the OK button once we have loaded the profiles vector.
+ if (button == DIALOGBUTTON_OK)
+ return !profiles_.empty();
+
+ return true;
+}
+
+int SelectProfileDialog::GetItemCount(views::ComboBox* source) {
+ // When the profiles vector is empty, the file thread is not done loading the
+ // profile information. So return 0 in that case so that we show an empty
+ // combo box. Otherwise, always show one more item in the combo box that
+ // allows the user to select <New Profile>.
+ return profiles_.empty() ? 0 : profiles_.size() + 1;
+}
+
+std::wstring SelectProfileDialog::GetItemAt(views::ComboBox* source,
+ int index) {
+ DCHECK(source == profile_combobox_);
+ DCHECK(index >= 0 && index <= static_cast<int>(profiles_.size()));
+ // For the last item in the drop down, return the <New Profile> text,
+ // otherwise return the corresponding profile name from the vector.
+ return index == profiles_.size() ?
+ l10n_util::GetString(IDS_SELECT_PROFILE_DIALOG_NEW_PROFILE_ENTRY) :
+ profiles_[index];
+}
+
+void SelectProfileDialog::OnGetProfilesDone(
+ const std::vector<std::wstring>& profiles) {
+ PopulateProfilesComboBox(profiles);
+}
+
+void SelectProfileDialog::SetupControls() {
+ // Adds all controls.
+ select_profile_label_ = new views::Label(
+ l10n_util::GetString(IDS_SELECT_PROFILE_DIALOG_LABEL_TEXT));
+ profile_combobox_ = new views::ComboBox(this);
+
+ // Arranges controls by using GridLayout.
+ const int column_set_id = 0;
+ GridLayout* layout = CreatePanelGridLayout(this);
+ SetLayoutManager(layout);
+ ColumnSet* column_set = layout->AddColumnSet(column_set_id);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
+ GridLayout::FIXED, 200, 0);
+
+ layout->StartRow(0, column_set_id);
+ layout->AddView(select_profile_label_);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ layout->StartRow(0, column_set_id);
+ layout->AddView(profile_combobox_);
+}
Property changes on: chrome\browser\views\select_profile_dialog.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/views/select_profile_dialog.h ('k') | chrome/browser/views/toolbar_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698