}
wxCHECK_RET( gdk_image, wxT("couldn't create image") );
-
+
Create( bitmap.GetWidth(), bitmap.GetHeight() );
char unsigned *data = GetData();
memdc.SelectObject(bitmap);
memdc.Blit(0, 0, 1, 1, (wxDC*) this, x1, y1);
memdc.SelectObject(wxNullBitmap);
+
wxImage image(bitmap);
col->Set(image.GetRed(0, 0), image.GetGreen(0, 0), image.GetBlue(0, 0));
return TRUE;
// "select" and "deselect"
//-----------------------------------------------------------------------------
-static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
+static void gtk_listitem_select_cb( GtkWidget *widget, wxListBox *listbox, bool is_selection );
+
+static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox )
+{
+ gtk_listitem_select_cb( widget, listbox, TRUE );
+}
static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
{
- gtk_listitem_select_callback( widget, listbox );
+ gtk_listitem_select_cb( widget, listbox, FALSE );
}
-static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
+static void gtk_listitem_select_cb( GtkWidget *WXUNUSED(widget), wxListBox *listbox, bool is_selection )
{
if (g_isIdle) wxapp_install_idle_handler();
wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
event.SetEventObject( listbox );
+ event.SetExtraLong( (long) is_selection );
wxArrayInt aSelections;
int n, count = listbox->GetSelections(aSelections);
wxCHECK_RET( pos <= length, wxT("invalid index in wxListBox::InsertItems") );
size_t nItems = items.GetCount();
+ int index;
- if (pos == length)
+ if (m_strings)
{
- for ( size_t n = 0; n < nItems; n++ )
+ for (size_t n = 0; n < nItems; n++)
{
- GtkAddItem( items[n] );
-
- m_clientList.Append((wxObject *)NULL);
+ index = m_strings->Add( items[n] );
+
+ if (index != GetCount())
+ {
+ GtkAddItem( items[n], index );
+ wxNode *node = m_clientList.Nth( index );
+ m_clientList.Insert( node, (wxObject*) NULL );
+ }
+ else
+ {
+ GtkAddItem( items[n] );
+ m_clientList.Append( (wxObject*) NULL );
+ }
}
}
else
{
- wxNode *node = m_clientList.Nth( pos );
- for ( size_t n = 0; n < nItems; n++ )
+ if (pos == length)
+ {
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ GtkAddItem( items[n] );
+
+ m_clientList.Append((wxObject *)NULL);
+ }
+ }
+ else
{
- GtkAddItem( items[n], pos+n );
+ wxNode *node = m_clientList.Nth( pos );
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ GtkAddItem( items[n], pos+n );
- m_clientList.Insert( node, (wxObject *)NULL );
+ m_clientList.Insert( node, (wxObject *)NULL );
+ }
}
}
else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLL_PAGEUP;
else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD) command = wxEVT_SCROLL_PAGEDOWN;
- int value = (int)ceil(adjust->value);
+ double dvalue = adjust->value;
+ int value = (int)(dvalue >= 0 ? dvalue - 0.5 : dvalue + 0.5);
int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL;
IMPLEMENT_DYNAMIC_CLASS(wxScrollBar,wxControl)
-wxScrollBar::~wxScrollBar(void)
+wxScrollBar::~wxScrollBar()
{
}
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxScrollBar creation failed") );
- return FALSE;
+ return FALSE;
}
m_oldPos = 0.0;
return TRUE;
}
-int wxScrollBar::GetThumbPosition(void) const
+int wxScrollBar::GetThumbPosition() const
{
- return (int)(m_adjust->value+0.5);
+ double val = m_adjust->value;
+ return (int)(val >= 0 ? val - 0.5 : val + 0.5);
}
int wxScrollBar::GetThumbSize() const
}
/* Backward compatibility */
-int wxScrollBar::GetValue(void) const
+int wxScrollBar::GetValue() const
{
return GetThumbPosition();
}
else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLL_PAGEUP;
else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD) command = wxEVT_SCROLL_PAGEDOWN;
- int value = (int)ceil(adjust->value);
+ double dvalue = adjust->value;
+ int value = (int)(dvalue >= 0 ? dvalue - 0.5 : dvalue + 0.5);
int orient = wxHORIZONTAL;
if ( (win->GetWindowStyleFlag() & wxSB_VERTICAL) == wxSB_VERTICAL)
win->GetEventHandler()->ProcessEvent( event );
}
+//-----------------------------------------------------------------------------
+// "changed"
+//-----------------------------------------------------------------------------
+
+static void
+gtk_spinctrl_text_changed_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win )
+{
+ if (!win->m_hasVMT) return;
+
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->GetId() );
+ event.SetEventObject( win );
+ event.SetInt( win->GetValue() );
+ win->GetEventHandler()->ProcessEvent( event );
+}
+
//-----------------------------------------------------------------------------
// wxSpinCtrl
//-----------------------------------------------------------------------------
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
+ GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback),
+ (gpointer) this );
}
void wxSpinCtrl::GtkEnableEvents()
"value_changed",
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
+
+ gtk_signal_connect( GTK_OBJECT(m_widget),
+ "changed",
+ GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback),
+ (gpointer)this);
}
int wxSpinCtrl::GetMin() const
memdc.SelectObject(bitmap);
memdc.Blit(0, 0, 1, 1, (wxDC*) this, x1, y1);
memdc.SelectObject(wxNullBitmap);
+
wxImage image(bitmap);
col->Set(image.GetRed(0, 0), image.GetGreen(0, 0), image.GetBlue(0, 0));
return TRUE;
// "select" and "deselect"
//-----------------------------------------------------------------------------
-static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
+static void gtk_listitem_select_cb( GtkWidget *widget, wxListBox *listbox, bool is_selection );
+
+static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox )
+{
+ gtk_listitem_select_cb( widget, listbox, TRUE );
+}
static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
{
- gtk_listitem_select_callback( widget, listbox );
+ gtk_listitem_select_cb( widget, listbox, FALSE );
}
-static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
+static void gtk_listitem_select_cb( GtkWidget *WXUNUSED(widget), wxListBox *listbox, bool is_selection )
{
if (g_isIdle) wxapp_install_idle_handler();
wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
event.SetEventObject( listbox );
+ event.SetExtraLong( (long) is_selection );
wxArrayInt aSelections;
int n, count = listbox->GetSelections(aSelections);
wxCHECK_RET( pos <= length, wxT("invalid index in wxListBox::InsertItems") );
size_t nItems = items.GetCount();
+ int index;
- if (pos == length)
+ if (m_strings)
{
- for ( size_t n = 0; n < nItems; n++ )
+ for (size_t n = 0; n < nItems; n++)
{
- GtkAddItem( items[n] );
-
- m_clientList.Append((wxObject *)NULL);
+ index = m_strings->Add( items[n] );
+
+ if (index != GetCount())
+ {
+ GtkAddItem( items[n], index );
+ wxNode *node = m_clientList.Nth( index );
+ m_clientList.Insert( node, (wxObject*) NULL );
+ }
+ else
+ {
+ GtkAddItem( items[n] );
+ m_clientList.Append( (wxObject*) NULL );
+ }
}
}
else
{
- wxNode *node = m_clientList.Nth( pos );
- for ( size_t n = 0; n < nItems; n++ )
+ if (pos == length)
+ {
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ GtkAddItem( items[n] );
+
+ m_clientList.Append((wxObject *)NULL);
+ }
+ }
+ else
{
- GtkAddItem( items[n], pos+n );
+ wxNode *node = m_clientList.Nth( pos );
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ GtkAddItem( items[n], pos+n );
- m_clientList.Insert( node, (wxObject *)NULL );
+ m_clientList.Insert( node, (wxObject *)NULL );
+ }
}
}
else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLL_PAGEUP;
else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD) command = wxEVT_SCROLL_PAGEDOWN;
- int value = (int)ceil(adjust->value);
+ double dvalue = adjust->value;
+ int value = (int)(dvalue >= 0 ? dvalue - 0.5 : dvalue + 0.5);
int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL;
IMPLEMENT_DYNAMIC_CLASS(wxScrollBar,wxControl)
-wxScrollBar::~wxScrollBar(void)
+wxScrollBar::~wxScrollBar()
{
}
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxScrollBar creation failed") );
- return FALSE;
+ return FALSE;
}
m_oldPos = 0.0;
return TRUE;
}
-int wxScrollBar::GetThumbPosition(void) const
+int wxScrollBar::GetThumbPosition() const
{
- return (int)(m_adjust->value+0.5);
+ double val = m_adjust->value;
+ return (int)(val >= 0 ? val - 0.5 : val + 0.5);
}
int wxScrollBar::GetThumbSize() const
}
/* Backward compatibility */
-int wxScrollBar::GetValue(void) const
+int wxScrollBar::GetValue() const
{
return GetThumbPosition();
}
else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLL_PAGEUP;
else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD) command = wxEVT_SCROLL_PAGEDOWN;
- int value = (int)ceil(adjust->value);
+ double dvalue = adjust->value;
+ int value = (int)(dvalue >= 0 ? dvalue - 0.5 : dvalue + 0.5);
int orient = wxHORIZONTAL;
if ( (win->GetWindowStyleFlag() & wxSB_VERTICAL) == wxSB_VERTICAL)
win->GetEventHandler()->ProcessEvent( event );
}
+//-----------------------------------------------------------------------------
+// "changed"
+//-----------------------------------------------------------------------------
+
+static void
+gtk_spinctrl_text_changed_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win )
+{
+ if (!win->m_hasVMT) return;
+
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->GetId() );
+ event.SetEventObject( win );
+ event.SetInt( win->GetValue() );
+ win->GetEventHandler()->ProcessEvent( event );
+}
+
//-----------------------------------------------------------------------------
// wxSpinCtrl
//-----------------------------------------------------------------------------
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
+ GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback),
+ (gpointer) this );
}
void wxSpinCtrl::GtkEnableEvents()
"value_changed",
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
+
+ gtk_signal_connect( GTK_OBJECT(m_widget),
+ "changed",
+ GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback),
+ (gpointer)this);
}
int wxSpinCtrl::GetMin() const