blob: 9433ffaf032ed6d8b88a4e9cedfa4ef70ce59453 [file] [log] [blame]
// Copyright 2013 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/chromeos/ui/echo_dialog_view.h"
#include "chrome/browser/chromeos/ui/echo_dialog_listener.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/font.h"
#include "ui/views/border.h"
#include "ui/views/controls/styled_label.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_client_view.h"
namespace {
const int kDialogLabelTopInset = 20;
const int kDialogLabelLeftInset = 20;
const int kDialogLabelBottomInset = 20;
const int kDialogLabelRightInset = 100;
const int kDialogLabelPreferredWidth =
350 + kDialogLabelLeftInset + kDialogLabelRightInset;
} // namespace
namespace chromeos {
EchoDialogView::EchoDialogView(EchoDialogListener* listener)
: label_(NULL),
listener_(listener),
ok_button_label_id_(0),
cancel_button_label_id_(0) {
}
EchoDialogView::~EchoDialogView() {}
void EchoDialogView::InitForEnabledEcho(const base::string16& service_name,
const base::string16& origin) {
ok_button_label_id_ = IDS_OFFERS_CONSENT_INFOBAR_ENABLE_BUTTON;
cancel_button_label_id_ = IDS_OFFERS_CONSENT_INFOBAR_DISABLE_BUTTON;
base::string16 link =
l10n_util::GetStringUTF16(IDS_OFFERS_CONSENT_INFOBAR_LABEL_LEARN_MORE);
std::vector<size_t> offsets;
base::string16 text = l10n_util::GetStringFUTF16(IDS_ECHO_CONSENT_DIALOG_TEXT,
service_name,
link,
&offsets);
label_ = new views::StyledLabel(text, this);
views::StyledLabel::RangeStyleInfo service_name_style;
service_name_style.font_style = gfx::Font::UNDERLINE;
service_name_style.tooltip = origin;
label_->AddStyleRange(
gfx::Range(offsets[0], offsets[0] + service_name.length()),
service_name_style);
views::StyledLabel::RangeStyleInfo link_style =
views::StyledLabel::RangeStyleInfo::CreateForLink();
link_style.font_style = gfx::Font::NORMAL;
label_->AddStyleRange(gfx::Range(offsets[1], offsets[1] + link.length()),
link_style);
SetLabelBorderAndBounds();
AddChildView(label_);
}
void EchoDialogView::InitForDisabledEcho() {
ok_button_label_id_ = 0;
cancel_button_label_id_ = IDS_ECHO_CONSENT_DISMISS_BUTTON;
base::string16 link =
l10n_util::GetStringUTF16(IDS_OFFERS_CONSENT_INFOBAR_LABEL_LEARN_MORE);
size_t offset;
base::string16 text = l10n_util::GetStringFUTF16(
IDS_ECHO_DISABLED_CONSENT_DIALOG_TEXT, link, &offset);
label_ = new views::StyledLabel(text, this);
views::StyledLabel::RangeStyleInfo link_style =
views::StyledLabel::RangeStyleInfo::CreateForLink();
link_style.font_style = gfx::Font::NORMAL;
label_->AddStyleRange(gfx::Range(offset, offset + link.length()), link_style);
SetLabelBorderAndBounds();
AddChildView(label_);
}
void EchoDialogView::Show(gfx::NativeWindow parent) {
DCHECK(cancel_button_label_id_);
views::DialogDelegate::CreateDialogWidget(this, parent, parent);
GetWidget()->SetSize(GetWidget()->GetRootView()->GetPreferredSize());
GetWidget()->Show();
}
int EchoDialogView::GetDefaultDialogButton() const {
return ui::DIALOG_BUTTON_NONE;
}
int EchoDialogView::GetDialogButtons() const {
int buttons = ui::DIALOG_BUTTON_NONE;
if (ok_button_label_id_)
buttons |= ui::DIALOG_BUTTON_OK;
if (cancel_button_label_id_)
buttons |= ui::DIALOG_BUTTON_CANCEL;
return buttons;
}
bool EchoDialogView::Accept() {
if (listener_) {
listener_->OnAccept();
listener_ = NULL;
}
return true;
}
bool EchoDialogView::Cancel() {
if (listener_) {
listener_->OnCancel();
listener_ = NULL;
}
return true;
}
base::string16 EchoDialogView::GetDialogButtonLabel(
ui::DialogButton button) const {
if (button == ui::DIALOG_BUTTON_OK && ok_button_label_id_)
return l10n_util::GetStringUTF16(ok_button_label_id_);
if (button == ui::DIALOG_BUTTON_CANCEL && cancel_button_label_id_)
return l10n_util::GetStringUTF16(cancel_button_label_id_);
return base::string16();
}
ui::ModalType EchoDialogView::GetModalType() const {
return ui::MODAL_TYPE_WINDOW;
}
bool EchoDialogView::ShouldShowWindowTitle() const {
return false;
}
bool EchoDialogView::ShouldShowWindowIcon() const {
return false;
}
void EchoDialogView::StyledLabelLinkClicked(const gfx::Range& range,
int event_flags) {
if (!listener_)
return;
listener_->OnMoreInfoLinkClicked();
}
gfx::Size EchoDialogView::GetPreferredSize() const {
gfx::Size size =
gfx::Size(kDialogLabelPreferredWidth,
label_->GetHeightForWidth(kDialogLabelPreferredWidth));
gfx::Insets insets = GetInsets();
size.Enlarge(insets.width(), insets.height());
return size;
}
void EchoDialogView::SetLabelBorderAndBounds() {
label_->SetBorder(views::Border::CreateEmptyBorder(kDialogLabelTopInset,
kDialogLabelLeftInset,
kDialogLabelBottomInset,
kDialogLabelRightInset));
label_->SetBounds(label_->x(),
label_->y(),
kDialogLabelPreferredWidth,
label_->GetHeightForWidth(kDialogLabelPreferredWidth));
}
} // namespace chromeos