Coompilation fixes for GTK 1.1.3
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@999 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
#include "wx/dcmemory.h"
|
#include "wx/dcmemory.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// local data
|
// local data
|
||||||
|
237
src/gtk/dnd.cpp
237
src/gtk/dnd.cpp
@@ -27,6 +27,239 @@
|
|||||||
|
|
||||||
extern bool g_blockEventsOnDrag;
|
extern bool g_blockEventsOnDrag;
|
||||||
|
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
#if (GTK_MICRO_VERSION >= 3)
|
||||||
|
#define NEW_GTK_DND_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
wxDropTarget::wxDropTarget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropTarget::~wxDropTarget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropTarget::UnregisterWidget( GtkWidget *widget )
|
||||||
|
{
|
||||||
|
if (!widget) return;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropTarget::RegisterWidget( GtkWidget *widget )
|
||||||
|
{
|
||||||
|
if (!widget) return;
|
||||||
|
|
||||||
|
wxString formats;
|
||||||
|
int valid = 0;
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < GetFormatCount(); i++ )
|
||||||
|
{
|
||||||
|
wxDataFormat df = GetFormat( i );
|
||||||
|
switch (df)
|
||||||
|
{
|
||||||
|
case wxDF_TEXT:
|
||||||
|
if (i > 0) formats += ";";
|
||||||
|
formats += "text/plain";
|
||||||
|
valid++;
|
||||||
|
break;
|
||||||
|
case wxDF_FILENAME:
|
||||||
|
if (i > 0) formats += ";";
|
||||||
|
formats += "file:ALL";
|
||||||
|
valid++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *str = WXSTRINGCAST formats;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTextDropTarget
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxTextDropTarget::OnDrop( long x, long y, const void *data, size_t WXUNUSED(size) )
|
||||||
|
{
|
||||||
|
OnDropText( x, y, (const char*)data );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextDropTarget::OnDropText( long x, long y, const char *psz )
|
||||||
|
{
|
||||||
|
printf( "Got dropped text: %s.\n", psz );
|
||||||
|
printf( "At x: %d, y: %d.\n", (int)x, (int)y );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxTextDropTarget::GetFormatCount() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataFormat wxTextDropTarget::GetFormat(size_t WXUNUSED(n)) const
|
||||||
|
{
|
||||||
|
return wxDF_TEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileDropTarget
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxFileDropTarget::OnDropFiles( long x, long y, size_t nFiles, const char * const aszFiles[] )
|
||||||
|
{
|
||||||
|
printf( "Got %d dropped files.\n", (int)nFiles );
|
||||||
|
printf( "At x: %d, y: %d.\n", (int)x, (int)y );
|
||||||
|
for (size_t i = 0; i < nFiles; i++)
|
||||||
|
{
|
||||||
|
printf( aszFiles[i] );
|
||||||
|
printf( "\n" );
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFileDropTarget::OnDrop(long x, long y, const void *data, size_t size )
|
||||||
|
{
|
||||||
|
size_t number = 0;
|
||||||
|
char *text = (char*) data;
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
if (text[i] == 0) number++;
|
||||||
|
|
||||||
|
if (number == 0) return TRUE;
|
||||||
|
|
||||||
|
char **files = new char*[number];
|
||||||
|
|
||||||
|
text = (char*) data;
|
||||||
|
for (size_t i = 0; i < number; i++)
|
||||||
|
{
|
||||||
|
files[i] = text;
|
||||||
|
int len = strlen( text );
|
||||||
|
text += len+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ret = OnDropFiles( x, y, 1, files );
|
||||||
|
|
||||||
|
free( files );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxFileDropTarget::GetFormatCount() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataFormat wxFileDropTarget::GetFormat(size_t WXUNUSED(n)) const
|
||||||
|
{
|
||||||
|
return wxDF_FILENAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// wxDropSource
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDropSource::wxDropSource( wxWindow *win )
|
||||||
|
{
|
||||||
|
g_blockEventsOnDrag = TRUE;
|
||||||
|
|
||||||
|
m_window = win;
|
||||||
|
m_widget = win->m_widget;
|
||||||
|
if (win->m_wxwindow) m_widget = win->m_wxwindow;
|
||||||
|
|
||||||
|
m_data = (wxDataObject *) NULL;
|
||||||
|
m_retValue = wxDragCancel;
|
||||||
|
|
||||||
|
m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
|
||||||
|
m_goaheadCursor = wxCursor( wxCURSOR_HAND );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropSource::wxDropSource( wxDataObject &data, wxWindow *win )
|
||||||
|
{
|
||||||
|
g_blockEventsOnDrag = TRUE;
|
||||||
|
|
||||||
|
m_window = win;
|
||||||
|
m_widget = win->m_widget;
|
||||||
|
if (win->m_wxwindow) m_widget = win->m_wxwindow;
|
||||||
|
m_retValue = wxDragCancel;
|
||||||
|
|
||||||
|
m_data = &data;
|
||||||
|
|
||||||
|
m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
|
||||||
|
m_goaheadCursor = wxCursor( wxCURSOR_HAND );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::SetData( wxDataObject &data )
|
||||||
|
{
|
||||||
|
m_data = &data;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropSource::~wxDropSource(void)
|
||||||
|
{
|
||||||
|
// if (m_data) delete m_data;
|
||||||
|
|
||||||
|
g_blockEventsOnDrag = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
|
||||||
|
{
|
||||||
|
wxASSERT_MSG( m_data, "wxDragSource: no data" );
|
||||||
|
|
||||||
|
if (!m_data) return (wxDragResult) wxDragNone;
|
||||||
|
if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
|
||||||
|
|
||||||
|
RegisterWindow();
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
UnregisterWindow();
|
||||||
|
|
||||||
|
g_blockEventsOnDrag = FALSE;
|
||||||
|
|
||||||
|
return m_retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::RegisterWindow(void)
|
||||||
|
{
|
||||||
|
if (!m_data) return;
|
||||||
|
|
||||||
|
wxString formats;
|
||||||
|
|
||||||
|
wxDataFormat df = m_data->GetPreferredFormat();
|
||||||
|
|
||||||
|
switch (df)
|
||||||
|
{
|
||||||
|
case wxDF_TEXT:
|
||||||
|
formats += "text/plain";
|
||||||
|
break;
|
||||||
|
case wxDF_FILENAME:
|
||||||
|
formats += "file:ALL";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *str = WXSTRINGCAST formats;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::UnregisterWindow(void)
|
||||||
|
{
|
||||||
|
if (!m_widget) return;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxDropTarget
|
// wxDropTarget
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -322,3 +555,7 @@ void wxDropSource::UnregisterWindow(void)
|
|||||||
|
|
||||||
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
|
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
@@ -160,7 +160,7 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title,
|
|||||||
if (m_parent) m_parent->AddChild( this );
|
if (m_parent) m_parent->AddChild( this );
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,260 +316,262 @@ void wxFrame::GetClientSize( int *width, int *height ) const
|
|||||||
|
|
||||||
void wxFrame::SetClientSize( int const width, int const height )
|
void wxFrame::SetClientSize( int const width, int const height )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
int h = height;
|
int h = height;
|
||||||
if (m_frameMenuBar) h += wxMENU_HEIGHT;
|
if (m_frameMenuBar) h += wxMENU_HEIGHT;
|
||||||
if (m_frameStatusBar) h += wxSTATUS_HEIGHT;
|
if (m_frameStatusBar) h += wxSTATUS_HEIGHT;
|
||||||
if (m_frameToolBar)
|
if (m_frameToolBar)
|
||||||
{
|
{
|
||||||
int y = 0;
|
int y = 0;
|
||||||
m_frameToolBar->GetSize( (int *) NULL, &y );
|
m_frameToolBar->GetSize( (int *) NULL, &y );
|
||||||
h += y;
|
h += y;
|
||||||
}
|
}
|
||||||
wxWindow::SetClientSize( width, h );
|
wxWindow::SetClientSize( width, h );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
|
void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
|
||||||
{
|
{
|
||||||
// due to a bug in gtk, x,y are always 0
|
// due to a bug in gtk, x,y are always 0
|
||||||
// m_x = x;
|
// m_x = x;
|
||||||
// m_y = y;
|
// m_y = y;
|
||||||
|
|
||||||
if ((m_height == height) && (m_width == width) &&
|
if ((m_height == height) && (m_width == width) &&
|
||||||
(m_sizeSet)) return;
|
(m_sizeSet)) return;
|
||||||
if (!m_wxwindow) return;
|
if (!m_wxwindow) return;
|
||||||
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
|
|
||||||
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
|
|
||||||
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
|
|
||||||
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
|
|
||||||
|
|
||||||
gtk_widget_set_usize( m_widget, m_width, m_height );
|
|
||||||
|
|
||||||
// This emulates the new wxMSW behaviour
|
|
||||||
|
|
||||||
if (m_frameMenuBar)
|
|
||||||
{
|
|
||||||
m_frameMenuBar->m_x = 1;
|
|
||||||
m_frameMenuBar->m_y = 1;
|
|
||||||
m_frameMenuBar->m_width = m_width-2;
|
|
||||||
m_frameMenuBar->m_height = wxMENU_HEIGHT-2;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, 1, 1 );
|
|
||||||
gtk_widget_set_usize( m_frameMenuBar->m_widget, m_width-2, wxMENU_HEIGHT-2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_frameToolBar)
|
|
||||||
{
|
|
||||||
int y = 0;
|
|
||||||
if (m_frameMenuBar) y = wxMENU_HEIGHT;
|
|
||||||
int h = m_frameToolBar->m_height;
|
|
||||||
|
|
||||||
m_frameToolBar->m_x = 2;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, 2, y );
|
|
||||||
gtk_widget_set_usize( m_frameToolBar->m_widget, m_width-3, h );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_frameStatusBar)
|
m_width = width;
|
||||||
{
|
m_height = height;
|
||||||
// OK, this hurts in the eye, but I don't want to call SetSize()
|
|
||||||
// because I don't want to call any non-native functions here.
|
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
|
||||||
m_frameStatusBar->m_x = 0;
|
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
|
||||||
m_frameStatusBar->m_y = m_height-wxSTATUS_HEIGHT;
|
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
|
||||||
m_frameStatusBar->m_width = m_width;
|
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
|
||||||
m_frameStatusBar->m_height = wxSTATUS_HEIGHT;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, 0, m_height-wxSTATUS_HEIGHT );
|
|
||||||
gtk_widget_set_usize( m_frameStatusBar->m_widget, m_width, wxSTATUS_HEIGHT );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sizeSet = TRUE;
|
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
|
||||||
|
event.SetEventObject( this );
|
||||||
|
ProcessEvent( event );
|
||||||
|
|
||||||
|
gtk_widget_set_usize( m_widget, m_width, m_height );
|
||||||
|
|
||||||
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
|
// This emulates the new wxMSW behaviour
|
||||||
event.SetEventObject( this );
|
|
||||||
ProcessEvent( event );
|
if (m_frameMenuBar)
|
||||||
|
{
|
||||||
|
m_frameMenuBar->m_x = 1;
|
||||||
|
m_frameMenuBar->m_y = 1;
|
||||||
|
m_frameMenuBar->m_width = m_width-2;
|
||||||
|
m_frameMenuBar->m_height = wxMENU_HEIGHT-2;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, 1, 1 );
|
||||||
|
gtk_widget_set_usize( m_frameMenuBar->m_widget, m_width-2, wxMENU_HEIGHT-2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_frameToolBar)
|
||||||
|
{
|
||||||
|
int y = 0;
|
||||||
|
if (m_frameMenuBar) y = wxMENU_HEIGHT;
|
||||||
|
int h = m_frameToolBar->m_height;
|
||||||
|
|
||||||
|
m_frameToolBar->m_x = 2;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, 2, y );
|
||||||
|
gtk_widget_set_usize( m_frameToolBar->m_widget, m_width-3, h );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_frameStatusBar)
|
||||||
|
{
|
||||||
|
// OK, this hurts in the eye, but I don't want to call SetSize()
|
||||||
|
// because I don't want to call any non-native functions here.
|
||||||
|
m_frameStatusBar->m_x = 0;
|
||||||
|
m_frameStatusBar->m_y = m_height-wxSTATUS_HEIGHT;
|
||||||
|
m_frameStatusBar->m_width = m_width;
|
||||||
|
m_frameStatusBar->m_height = wxSTATUS_HEIGHT;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, 0, m_height-wxSTATUS_HEIGHT );
|
||||||
|
gtk_widget_set_usize( m_frameStatusBar->m_widget, m_width, wxSTATUS_HEIGHT );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_sizeSet = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
|
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
if ( GetAutoLayout() )
|
if (GetAutoLayout())
|
||||||
Layout();
|
|
||||||
else {
|
|
||||||
// no child: go out !
|
|
||||||
if (!GetChildren()->First())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// do we have exactly one child?
|
|
||||||
wxWindow *child = (wxWindow *) NULL;
|
|
||||||
for(wxNode *node = GetChildren()->First(); node; node = node->Next())
|
|
||||||
{
|
{
|
||||||
wxWindow *win = (wxWindow *)node->Data();
|
Layout();
|
||||||
if (!IS_KIND_OF(win,wxFrame) && !IS_KIND_OF(win,wxDialog)
|
|
||||||
#if 0 // not in m_children anyway ?
|
|
||||||
&& (win != m_frameMenuBar) &&
|
|
||||||
(win != m_frameToolBar) &&
|
|
||||||
(win != m_frameStatusBar)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ( child ) // it's the second one: do nothing
|
|
||||||
return;
|
|
||||||
|
|
||||||
child = win;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// no child: go out !
|
||||||
|
if (!GetChildren()->First()) return;
|
||||||
|
|
||||||
|
// do we have exactly one child?
|
||||||
|
wxWindow *child = (wxWindow *) NULL;
|
||||||
|
for(wxNode *node = GetChildren()->First(); node; node = node->Next())
|
||||||
|
{
|
||||||
|
wxWindow *win = (wxWindow *)node->Data();
|
||||||
|
if (!IS_KIND_OF(win,wxFrame) && !IS_KIND_OF(win,wxDialog)
|
||||||
|
#if 0 // not in m_children anyway ?
|
||||||
|
&& (win != m_frameMenuBar) &&
|
||||||
|
(win != m_frameToolBar) &&
|
||||||
|
(win != m_frameStatusBar)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// it's the second one: do nothing
|
||||||
|
if (child) return;
|
||||||
|
child = win;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// yes: set it's size to fill all the frame
|
// yes: set it's size to fill all the frame
|
||||||
int client_x, client_y;
|
int client_x, client_y;
|
||||||
GetClientSize(&client_x, &client_y);
|
GetClientSize( &client_x, &client_y );
|
||||||
child->SetSize( 1, 1, client_x-2, client_y);
|
child->SetSize( 1, 1, client_x-2, client_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
|
static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
|
||||||
{
|
{
|
||||||
menu->SetInvokingWindow( win );
|
menu->SetInvokingWindow( win );
|
||||||
wxNode *node = menu->m_items.First();
|
wxNode *node = menu->m_items.First();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxMenuItem *menuitem = (wxMenuItem*)node->Data();
|
wxMenuItem *menuitem = (wxMenuItem*)node->Data();
|
||||||
if (menuitem->IsSubMenu())
|
if (menuitem->IsSubMenu())
|
||||||
SetInvokingWindow( menuitem->GetSubMenu(), win );
|
SetInvokingWindow( menuitem->GetSubMenu(), win );
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetMenuBar( wxMenuBar *menuBar )
|
void wxFrame::SetMenuBar( wxMenuBar *menuBar )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
wxASSERT_MSG( (m_wxwindow != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_wxwindow != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_frameMenuBar = menuBar;
|
m_frameMenuBar = menuBar;
|
||||||
|
|
||||||
if (m_frameMenuBar)
|
if (m_frameMenuBar)
|
||||||
{
|
|
||||||
wxNode *node = m_frameMenuBar->m_menus.First();
|
|
||||||
while (node)
|
|
||||||
{
|
{
|
||||||
wxMenu *menu = (wxMenu*)node->Data();
|
wxNode *node = m_frameMenuBar->m_menus.First();
|
||||||
SetInvokingWindow( menu, this );
|
while (node)
|
||||||
node = node->Next();
|
{
|
||||||
}
|
wxMenu *menu = (wxMenu*)node->Data();
|
||||||
|
SetInvokingWindow( menu, this );
|
||||||
|
node = node->Next();
|
||||||
|
}
|
||||||
|
|
||||||
if (m_frameMenuBar->m_parent != this)
|
if (m_frameMenuBar->m_parent != this)
|
||||||
{
|
{
|
||||||
m_frameMenuBar->m_parent = this;
|
m_frameMenuBar->m_parent = this;
|
||||||
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
|
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
|
||||||
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
|
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuBar *wxFrame::GetMenuBar(void) const
|
wxMenuBar *wxFrame::GetMenuBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameMenuBar;
|
return m_frameMenuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
|
wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_MSG( m_frameToolBar == NULL, FALSE, "recreating toolbar in wxFrame" );
|
wxCHECK_MSG( m_frameToolBar == NULL, FALSE, "recreating toolbar in wxFrame" );
|
||||||
|
|
||||||
m_frameToolBar = OnCreateToolBar( style, id, name );
|
m_frameToolBar = OnCreateToolBar( style, id, name );
|
||||||
|
|
||||||
GetChildren()->DeleteObject( m_frameToolBar );
|
GetChildren()->DeleteObject( m_frameToolBar );
|
||||||
|
|
||||||
return m_frameToolBar;
|
return m_frameToolBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar* wxFrame::OnCreateToolBar( long style, wxWindowID id, const wxString& name )
|
wxToolBar* wxFrame::OnCreateToolBar( long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
return new wxToolBar( this, id, wxDefaultPosition, wxDefaultSize, style, name );
|
return new wxToolBar( this, id, wxDefaultPosition, wxDefaultSize, style, name );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar *wxFrame::GetToolBar(void) const
|
wxToolBar *wxFrame::GetToolBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameToolBar;
|
return m_frameToolBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar* wxFrame::CreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
wxStatusBar* wxFrame::CreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, "recreating status bar in wxFrame" );
|
wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, "recreating status bar in wxFrame" );
|
||||||
|
|
||||||
m_frameStatusBar = OnCreateStatusBar( number, style, id, name );
|
m_frameStatusBar = OnCreateStatusBar( number, style, id, name );
|
||||||
|
|
||||||
return m_frameStatusBar;
|
return m_frameStatusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar *wxFrame::OnCreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
wxStatusBar *wxFrame::OnCreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
wxStatusBar *statusBar = (wxStatusBar *) NULL;
|
wxStatusBar *statusBar = (wxStatusBar *) NULL;
|
||||||
|
|
||||||
statusBar = new wxStatusBar(this, id, wxPoint(0, 0), wxSize(100, 20), style, name);
|
statusBar = new wxStatusBar(this, id, wxPoint(0, 0), wxSize(100, 20), style, name);
|
||||||
|
|
||||||
// Set the height according to the font and the border size
|
// Set the height according to the font and the border size
|
||||||
wxClientDC dc(statusBar);
|
wxClientDC dc(statusBar);
|
||||||
dc.SetFont( *statusBar->GetFont() );
|
dc.SetFont( *statusBar->GetFont() );
|
||||||
|
|
||||||
long x, y;
|
long x, y;
|
||||||
dc.GetTextExtent( "X", &x, &y );
|
dc.GetTextExtent( "X", &x, &y );
|
||||||
|
|
||||||
int height = (int)( (y * 1.1) + 2* statusBar->GetBorderY());
|
int height = (int)( (y * 1.1) + 2* statusBar->GetBorderY());
|
||||||
|
|
||||||
statusBar->SetSize( -1, -1, 100, height );
|
statusBar->SetSize( -1, -1, 100, height );
|
||||||
|
|
||||||
statusBar->SetFieldsCount( number );
|
statusBar->SetFieldsCount( number );
|
||||||
return statusBar;
|
return statusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetStatusText(const wxString& text, int number)
|
void wxFrame::SetStatusText(const wxString& text, int number)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
|
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
|
||||||
|
|
||||||
m_frameStatusBar->SetStatusText(text, number);
|
m_frameStatusBar->SetStatusText(text, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetStatusWidths(int n, const int widths_field[] )
|
void wxFrame::SetStatusWidths(int n, const int widths_field[] )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
|
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
|
||||||
|
|
||||||
m_frameStatusBar->SetStatusWidths(n, widths_field);
|
m_frameStatusBar->SetStatusWidths(n, widths_field);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar *wxFrame::GetStatusBar(void) const
|
wxStatusBar *wxFrame::GetStatusBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameStatusBar;
|
return m_frameStatusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetTitle( const wxString &title )
|
void wxFrame::SetTitle( const wxString &title )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_title = title;
|
m_title = title;
|
||||||
if (m_title.IsNull()) m_title = "";
|
if (m_title.IsNull()) m_title = "";
|
||||||
gtk_window_set_title( GTK_WINDOW(m_widget), title );
|
gtk_window_set_title( GTK_WINDOW(m_widget), title );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetIcon( const wxIcon &icon )
|
void wxFrame::SetIcon( const wxIcon &icon )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_icon = icon;
|
m_icon = icon;
|
||||||
if (!icon.Ok()) return;
|
if (!icon.Ok()) return;
|
||||||
|
|
||||||
wxMask *mask = icon.GetMask();
|
wxMask *mask = icon.GetMask();
|
||||||
GdkBitmap *bm = (GdkBitmap *) NULL;
|
GdkBitmap *bm = (GdkBitmap *) NULL;
|
||||||
if (mask) bm = mask->GetBitmap();
|
if (mask) bm = mask->GetBitmap();
|
||||||
|
|
||||||
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
|
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "wx/scrolbar.h"
|
#include "wx/scrolbar.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "wx/slider.h"
|
#include "wx/slider.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "wx/spinbutt.h"
|
#include "wx/spinbutt.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -83,17 +83,17 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
|
|
||||||
// ... and put into the upper left hand corner of the table
|
// ... and put into the upper left hand corner of the table
|
||||||
m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
|
m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
|
gtk_table_attach( GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
|
||||||
GTK_FILL | GTK_EXPAND,
|
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
|
||||||
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
|
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
|
||||||
0, 0);
|
0, 0);
|
||||||
|
|
||||||
// put the horizontal scrollbar in the lower left hand corner
|
// put the horizontal scrollbar in the lower left hand corner
|
||||||
if (bHasHScrollbar)
|
if (bHasHScrollbar)
|
||||||
{
|
{
|
||||||
GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
|
GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
|
gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
|
||||||
GTK_EXPAND | GTK_FILL,
|
(GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
|
||||||
GTK_FILL,
|
GTK_FILL,
|
||||||
0, 0);
|
0, 0);
|
||||||
gtk_widget_show(hscrollbar);
|
gtk_widget_show(hscrollbar);
|
||||||
@@ -103,7 +103,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
GtkWidget *vscrollbar = gtk_vscrollbar_new(GTK_TEXT(m_text)->vadj);
|
GtkWidget *vscrollbar = gtk_vscrollbar_new(GTK_TEXT(m_text)->vadj);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), vscrollbar, 1, 2, 0, 1,
|
gtk_table_attach(GTK_TABLE(m_widget), vscrollbar, 1, 2, 0, 1,
|
||||||
GTK_FILL,
|
GTK_FILL,
|
||||||
GTK_EXPAND | GTK_FILL | GTK_SHRINK,
|
(GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
|
||||||
0, 0);
|
0, 0);
|
||||||
gtk_widget_show( vscrollbar );
|
gtk_widget_show( vscrollbar );
|
||||||
}
|
}
|
||||||
|
@@ -78,7 +78,7 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
|
|||||||
object_class = (GtkObjectClass*) klass;
|
object_class = (GtkObjectClass*) klass;
|
||||||
widget_class = (GtkWidgetClass*) klass;
|
widget_class = (GtkWidgetClass*) klass;
|
||||||
container_class = (GtkContainerClass*) klass;
|
container_class = (GtkContainerClass*) klass;
|
||||||
|
|
||||||
parent_class = gtk_type_class (gtk_container_get_type ());
|
parent_class = gtk_type_class (gtk_container_get_type ());
|
||||||
|
|
||||||
widget_class->map = gtk_myfixed_map;
|
widget_class->map = gtk_myfixed_map;
|
||||||
@@ -104,6 +104,10 @@ gtk_myfixed_init (GtkMyFixed *myfixed)
|
|||||||
GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
|
GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
|
||||||
GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
|
GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
gtk_container_set_resize_mode( GTK_CONTAINER(myfixed), GTK_RESIZE_PARENT );
|
||||||
|
#endif
|
||||||
|
|
||||||
myfixed->children = NULL;
|
myfixed->children = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -108,6 +108,16 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// cond comp
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
#if (GTK_MICRO_VERSION >= 3)
|
||||||
|
#define NEW_GTK_DND_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -837,6 +847,11 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *widget, GdkEventBut
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "drop_data_available_event"
|
// "drop_data_available_event"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -862,6 +877,9 @@ static void gtk_window_drop_callback( GtkWidget *widget, GdkEventDropDataAvailab
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// NEW_GTK_DND_CODE
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// InsertChild for wxWindow.
|
// InsertChild for wxWindow.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -2196,18 +2214,32 @@ void wxWindow::ConnectDnDWidget( GtkWidget *widget )
|
|||||||
|
|
||||||
m_dropTarget->RegisterWidget( widget );
|
m_dropTarget->RegisterWidget( widget );
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
|
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
|
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
|
||||||
{
|
{
|
||||||
if (!m_dropTarget) return;
|
if (!m_dropTarget) return;
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
|
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
|
||||||
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
||||||
|
|
||||||
m_dropTarget->UnregisterWidget( widget );
|
m_dropTarget->UnregisterWidget( widget );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget* wxWindow::GetConnectWidget()
|
GtkWidget* wxWindow::GetConnectWidget()
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
#include "wx/dcmemory.h"
|
#include "wx/dcmemory.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// local data
|
// local data
|
||||||
|
237
src/gtk1/dnd.cpp
237
src/gtk1/dnd.cpp
@@ -27,6 +27,239 @@
|
|||||||
|
|
||||||
extern bool g_blockEventsOnDrag;
|
extern bool g_blockEventsOnDrag;
|
||||||
|
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
#if (GTK_MICRO_VERSION >= 3)
|
||||||
|
#define NEW_GTK_DND_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
wxDropTarget::wxDropTarget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropTarget::~wxDropTarget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropTarget::UnregisterWidget( GtkWidget *widget )
|
||||||
|
{
|
||||||
|
if (!widget) return;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropTarget::RegisterWidget( GtkWidget *widget )
|
||||||
|
{
|
||||||
|
if (!widget) return;
|
||||||
|
|
||||||
|
wxString formats;
|
||||||
|
int valid = 0;
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < GetFormatCount(); i++ )
|
||||||
|
{
|
||||||
|
wxDataFormat df = GetFormat( i );
|
||||||
|
switch (df)
|
||||||
|
{
|
||||||
|
case wxDF_TEXT:
|
||||||
|
if (i > 0) formats += ";";
|
||||||
|
formats += "text/plain";
|
||||||
|
valid++;
|
||||||
|
break;
|
||||||
|
case wxDF_FILENAME:
|
||||||
|
if (i > 0) formats += ";";
|
||||||
|
formats += "file:ALL";
|
||||||
|
valid++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *str = WXSTRINGCAST formats;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTextDropTarget
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxTextDropTarget::OnDrop( long x, long y, const void *data, size_t WXUNUSED(size) )
|
||||||
|
{
|
||||||
|
OnDropText( x, y, (const char*)data );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextDropTarget::OnDropText( long x, long y, const char *psz )
|
||||||
|
{
|
||||||
|
printf( "Got dropped text: %s.\n", psz );
|
||||||
|
printf( "At x: %d, y: %d.\n", (int)x, (int)y );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxTextDropTarget::GetFormatCount() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataFormat wxTextDropTarget::GetFormat(size_t WXUNUSED(n)) const
|
||||||
|
{
|
||||||
|
return wxDF_TEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileDropTarget
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxFileDropTarget::OnDropFiles( long x, long y, size_t nFiles, const char * const aszFiles[] )
|
||||||
|
{
|
||||||
|
printf( "Got %d dropped files.\n", (int)nFiles );
|
||||||
|
printf( "At x: %d, y: %d.\n", (int)x, (int)y );
|
||||||
|
for (size_t i = 0; i < nFiles; i++)
|
||||||
|
{
|
||||||
|
printf( aszFiles[i] );
|
||||||
|
printf( "\n" );
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFileDropTarget::OnDrop(long x, long y, const void *data, size_t size )
|
||||||
|
{
|
||||||
|
size_t number = 0;
|
||||||
|
char *text = (char*) data;
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
if (text[i] == 0) number++;
|
||||||
|
|
||||||
|
if (number == 0) return TRUE;
|
||||||
|
|
||||||
|
char **files = new char*[number];
|
||||||
|
|
||||||
|
text = (char*) data;
|
||||||
|
for (size_t i = 0; i < number; i++)
|
||||||
|
{
|
||||||
|
files[i] = text;
|
||||||
|
int len = strlen( text );
|
||||||
|
text += len+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ret = OnDropFiles( x, y, 1, files );
|
||||||
|
|
||||||
|
free( files );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxFileDropTarget::GetFormatCount() const
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataFormat wxFileDropTarget::GetFormat(size_t WXUNUSED(n)) const
|
||||||
|
{
|
||||||
|
return wxDF_FILENAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// wxDropSource
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDropSource::wxDropSource( wxWindow *win )
|
||||||
|
{
|
||||||
|
g_blockEventsOnDrag = TRUE;
|
||||||
|
|
||||||
|
m_window = win;
|
||||||
|
m_widget = win->m_widget;
|
||||||
|
if (win->m_wxwindow) m_widget = win->m_wxwindow;
|
||||||
|
|
||||||
|
m_data = (wxDataObject *) NULL;
|
||||||
|
m_retValue = wxDragCancel;
|
||||||
|
|
||||||
|
m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
|
||||||
|
m_goaheadCursor = wxCursor( wxCURSOR_HAND );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropSource::wxDropSource( wxDataObject &data, wxWindow *win )
|
||||||
|
{
|
||||||
|
g_blockEventsOnDrag = TRUE;
|
||||||
|
|
||||||
|
m_window = win;
|
||||||
|
m_widget = win->m_widget;
|
||||||
|
if (win->m_wxwindow) m_widget = win->m_wxwindow;
|
||||||
|
m_retValue = wxDragCancel;
|
||||||
|
|
||||||
|
m_data = &data;
|
||||||
|
|
||||||
|
m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
|
||||||
|
m_goaheadCursor = wxCursor( wxCURSOR_HAND );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::SetData( wxDataObject &data )
|
||||||
|
{
|
||||||
|
m_data = &data;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDropSource::~wxDropSource(void)
|
||||||
|
{
|
||||||
|
// if (m_data) delete m_data;
|
||||||
|
|
||||||
|
g_blockEventsOnDrag = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
|
||||||
|
{
|
||||||
|
wxASSERT_MSG( m_data, "wxDragSource: no data" );
|
||||||
|
|
||||||
|
if (!m_data) return (wxDragResult) wxDragNone;
|
||||||
|
if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
|
||||||
|
|
||||||
|
RegisterWindow();
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
UnregisterWindow();
|
||||||
|
|
||||||
|
g_blockEventsOnDrag = FALSE;
|
||||||
|
|
||||||
|
return m_retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::RegisterWindow(void)
|
||||||
|
{
|
||||||
|
if (!m_data) return;
|
||||||
|
|
||||||
|
wxString formats;
|
||||||
|
|
||||||
|
wxDataFormat df = m_data->GetPreferredFormat();
|
||||||
|
|
||||||
|
switch (df)
|
||||||
|
{
|
||||||
|
case wxDF_TEXT:
|
||||||
|
formats += "text/plain";
|
||||||
|
break;
|
||||||
|
case wxDF_FILENAME:
|
||||||
|
formats += "file:ALL";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *str = WXSTRINGCAST formats;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDropSource::UnregisterWindow(void)
|
||||||
|
{
|
||||||
|
if (!m_widget) return;
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxDropTarget
|
// wxDropTarget
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -322,3 +555,7 @@ void wxDropSource::UnregisterWindow(void)
|
|||||||
|
|
||||||
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
|
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
@@ -160,7 +160,7 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title,
|
|||||||
if (m_parent) m_parent->AddChild( this );
|
if (m_parent) m_parent->AddChild( this );
|
||||||
|
|
||||||
PostCreation();
|
PostCreation();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,260 +316,262 @@ void wxFrame::GetClientSize( int *width, int *height ) const
|
|||||||
|
|
||||||
void wxFrame::SetClientSize( int const width, int const height )
|
void wxFrame::SetClientSize( int const width, int const height )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
int h = height;
|
int h = height;
|
||||||
if (m_frameMenuBar) h += wxMENU_HEIGHT;
|
if (m_frameMenuBar) h += wxMENU_HEIGHT;
|
||||||
if (m_frameStatusBar) h += wxSTATUS_HEIGHT;
|
if (m_frameStatusBar) h += wxSTATUS_HEIGHT;
|
||||||
if (m_frameToolBar)
|
if (m_frameToolBar)
|
||||||
{
|
{
|
||||||
int y = 0;
|
int y = 0;
|
||||||
m_frameToolBar->GetSize( (int *) NULL, &y );
|
m_frameToolBar->GetSize( (int *) NULL, &y );
|
||||||
h += y;
|
h += y;
|
||||||
}
|
}
|
||||||
wxWindow::SetClientSize( width, h );
|
wxWindow::SetClientSize( width, h );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
|
void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
|
||||||
{
|
{
|
||||||
// due to a bug in gtk, x,y are always 0
|
// due to a bug in gtk, x,y are always 0
|
||||||
// m_x = x;
|
// m_x = x;
|
||||||
// m_y = y;
|
// m_y = y;
|
||||||
|
|
||||||
if ((m_height == height) && (m_width == width) &&
|
if ((m_height == height) && (m_width == width) &&
|
||||||
(m_sizeSet)) return;
|
(m_sizeSet)) return;
|
||||||
if (!m_wxwindow) return;
|
if (!m_wxwindow) return;
|
||||||
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
|
|
||||||
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
|
|
||||||
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
|
|
||||||
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
|
|
||||||
|
|
||||||
gtk_widget_set_usize( m_widget, m_width, m_height );
|
|
||||||
|
|
||||||
// This emulates the new wxMSW behaviour
|
|
||||||
|
|
||||||
if (m_frameMenuBar)
|
|
||||||
{
|
|
||||||
m_frameMenuBar->m_x = 1;
|
|
||||||
m_frameMenuBar->m_y = 1;
|
|
||||||
m_frameMenuBar->m_width = m_width-2;
|
|
||||||
m_frameMenuBar->m_height = wxMENU_HEIGHT-2;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, 1, 1 );
|
|
||||||
gtk_widget_set_usize( m_frameMenuBar->m_widget, m_width-2, wxMENU_HEIGHT-2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_frameToolBar)
|
|
||||||
{
|
|
||||||
int y = 0;
|
|
||||||
if (m_frameMenuBar) y = wxMENU_HEIGHT;
|
|
||||||
int h = m_frameToolBar->m_height;
|
|
||||||
|
|
||||||
m_frameToolBar->m_x = 2;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, 2, y );
|
|
||||||
gtk_widget_set_usize( m_frameToolBar->m_widget, m_width-3, h );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_frameStatusBar)
|
m_width = width;
|
||||||
{
|
m_height = height;
|
||||||
// OK, this hurts in the eye, but I don't want to call SetSize()
|
|
||||||
// because I don't want to call any non-native functions here.
|
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
|
||||||
m_frameStatusBar->m_x = 0;
|
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
|
||||||
m_frameStatusBar->m_y = m_height-wxSTATUS_HEIGHT;
|
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
|
||||||
m_frameStatusBar->m_width = m_width;
|
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
|
||||||
m_frameStatusBar->m_height = wxSTATUS_HEIGHT;
|
|
||||||
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, 0, m_height-wxSTATUS_HEIGHT );
|
|
||||||
gtk_widget_set_usize( m_frameStatusBar->m_widget, m_width, wxSTATUS_HEIGHT );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sizeSet = TRUE;
|
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
|
||||||
|
event.SetEventObject( this );
|
||||||
|
ProcessEvent( event );
|
||||||
|
|
||||||
|
gtk_widget_set_usize( m_widget, m_width, m_height );
|
||||||
|
|
||||||
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
|
// This emulates the new wxMSW behaviour
|
||||||
event.SetEventObject( this );
|
|
||||||
ProcessEvent( event );
|
if (m_frameMenuBar)
|
||||||
|
{
|
||||||
|
m_frameMenuBar->m_x = 1;
|
||||||
|
m_frameMenuBar->m_y = 1;
|
||||||
|
m_frameMenuBar->m_width = m_width-2;
|
||||||
|
m_frameMenuBar->m_height = wxMENU_HEIGHT-2;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, 1, 1 );
|
||||||
|
gtk_widget_set_usize( m_frameMenuBar->m_widget, m_width-2, wxMENU_HEIGHT-2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_frameToolBar)
|
||||||
|
{
|
||||||
|
int y = 0;
|
||||||
|
if (m_frameMenuBar) y = wxMENU_HEIGHT;
|
||||||
|
int h = m_frameToolBar->m_height;
|
||||||
|
|
||||||
|
m_frameToolBar->m_x = 2;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, 2, y );
|
||||||
|
gtk_widget_set_usize( m_frameToolBar->m_widget, m_width-3, h );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_frameStatusBar)
|
||||||
|
{
|
||||||
|
// OK, this hurts in the eye, but I don't want to call SetSize()
|
||||||
|
// because I don't want to call any non-native functions here.
|
||||||
|
m_frameStatusBar->m_x = 0;
|
||||||
|
m_frameStatusBar->m_y = m_height-wxSTATUS_HEIGHT;
|
||||||
|
m_frameStatusBar->m_width = m_width;
|
||||||
|
m_frameStatusBar->m_height = wxSTATUS_HEIGHT;
|
||||||
|
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, 0, m_height-wxSTATUS_HEIGHT );
|
||||||
|
gtk_widget_set_usize( m_frameStatusBar->m_widget, m_width, wxSTATUS_HEIGHT );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_sizeSet = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
|
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
if ( GetAutoLayout() )
|
if (GetAutoLayout())
|
||||||
Layout();
|
|
||||||
else {
|
|
||||||
// no child: go out !
|
|
||||||
if (!GetChildren()->First())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// do we have exactly one child?
|
|
||||||
wxWindow *child = (wxWindow *) NULL;
|
|
||||||
for(wxNode *node = GetChildren()->First(); node; node = node->Next())
|
|
||||||
{
|
{
|
||||||
wxWindow *win = (wxWindow *)node->Data();
|
Layout();
|
||||||
if (!IS_KIND_OF(win,wxFrame) && !IS_KIND_OF(win,wxDialog)
|
|
||||||
#if 0 // not in m_children anyway ?
|
|
||||||
&& (win != m_frameMenuBar) &&
|
|
||||||
(win != m_frameToolBar) &&
|
|
||||||
(win != m_frameStatusBar)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ( child ) // it's the second one: do nothing
|
|
||||||
return;
|
|
||||||
|
|
||||||
child = win;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// no child: go out !
|
||||||
|
if (!GetChildren()->First()) return;
|
||||||
|
|
||||||
|
// do we have exactly one child?
|
||||||
|
wxWindow *child = (wxWindow *) NULL;
|
||||||
|
for(wxNode *node = GetChildren()->First(); node; node = node->Next())
|
||||||
|
{
|
||||||
|
wxWindow *win = (wxWindow *)node->Data();
|
||||||
|
if (!IS_KIND_OF(win,wxFrame) && !IS_KIND_OF(win,wxDialog)
|
||||||
|
#if 0 // not in m_children anyway ?
|
||||||
|
&& (win != m_frameMenuBar) &&
|
||||||
|
(win != m_frameToolBar) &&
|
||||||
|
(win != m_frameStatusBar)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// it's the second one: do nothing
|
||||||
|
if (child) return;
|
||||||
|
child = win;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// yes: set it's size to fill all the frame
|
// yes: set it's size to fill all the frame
|
||||||
int client_x, client_y;
|
int client_x, client_y;
|
||||||
GetClientSize(&client_x, &client_y);
|
GetClientSize( &client_x, &client_y );
|
||||||
child->SetSize( 1, 1, client_x-2, client_y);
|
child->SetSize( 1, 1, client_x-2, client_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
|
static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
|
||||||
{
|
{
|
||||||
menu->SetInvokingWindow( win );
|
menu->SetInvokingWindow( win );
|
||||||
wxNode *node = menu->m_items.First();
|
wxNode *node = menu->m_items.First();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxMenuItem *menuitem = (wxMenuItem*)node->Data();
|
wxMenuItem *menuitem = (wxMenuItem*)node->Data();
|
||||||
if (menuitem->IsSubMenu())
|
if (menuitem->IsSubMenu())
|
||||||
SetInvokingWindow( menuitem->GetSubMenu(), win );
|
SetInvokingWindow( menuitem->GetSubMenu(), win );
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetMenuBar( wxMenuBar *menuBar )
|
void wxFrame::SetMenuBar( wxMenuBar *menuBar )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
wxASSERT_MSG( (m_wxwindow != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_wxwindow != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_frameMenuBar = menuBar;
|
m_frameMenuBar = menuBar;
|
||||||
|
|
||||||
if (m_frameMenuBar)
|
if (m_frameMenuBar)
|
||||||
{
|
|
||||||
wxNode *node = m_frameMenuBar->m_menus.First();
|
|
||||||
while (node)
|
|
||||||
{
|
{
|
||||||
wxMenu *menu = (wxMenu*)node->Data();
|
wxNode *node = m_frameMenuBar->m_menus.First();
|
||||||
SetInvokingWindow( menu, this );
|
while (node)
|
||||||
node = node->Next();
|
{
|
||||||
}
|
wxMenu *menu = (wxMenu*)node->Data();
|
||||||
|
SetInvokingWindow( menu, this );
|
||||||
|
node = node->Next();
|
||||||
|
}
|
||||||
|
|
||||||
if (m_frameMenuBar->m_parent != this)
|
if (m_frameMenuBar->m_parent != this)
|
||||||
{
|
{
|
||||||
m_frameMenuBar->m_parent = this;
|
m_frameMenuBar->m_parent = this;
|
||||||
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
|
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
|
||||||
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
|
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuBar *wxFrame::GetMenuBar(void) const
|
wxMenuBar *wxFrame::GetMenuBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameMenuBar;
|
return m_frameMenuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
|
wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_MSG( m_frameToolBar == NULL, FALSE, "recreating toolbar in wxFrame" );
|
wxCHECK_MSG( m_frameToolBar == NULL, FALSE, "recreating toolbar in wxFrame" );
|
||||||
|
|
||||||
m_frameToolBar = OnCreateToolBar( style, id, name );
|
m_frameToolBar = OnCreateToolBar( style, id, name );
|
||||||
|
|
||||||
GetChildren()->DeleteObject( m_frameToolBar );
|
GetChildren()->DeleteObject( m_frameToolBar );
|
||||||
|
|
||||||
return m_frameToolBar;
|
return m_frameToolBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar* wxFrame::OnCreateToolBar( long style, wxWindowID id, const wxString& name )
|
wxToolBar* wxFrame::OnCreateToolBar( long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
return new wxToolBar( this, id, wxDefaultPosition, wxDefaultSize, style, name );
|
return new wxToolBar( this, id, wxDefaultPosition, wxDefaultSize, style, name );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar *wxFrame::GetToolBar(void) const
|
wxToolBar *wxFrame::GetToolBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameToolBar;
|
return m_frameToolBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar* wxFrame::CreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
wxStatusBar* wxFrame::CreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, "recreating status bar in wxFrame" );
|
wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, "recreating status bar in wxFrame" );
|
||||||
|
|
||||||
m_frameStatusBar = OnCreateStatusBar( number, style, id, name );
|
m_frameStatusBar = OnCreateStatusBar( number, style, id, name );
|
||||||
|
|
||||||
return m_frameStatusBar;
|
return m_frameStatusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar *wxFrame::OnCreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
wxStatusBar *wxFrame::OnCreateStatusBar( int number, long style, wxWindowID id, const wxString& name )
|
||||||
{
|
{
|
||||||
wxStatusBar *statusBar = (wxStatusBar *) NULL;
|
wxStatusBar *statusBar = (wxStatusBar *) NULL;
|
||||||
|
|
||||||
statusBar = new wxStatusBar(this, id, wxPoint(0, 0), wxSize(100, 20), style, name);
|
statusBar = new wxStatusBar(this, id, wxPoint(0, 0), wxSize(100, 20), style, name);
|
||||||
|
|
||||||
// Set the height according to the font and the border size
|
// Set the height according to the font and the border size
|
||||||
wxClientDC dc(statusBar);
|
wxClientDC dc(statusBar);
|
||||||
dc.SetFont( *statusBar->GetFont() );
|
dc.SetFont( *statusBar->GetFont() );
|
||||||
|
|
||||||
long x, y;
|
long x, y;
|
||||||
dc.GetTextExtent( "X", &x, &y );
|
dc.GetTextExtent( "X", &x, &y );
|
||||||
|
|
||||||
int height = (int)( (y * 1.1) + 2* statusBar->GetBorderY());
|
int height = (int)( (y * 1.1) + 2* statusBar->GetBorderY());
|
||||||
|
|
||||||
statusBar->SetSize( -1, -1, 100, height );
|
statusBar->SetSize( -1, -1, 100, height );
|
||||||
|
|
||||||
statusBar->SetFieldsCount( number );
|
statusBar->SetFieldsCount( number );
|
||||||
return statusBar;
|
return statusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetStatusText(const wxString& text, int number)
|
void wxFrame::SetStatusText(const wxString& text, int number)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
|
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
|
||||||
|
|
||||||
m_frameStatusBar->SetStatusText(text, number);
|
m_frameStatusBar->SetStatusText(text, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetStatusWidths(int n, const int widths_field[] )
|
void wxFrame::SetStatusWidths(int n, const int widths_field[] )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
|
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
|
||||||
|
|
||||||
m_frameStatusBar->SetStatusWidths(n, widths_field);
|
m_frameStatusBar->SetStatusWidths(n, widths_field);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxStatusBar *wxFrame::GetStatusBar(void) const
|
wxStatusBar *wxFrame::GetStatusBar(void) const
|
||||||
{
|
{
|
||||||
return m_frameStatusBar;
|
return m_frameStatusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetTitle( const wxString &title )
|
void wxFrame::SetTitle( const wxString &title )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_title = title;
|
m_title = title;
|
||||||
if (m_title.IsNull()) m_title = "";
|
if (m_title.IsNull()) m_title = "";
|
||||||
gtk_window_set_title( GTK_WINDOW(m_widget), title );
|
gtk_window_set_title( GTK_WINDOW(m_widget), title );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::SetIcon( const wxIcon &icon )
|
void wxFrame::SetIcon( const wxIcon &icon )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
|
||||||
|
|
||||||
m_icon = icon;
|
m_icon = icon;
|
||||||
if (!icon.Ok()) return;
|
if (!icon.Ok()) return;
|
||||||
|
|
||||||
wxMask *mask = icon.GetMask();
|
wxMask *mask = icon.GetMask();
|
||||||
GdkBitmap *bm = (GdkBitmap *) NULL;
|
GdkBitmap *bm = (GdkBitmap *) NULL;
|
||||||
if (mask) bm = mask->GetBitmap();
|
if (mask) bm = mask->GetBitmap();
|
||||||
|
|
||||||
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
|
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "wx/scrolbar.h"
|
#include "wx/scrolbar.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "wx/slider.h"
|
#include "wx/slider.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "wx/spinbutt.h"
|
#include "wx/spinbutt.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
|
@@ -83,17 +83,17 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
|
|
||||||
// ... and put into the upper left hand corner of the table
|
// ... and put into the upper left hand corner of the table
|
||||||
m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
|
m_widget = gtk_table_new(bHasHScrollbar ? 2 : 1, 2, FALSE);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
|
gtk_table_attach( GTK_TABLE(m_widget), m_text, 0, 1, 0, 1,
|
||||||
GTK_FILL | GTK_EXPAND,
|
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
|
||||||
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
|
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
|
||||||
0, 0);
|
0, 0);
|
||||||
|
|
||||||
// put the horizontal scrollbar in the lower left hand corner
|
// put the horizontal scrollbar in the lower left hand corner
|
||||||
if (bHasHScrollbar)
|
if (bHasHScrollbar)
|
||||||
{
|
{
|
||||||
GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
|
GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
|
gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
|
||||||
GTK_EXPAND | GTK_FILL,
|
(GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
|
||||||
GTK_FILL,
|
GTK_FILL,
|
||||||
0, 0);
|
0, 0);
|
||||||
gtk_widget_show(hscrollbar);
|
gtk_widget_show(hscrollbar);
|
||||||
@@ -103,7 +103,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
GtkWidget *vscrollbar = gtk_vscrollbar_new(GTK_TEXT(m_text)->vadj);
|
GtkWidget *vscrollbar = gtk_vscrollbar_new(GTK_TEXT(m_text)->vadj);
|
||||||
gtk_table_attach(GTK_TABLE(m_widget), vscrollbar, 1, 2, 0, 1,
|
gtk_table_attach(GTK_TABLE(m_widget), vscrollbar, 1, 2, 0, 1,
|
||||||
GTK_FILL,
|
GTK_FILL,
|
||||||
GTK_EXPAND | GTK_FILL | GTK_SHRINK,
|
(GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
|
||||||
0, 0);
|
0, 0);
|
||||||
gtk_widget_show( vscrollbar );
|
gtk_widget_show( vscrollbar );
|
||||||
}
|
}
|
||||||
|
@@ -78,7 +78,7 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
|
|||||||
object_class = (GtkObjectClass*) klass;
|
object_class = (GtkObjectClass*) klass;
|
||||||
widget_class = (GtkWidgetClass*) klass;
|
widget_class = (GtkWidgetClass*) klass;
|
||||||
container_class = (GtkContainerClass*) klass;
|
container_class = (GtkContainerClass*) klass;
|
||||||
|
|
||||||
parent_class = gtk_type_class (gtk_container_get_type ());
|
parent_class = gtk_type_class (gtk_container_get_type ());
|
||||||
|
|
||||||
widget_class->map = gtk_myfixed_map;
|
widget_class->map = gtk_myfixed_map;
|
||||||
@@ -104,6 +104,10 @@ gtk_myfixed_init (GtkMyFixed *myfixed)
|
|||||||
GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
|
GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
|
||||||
GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
|
GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
gtk_container_set_resize_mode( GTK_CONTAINER(myfixed), GTK_RESIZE_PARENT );
|
||||||
|
#endif
|
||||||
|
|
||||||
myfixed->children = NULL;
|
myfixed->children = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -108,6 +108,16 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// cond comp
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if (GTK_MINOR_VERSION == 1)
|
||||||
|
#if (GTK_MICRO_VERSION >= 3)
|
||||||
|
#define NEW_GTK_DND_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// data
|
// data
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -837,6 +847,11 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *widget, GdkEventBut
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "drop_data_available_event"
|
// "drop_data_available_event"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -862,6 +877,9 @@ static void gtk_window_drop_callback( GtkWidget *widget, GdkEventDropDataAvailab
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// NEW_GTK_DND_CODE
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// InsertChild for wxWindow.
|
// InsertChild for wxWindow.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -2196,18 +2214,32 @@ void wxWindow::ConnectDnDWidget( GtkWidget *widget )
|
|||||||
|
|
||||||
m_dropTarget->RegisterWidget( widget );
|
m_dropTarget->RegisterWidget( widget );
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
|
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
|
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
|
||||||
{
|
{
|
||||||
if (!m_dropTarget) return;
|
if (!m_dropTarget) return;
|
||||||
|
|
||||||
|
#ifdef NEW_GTK_DND_CODE
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
|
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
|
||||||
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
|
||||||
|
|
||||||
m_dropTarget->UnregisterWidget( widget );
|
m_dropTarget->UnregisterWidget( widget );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget* wxWindow::GetConnectWidget()
|
GtkWidget* wxWindow::GetConnectWidget()
|
||||||
|
Reference in New Issue
Block a user