Wie gestern schon angekündigt, (ist|war) mein nächstes Spielziel ein GUI-Element innerhalb meiner kleinen Klasse ansprechbar zu machen. Das alles war in weniger als 15 Minuten erledigt, instance_variable_set sei dank aber dazu später mehr. Als erstes einmal ein kleiner neuer Codeschnippsel:
#implement a current window (PROTOTYP) class Diary < BlindOptic::Window #define xml for view use_view :diary #new entry button clicked def ReadEntryButton_Clicked #output text from textbox puts "Text: #{@EntryTextbox.text}" end def CleanEntryButton_Clicked @EntryTextbox.clean end end
Sollte eigentlich selbsterklärend sein. Der Button ReadEntryButton wurde in meiner XML Definition hinzugefügt und hat den Sinn, den aktuellen Eintrag zu lesen und auf der Kommandozeile auszugeben. Der Name des neuen Objektes @EntryTextbox entspricht dem ID Attribut in der XML Definition (passend zu den Eventhandler Methodennamen). An dieser Stelle kam instance_variable_set ins Spiel. Für alle diejenigen von Euch die diese Methode nicht kennen: instance_variable_set verlangt zwei Übergabewerte. Der Erste ist ein Symbol und der Zweite ein gewöhnliches Objekt. Nun könnte man folgendes machen:
my_obj.instance_variable_set(:@var, "dies ist der Inhalt") #das Objekt "my_obj" besitzt nun eine Instanzvariable #@var mit dem Inhalt "dies ist der Inhalt"
In meiner derzeitigen Implemtation generiere ich nun das Symbol anhand der Id und voila das GUI Element ist verfügbar. Wer ein wenig mitspielen will, schnappt sich einfach mal die Sourcen.
Kommentar schreiben