text: // Copyright (c) 2012 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 CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_
  #define CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_
  
  #include "base/basictypes.h"
  #include "base/compiler_specific.h"
  #include "build/build_config.h"
  #include "ui/accessibility/ax_enums.h"
  #include "ui/views/views_delegate.h"
  
  class ChromeViewsDelegate : public views::ViewsDelegate {
   public:
    ChromeViewsDelegate();
    ~ChromeViewsDelegate() override;
  
    // views::ViewsDelegate:
    void SaveWindowPlacement(const views::Widget* window,
                             const std::string& window_name,
                             const gfx::Rect& bounds,
                             ui::WindowShowState show_state) override;
    bool GetSavedWindowPlacement(const views::Widget* widget,
                                 const std::string& window_name,
                                 gfx::Rect* bounds,
                                 ui::WindowShowState* show_state) const override;
    void NotifyAccessibilityEvent(views::View* view,
                                  ui::AXEvent event_type) override;
    void NotifyMenuItemFocused(const base::string16& menu_name,
                               const base::string16& menu_item_name,
                               int item_index,
                               int item_count,
                               bool has_submenu) override;
  #if defined(OS_WIN)
    virtual HICON GetDefaultWindowIcon() const override;
    virtual bool IsWindowInMetro(gfx::NativeWindow window) const override;
  #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
    gfx::ImageSkia* GetDefaultWindowIcon() const override;
  #endif
  
  #if defined(USE_ASH)
    views::NonClientFrameView* CreateDefaultNonClientFrameView(
        views::Widget* widget) override;
  #endif
    void AddRef() override;
    void ReleaseRef() override;
    void OnBeforeWidgetInit(
        views::Widget::InitParams* params,
        views::internal::NativeWidgetDelegate* delegate) override;
  #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
    bool WindowManagerProvidesTitleBar(bool maximized) override;
  #endif
  #if defined(USE_AURA)
    ui::ContextFactory* GetContextFactory() override;
  #endif
  #if defined(OS_WIN)
    virtual int GetAppbarAutohideEdges(HMONITOR monitor,
                                       const base::Closure& callback) override;
  #endif
  
   private:
  #if defined(OS_WIN)
    typedef std::map<HMONITOR, int> AppbarAutohideEdgeMap;
  
    // Callback on main thread with the edges. |returned_edges| is the value that
    // was returned from the call to GetAutohideEdges() that initiated the lookup.
    void OnGotAppbarAutohideEdges(const base::Closure& callback,
                                  HMONITOR monitor,
                                  int returned_edges,
                                  int edges);
  #endif
  
    // Function to retrieve default opacity value mainly based on platform
    // and desktop context.
    views::Widget::InitParams::WindowOpacity GetOpacityForInitParams(
        const views::Widget::InitParams& params);
  
  #if defined(OS_WIN)
    AppbarAutohideEdgeMap appbar_autohide_edge_map_;
    // If true we're in the process of notifying a callback from
    // GetAutohideEdges().start a new query.
    bool in_autohide_edges_callback_;
  
    base::WeakPtrFactory<ChromeViewsDelegate> weak_factory_;
  #endif
  
    DISALLOW_COPY_AND_ASSIGN(ChromeViewsDelegate);
  };
  
  #endif  // CHROME_BROWSER_UI_VIEWS_CHROME_VIEWS_DELEGATE_H_
  