1/////////////////////////////////////////////////////////////////////////////
2// Name:        reparent.h
3// Purpose:     Reparenting classes
4// Author:      Julian Smart
5// Modified by:
6// Created:     2002-03-09
7// RCS-ID:      $Id: reparent.h 41020 2006-09-05 20:47:48Z VZ $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_REPARENT_H_
13#define _WX_REPARENT_H_
14
15#include "wx/window.h"
16
17/*
18 * This class helps to reparent a specific window
19 */
20
21class WXDLLIMPEXP_CORE wxAdoptedWindow;
22class WXDLLIMPEXP_CORE wxReparenter: public wxObject
23{
24public:
25    wxReparenter() {}
26
27    // We assume that toReparent has had its X window set
28    // appropriately. toReparent is typically a wxAdoptedWindow.
29    bool Reparent(wxWindow* newParent, wxAdoptedWindow* toReparent);
30
31    // Wait for an appropriate window to be created.
32    // If exactMatch is FALSE, a substring match is OK.
33    // If windowName is empty, then wait for the next overrideRedirect window.
34    bool WaitAndReparent(wxWindow* newParent, wxAdoptedWindow* toReparent,
35                         const wxString& windowName = wxEmptyString,
36                         bool exactMatch = TRUE);
37
38protected:
39
40    bool ProcessXEvent(WXEvent* event);
41    WXWindow FindAClientWindow(WXWindow window, const wxString& name);
42
43    static bool sm_done;
44    static wxAdoptedWindow* sm_toReparent;
45    static wxWindow* sm_newParent;
46    static wxString  sm_name;
47    static bool      sm_exactMatch;
48};
49
50/*
51 * A window that adopts its handle from the native
52 * toolkit. It has no parent until reparented.
53 */
54
55class WXDLLIMPEXP_CORE wxAdoptedWindow: public wxWindow
56{
57  public:
58    wxAdoptedWindow();
59    wxAdoptedWindow(WXWindow window);
60    virtual ~wxAdoptedWindow();
61
62    void SetHandle(WXWindow window) { m_mainWindow = window; m_clientWindow = window; }
63    WXWindow GetHandle() const { return GetMainWindow(); }
64};
65
66#endif
67// _WX_REPARENT_H_
68