summaryrefslogtreecommitdiffstats
path: root/ui/views/examples/bubble_example.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views/examples/bubble_example.cc')
-rw-r--r--ui/views/examples/bubble_example.cc100
1 files changed, 100 insertions, 0 deletions
diff --git a/ui/views/examples/bubble_example.cc b/ui/views/examples/bubble_example.cc
new file mode 100644
index 0000000..38a3529
--- /dev/null
+++ b/ui/views/examples/bubble_example.cc
@@ -0,0 +1,100 @@
+// Copyright (c) 2011 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 "ui/views/examples/bubble_example.h"
+
+#include "base/utf_string_conversions.h"
+#include "views/bubble/bubble_delegate.h"
+#include "views/controls/button/text_button.h"
+#include "views/controls/label.h"
+#include "views/layout/box_layout.h"
+#include "views/layout/fill_layout.h"
+#include "views/widget/widget.h"
+
+namespace examples {
+
+struct BubbleConfig {
+ string16 label;
+ SkColor color;
+ views::View* anchor_view;
+ views::BubbleBorder::ArrowLocation arrow;
+ bool fade_in;
+ bool fade_out;
+};
+
+// Create four types of bubbles, one without arrow, one with an arrow, one
+// that fades in, and another that fades out and won't close on the escape key.
+BubbleConfig kRoundConfig = { ASCIIToUTF16("Round"), 0xFFC1B1E1, NULL,
+ views::BubbleBorder::NONE, false, false };
+BubbleConfig kArrowConfig = { ASCIIToUTF16("Arrow"), SK_ColorGRAY, NULL,
+ views::BubbleBorder::TOP_LEFT, false, false };
+BubbleConfig kFadeInConfig = { ASCIIToUTF16("FadeIn"), SK_ColorYELLOW, NULL,
+ views::BubbleBorder::BOTTOM_RIGHT, true, false };
+BubbleConfig kFadeOutConfig = { ASCIIToUTF16("FadeOut"), SK_ColorWHITE, NULL,
+ views::BubbleBorder::LEFT_TOP, false, true };
+
+class ExampleBubbleDelegateView : public views::BubbleDelegateView {
+ public:
+ ExampleBubbleDelegateView(const BubbleConfig& config)
+ : BubbleDelegateView(config.anchor_view, config.arrow, config.color),
+ label_(config.label) {}
+
+ protected:
+ virtual void Init() OVERRIDE {
+ SetLayoutManager(new views::FillLayout());
+ views::Label* label = new views::Label(label_);
+ AddChildView(label);
+ }
+
+ private:
+ string16 label_;
+};
+
+BubbleExample::BubbleExample(ExamplesMain* main)
+ : ExampleBase(main, "Bubble") {}
+
+BubbleExample::~BubbleExample() {}
+
+void BubbleExample::CreateExampleView(views::View* container) {
+ container->SetLayoutManager(
+ new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 1));
+ round_ = new views::TextButton(this, kRoundConfig.label);
+ arrow_ = new views::TextButton(this, kArrowConfig.label);
+ fade_in_ = new views::TextButton(this, kFadeInConfig.label);
+ fade_out_ = new views::TextButton(this, kFadeOutConfig.label);
+ container->AddChildView(round_);
+ container->AddChildView(arrow_);
+ container->AddChildView(fade_in_);
+ container->AddChildView(fade_out_);
+}
+
+void BubbleExample::ButtonPressed(views::Button* sender,
+ const views::Event& event) {
+ BubbleConfig config;
+ if (sender == round_)
+ config = kRoundConfig;
+ else if (sender == arrow_)
+ config = kArrowConfig;
+ else if (sender == fade_in_)
+ config = kFadeInConfig;
+ else if (sender == fade_out_)
+ config = kFadeOutConfig;
+
+ config.anchor_view = sender;
+ ExampleBubbleDelegateView* bubble_delegate =
+ new ExampleBubbleDelegateView(config);
+ views::BubbleDelegateView::CreateBubble(bubble_delegate);
+
+ if (config.fade_in)
+ bubble_delegate->StartFade(true);
+ else
+ bubble_delegate->Show();
+
+ if (config.fade_out) {
+ bubble_delegate->set_close_on_esc(false);
+ bubble_delegate->StartFade(false);
+ }
+}
+
+} // namespace examples