void MyPanel::OnListBox( wxCommandEvent &event )
{
- GetParent()->Move(100, 100);
+// GetParent()->Move(100, 100);
wxListBox *listbox = event.GetId() == ID_LISTBOX ? m_listbox
: m_listboxSorted;
rb->GetEventHandler()->ProcessEvent(event);
}
+//-----------------------------------------------------------------------------
+// "key_press_event"
+//-----------------------------------------------------------------------------
+
+static gint gtk_radiobox_keypress_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxRadioBox *rb )
+{
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ if (!rb->m_hasVMT) return FALSE;
+ if (g_blockEventsOnDrag) return FALSE;
+
+ if ((gdk_event->keyval != GDK_Up) &&
+ (gdk_event->keyval != GDK_Down) &&
+ (gdk_event->keyval != GDK_Left) &&
+ (gdk_event->keyval != GDK_Right))
+ {
+ return FALSE;
+ }
+
+ wxNode *node = rb->m_boxes.Find( (wxObject*) widget );
+ if (!node)
+ {
+ return FALSE;
+ }
+
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
+
+ if ((gdk_event->keyval == GDK_Up) ||
+ (gdk_event->keyval == GDK_Left))
+ {
+ if (node == rb->m_boxes.First())
+ node = rb->m_boxes.Last();
+ else
+ node = node->Previous();
+ }
+ else
+ {
+ if (node == rb->m_boxes.Last())
+ node = rb->m_boxes.First();
+ else
+ node = node->Next();
+ }
+
+ GtkWidget *button = (GtkWidget*) node->Data();
+
+ gtk_widget_grab_focus( button );
+
+ return TRUE;
+}
+
//-----------------------------------------------------------------------------
// wxRadioBox
//-----------------------------------------------------------------------------
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, label.mbc_str() ) );
+ gtk_signal_connect( GTK_OBJECT(m_radio), "key_press_event",
+ GTK_SIGNAL_FUNC(gtk_radiobox_keypress_callback), (gpointer)this );
+
m_boxes.Append( (wxObject*) m_radio );
ConnectWidget( GTK_WIDGET(m_radio) );
m_isStaticBox = TRUE;
- m_widget = gtk_frame_new(m_label.mbc_str());
+ if (label.IsEmpty())
+ m_widget = gtk_frame_new( (char*) NULL );
+ else
+ m_widget = gtk_frame_new( m_label.mbc_str() );
m_parent->DoAddChild( this );
rb->GetEventHandler()->ProcessEvent(event);
}
+//-----------------------------------------------------------------------------
+// "key_press_event"
+//-----------------------------------------------------------------------------
+
+static gint gtk_radiobox_keypress_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxRadioBox *rb )
+{
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ if (!rb->m_hasVMT) return FALSE;
+ if (g_blockEventsOnDrag) return FALSE;
+
+ if ((gdk_event->keyval != GDK_Up) &&
+ (gdk_event->keyval != GDK_Down) &&
+ (gdk_event->keyval != GDK_Left) &&
+ (gdk_event->keyval != GDK_Right))
+ {
+ return FALSE;
+ }
+
+ wxNode *node = rb->m_boxes.Find( (wxObject*) widget );
+ if (!node)
+ {
+ return FALSE;
+ }
+
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
+
+ if ((gdk_event->keyval == GDK_Up) ||
+ (gdk_event->keyval == GDK_Left))
+ {
+ if (node == rb->m_boxes.First())
+ node = rb->m_boxes.Last();
+ else
+ node = node->Previous();
+ }
+ else
+ {
+ if (node == rb->m_boxes.Last())
+ node = rb->m_boxes.First();
+ else
+ node = node->Next();
+ }
+
+ GtkWidget *button = (GtkWidget*) node->Data();
+
+ gtk_widget_grab_focus( button );
+
+ return TRUE;
+}
+
//-----------------------------------------------------------------------------
// wxRadioBox
//-----------------------------------------------------------------------------
m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, label.mbc_str() ) );
+ gtk_signal_connect( GTK_OBJECT(m_radio), "key_press_event",
+ GTK_SIGNAL_FUNC(gtk_radiobox_keypress_callback), (gpointer)this );
+
m_boxes.Append( (wxObject*) m_radio );
ConnectWidget( GTK_WIDGET(m_radio) );
m_isStaticBox = TRUE;
- m_widget = gtk_frame_new(m_label.mbc_str());
+ if (label.IsEmpty())
+ m_widget = gtk_frame_new( (char*) NULL );
+ else
+ m_widget = gtk_frame_new( m_label.mbc_str() );
m_parent->DoAddChild( this );
#include "wx/fontutil.h"
#include "wx/fontmap.h"
#include "wx/tokenzr.h"
+#include "wx/hash.h"
+#include "wx/module.h"
+
+// ----------------------------------------------------------------------------
+// private data
+// ----------------------------------------------------------------------------
+
+static wxHashTable *g_fontHash = (wxHashTable*) NULL;
// ----------------------------------------------------------------------------
// private functions
return TRUE;
}
- wxNativeFont test = wxLoadFont(fontspec);
+ wxNativeFont test = (wxNativeFont) g_fontHash->Get( fontspec );
+ if (test)
+ {
+// printf( "speed up\n" );
+ return TRUE;
+ }
+
+ test = wxLoadFont(fontspec);
+ g_fontHash->Put( fontspec, (wxObject*) test );
+
if ( test )
{
wxFreeFont(test);
return wxLoadFont(fontSpec);
}
+// ----------------------------------------------------------------------------
+// wxFontModule
+// ----------------------------------------------------------------------------
+
+class wxFontModule : public wxModule
+{
+public:
+ bool OnInit();
+ void OnExit();
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxFontModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxFontModule, wxModule)
+
+bool wxFontModule::OnInit()
+{
+ g_fontHash = new wxHashTable( wxKEY_STRING );
+
+ return TRUE;
+}
+
+void wxFontModule::OnExit()
+{
+ delete g_fontHash;
+
+ g_fontHash = (wxHashTable *)NULL;
+}