CLEANUP: quite some code cleanups by haakeyar - thanks!

FEATURE: remove rulers when the second tollbar is not visible

git-svn-id: http://www.neo1973-germany.de/svn@70 46df4e5c-bc4e-4628-a0fc-830ba316316d
This commit is contained in:
kriss 2008-04-02 17:37:18 +00:00
parent bfec9a3ce3
commit f4b55d18c7

View file

@ -2,7 +2,7 @@
""" """
* pyPenNotes.py - pyPenNotes - initialize GUI * pyPenNotes.py - pyPenNotes - initialize GUI
* *
* (C) 2007 by Kristian Mueller <kristian-m@kristian-m.de> * (C) 2008 by Kristian Mueller <kristian-m@kristian-m.de>
* All Rights Reserved * All Rights Reserved
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -105,29 +105,27 @@ class pyPenNotes:
## asynchronous - so we can have a faster start up ## asynchronous - so we can have a faster start up
def create_window(self): def create_window(self):
vbox = gtk.VBox() vbox = gtk.VBox()
toolbar = gtk.Toolbar() main_toolbar = gtk.Toolbar()
self.toolbar2 = gtk.Toolbar() main_toolbar.set_style(gtk.TOOLBAR_ICONS);
self.sub_toolbar = gtk.Toolbar()
self.sub_toolbar.set_style(gtk.TOOLBAR_ICONS);
self.area = gtk.DrawingArea() self.area = gtk.DrawingArea()
self.area.set_size_request(400, 300)
self.pangolayout = self.area.create_pango_layout("")
self.sw = gtk.ScrolledWindow()
self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.sw.add_with_viewport(self.area)
self.table = gtk.Table(2,2) self.table = gtk.Table(2,2)
self.hruler = gtk.HRuler() self.hruler = gtk.HRuler()
self.vruler = gtk.VRuler() self.vruler = gtk.VRuler()
self.hruler.set_range(0, 400, 0, 400) self.hruler.set_range(0, 400, 0, 400) #todo
self.vruler.set_range(0, 300, 0, 300) self.vruler.set_range(0, 300, 0, 300) #todo
self.table.attach(self.hruler, 1, 2, 0, 1, yoptions=0) self.table.attach(self.hruler, 1, 2, 0, 1, yoptions=0)
self.table.attach(self.vruler, 0, 1, 1, 2, xoptions=0) self.table.attach(self.vruler, 0, 1, 1, 2, xoptions=0)
self.table.attach(self.sw, 1, 2, 1, 2) self.table.attach(self.area, 1, 2, 1, 2)
size_evnt_box = gtk.EventBox() size_evnt_box = gtk.EventBox()
self.size_number_entry = gtk.Label() self.size_number_entry = gtk.Label()
size_evnt_box.add(self.size_number_entry) size_evnt_box.add(self.size_number_entry)
self.size_number_entry.set_text("%2.2dpx" % self.size_num) self.size_number_entry.set_text("%2.2dpx" % self.size_num)
self.size_number_entry.modify_fg(gtk.STATE_NORMAL, \ self.size_number_entry.modify_fg(gtk.STATE_NORMAL, \
self.size_number_entry.get_colormap().alloc_color(COLOR_LIST[self.fg_color])) self.size_number_entry.get_colormap().alloc_color(\
COLOR_LIST[self.fg_color]))
self.size_number_entry.set_width_chars(4) # max: "99 px" self.size_number_entry.set_width_chars(4) # max: "99 px"
size_evnt_box.set_events(gtk.gdk.BUTTON_PRESS_MASK) size_evnt_box.set_events(gtk.gdk.BUTTON_PRESS_MASK)
size_evnt_box.connect("button_press_event", self.fg_color_select) size_evnt_box.connect("button_press_event", self.fg_color_select)
@ -146,60 +144,64 @@ class pyPenNotes:
####################################################################### #######################################################################
## fill in toolbar items ############################################## ## fill in toolbar items ##############################################
####################################################################### #######################################################################
def create_toolbutton(stock, callback, expand = False):
btn = gtk.ToolButton(stock);
btn.connect("clicked", callback);
if(expand):
btn.set_expand(True)
return btn
## size < ## size <
toolbar.insert(self.create_toolbar_item("", "gtk-media-play-ltr", \ main_toolbar.insert(create_toolbutton("gtk-go-back", self.prev_size), -1)
self.prev_size), 0)
## size ??px ## size ??px
size_item = gtk.ToolItem() size_item = gtk.ToolItem()
size_item.add(size_evnt_box) size_item.add(size_evnt_box)
toolbar.insert(size_item, 1) main_toolbar.insert(size_item, -1)
## size > ## size >
toolbar.insert(self.create_toolbar_item("", "gtk-media-play-rtl", self.next_size), 2) main_toolbar.insert(create_toolbutton("gtk-go-forward", self.next_size), -1)
toolbar.insert(gtk.SeparatorToolItem(), 3) main_toolbar.insert(gtk.SeparatorToolItem(), -1)
## cls ## cls
more_item = self.create_toolbar_item("", "gtk-go-down", self.more_options, type="toggle") self.more_btn = gtk.ToggleToolButton("gtk-go-down");
more_item.set_expand(True) self.more_btn.connect("toggled", self.more_options);
toolbar.insert(more_item, 4) self.more_btn.set_expand(True);
toolbar.insert(gtk.SeparatorToolItem(), 5) main_toolbar.insert(self.more_btn, -1)
main_toolbar.insert(gtk.SeparatorToolItem(), -1)
## note < ## note <
toolbar.insert(self.create_toolbar_item("", "gtk-media-play-ltr", self.prev_note), 6) main_toolbar.insert(create_toolbutton("gtk-go-back", self.prev_note), -1)
## note ???? ## note ????
note_item = gtk.ToolItem() note_item = gtk.ToolItem()
note_item.add(note_evnt_box) note_item.add(note_evnt_box)
toolbar.insert(note_item, 7) main_toolbar.insert(note_item, -1)
## note > ## note >
toolbar.insert(self.create_toolbar_item("", "gtk-media-play-rtl", self.next_note), 8) main_toolbar.insert(create_toolbutton("gtk-go-forward", self.next_note), -1)
clear_item = self.create_toolbar_item("", "gtk-clear", self.clear_note)
clear_item.set_expand(True)
self.toolbar2.insert(clear_item, 0)
undo_item = self.create_toolbar_item("", "gtk-undo-ltr", self.undo)
undo_item.set_expand(True)
self.toolbar2.insert(undo_item, 1)
undo_item = self.create_toolbar_item("", "gtk-revert-to-saved-ltr", self.print_list_sub_number)
# undo_item = self.create_toolbar_item("", "gtk-revert-to-saved-ltr", self.load)
undo_item.set_expand(True)
self.toolbar2.insert(undo_item, 2)
undo_item = self.create_toolbar_item("", "gtk-revert-to-saved-ltr", self.print_list_number)
# undo_item = self.create_toolbar_item("", "gtk-revert-to-saved-ltr", self.load)
undo_item.set_expand(True)
self.toolbar2.insert(undo_item, 2)
undo_item = self.create_toolbar_item("", "gtk-save", self.save)
undo_item.set_expand(True)
self.toolbar2.insert(undo_item, 3)
quit_item = self.create_toolbar_item("", "gtk-quit", self.end_program)
quit_item.set_expand(True)
self.toolbar2.insert(quit_item, 4)
vbox.pack_start(toolbar, False, False, 0) # Fill in the sub toolbar:
vbox.pack_start(self.toolbar2, False, False, 0)
# Clear
self.sub_toolbar.insert(create_toolbutton("gtk-clear", self.clear_note, True), -1)
# Undo
self.sub_toolbar.insert(create_toolbutton("gtk-undo", self.undo, True), -1)
# Revert to saved
self.sub_toolbar.insert(create_toolbutton("gtk-revert-to-saved", self.load, True), -1)
# Save
self.sub_toolbar.insert(create_toolbutton("gtk-save",self.save, True),-1)
# Quit
self.sub_toolbar.insert(create_toolbutton("gtk-quit", self.end_program, True), -1)
#Experimental:
# self.sub_toolbar.insert(create_toolbutton(\
# "gtk-revert-to-saved-ltr", self.print_list_sub_number, True), -1)
# self.sub_toolbar.insert(create_toolbutton(\
# "gtk-revert-to-saved-ltr", self.print_list_number, True), -1)
vbox.pack_start(main_toolbar, False, False, 0)
vbox.pack_start(self.sub_toolbar, False, False, 0)
vbox.add(self.table); vbox.add(self.table);
self.window.add(vbox) self.window.add(vbox)
self.area.set_events(gtk.gdk.POINTER_MOTION_MASK | self.area.set_events(gtk.gdk.POINTER_MOTION_MASK |
@ -212,10 +214,12 @@ class pyPenNotes:
def add_pixel(widget, event): def add_pixel(widget, event):
if self.clicked: if self.clicked:
pos = widget.get_pointer() pos = widget.get_pointer()
# print "blub <%s/%s>" % (widget.get_pointer()[0], widget.get_pointer()[1]) # print "blub <%s/%s>" % (widget.get_pointer()[0], \
# widget.get_pointer()[1])
backup_fb = self.gc.foreground backup_fb = self.gc.foreground
try: try:
self.gc.foreground = widget.window.get_colormap().alloc_color(COLOR_LIST[self.fg_color]) self.gc.foreground = widget.window.get_colormap().alloc_color(\
COLOR_LIST[self.fg_color])
if self.last == (0, 0): if self.last == (0, 0):
self.last = pos self.last = pos
@ -252,21 +256,6 @@ class pyPenNotes:
self.area.connect("button-release-event", unclick) self.area.connect("button-release-event", unclick)
self.area.connect("motion-notify-event", add_pixel) self.area.connect("motion-notify-event", add_pixel)
self.hadj = self.sw.get_hadjustment()
self.vadj = self.sw.get_vadjustment()
def val_cb(adj, ruler, horiz):
if horiz:
span = self.sw.get_allocation()[3]
else:
span = self.sw.get_allocation()[2]
l,u,p,m = ruler.get_range()
v = adj.value
ruler.set_range(v, v+span, p, m)
while gtk.events_pending():
gtk.main_iteration()
self.hadj.connect('value-changed', val_cb, self.hruler, True)
self.vadj.connect('value-changed', val_cb, self.vruler, False)
def size_allocate_cb(wid, allocation): def size_allocate_cb(wid, allocation):
x, y, w, h = allocation x, y, w, h = allocation
l,u,p,m = self.hruler.get_range() l,u,p,m = self.hruler.get_range()
@ -275,9 +264,12 @@ class pyPenNotes:
l,u,p,m = self.vruler.get_range() l,u,p,m = self.vruler.get_range()
m = max(m, h) m = max(m, h)
self.vruler.set_range(l, l+h, p, m) self.vruler.set_range(l, l+h, p, m)
self.sw.connect('size-allocate', size_allocate_cb) self.area.connect('size-allocate', size_allocate_cb)
self.window.show_all() self.window.show_all()
self.toolbar2.hide() ## Hide to make space on screen self.sub_toolbar.hide() ## Hide to make space on screen
self.hruler.hide()
self.vruler.hide()
## lets update the screen so our load can redraw to something ## lets update the screen so our load can redraw to something
self.area_expose_cb(self.area, None) self.area_expose_cb(self.area, None)
@ -291,25 +283,8 @@ class pyPenNotes:
self.save(None) self.save(None)
gtk.main_quit() gtk.main_quit()
return False return False
###########################################################################
## GUI Helper #########################################################
###########################################################################
def create_toolbar_item(self, text, icon, callback, type = "tool"):
btn_image = gtk.Image()
btn_image.set_from_icon_name(icon, gtk.ICON_SIZE_SMALL_TOOLBAR)
if type == "toggle":
btn = gtk.ToggleButton("V")
self.more_btn = btn
else:
btn = gtk.ToolButton(btn_image, text)
btn.connect("clicked", callback)
item = gtk.ToolItem()
item.add(btn)
return item
########################################################################### ###########################################################################
## callbacks ########################################################### ## callbacks ###########################################################
########################################################################### ###########################################################################
@ -319,12 +294,14 @@ class pyPenNotes:
for i in range(len(self.pen_notes)): for i in range(len(self.pen_notes)):
for j in range(len(self.pen_notes)): for j in range(len(self.pen_notes)):
print "" print ""
notesList.pearson_correlation(self.pen_notes, i, j, "number", "sub_number") notesList.pearson_correlation(self.pen_notes, i, j, "number", \
"sub_number")
#notesList.pearson_corr(self.pen_notes, 0, 1, "number") #notesList.pearson_corr(self.pen_notes, 0, 1, "number")
## debug correlation of notes list ## debug correlation of notes list
def print_list_sub_number(self, event): def print_list_sub_number(self, event):
notesList.pearson_correlation(self.pen_notes, 0, 1, "sub_number", "number") notesList.pearson_correlation(self.pen_notes, 0, 1, "sub_number", \
"number")
#notesList.pearson_corr(self.pen_notes, 0, 1, "sub_number") #notesList.pearson_corr(self.pen_notes, 0, 1, "sub_number")
## change brush size-- ## change brush size--
@ -348,7 +325,7 @@ class pyPenNotes:
def prev_note(self, event): def prev_note(self, event):
if self.current_note_number > 0: if self.current_note_number > 0:
self.current_note_number -= 1 self.current_note_number -= 1
self.note_number_entry.set_text("%4.4d" % (self.current_note_number+1)) self.note_number_entry.set_text("%4.4d"%(self.current_note_number+1))
self.current_note = self.pen_notes[self.current_note_number] self.current_note = self.pen_notes[self.current_note_number]
self.redraw() self.redraw()
@ -367,12 +344,15 @@ class pyPenNotes:
## show more options (a second toolbar) ## show more options (a second toolbar)
def more_options(self, event): def more_options(self, event):
self.more_btn.toggled()
if self.more_options_visible: if self.more_options_visible:
self.toolbar2.hide() self.sub_toolbar.hide()
self.hruler.hide()
self.vruler.hide()
self.more_options_visible = False self.more_options_visible = False
else: else:
self.toolbar2.show() self.sub_toolbar.show()
self.hruler.show()
self.vruler.show()
self.more_options_visible = True self.more_options_visible = True
def undo(self, event): def undo(self, event):
@ -418,14 +398,15 @@ class pyPenNotes:
continue continue
## first point ## first point
if new_stroke: if new_stroke:
self.current_note.append_new_point((int(coords[0]), \ self.current_note.append_new_point(\
int(coords[1])), fg_color, thickness) (int(coords[0]), \
int(coords[1])), fg_color, thickness)
# self.current_note.strokes_list.append(int(coords[0]), \ # self.current_note.strokes_list.append(\
# int(coords[1]))) # int(coords[0]), int(coords[1])))
self.current_note.append_point_to_stroke((int(coords[0]), \ self.current_note.append_point_to_stroke(\
int(coords[1]))) (int(coords[0]), int(coords[1])))
new_stroke = False new_stroke = False
else: else:
@ -443,7 +424,9 @@ class pyPenNotes:
print "count: %s, current: %s" %(count, self.current_note_number) print "count: %s, current: %s" %(count, self.current_note_number)
if count <= self.current_note_number: if count <= self.current_note_number:
print "Sorry there is no note %4.4d left bringing you to note 0001" % (count + 1) # Count is zero-indexed, while what is displayed to the user is not print "Sorry there is no note %4.4d left bringing you to note 0001"\
% (count + 1)
# Count is zero-indexed, while what is displayed to the user is not
self.current_note_number = 0 self.current_note_number = 0
self.next_note(None) # Update the note number box self.next_note(None) # Update the note number box
self.prev_note(None) # self.prev_note(None) #
@ -558,7 +541,7 @@ class pyPenNotes:
def main(): def main():
gobject.timeout_add(500, pyPenNotes.update_ui, py_pen_notes) # every 1/2 second gobject.timeout_add(500, pyPenNotes.update_ui, py_pen_notes) # every 1/2 sec
try: try:
if gtk.gtk_version[0] == 2: if gtk.gtk_version[0] == 2:
gtk.gdk.threads_init() gtk.gdk.threads_init()