#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"
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);
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();
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;
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;
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;
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