2011-07-14 15 views
5

Come emulare/spoofare l'evento keypress in Haskell?Come emulare/spoofare l'evento keypress in Haskell?

Ho un tastierino numerico su schermo nel mio Gui che voglio usare per scrivere in un numero di ingressi di testo nella finestra. La tastiera è composta da widget di pulsanti e ciò che voglio fare è che il gestore onButtonClicked invii un keyPressEvent in modo che il carattere/numero appropriato sia scritto nella voce di testo che ha lo stato attivo. Ho iniziato cercando in Graphics.UI.Gtk.Gdk.Events e feci un evento keypress

Event my1Event = Key True True Graphics.UI.Gtk.Gdk.Events.currentTime [] False False False 0xffb1 "KP_1" Nothing 

Non riuscivo a capire come inviare questo evento. Comunque risulta che Event è deprecato e dovrebbe usare EventM. Ho trovato widgetEvent :: WidgetClass self => self -> EventM t Bool in Graphics.UI.Gtk.Abstract.Widget. Nell'API:

Funzione raramente utilizzata. Questa funzione è usata per emettere i segnali di evento su un widget (quei segnali non dovrebbero mai essere emessi senza usare questa funzione per farlo). Se si desidera sintetizzare un evento, non utilizzare questa funzione; invece, usa mainDoEvent in modo che l'evento si comporti come se fosse nella coda degli eventi.

Così ho guardato mainDoEvent :: EventM t() in Graphics.UI.Gtk.General.General ma sono incerto come utilizzare EventM per creare pressione di un tasto e non poteva trovare un esempio di mainDoEvent in uso. Qualcuno può consigliarmi come creare un evento keypress utilizzando EventM e passarlo a mainDoEvent o in qualche altro modo per farlo? Grazie.

+5

Questa domanda è probabilmente più su GTK che Haskell. Vedi [here] (http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event) per l'API sottostante, che sembra essere esposta attraverso un involucro FFI banale in questo Astuccio. –

risposta

1

Generare un evento è la Via sbagliata. Invece, dovresti inserire il tuo testo usando la funzione appropriata per il tuo widget di testo. Ad esempio, per TextBuffer s, utilizzare textBufferInsertAtCursor.