// Copyright 2014 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.

#ifndef ATHENA_WM_OVERVIEW_TOOLBAR_H_
#define ATHENA_WM_OVERVIEW_TOOLBAR_H_

#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "ui/gfx/geometry/rect.h"

namespace aura {
class Window;
}

namespace gfx {
class Transform;
}

namespace ui {
class GestureEvent;
}

namespace athena {

class ActionButton;

// Responsible for showing action-buttons at the right edge of the screen during
// overview mode.
class OverviewToolbar {
 public:
  enum ActionType {
    ACTION_TYPE_NONE,
    ACTION_TYPE_CLOSE,
    ACTION_TYPE_SPLIT,
  };

  explicit OverviewToolbar(aura::Window* container);
  virtual ~OverviewToolbar();

  ActionType current_action() const { return current_action_; }

  // Returns the action the gesture-event is targeting.
  ActionType GetHighlightAction(const ui::GestureEvent& event) const;

  void SetHighlightAction(ActionType action);
  void ShowActionButtons();
  void HideActionButtons();

 private:
  void ToggleActionButtonsVisibility();
  bool IsEventOverButton(ActionButton* button,
                         const ui::GestureEvent& event) const;
  gfx::Transform ComputeTransformFor(ActionButton* button) const;
  void TransformButton(ActionButton* button);

  bool shown_;
  scoped_ptr<ActionButton> close_;
  scoped_ptr<ActionButton> split_;
  ActionType current_action_;
  const gfx::Rect container_bounds_;

  DISALLOW_COPY_AND_ASSIGN(OverviewToolbar);
};

}  // namespace athena

#endif  // ATHENA_WM_OVERVIEW_TOOLBAR_H_
