panel_window.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// Copyright (c) 2012 The Chromium Authors. All rights reserved.
200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// Use of this source code is governed by a BSD-style license that can be
300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// found in the LICENSE file.
400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#ifndef ASH_SHELL_PANEL_WINDOW_H_
600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#define ASH_SHELL_PANEL_WINDOW_H_
700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#include "base/basictypes.h"
900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#include "ui/aura/aura_export.h"
1000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#include "ui/views/widget/widget.h"
1100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#include "ui/views/widget/widget_delegate.h"
1200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
1300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chennamespace ash {
1400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
1500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenclass PanelFrameView;
1600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
1700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// Example Class for panel windows (Widget::InitParams::TYPE_PANEL).
1800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// Instances of PanelWindow will get added to the PanelContainer top level
1900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen// window which manages the panel layout through PanelLayoutManager.
2000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chenclass PanelWindow : public views::WidgetDelegateView {
2100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen public:
2200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  explicit PanelWindow(const std::string& name);
2300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual ~PanelWindow();
2400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
2500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  // Creates the widget for the panel window using |params_|.
26ecc97cc9491f40c507e372a30bcd58a9e08066a8Ray Chen  views::Widget* CreateWidget();
2700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
2800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  const std::string& name() { return name_; }
2900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  views::Widget::InitParams& params() { return params_; }
3000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
3100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  // Creates a panel window and returns the associated widget.
3200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  static views::Widget* CreatePanelWindow(const gfx::Rect& rect);
3300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
3400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen private:
3500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  // Overridden from views::View:
3600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual gfx::Size GetPreferredSize() const OVERRIDE;
3700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
3800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
3900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  // Overridden from views::WidgetDelegate:
4000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual base::string16 GetWindowTitle() const OVERRIDE;
4100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual View* GetContentsView() OVERRIDE;
4200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual bool CanResize() const OVERRIDE;
4300c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual bool CanMaximize() const OVERRIDE;
4400c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual bool CanMinimize() const OVERRIDE;
4500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  virtual views::NonClientFrameView* CreateNonClientFrameView(
4600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen      views::Widget* widget) OVERRIDE;
4700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
4800c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  std::string name_;
4900c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  views::Widget::InitParams params_;
5000c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
5100c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen  DISALLOW_COPY_AND_ASSIGN(PanelWindow);
5200c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen};
53ecc97cc9491f40c507e372a30bcd58a9e08066a8Ray Chen
5430c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten}  // namespace ash
5500c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen
5600c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen#endif  // ASH_SHELL_PANEL_WINDOW_H_
5700c575a3fccb9d3065e913f1b8fcf93e18d44eafRay Chen