[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


Log in to reply