[gtkmm] Entry: hexadezimal Bytes eingeben
-
Hi Leute!
Ich würde das Widget Gtk::Entry gern nutzen, um eine Reihe Bytes einzugeben, in zum Beispiel diesem Format:01 02 03 AF CD 8B
Also immer zwei Ziffern gefolgt von einem Leerzeichen.
Geht das mit gtkmm direkt, so dass ein Format schon vorgegeben ist: Uppercase, Hex, alle zwei Zeichen ein Leerzeichen?
Oder wie kann ich sowas selbst umsetzen?Falls jemand X-CTU kennt, so wie in dessen Terminal soll das funktionieren.
-
Hab eine Lösung: Klasse ableiten und damit Eingaben abfangen.
void HexByteEntry::on_insert_text(const Glib::ustring & Text, int * pPosition) { //forward message Gtk::Entry::on_insert_text(Text, pPosition); //get text as uppercase Glib::ustring OrgText= get_text().uppercase(); Glib::ustring NewText; //hex digit only for(unsigned int i= 0; i < OrgText.length(); i++) { if(isxdigit(OrgText[i])) NewText+= OrgText[i]; } //swap buffer OrgText= NewText; NewText= ""; //format: XX XX XX XX XX ... for(unsigned int i= 0; i < OrgText.length(); i++) { NewText+= OrgText[i]; if(i % 2 == 1) NewText+= ' '; } //replace by new text set_text(""); *pPosition= 0; Gtk::Entry::on_insert_text(NewText, pPosition); }
Im Screenshot ganz unten bei Hex:
http://www.bilder-hochladen.net/files/big/9bfc-2h-c7e1.png