// 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_FRAME_FIND_DIALOG_H_
#define CHROME_FRAME_FIND_DIALOG_H_

#include <atlbase.h>
#include <atlwin.h>

#include "base/memory/ref_counted.h"
#include "base/strings/string16.h"
#include "resource.h"
#include "grit/chrome_frame_dialogs.h"

class ChromeFrameAutomationClient;

class CFFindDialog : public CDialogImpl<CFFindDialog> {
 public:
  enum { IDD = IDD_CHROME_FRAME_FIND_DIALOG };

  BEGIN_MSG_MAP(CFFindDialog)
    MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(IDOK, OnFind)
    COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
  END_MSG_MAP()

  CFFindDialog();
  void Init(ChromeFrameAutomationClient* automation_client);

  LRESULT OnDestroy(UINT msg, WPARAM wparam,
                    LPARAM lparam, BOOL& handled);  // NOLINT
  LRESULT OnFind(WORD wNotifyCode, WORD wID,
                 HWND hWndCtl, BOOL& bHandled);  // NOLINT
  LRESULT OnCancel(WORD wNotifyCode, WORD wID,
                   HWND hWndCtl, BOOL& bHandled);  // NOLINT
  LRESULT OnInitDialog(UINT msg, WPARAM wparam,
                       LPARAM lparam, BOOL& handled);  // NOLINT

 private:

  // Since the message loop we expect to run in isn't going to be nicely
  // calling IsDialogMessage(), we need to hook the wnd proc and call it
  // ourselves. See http://support.microsoft.com/kb/q187988/
  bool InstallMessageHook();
  bool UninstallMessageHook();
  static LRESULT CALLBACK GetMsgProc(int code, WPARAM wparam, LPARAM lparam);
  static HHOOK msg_hook_;

  // Store the text we searched for last to determine whether we are doing a
  // "Find" or a "Find Next".
  string16 last_find_text_;

  // We don't own these, and they must exist at least as long as we do.
  scoped_refptr<ChromeFrameAutomationClient> automation_client_;
};

#endif  // CHROME_FRAME_FIND_DIALOG_H_
