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:
Robert Roebling
1998-11-15 15:29:28 +00:00
parent 8e18907799
commit f536880994
18 changed files with 896 additions and 338 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 );
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 );
} }

View File

@@ -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;
} }

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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 );
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 );
} }

View File

@@ -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;
} }

View File

@@ -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()