Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / athena / wm / overview_toolbar.cc
index 4537a04..1b55c2a 100644 (file)
@@ -5,10 +5,11 @@
 #include "athena/wm/overview_toolbar.h"
 
 #include "athena/resources/grit/athena_resources.h"
+#include "athena/strings/grit/athena_strings.h"
 #include "base/bind.h"
-#include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "ui/aura/window.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/compositor/closure_animation_observer.h"
 #include "ui/compositor/layer.h"
@@ -29,8 +30,8 @@ namespace athena {
 
 class ActionButton : public ui::LayerDelegate {
  public:
-  ActionButton(int resource_id, const std::string& label)
-      : resource_id_(resource_id), label_(base::UTF8ToUTF16(label)) {
+  ActionButton(int resource_id, const base::string16& label)
+      : resource_id_(resource_id), label_(label) {
     layer_.reset(new ui::Layer(ui::LAYER_TEXTURED));
     layer_->set_delegate(this);
     layer_->SetFillsBoundsOpaquely(false);
@@ -81,6 +82,9 @@ class ActionButton : public ui::LayerDelegate {
                                       shadow);
   }
 
+  virtual void OnDelegatedFrameDamage(
+      const gfx::Rect& damage_rect_in_dip) OVERRIDE {}
+
   virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {}
   virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE {
     return base::Closure();
@@ -95,8 +99,13 @@ class ActionButton : public ui::LayerDelegate {
 
 OverviewToolbar::OverviewToolbar(aura::Window* container)
     : shown_(false),
-      close_(new ActionButton(IDR_ATHENA_OVERVIEW_TRASH, "Close")),
-      split_(new ActionButton(IDR_ATHENA_OVERVIEW_SPLIT, "Split")),
+      disabled_action_bitfields_(0),
+      close_(new ActionButton(
+          IDR_ATHENA_OVERVIEW_TRASH,
+          l10n_util::GetStringUTF16(IDS_ATHENA_OVERVIEW_CLOSE))),
+      split_(new ActionButton(
+          IDR_ATHENA_OVERVIEW_SPLIT,
+          l10n_util::GetStringUTF16(IDS_ATHENA_OVERVIEW_SPLIT))),
       current_action_(ACTION_TYPE_NONE),
       container_bounds_(container->bounds()) {
   const int kPaddingFromBottom = 200;
@@ -125,14 +134,17 @@ OverviewToolbar::~OverviewToolbar() {
 
 OverviewToolbar::ActionType OverviewToolbar::GetHighlightAction(
     const ui::GestureEvent& event) const {
-  if (IsEventOverButton(split_.get(), event))
+  if (IsActionEnabled(ACTION_TYPE_SPLIT) &&
+      IsEventOverButton(split_.get(), event))
     return ACTION_TYPE_SPLIT;
-  if (IsEventOverButton(close_.get(), event))
+  if (IsActionEnabled(ACTION_TYPE_CLOSE) &&
+      IsEventOverButton(close_.get(), event))
     return ACTION_TYPE_CLOSE;
   return ACTION_TYPE_NONE;
 }
 
 void OverviewToolbar::SetHighlightAction(ActionType action) {
+  CHECK(IsActionEnabled(action));
   if (current_action_ == action)
     return;
   current_action_ = action;
@@ -154,12 +166,21 @@ void OverviewToolbar::HideActionButtons() {
     ToggleActionButtonsVisibility();
 }
 
+void OverviewToolbar::DisableAction(ActionType action) {
+  CHECK_NE(current_action_, action);
+  disabled_action_bitfields_ |= (1u << action);
+}
+
 void OverviewToolbar::ToggleActionButtonsVisibility() {
   shown_ = !shown_;
   TransformButton(close_.get());
   TransformButton(split_.get());
 }
 
+bool OverviewToolbar::IsActionEnabled(ActionType action) const {
+  return !(disabled_action_bitfields_ & (1u << action));
+}
+
 bool OverviewToolbar::IsEventOverButton(ActionButton* button,
                                         const ui::GestureEvent& event) const {
   const int kBoundsInsetForTarget = 30;
@@ -190,7 +211,10 @@ void OverviewToolbar::TransformButton(ActionButton* button) {
       button->layer()->GetAnimator());
   split_settings.SetTweenType(gfx::Tween::SMOOTH_IN_OUT);
   button->layer()->SetTransform(ComputeTransformFor(button));
-  button->layer()->SetOpacity(shown_ ? 1 : 0);
+  bool button_is_enabled =
+      (button == close_.get() && IsActionEnabled(ACTION_TYPE_CLOSE)) ||
+      (button == split_.get() && IsActionEnabled(ACTION_TYPE_SPLIT));
+  button->layer()->SetOpacity((button_is_enabled && shown_) ? 1 : 0);
 }
 
 }  // namespace athena