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

#include "ui/views/controls/menu/menu_runner_impl_adapter.h"

#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner_impl.h"

namespace views {
namespace internal {

MenuRunnerImplAdapter::MenuRunnerImplAdapter(ui::MenuModel* menu_model)
    : menu_model_adapter_(new MenuModelAdapter(menu_model)),
      impl_(new MenuRunnerImpl(menu_model_adapter_->CreateMenu())) {
}

bool MenuRunnerImplAdapter::IsRunning() const {
  return impl_->IsRunning();
}

void MenuRunnerImplAdapter::Release() {
  impl_->Release();
  delete this;
}

MenuRunner::RunResult MenuRunnerImplAdapter::RunMenuAt(
    Widget* parent,
    MenuButton* button,
    const gfx::Rect& bounds,
    MenuAnchorPosition anchor,
    int32 types) {
  return impl_->RunMenuAt(parent, button, bounds, anchor, types);
}

void MenuRunnerImplAdapter::Cancel() {
  impl_->Cancel();
}

base::TimeDelta MenuRunnerImplAdapter::GetClosingEventTime() const {
  return impl_->GetClosingEventTime();
}

MenuRunnerImplAdapter::~MenuRunnerImplAdapter() {
}

}  // namespace internal
}  // namespace views
