# Set the text to appear in the right hand side of the user interface
- def set_value_text(self, text):
- self.text.delete_text(0, self.text.get_length())
+ def set_value_text(self, item):
- # The text widget has trouble inserting text containing NULL
- # characters.
+ # Clear old old value in text window
- text = string.replace(text, "\x00", ".")
+ self.text.delete_text(0, self.text.get_length())
+
+ if type(item) == str:
- self.text.insert(self.font, None, None, text)
+ # The text widget has trouble inserting text containing NULL
+ # characters.
+
+ item = string.replace(item, "\x00", ".")
+
+ self.text.insert(self.font, None, None, item)
+ else:
+
+ # A non-text item
+
+ self.text.insert(self.font, None, None, repr(item))
+
# This function is called when a key is selected in the left hand side
# of the user interface.
def register_get_value_text_fn(self, regexp, fn):
self.get_value_text_fns.append((regexp, fn))
+#
+# A utility function to convert a string to the standard hex + ascii format.
+# To display all values in hex do:
+# register_get_value_text_fn("", gtkdictbrowser.hex_string)
+#
+
+def hex_string(data):
+ """Return a hex dump of a string as a string.
+
+ The output produced is in the standard 16 characters per line hex +
+ ascii format:
+
+ 00000000: 40 00 00 00 00 00 00 00 40 00 00 00 01 00 04 80 @....... @.......
+ 00000010: 01 01 00 00 00 00 00 01 00 00 00 00 ........ ....
+ """
+
+ pos = 0 # Position in data
+ line = 0 # Line of data
+
+ hex = "" # Hex display
+ ascii = "" # ASCII display
+
+ result = ""
+
+ while pos < len(data):
+
+ # Start with header
+
+ if pos % 16 == 0:
+ hex = "%08x: " % (line * 16)
+ ascii = ""
+
+ # Add character
+
+ hex = hex + "%02x " % (ord(data[pos]))
+
+ if ord(data[pos]) < 32 or ord(data[pos]) > 176:
+ ascii = ascii + '.'
+ else:
+ ascii = ascii + data[pos]
+
+ pos = pos + 1
+
+ # Add separator if half way
+
+ if pos % 16 == 8:
+ hex = hex + " "
+ ascii = ascii + " "
+
+ # End of line
+
+ if pos % 16 == 0:
+ result = result + "%s %s\n" % (hex, ascii)
+ line = line + 1
+
+ # Leftover bits
+
+ if pos % 16 != 0:
+
+ # Pad hex string
+
+ for i in range(0, (16 - (pos % 16))):
+ hex = hex + " "
+
+ # Half way separator
+
+ if (pos % 16) < 8:
+ hex = hex + " "
+
+ result = result + "%s %s\n" % (hex, ascii)
+
+ return result
+
# For testing purposes, create a fixed dictionary to browse with
if __name__ == "__main__":
- dict = {"chicken": "ham", "spam": "fun"}
+ dict = {"chicken": "ham", "spam": "fun", "subdict": {"a": "b", "c": "d"}}
db = GtkDictBrowser(dict)