Added serial code for wxList and wxHashTable to source tree

Added a few accessors to wxList (for above)
  Fixed bug with GetClientSize() and sunken frames without
  scrollbars
  Made pixel corrections to wxListCtrl and wxFrame
  Added a few pixels before first tool in toolbar
  Added a few wxCHECKs here and there


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1121 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1998-12-07 08:27:06 +00:00
parent ef5390661e
commit 907789a0f7
18 changed files with 801 additions and 752 deletions

View File

@@ -29,23 +29,23 @@ extern bool g_blockEventsOnDrag;
static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioBox *rb )
{
if (!rb->HasVMT()) return;
if (g_blockEventsOnDrag) return;
if (!rb->HasVMT()) return;
if (g_blockEventsOnDrag) return;
if (rb->m_alreadySent)
{
rb->m_alreadySent = FALSE;
return;
}
if (rb->m_alreadySent)
{
rb->m_alreadySent = FALSE;
return;
}
rb->m_alreadySent = TRUE;
rb->m_alreadySent = TRUE;
wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() );
event.SetInt( rb->GetSelection() );
wxString tmp( rb->GetStringSelection() );
event.SetString( WXSTRINGCAST(tmp) );
event.SetEventObject( rb );
rb->GetEventHandler()->ProcessEvent(event);
wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() );
event.SetInt( rb->GetSelection() );
wxString tmp( rb->GetStringSelection() );
event.SetString( WXSTRINGCAST(tmp) );
event.SetEventObject( rb );
rb->GetEventHandler()->ProcessEvent(event);
}
//-----------------------------------------------------------------------------
@@ -55,7 +55,7 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox,wxControl)
BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
EVT_SIZE(wxRadioBox::OnSize)
EVT_SIZE(wxRadioBox::OnSize)
END_EVENT_TABLE()
wxRadioBox::wxRadioBox(void)
@@ -63,127 +63,128 @@ wxRadioBox::wxRadioBox(void)
}
bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
const wxPoint &pos, const wxSize &size,
int n, const wxString choices[], int WXUNUSED(majorDim),
long style, const wxValidator& validator, const wxString &name )
const wxPoint &pos, const wxSize &size,
int n, const wxString choices[],
int WXUNUSED(majorDim),
long style, const wxValidator& validator,
const wxString &name )
{
m_alreadySent = FALSE;
m_needParent = TRUE;
m_alreadySent = FALSE;
m_needParent = TRUE;
PreCreation( parent, id, pos, size, style, name );
PreCreation( parent, id, pos, size, style, name );
SetValidator( validator );
SetValidator( validator );
m_widget = gtk_frame_new( title );
m_widget = gtk_frame_new( title );
int x = m_x+5;
int y = m_y+15;
int maxLen = 0;
int height = 20;
int width = 0;
int x = m_x+5;
int y = m_y+15;
int maxLen = 0;
int height = 20;
int width = 0;
GtkRadioButton *m_radio = (GtkRadioButton*) NULL;
GtkRadioButton *m_radio = (GtkRadioButton*) NULL;
if (m_windowStyle & wxRA_VERTICAL)
{
GSList *radio_button_group = (GSList *) NULL;
for (int i = 0; i < n; i++)
if (m_windowStyle & wxRA_VERTICAL)
{
if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
GSList *radio_button_group = (GSList *) NULL;
for (int i = 0; i < n; i++)
{
if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) );
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) );
m_boxes.Append( (wxObject*) m_radio );
m_boxes.Append( (wxObject*) m_radio );
ConnectWidget( GTK_WIDGET(m_radio) );
ConnectWidget( GTK_WIDGET(m_radio) );
if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE );
if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE );
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), x, y );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), x, y );
int tmp = 25+gdk_string_measure( GTK_WIDGET(m_radio)->style->font, choices[i] );
if (tmp > maxLen) maxLen = tmp;
int tmp = 25+gdk_string_measure( GTK_WIDGET(m_radio)->style->font, choices[i] );
if (tmp > maxLen) maxLen = tmp;
width = m_width-10;
if (size.x == -1) width = tmp;
gtk_widget_set_usize( GTK_WIDGET(m_radio), width, 20 );
y += 20;
height += 20;
width = m_width-10;
if (size.x == -1) width = tmp;
gtk_widget_set_usize( GTK_WIDGET(m_radio), width, 20 );
y += 20;
height += 20;
}
width = maxLen + 10;
}
width = maxLen + 10;
}
else
{
int max = 0;
for (int i = 0; i < n; i++)
else
{
GdkFont *font = m_widget->style->font;
int len = 27+gdk_string_measure( font, choices[i] );
if (len > max) max = len;
}
int max = 0;
for (int i = 0; i < n; i++)
{
GdkFont *font = m_widget->style->font;
int len = 27+gdk_string_measure( font, choices[i] );
if (len > max) max = len;
}
GSList *radio_button_group = (GSList *) NULL;
for (int i = 0; i < n; i++)
{
if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
GSList *radio_button_group = (GSList *) NULL;
for (int i = 0; i < n; i++)
{
if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) );
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) );
m_boxes.Append( (wxObject*) m_radio );
m_boxes.Append( (wxObject*) m_radio );
ConnectWidget( GTK_WIDGET(m_radio) );
ConnectWidget( GTK_WIDGET(m_radio) );
if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE );
if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE );
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), x, y );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), x, y );
gtk_widget_set_usize( GTK_WIDGET(m_radio), max, 20 );
gtk_widget_set_usize( GTK_WIDGET(m_radio), max, 20 );
x += max;
x += max;
}
width = max*n + 10;
height = 40;
}
width = max*n + 10;
height = 40;
}
wxSize newSize = size;
if (newSize.x == -1) newSize.x = width;
if (newSize.y == -1) newSize.y = height;
SetSize( newSize.x, newSize.y );
wxSize newSize = size;
if (newSize.x == -1) newSize.x = width;
if (newSize.y == -1) newSize.y = height;
SetSize( newSize.x, newSize.y );
m_parent->AddChild( this );
m_parent->AddChild( this );
(m_parent->m_insertCallback)( m_parent, this );
(m_parent->m_insertCallback)( m_parent, this );
PostCreation();
PostCreation();
SetLabel( title );
SetLabel( title );
SetBackgroundColour( parent->GetBackgroundColour() );
SetForegroundColour( parent->GetForegroundColour() );
SetBackgroundColour( parent->GetBackgroundColour() );
SetForegroundColour( parent->GetForegroundColour() );
Show( TRUE );
Show( TRUE );
return TRUE;
return TRUE;
}
wxRadioBox::~wxRadioBox(void)
{
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_widget_destroy( button );
node = node->Next();
}
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_widget_destroy( button );
node = node->Next();
}
}
void wxRadioBox::OnSize( wxSizeEvent &event )
@@ -243,260 +244,249 @@ void wxRadioBox::OnSize( wxSizeEvent &event )
bool wxRadioBox::Show( bool show )
{
wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" );
wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" );
wxWindow::Show( show );
wxWindow::Show( show );
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
if (show) gtk_widget_show( button ); else gtk_widget_hide( button );
if (show) gtk_widget_show( button ); else gtk_widget_hide( button );
node = node->Next();
}
node = node->Next();
}
return TRUE;
return TRUE;
}
int wxRadioBox::FindString( const wxString &s ) const
{
wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" );
wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" );
int count = 0;
int count = 0;
wxNode *node = m_boxes.First();
while (node)
{
GtkButton *button = GTK_BUTTON( node->Data() );
wxNode *node = m_boxes.First();
while (node)
{
GtkButton *button = GTK_BUTTON( node->Data() );
GtkLabel *label = GTK_LABEL( button->child );
if (s == label->label) return count;
count++;
GtkLabel *label = GTK_LABEL( button->child );
if (s == label->label) return count;
count++;
node = node->Next();
}
node = node->Next();
}
return -1;
return -1;
}
void wxRadioBox::SetSelection( int n )
{
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxNode *node = m_boxes.Nth( n );
wxNode *node = m_boxes.Nth( n );
if (!node)
{
wxFAIL_MSG( "wxRadioBox wrong index" );
return;
}
wxCHECK_RET( node, "radiobox wrong index" );
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
gtk_toggle_button_set_state( button, 1 );
gtk_toggle_button_set_state( button, 1 );
}
int wxRadioBox::GetSelection(void) const
{
wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" );
wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" );
int count = 0;
int count = 0;
wxNode *node = m_boxes.First();
while (node)
{
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
if (button->active) return count;
count++;
node = node->Next();
}
wxNode *node = m_boxes.First();
while (node)
{
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
if (button->active) return count;
count++;
node = node->Next();
}
wxFAIL_MSG( "wxRadioBox none selected" );
wxFAIL_MSG( "wxRadioBox none selected" );
return -1;
return -1;
}
wxString wxRadioBox::GetString( int n ) const
{
wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" );
wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" );
wxNode *node = m_boxes.Nth( n );
wxNode *node = m_boxes.Nth( n );
if (!node)
{
wxFAIL_MSG( "wxRadioBox wrong index" );
return "";
}
wxCHECK_MSG( node, "", "radiobox wrong index" );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkLabel *label = GTK_LABEL( button->child );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkLabel *label = GTK_LABEL( button->child );
return wxString( label->label );
return wxString( label->label );
}
wxString wxRadioBox::GetLabel( int item ) const
{
wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" );
wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" );
return GetString( item );
return GetString( item );
}
void wxRadioBox::SetLabel( const wxString& label )
{
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxControl::SetLabel( label );
wxControl::SetLabel( label );
gtk_frame_set_label( GTK_FRAME(m_widget), wxControl::GetLabel() );
gtk_frame_set_label( GTK_FRAME(m_widget), wxControl::GetLabel() );
}
void wxRadioBox::SetLabel( int item, const wxString& label )
{
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
wxNode *node = m_boxes.Nth( item );
wxNode *node = m_boxes.Nth( item );
if (!node)
{
wxFAIL_MSG( "wxRadioBox wrong index" );
return;
}
wxCHECK_RET( node, "radiobox wrong index" );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkLabel *g_label = GTK_LABEL( button->child );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkLabel *g_label = GTK_LABEL( button->child );
gtk_label_set( g_label, label );
gtk_label_set( g_label, label );
}
void wxRadioBox::SetLabel( int WXUNUSED(item), wxBitmap *WXUNUSED(bitmap) )
{
wxFAIL_MSG("wxRadioBox::SetLabel not implemented.");
wxFAIL_MSG("wxRadioBox::SetLabel not implemented.");
}
void wxRadioBox::Enable( bool enable )
{
wxControl::Enable( enable );
wxControl::Enable( enable );
wxNode *node = m_boxes.First();
while (node)
{
GtkButton *button = GTK_BUTTON( node->Data() );
GtkWidget *label = button->child;
gtk_widget_set_sensitive( GTK_WIDGET(button), enable );
gtk_widget_set_sensitive( label, enable );
node = node->Next();
}
wxNode *node = m_boxes.First();
while (node)
{
GtkButton *button = GTK_BUTTON( node->Data() );
GtkWidget *label = button->child;
gtk_widget_set_sensitive( GTK_WIDGET(button), enable );
gtk_widget_set_sensitive( label, enable );
node = node->Next();
}
}
void wxRadioBox::Enable( int item, bool enable )
{
wxNode *node = m_boxes.Nth( item );
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
if (!node)
{
wxFAIL_MSG( "wxRadioBox wrong index" );
return;
}
wxNode *node = m_boxes.Nth( item );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkWidget *label = button->child;
gtk_widget_set_sensitive( GTK_WIDGET(button), enable );
gtk_widget_set_sensitive( label, enable );
wxCHECK_RET( node, "radiobox wrong index" );
GtkButton *button = GTK_BUTTON( node->Data() );
GtkWidget *label = button->child;
gtk_widget_set_sensitive( GTK_WIDGET(button), enable );
gtk_widget_set_sensitive( label, enable );
}
void wxRadioBox::Show( int item, bool show )
{
wxNode *node = m_boxes.Nth( item );
wxCHECK_RET( m_widget != NULL, "invalid radiobox" );
if (!node)
{
wxFAIL_MSG( "wxRadioBox wrong index" );
return;
}
wxNode *node = m_boxes.Nth( item );
GtkWidget *button = GTK_WIDGET( node->Data() );
wxCHECK_RET( node, "radiobox wrong index" );
GtkWidget *button = GTK_WIDGET( node->Data() );
if (show)
gtk_widget_show( button );
else
gtk_widget_hide( button );
if (show)
gtk_widget_show( button );
else
gtk_widget_hide( button );
}
wxString wxRadioBox::GetStringSelection(void) const
{
wxNode *node = m_boxes.First();
while (node)
{
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
if (button->active)
{
GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child );
return label->label;
}
node = node->Next();
}
wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" );
wxFAIL_MSG( "wxRadioBox none selected" );
return "";
wxNode *node = m_boxes.First();
while (node)
{
GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
if (button->active)
{
GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child );
return label->label;
}
node = node->Next();
}
wxFAIL_MSG( "wxRadioBox none selected" );
return "";
}
bool wxRadioBox::SetStringSelection( const wxString&s )
bool wxRadioBox::SetStringSelection( const wxString &s )
{
int res = FindString( s );
if (res == -1) return FALSE;
SetSelection( res );
return TRUE;
wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" );
int res = FindString( s );
if (res == -1) return FALSE;
SetSelection( res );
return TRUE;
}
int wxRadioBox::Number(void) const
{
return m_boxes.Number();
return m_boxes.Number();
}
int wxRadioBox::GetNumberOfRowsOrCols(void) const
{
return 1;
return 1;
}
void wxRadioBox::SetNumberOfRowsOrCols( int WXUNUSED(n) )
{
wxFAIL_MSG("wxRadioBox::SetNumberOfRowsOrCols not implemented.");
wxFAIL_MSG("wxRadioBox::SetNumberOfRowsOrCols not implemented.");
}
void wxRadioBox::ApplyWidgetStyle()
{
SetWidgetStyle();
SetWidgetStyle();
gtk_widget_set_style( m_widget, m_widgetStyle );
gtk_widget_set_style( m_widget, m_widgetStyle );
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *widget = GTK_WIDGET( node->Data() );
gtk_widget_set_style( widget, m_widgetStyle );
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *widget = GTK_WIDGET( node->Data() );
gtk_widget_set_style( widget, m_widgetStyle );
GtkButton *button = GTK_BUTTON( node->Data() );
gtk_widget_set_style( button->child, m_widgetStyle );
GtkButton *button = GTK_BUTTON( node->Data() );
gtk_widget_set_style( button->child, m_widgetStyle );
node = node->Next();
}
node = node->Next();
}
}
bool wxRadioBox::IsOwnGtkWindow( GdkWindow *window )
{
if (window == m_widget->window) return TRUE;
if (window == m_widget->window) return TRUE;
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
wxNode *node = m_boxes.First();
while (node)
{
GtkWidget *button = GTK_WIDGET( node->Data() );
if (window == button->window) return TRUE;
if (window == button->window) return TRUE;
node = node->Next();
}
node = node->Next();
}
return FALSE;
return FALSE;
}