#include "wx/mac/private.h"
#endif
+#ifdef __WXMSW__
+ #include "wx/msw/wrapwin.h"
+ #include "wx/msw/private.h"
+ #include "wx/msw/dc.h"
+#endif
+
IMPLEMENT_DYNAMIC_CLASS(wxAuiManagerEvent, wxEvent)
IMPLEMENT_CLASS(wxAuiManager, wxEvtHandler)
#else
// __WXGTK20__
-#include "wx/gtk/private.h"
+#include <gtk/gtk.h>
static void
gtk_pseudo_window_realized_callback( GtkWidget *m_widget, void *WXUNUSED(win) )
return;
m_title = title;
-
+
m_widget = gtk_window_new( GTK_WINDOW_POPUP );
g_signal_connect( m_widget, "realize",
G_CALLBACK (gtk_pseudo_window_realized_callback), this );
-
+
GdkColor col;
col.red = 128 * 256;
col.green = 192 * 256;
{
return true;
}
-
+
private:
DECLARE_DYNAMIC_CLASS(wxPseudoTransparentFrame)
};
wxBitmap stipple = wxPaneCreateStippleBitmap();
wxBrush brush(stipple);
dc.SetBrush(brush);
+#ifdef __WXMSW__
+ wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
+ PatBlt(GetHdcOf(*impl), rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight(), PATINVERT);
+#else
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetLogicalFunction(wxXOR);
dc.DrawRectangle(rect);
+#endif
}
{
wxAuiDockInfo& dock = *docks.Item(i);
dock.dock_row = i;
-
+
int j, pane_count;
for (j = 0, pane_count = dock.panes.GetCount(); j < pane_count; ++j)
dock.panes.Item(j)->dock_row = i;
}
#endif
+ // We need to remove any reference to this wxAuiManager in any of the
+ // wxAuiFloatingFrames associated with this manager in case they haven't
+ // been deleted just yet.
+ // We need an array copy since Unregister removes the items.
+ wxAuiFloatingFramePtrArray array_copy = m_floating_frames;
+ int i, count = array_copy.GetCount();
+ for (i = 0; i < count; ++i)
+ {
+ UnregisterFloatingFrame(array_copy.Item(i));
+ }
+
delete m_art;
}
wxAuiFloatingFrame* wxAuiManager::CreateFloatingFrame(wxWindow* parent,
const wxAuiPaneInfo& pane_info)
{
- return new wxAuiFloatingFrame(parent, this, pane_info);
+ wxAuiFloatingFrame* frame = new wxAuiFloatingFrame(parent, this, pane_info);
+ RegisterFloatingFrame(frame);
+ return frame;
}
bool wxAuiManager::CanDockPanel(const wxAuiPaneInfo & WXUNUSED(p))
return !(wxGetKeyState(WXK_CONTROL) || wxGetKeyState(WXK_ALT));
}
+// registers a floating frame with this manager (see header)
+void wxAuiManager::RegisterFloatingFrame(wxAuiFloatingFrame* frame)
+{
+ frame->SetOwnerManager(this);
+ int i, count = m_floating_frames.GetCount();
+ for (i = 0; i < count; ++i)
+ {
+ wxAuiFloatingFrame* f = m_floating_frames.Item(i);
+ if (f == frame)
+ // this frame is already registered
+ return;
+ }
+ m_floating_frames.Add(frame);
+}
+
+// unregisters a floating frame from this manager (see header)
+void wxAuiManager::UnregisterFloatingFrame(wxAuiFloatingFrame* frame)
+{
+ frame->SetOwnerManager(NULL);
+ int i, count = m_floating_frames.GetCount();
+ for (i = 0; i < count; ++i)
+ {
+ wxAuiFloatingFrame* f = m_floating_frames.Item(i);
+ if (f == frame)
+ {
+ m_floating_frames.Remove(f);
+ return;
+ }
+ }
+}
+
// GetPane() looks up a wxAuiPaneInfo structure based
// on the supplied window pointer. Upon failure, GetPane()
// returns an empty wxAuiPaneInfo, a condition which can be checked
{
wxFrame* f = static_cast<wxFrame*>(w);
can_do_transparent = f->CanSetTransparent();
+
break;
}
{
ClosePane(pane);
}
-
+
Update();
}
}