| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "views/examples/bubble_example.h" | |
| 6 | |
| 7 #include "base/utf_string_conversions.h" | |
| 8 #include "views/bubble/bubble_delegate.h" | |
| 9 #include "views/controls/button/text_button.h" | |
| 10 #include "views/controls/label.h" | |
| 11 #include "views/layout/box_layout.h" | |
| 12 #include "views/layout/fill_layout.h" | |
| 13 #include "views/widget/widget.h" | |
| 14 | |
| 15 namespace examples { | |
| 16 | |
| 17 struct BubbleConfig { | |
| 18 string16 label; | |
| 19 SkColor color; | |
| 20 views::View* anchor_view; | |
| 21 views::BubbleBorder::ArrowLocation arrow; | |
| 22 bool fade_in; | |
| 23 bool fade_out; | |
| 24 }; | |
| 25 | |
| 26 // Create four types of bubbles, one without arrow, one with an arrow, one | |
| 27 // that fades in, and another that fades out and won't close on the escape key. | |
| 28 BubbleConfig kRoundConfig = { ASCIIToUTF16("Round"), 0xFFC1B1E1, NULL, | |
| 29 views::BubbleBorder::NONE, false, false }; | |
| 30 BubbleConfig kArrowConfig = { ASCIIToUTF16("Arrow"), SK_ColorGRAY, NULL, | |
| 31 views::BubbleBorder::TOP_LEFT, false, false }; | |
| 32 BubbleConfig kFadeInConfig = { ASCIIToUTF16("FadeIn"), SK_ColorYELLOW, NULL, | |
| 33 views::BubbleBorder::BOTTOM_RIGHT, true, false }; | |
| 34 BubbleConfig kFadeOutConfig = { ASCIIToUTF16("FadeOut"), SK_ColorWHITE, NULL, | |
| 35 views::BubbleBorder::LEFT_TOP, false, true }; | |
| 36 | |
| 37 class ExampleBubbleDelegateView : public views::BubbleDelegateView { | |
| 38 public: | |
| 39 ExampleBubbleDelegateView(const BubbleConfig& config) | |
| 40 : BubbleDelegateView(config.anchor_view, config.arrow, config.color), | |
| 41 label_(config.label) {} | |
| 42 | |
| 43 protected: | |
| 44 virtual void Init() OVERRIDE { | |
| 45 SetLayoutManager(new views::FillLayout()); | |
| 46 views::Label* label = new views::Label(label_); | |
| 47 AddChildView(label); | |
| 48 } | |
| 49 | |
| 50 private: | |
| 51 string16 label_; | |
| 52 }; | |
| 53 | |
| 54 BubbleExample::BubbleExample(ExamplesMain* main) | |
| 55 : ExampleBase(main, "Bubble") {} | |
| 56 | |
| 57 BubbleExample::~BubbleExample() {} | |
| 58 | |
| 59 void BubbleExample::CreateExampleView(views::View* container) { | |
| 60 container->SetLayoutManager( | |
| 61 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 1)); | |
| 62 round_ = new views::TextButton(this, kRoundConfig.label); | |
| 63 arrow_ = new views::TextButton(this, kArrowConfig.label); | |
| 64 fade_in_ = new views::TextButton(this, kFadeInConfig.label); | |
| 65 fade_out_ = new views::TextButton(this, kFadeOutConfig.label); | |
| 66 container->AddChildView(round_); | |
| 67 container->AddChildView(arrow_); | |
| 68 container->AddChildView(fade_in_); | |
| 69 container->AddChildView(fade_out_); | |
| 70 } | |
| 71 | |
| 72 void BubbleExample::ButtonPressed(views::Button* sender, | |
| 73 const views::Event& event) { | |
| 74 BubbleConfig config; | |
| 75 if (sender == round_) | |
| 76 config = kRoundConfig; | |
| 77 else if (sender == arrow_) | |
| 78 config = kArrowConfig; | |
| 79 else if (sender == fade_in_) | |
| 80 config = kFadeInConfig; | |
| 81 else if (sender == fade_out_) | |
| 82 config = kFadeOutConfig; | |
| 83 | |
| 84 config.anchor_view = sender; | |
| 85 ExampleBubbleDelegateView* bubble_delegate = | |
| 86 new ExampleBubbleDelegateView(config); | |
| 87 views::BubbleDelegateView::CreateBubble(bubble_delegate); | |
| 88 | |
| 89 if (config.fade_in) | |
| 90 bubble_delegate->StartFade(true); | |
| 91 else | |
| 92 bubble_delegate->Show(); | |
| 93 | |
| 94 if (config.fade_out) { | |
| 95 bubble_delegate->set_close_on_esc(false); | |
| 96 bubble_delegate->StartFade(false); | |
| 97 } | |
| 98 } | |
| 99 | |
| 100 } // namespace examples | |
| OLD | NEW |