Esempio n. 1
0
 def __init__(self):
     self.notebook = NoteBook()
     self.choices = {1:self.add_notes,
                2:self.modify_notes_tags,
                3:self.append_notes_tags,
                4:self.search_notes,
                5:self.display_notes,
                6:self.quit}
Esempio n. 2
0
 def __init__(self):
     self.notebook = NoteBook()
     self.choices = {
         '1': self.show_notes,
         '2': self.search_notes,
         '3': self.add_notes,
         '4': self.modify_note,
         '5': self.quit
     }
Esempio n. 3
0
	def __init__(self):
		self.notebook = NoteBook()
		self.choices = {
			"1" : self.show_notes,
			"2" : self.search_notes,
			"3" : self.add_note,
			"4" : self.modify_note,
			"5" : self.quit
		}
 def __init__(self):
     self.one_close = app_theme.get_pixbuf("treeview/1-close.png")
     self.one_open = app_theme.get_pixbuf("treeview/1-open.png")
     self.two_close = app_theme.get_pixbuf("treeview/2-close.png")
     self.two_open = app_theme.get_pixbuf("treeview/2-open.png")
     self.three_close = app_theme.get_pixbuf("treeview/3-close.png")
     self.three_open = app_theme.get_pixbuf("treeview/3-open.png")
     #
     self.tree_view_open = app_theme.get_pixbuf("treeview/open.png")
     self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
     self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
     self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
     #
     self.listview_color = ui_theme.get_color("scrolledbar")
     self.play_list_vbox = gtk.VBox()
     #
     self.list_view_vbox = gtk.VBox()
     self.list_scroll_win = ScrolledWindow(0, 0)
     self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.list_view = ListView()
     #
     self.play_list_con = PlayListControl()
     #
     self.list_view_vbox.pack_start(self.list_scroll_win, True, True)
     self.list_view_vbox.pack_start(self.play_list_con, False, False)
     # 网络列表,搜索框.
     self.tree_scroll_win = ScrolledWindow(0, 0)
     self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.tree_view_vbox = gtk.VBox()
     self.tree_view = TreeViewBase()
     self.search_ali = gtk.Alignment(0, 0, 1, 1)
     self.search = Search()
     self.search_ali.add(self.search)
     #
     self.search_ali.set_padding(7, 5, 12, 12)
     self.tree_view_vbox.pack_start(self.search_ali, False, False)
     self.tree_view_vbox.pack_start(self.tree_scroll_win, True, True)
     self.search_ali.connect("expose-event", self.search_ali_expose_event)
     #
     self.note_book = NoteBook()
     #
     self.list_view.on_draw_sub_item = self.__listview_on_draw_sub_item
     self.list_view.columns.add_range(["filename", "time"])
     self.list_view.columns[0].width = 120
     self.list_view.columns[1].width = 95
     #
     self.note_book.hide_title()
     self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
     #
     self.list_scroll_win.add_with_viewport(self.list_view)
     self.tree_scroll_win.add_with_viewport(self.tree_view)
     #self.note_book.add_layout1(self.list_scroll_win)
     self.note_book.add_layout1(self.list_view_vbox)
     self.note_book.add_layout2(self.tree_view_vbox)
     #self.play_list_vbox.pack_start(self.scroll_win, True, True)
     self.play_list_vbox.pack_start(self.note_book, True, True)
Esempio n. 5
0
def get_notebook(owner_nickname, notebook_access, notebook_name, notebook_version):
    """
    Returns the notebook.
    """
    content = "" #content of the book

    # calculate the key to retrieve content from db
    #import pdb; pdb.set_trace()
    key_name=owner_nickname+"/"+notebook_access+"/"+notebook_name
    
    #import pdb; pdb.set_trace()
    # if version is not specified return the latest one from NoteBook
    if notebook_version == "" or notebook_version is None:
        key = db.Key.from_path("NoteBook", key_name)
    else: # return the required version from NoteBookVersion
        # Add version to the key to retrieve a saved version
        key = db.Key.from_path("NoteBookVersion", key_name+"/"+str(notebook_version) )


    if not key:
        return None
    
    notebook = NoteBook.get( key )          # get the notebook.
    if notebook:                            # if notebook is found
        return  notebook                    # return it. 
    else:
        return NoteBookVersion.get( key )
 def __init__(self):
     self.tree_view_open  = app_theme.get_pixbuf("treeview/open.png")
     self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
     self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
     self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
     #
     self.listview_color = ui_theme.get_color("scrolledbar")
     self.play_list_vbox = gtk.VBox()
     #
     self.list_scroll_win   = ScrolledWindow(0, 0)
     self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.list_view    = ListView()
     #
     self.tree_scroll_win   = ScrolledWindow(0, 0)
     self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.tree_view     = TreeViewBase()
     self.note_book = NoteBook()
     #
     self.list_view.on_draw_sub_item =  self.__listview_on_draw_sub_item
     self.list_view.columns.add_range(["filename", "time"])
     self.list_view.columns[0].width = 120
     self.list_view.columns[1].width = 95
     #
     self.note_book.hide_title()
     self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
     #
     self.list_scroll_win.add_with_viewport(self.list_view)
     self.tree_scroll_win.add_with_viewport(self.tree_view)
     self.note_book.add_layout1(self.list_scroll_win) 
     self.note_book.add_layout2(self.tree_scroll_win)
     #self.play_list_vbox.pack_start(self.scroll_win, True, True)
     self.play_list_vbox.pack_start(self.note_book, True, True)
Esempio n. 7
0
class Menu:
    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {
            "1": self.show_notes,
            "2": self.search_notes,
            "3": self.add_note,
            "4": self.modify_note,
            "5": self.quit
        }

    def display_menu(self):
        print("""
Notebook Menu

1. Show all Notes
2. Search Notes
3. Add Note
4. Modify Note
5. Quit
""")

    def run(self):
        while true:
            self.display_menu()
            choice = input("Enter an option:")
            action = self.choices.get(str(choice))
            if action:
                action()
            else:
                print("{0} is not a valid choice".format(choice))

    def show_notes(self, notes=None):
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print("{0}: {1}\n{2}".format(note.id, note.tags, note.memo))

    def search_notes(self):
        ifilter = raw_input("Search for:")
        notes = self.notebook.search(ifilter)
        self.show_notes(notes)

    def add_note(self):
        memo = raw_input("Enter a memo:")
        print(memo)
        self.notebook.new_note(memo)
        print("Your note has been added.")

    def modify_note(self):
        note_id = raw_input("Enter a note id:")
        memo = raw_input("Enter a memo:")
        tags = raw_input("Enter tags:")
        if memo:
            self.notebook.modify_memo(note_id, memo)
        if tags:
            self.notebook.modify_tags(note_id, tags)

    def quit(self):
        sys.exit(0)
Esempio n. 8
0
 def __init__(self):
     self.notebook = NoteBook()
     self.choices = {
         "1":self.show_notes,
         "2":self.search_notes,
         "3":self.add_note,
         "4":self.modify_note,
         "5":self.quit
     }
Esempio n. 9
0
class Menu:
	'''Display a menu and respond to choices when run'''
	def __init__(self):
		self.notebook = NoteBook()
		self.choices = {
			"1" : self.show_notes,
			"2" : self.search_notes,
			"3" : self.add_note,
			"4" : self.modify_note,
			"5" : self.quit
		}
	def display_menu(self):
		print("""
		Notebook Menu
		
		1. Show all Notes
		2. Search Notes
		3. Add Note
		4. Modify Note
		5. Quit
		""")
		
	def run(self):
		"""Display the menu and respond to choices"""
		while True:
			self.display_menu()
			choice = input("Enter an option: ")
			action = self.choices.get(choice)
			if action:
				action()
			else:
				print("{0} is not a valid choice", format(choice))
	def show_notes(self, notes=None):
		if not notes:
			notes = self.notebook.notes
		for note in notes:
			print("{0}: {1}\n {2}". format(note.id, note.tags, note.memo))
	def search_notes(self):
		filter = input("Search for: ")
		notes = self.notebook.search(filter)
		self.show_notes(notes)
	def add_note(self):
		memo = input("Enter a memo: ")
		self.notebook.new_note(memo)
		print("Your note has been added")
		
	def modify_note(self):
		if = input("Enter a note id: ")
		memo = input("Enter a memo;  ")
		tags = input("Enter tags: ")
		if memo:
			self.notebook.modify_memo(id, memo)
		if tags:
			self.notebook.modify_tags(id, tags)
	def quit(self):
		print("Thank you for using your notebook today")
		sys.exit(0)
if __name__ == '__main__':
	Menu().run()
Esempio n. 10
0
 def __init__(self):
     self.one_close = app_theme.get_pixbuf("treeview/1-close.png")
     self.one_open  = app_theme.get_pixbuf("treeview/1-open.png")
     self.two_close = app_theme.get_pixbuf("treeview/2-close.png")
     self.two_open  = app_theme.get_pixbuf("treeview/2-open.png")
     self.three_close = app_theme.get_pixbuf("treeview/3-close.png")
     self.three_open  = app_theme.get_pixbuf("treeview/3-open.png")
     #
     self.tree_view_open  = app_theme.get_pixbuf("treeview/open.png")
     self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
     self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
     self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
     #
     self.listview_color = ui_theme.get_color("scrolledbar")
     self.play_list_vbox = gtk.VBox()
     #
     self.list_view_vbox = gtk.VBox()
     self.list_scroll_win   = ScrolledWindow(0, 0)
     self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.list_view    = ListView()
     #
     self.play_list_con = PlayListControl()
     #
     self.list_view_vbox.pack_start(self.list_scroll_win, True, True)
     self.list_view_vbox.pack_start(self.play_list_con, False, False)
     # 网络列表,搜索框.
     self.tree_scroll_win   = ScrolledWindow(0, 0)
     self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
     self.tree_view_vbox = gtk.VBox()
     self.tree_view     = TreeViewBase()
     self.search_ali    = gtk.Alignment(0, 0, 1, 1)
     self.search        = Search()
     self.search_ali.add(self.search)
     #
     self.search_ali.set_padding(7, 5, 12, 12)
     self.tree_view_vbox.pack_start(self.search_ali, False, False)
     self.tree_view_vbox.pack_start(self.tree_scroll_win, True, True)
     self.search_ali.connect("expose-event", self.search_ali_expose_event)
     #
     self.note_book = NoteBook()
     #
     self.list_view.on_draw_sub_item =  self.__listview_on_draw_sub_item
     self.list_view.columns.add_range(["filename", "time"])
     self.list_view.columns[0].width = 120
     self.list_view.columns[1].width = 95
     #
     self.note_book.hide_title()
     self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
     #
     self.list_scroll_win.add_with_viewport(self.list_view)
     self.tree_scroll_win.add_with_viewport(self.tree_view)
     #self.note_book.add_layout1(self.list_scroll_win) 
     self.note_book.add_layout1(self.list_view_vbox) 
     self.note_book.add_layout2(self.tree_view_vbox)
     #self.play_list_vbox.pack_start(self.scroll_win, True, True)
     self.play_list_vbox.pack_start(self.note_book, True, True)
Esempio n. 11
0
class Memu(object):
    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {
            "1":self.show_notes,
            "2":self.search_notes,
            "3":self.add_note,
            "4":self.modify_note,
            "5":self.quit
        }

    def display_memu(self):
        print ("""
        Notebook Menu

        1.Show all Notes
        2.Search Notes
        3.Add Note
        4.Modify Note
        5.Quit
        """)
    def run(self):
        while True:
            self.display_memu()
            choice = raw_input("Enter an option:")
            action = self.choices.get(choice)
            if action:
                action()
            else:
                print "{0} is not a valid choice".format(choice)
    def show_notes(self,notes = None):
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print ("{0}:{1}\n{2}".format(note.id,note.tags,note.memo))
    def search_notes(self):
        filter = raw_input("Search for:")
        notes = self.notebook.search(filter)
        self.show_notes(notes)

    def add_note(self):
        memo = raw_input("Enter a memo:")
        self.notebook.new_note(memo)
        print "Your note has been added."
    def modify_note(self):
        id = raw_input("Enter a note id:")
        memo = raw_input("Enter a memo:")
        tags = raw_input("Enter tags:")
        if memo:
            self.notebook.modify_note(id,memo)
        if tags:
            self.notebook.modify_tags(id,tags)

    def quit(self):
        print "Thank you for using your notebook today."
        sys.exit(0)
Esempio n. 12
0
    def __init__(self, ifarduino, address = "/dev/cu.usbmodem142101"):
        self._tickes = 0
        self._hit = False
        self._hit_count = 0
        self._hit_begin = 0
        self._hitRecord = []
        self._channel = Channel()
        self._notebook = NoteBook()
        self._player1 = Player("tempo",self._notebook)
        self._player2 = Player("chord",self._notebook)
        self._player3 = Player("melody",self._notebook)
        self.quit = False


        self._Arduino = ifarduino
        #self._Arduino = True

        if self._Arduino:
            self._serialPort = address
            self._baudRate = 9600
            self._server = serial.Serial(self._serialPort, self._baudRate, timeout=1)
Esempio n. 13
0
def createTODO(directory):

    # get files
    allFiles = [f for f in listdir(directory) if isfile(join(directory, f))]
    todoFiles = [f for f in allFiles if f[0] != "."]
    # print(todoFiles)

    # create notebook
    nb = NoteBook()
    nb.setTitle("TODO")

    # nb.inbox.print(msg)
    # nb.tasklist.print(msg)

    for todof in todoFiles:
        n = readNoteFile(directory + "/" + todof)
        #print("adding note {}".format(todof))
        nb.addNote(n)

    # finally, create task list based on todo projects
    nb.tasklist.createTasks(nb.notes)

    return nb
class PlayListView(object):
    def __init__(self):
        self.tree_view_open  = app_theme.get_pixbuf("treeview/open.png")
        self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
        self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
        self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
        #
        self.listview_color = ui_theme.get_color("scrolledbar")
        self.play_list_vbox = gtk.VBox()
        #
        self.list_scroll_win   = ScrolledWindow(0, 0)
        self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.list_view    = ListView()
        #
        self.tree_scroll_win   = ScrolledWindow(0, 0)
        self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.tree_view     = TreeViewBase()
        self.note_book = NoteBook()
        #
        self.list_view.on_draw_sub_item =  self.__listview_on_draw_sub_item
        self.list_view.columns.add_range(["filename", "time"])
        self.list_view.columns[0].width = 120
        self.list_view.columns[1].width = 95
        #
        self.note_book.hide_title()
        self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
        #
        self.list_scroll_win.add_with_viewport(self.list_view)
        self.tree_scroll_win.add_with_viewport(self.tree_view)
        self.note_book.add_layout1(self.list_scroll_win) 
        self.note_book.add_layout2(self.tree_scroll_win)
        #self.play_list_vbox.pack_start(self.scroll_win, True, True)
        self.play_list_vbox.pack_start(self.note_book, True, True)

    def __listview_on_draw_sub_item(self, e):
        color = self.listview_color.get_color()
        if e.double_items == e.item:
            e.text_color = "#000000"
            text_size=9
            color_info = [(0, (color, 0.8)), (1, (color, 0.8))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        elif e.item in e.single_items:
            e.text_color = "#FFFFFF"
            text_size=9
            color_info = [(0, (color, 0.5)), (1, (color, 0.5))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        elif e.motion_items == e.item:
            e.text_color  = "#FFFFFF"
            text_size=9
            color_info = [(0, (color, 0.2)), (1, (color, 0.2))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        else:
            e.text_color = "#FFFFFF"
            text_size=9


        text = e.text.decode("utf-8")
        one_width = self.list_view.columns[0].width
        two_width = self.list_view.columns[1].width
        if e.w == one_width: # 显示播放名字的第一列.
            #
            t_width = 0
            t_index = 0
            add_point = False
            for t in text:
                t_width += get_text_size(t, text_size=text_size)[0]
                if t_width > one_width:
                    add_point = True
                    break
                t_index += 1
            if add_point:
                text = text[:t_index] + "..."
            #
            alignment = Text.LEFT
            x = e.x + 15
        elif e.w == two_width:
            alignment = Text.RIGHT
            x = e.x - 15

        e.draw_text(e.cr, 
                str(text), 
                  x, e.y, e.w, e.h,
                  text_color=e.text_color, 
                  text_size=text_size,
                  alignment=alignment)

    def __treeview_paint_nodes_event(self, node_event):
        leave_width = 20
        color = self.listview_color.get_color()
        text_color = "#FFFFFF"
        #
        if node_event.node in node_event.single_items:
            color_info = [(0, (color, 0.45)), (1, (color, 0.45))] 
            draw_vlinear(node_event.cr,
                         node_event.x, node_event.y, node_event.w, node_event.h,
                         color_info
                         )
            text_color = "#000000"
        elif node_event.node in node_event.motion_items:
            color_info = [(0, (color, 0.75)), (1, (color, 0.75))] 
            draw_vlinear(node_event.cr,
                         node_event.x, node_event.y, node_event.w, node_event.h,
                         color_info
                         )
        #
        if node_event.node.leave == 1: # 根节点.
            x = node_event.x + 20
            # 画root的图标.
            if node_event.node.is_expanded:
                pixbuf = self.tree_view_close.get_pixbuf()
            else:
                pixbuf = self.tree_view_open.get_pixbuf()
            # node_event.x + 5 是图标与文字之间的宽度.
            draw_pixbuf(node_event.cr,
                        pixbuf,
                        node_event.x + 5,
                        node_event.y + node_event.h/2 - pixbuf.get_height()/2 )
        else:
            #x_padding = node_event.node.leave * leave_width
            #x = node_event.x + 18 + x_padding
            x = node_event.x + 20
            #
            if node_event.node.is_expanded:
                pixbuf = self.tree_view_bottom.get_pixbuf()
            else:
                pixbuf = self.tree_view_right.get_pixbuf()
            icon_x = node_event.x + pixbuf.get_width()/2
            icon_y = node_event.y + node_event.h/2 - pixbuf.get_height()/2

            if node_event.node.nodes or node_event.node.leave == 2:
                draw_pixbuf(node_event.cr, pixbuf, icon_x, icon_y)
        #
        draw_text(node_event.cr, 
                  node_event.node.text, 
                  x + 5,
                  node_event.y + node_event.h/2 - get_text_size(node_event.node.text, text_size=9)[1]/2,
                  text_color=text_color,
                  text_size=9
                  )
Esempio n. 15
0
class PlayListView(object):
    def __init__(self):
        self.one_close = app_theme.get_pixbuf("treeview/1-close.png")
        self.one_open  = app_theme.get_pixbuf("treeview/1-open.png")
        self.two_close = app_theme.get_pixbuf("treeview/2-close.png")
        self.two_open  = app_theme.get_pixbuf("treeview/2-open.png")
        self.three_close = app_theme.get_pixbuf("treeview/3-close.png")
        self.three_open  = app_theme.get_pixbuf("treeview/3-open.png")
        #
        self.tree_view_open  = app_theme.get_pixbuf("treeview/open.png")
        self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
        self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
        self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
        #
        self.listview_color = ui_theme.get_color("scrolledbar")
        self.play_list_vbox = gtk.VBox()
        #
        self.list_view_vbox = gtk.VBox()
        self.list_scroll_win   = ScrolledWindow(0, 0)
        self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.list_view    = ListView()
        #
        self.play_list_con = PlayListControl()
        #
        self.list_view_vbox.pack_start(self.list_scroll_win, True, True)
        self.list_view_vbox.pack_start(self.play_list_con, False, False)
        # 网络列表,搜索框.
        self.tree_scroll_win   = ScrolledWindow(0, 0)
        self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.tree_view_vbox = gtk.VBox()
        self.tree_view     = TreeViewBase()
        self.search_ali    = gtk.Alignment(0, 0, 1, 1)
        self.search        = Search()
        self.search_ali.add(self.search)
        #
        self.search_ali.set_padding(7, 5, 12, 12)
        self.tree_view_vbox.pack_start(self.search_ali, False, False)
        self.tree_view_vbox.pack_start(self.tree_scroll_win, True, True)
        self.search_ali.connect("expose-event", self.search_ali_expose_event)
        #
        self.note_book = NoteBook()
        #
        self.list_view.on_draw_sub_item =  self.__listview_on_draw_sub_item
        self.list_view.columns.add_range(["filename", "time"])
        self.list_view.columns[0].width = 120
        self.list_view.columns[1].width = 95
        #
        self.note_book.hide_title()
        self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
        #
        self.list_scroll_win.add_with_viewport(self.list_view)
        self.tree_scroll_win.add_with_viewport(self.tree_view)
        #self.note_book.add_layout1(self.list_scroll_win) 
        self.note_book.add_layout1(self.list_view_vbox) 
        self.note_book.add_layout2(self.tree_view_vbox)
        #self.play_list_vbox.pack_start(self.scroll_win, True, True)
        self.play_list_vbox.pack_start(self.note_book, True, True)

    def __listview_on_draw_sub_item(self, e):
        color = self.listview_color.get_color()
        if e.double_items == e.item:
            e.text_color = "#000000"
            text_size=9
            color_info = [(0, (color, 0.8)), (1, (color, 0.8))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        elif e.item in e.single_items:
            e.text_color = "#FFFFFF"
            text_size=9
            color_info = [(0, (color, 0.5)), (1, (color, 0.5))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        elif e.motion_items == e.item:
            e.text_color  = "#FFFFFF"
            text_size=9
            color_info = [(0, (color, 0.2)), (1, (color, 0.2))] 
            draw_vlinear(e.cr,
                         e.x, e.y, e.w, e.h,
                         color_info
                         )
        else:
            e.text_color = "#FFFFFF"
            text_size=9
        #
        text = e.text.decode("utf-8")
        one_width = self.list_view.columns[0].width
        two_width = self.list_view.columns[1].width
        #if e.w == one_width: # 显示播放名字的第一列.
        if e.column_index == 0:
            #
            t_width = 0
            t_index = 0
            add_point = False
            for t in text:
                t_width += get_text_size(t, text_size=text_size)[0]
                if t_width > one_width - 20:
                    add_point = True
                    break
                t_index += 1
            if add_point:
                text = text[:t_index] + "..."
            #
            alignment = Text.LEFT
            x = e.x + 15
        elif e.w == two_width:
            alignment = Text.RIGHT
            x = e.x - 15

        e.draw_text(e.cr, 
                str(text), 
                  x, e.y, e.w, e.h,
                  text_color=e.text_color, 
                  text_size=text_size,
                  alignment=alignment)

    def __treeview_paint_nodes_event(self, node_event):
        color = self.listview_color.get_color()
        text_color = "#FFFFFF"
        # 单击和移动, 双击.
        if node_event.node in node_event.single_items:
            color_info = [(0, (color, 0.45)), (1, (color, 0.45))] 
            draw_vlinear(node_event.cr,
                         node_event.x, node_event.y, node_event.w, node_event.h,
                         color_info
                         )
            #text_color = "#000000"
        elif node_event.node in node_event.motion_items:
            color_info = [(0, (color, 0.75)), (1, (color, 0.75))] 
            draw_vlinear(node_event.cr,
                         node_event.x, node_event.y, node_event.w, node_event.h,
                         color_info
                         )
        #
        x_padding = 12 # 因为要和搜索框对齐.
        if 0 == node_event.node.leave: # 根节点. :比如->> >我看过的. >优酷视频. >pps.
            if node_event.node.is_expanded:
                pixbuf = self.one_open.get_pixbuf()
            else:
                pixbuf = self.one_close.get_pixbuf()
        elif 1 == node_event.node.leave: # 
            if node_event.node.is_expanded:
                pixbuf = self.two_open.get_pixbuf()
            else:
                pixbuf = self.two_close.get_pixbuf()
        else:
            if node_event.node.is_expanded:
                pixbuf = self.three_open.get_pixbuf()
            else:
                pixbuf = self.three_close.get_pixbuf()
        #
        icon_x = node_event.x + x_padding
        icon_y = node_event.y + node_event.h/2 - pixbuf.get_height()/2 + 1
        if node_event.node.leave > 1:
            icon_x += (node_event.node.leave - 1) * pixbuf.get_width()
        if node_event.node.leave > 0:
            text_color = "#a8a8a8"
        ##########
        # 画图标.
        if node_event.node.nodes != []:
            draw_pixbuf(node_event.cr,
                        pixbuf,
                        icon_x,
                        icon_y) 
        # 画文本.
        text_x_padding = 15
        text_size = 9
        draw_text(node_event.cr, 
                  node_event.node.text, 
                  icon_x + text_x_padding,
                  node_event.y + node_event.h/2 - get_text_size(node_event.node.text, text_size=9)[1]/2,
                  text_color=text_color,
                  text_size=text_size
                  )

    def search_ali_expose_event(self, widget, event):
        cr = widget.window.cairo_create()
        rect = widget.allocation
        #
        bg_color = "#272727"
        cr.set_source_rgba(*alpha_color_hex_to_cairo((bg_color,1.0)))
        cr.rectangle(rect.x, rect.y, rect.width + 1, rect.height)
        cr.fill()
        #
        propagate_expose(widget, event)
        return True
Esempio n. 16
0
class Menu:
    """interface to the users"""

    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {1:self.add_notes,
                   2:self.modify_notes_tags,
                   3:self.append_notes_tags,
                   4:self.search_notes,
                   5:self.display_notes,
                   6:self.quit}


    def show_menu(self):
        print(""" \n                       Menu\n-----------------------------------------------------------\n\n                     1. Add notes\n
                     2. Modify notes or tags\n
                     3. Append notes or tags\n
                     4. Search notes\n
                     5. Display notes\n
                     6. Quit\n""")

    def run(self):
        while True:
            self.show_menu()
            choice = int(input('Please enter your choice: '))
            if choice > 5 or choice < 0:
                print('Incorrect Choice')
                break
            else:
                self.choices[choice]()

    def add_notes(self):
        memo = input('Please enter your memo: ')
        tags = input('Please enter your tags: ')
        self.notebook.create_notes(memo,tags)
        print('Note added')

    def modify_notes_tags(self):
        id = input("Please let me know the Note id: ")
        if self.notebook.check_id(id):
            memo = input("Please let me know the updated Note memo: ")
            tags = input("Please let me know the updated Note tags: ")
            if memo:
                self.notebook.modify_notes_tags(id,memo)
            if tags:
                self.notebook.modify_notes_tags(id,tags)
        else:
            print('Id not available')

    def append_notes_tags(self):
        id = input("Please let me know the Note id: ")
        if self.notebook.check_id(id):
            memo = input("Please let me know the memo to be appended: ")
            tags = input("Please let me know the tags to be appended: ")
            if memo:
                self.notebook.append_notes_tags(id,memo)
            if tags:
                self.notebook.append_notes_tags(id,tags)
        else:
            print('Id not available')

    def search_notes(self):
        filter = input("Please enter the filter string: ")
        self.notebook.search(filter)

    def display_notes(self):
        self.notebook.display()

    def quit(self):
        exit()
Esempio n. 17
0
from notebook import NoteBook
from notebook import Note

quote_book = NoteBook("The Quote Book")

new_note = Note()
new_note.write_content(
    "Don't cry because it's over smile because it happened. -Dr.Seuss")

quote_book.add_note(new_note)

print(quote_book.get_number_of_pages())

quote_book.add_note(Note("Hello, World1"))
quote_book.add_note(Note("Hello, World2"))
quote_book.add_note(Note("Hello, World3"))
quote_book.add_note(Note("Hello, World4"))
quote_book.add_note(Note("Hello, World5"))

print(quote_book.get_number_of_pages())

my_note = quote_book.remove_note(1)
print(my_note)

print(quote_book.get_number_of_pages())
import hashlib
import binascii
import evernote.edam.userstore.constants as UserStoreConstants
import evernote.edam.type.ttypes as Types
from auth import Auth
from tag import Tag
from notebook import NoteBook
from note import Note

auth = Auth()
tags = Tag()
notebooks = NoteBook()
notes = Note()

#Authenticate the user using the oauth or developer toke
client = auth.authenticate()

user_store = client.get_user_store()

#Check whether the version is up to date with the latest version provided by evernote
version_ok = user_store.checkVersion(
    "Evernote",
    UserStoreConstants.EDAM_VERSION_MAJOR,
    UserStoreConstants.EDAM_VERSION_MINOR
)
print("Is my Evernote API version up to date? ", str(version_ok))
print("")
if not version_ok:
    exit(1)

note_store = client.get_note_store()
Esempio n. 19
0
def save_notebook(access, notebook_name, content, version, o):
    #user_nickname=get_user_nickname(o)
    user_nickname=get_user_name_network(o)
    if not user_nickname:
        return {'error':'Please login to save changes'}
    user_name=get_user_name(o)
    user_network=get_user_network(o)
    user_id=get_user_id(o)
    user_name_network_id=get_user_name_network_id(o)


    # TODO: check if the notebook exists and the user is the same as owner???
    #b=get_notebook(user_nickname, access, notebook_name, None)
    #if b and b.user_id != user_id:
    #    o.response.out.write("{'error':'Sorry, Only owners can save changes.'}")
    #    return


    # find the last version
    last_version=0
    (last_content, last_version)=get_notebook_content(user_nickname, access, notebook_name, None)
    if not last_version:
        last_version= 0

    # if version is not specified in the request make it more than last_version by 1
    version = int(version) if version != '' else last_version + 1

    key_name=user_nickname+"/"+access+"/"+notebook_name

    # if this is a new version save it in NoteBook
    if version >= last_version:
        #create a new NoteBook. key_name must go in constructor
        n=NoteBook(key_name=key_name)
        n.notebook_name=notebook_name
        n.user_nickname=user_nickname
        n.user_name=user_name
        n.user_network=user_network
        n.user_id=user_id
        n.user_name_network_id=user_name_network_id
        n.access=access
        n.content=content
        n.version=version
        #save it
        #import pdb; pdb.set_trace()
        n.put()

    # No matter if it is a new or an old version save it in NoteBookVersion
    n=NoteBookVersion(key_name=key_name+"/"+str(version))
    n.notebook_name=notebook_name
    n.user_nickname=user_nickname
    n.user_name=user_name
    n.user_network=user_network
    n.user_id=user_id
    n.user_name_network_id=user_name_network_id
    n.access=access
    n.content=content
    n.version=version
    #save it
    n.put()

    #output
    r = {}
    r['key_name']=key_name
    r['notebook_name']=notebook_name
    r['user_nickname']=user_nickname
    r['user_name']=user_name
    r['user_network']=user_network
    r['user_id']=user_id
    r['user_name_network_id']=user_name_network_id
    r['access']=access
    #r['content']=content
    r['version']=version

    return r
Esempio n. 20
0
# class 활용 예제
from notebook import NoteBook
from notebook import Note

new_note = Note()
new_note.write_content("Don't cry. because I'm happy")

quote_book = NoteBook("The Quote Book")
quote_book.add_note(new_note)
quote_book.add_note(new_note)
quote_book.add_note(new_note)
quote_book.add_note(new_note)
quote_book.add_note(new_note)

print(quote_book.get_number_of_pages())

# quote_book.add_note(Note("Hellow, world"))
# quote_book.add_note(Note("Hellow, world"))
# quote_book.add_note(Note("Hellow, world"))

# print(quote_book.get_number_of_pages())

my_note = quote_book.remove_note(10)
print(my_note)
# my_note = quote_book.remove_note(1)
# print(my_note)
Esempio n. 21
0
from notebook import Note
from notebook import NoteBook


sentence1 = "hi"
note1 = Note(sentence1)

sentence1 = "hello"
note2 = Note(sentence1)

sentenct1 = "how are you?"
note3 = Note(sentence1)

print(note1)
note1.remove()
print(note1)

sentence2 = NoteBook("대화")
sentence2.add_note(note1)
sentence2.add_note(note2)
print(sentence2.get_number_of_pages())

sentence2.add_note(note1, 100)
for i in range(300):
    sentence2.add_note(note1, i)

print(sentence2.get_number_of_pages())
Esempio n. 22
0
class Menu:
    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {
            '1': self.show_notes,
            '2': self.search_notes,
            '3': self.add_notes,
            '4': self.modify_note,
            '5': self.quit
        }

    def display_menu(self):
        print("""
            Notebook Menu
            1. to show all notes
            2. Search
            3. ADD NEW NOTES
            4. Modify
            5. QUIT
            """)

    def run(self):
        while True:
            self.display_menu()
            choice = input('hey pick an option: ')
            action = self.choices.get(choice)

            if action:
                action()
            else:
                print("{0} is not a valid choice".format(choice))

    def show_notes(self, notes=None):
        if not notes:
            notes = self.notebook.notes

        for note in notes:
            print("{0}: {1}\n{2}".format(note.id, note.tags.note.memo))

    def search_notes(self):
        filter = input('sEARCH FOR: ')
        notes = self.notebook.search(filter)
        self.show_notes(notes)

    def add_notes(self):
        memo = input('Type in your memo: ')
        self.notebook.new_note(memo)
        print('Your note has been added')

    def modify_note(self):
        id = input('Enter id here: ')
        memo = input('Modify notes: ')
        tags = input('modify tags: ')

        if memo:
            self.notebook.modify_memo(id, memo)
        if tags:
            self.notebook.modify_tags(id, tags)

    def quit(self):
        print('Thank you for using my Notebook')
        sys.exit(0)
Esempio n. 23
0
def readTodoFile(fname):

    nbtmp = NoteBook()
    nbtmp.setTitle("Updated TODO")
    nbtmp.tmpNoteFile = "notebook-tmp-C.md"

    f = open(fname, "r")
    tmp = f.read()
    f.close()

    # print("tmp file content--------------")
    tmp = tmp.splitlines()
    # print(tmp)

    # add trailing newlines for easier parsing
    # for i in range(len(tmp)):
    #    tmp[i] += "\n"

    # filter header out
    c = 0
    while True:
        if c >= len(tmp):
            break

        line = tmp[c]
        # print("skipping {}".format(line))

        mtitle = regexes.REtitle.match(line)
        if mtitle:
            break
        c += 1
    # print("skipping {}".format(c))

    ns = []
    hashes = []
    bodys = []

    body = ""
    while c < len(tmp):
        line = tmp[c]
        # print("{}".format( line ))

        mtitle = regexes.REtitle.match(line)
        mhash = regexes.REhash.match(line)
        mdate = regexes.REdate.match(line)
        mmdate = regexes.REmdate.match(line)
        mdiv = regexes.REdiv.match(line)

        if mtitle:
            n = Note()
            bodys.append(body)
            body = ""

            s = mtitle.group(1)
            s = s.replace("'",
                          "")  # strip ' from title (causes problems with rm)
            n.setTitle(s)
            ns.append(n)
            # ni += 1
        elif mdiv:
            # do nothing
            True
        elif mhash:
            s = mhash.group(1)
            hashes.append(s)
        elif mdate:
            n.setDate(mdate.group(1))
        elif mmdate:
            n.setDate(mmdate.group(1))
        else:
            body += line + "\n"
        c += 1
    bodys.append(body)  # append last hanging body

    # print("###########################################")
    for i, n in enumerate(ns):

        body = bodys[i + 1]
        # print("last char: vvv{}vvv".format(body[-2:]))

        # if (body[-2:] == "\n"):
        #    print("newline detected")
        #    body = body[:-2]

        # body = body[:-2] #strip trailing newline
        # body = body.rstrip()
        # body += "\n"
        # body += "\n"

        n.setBody(body)
        # print("{} -- {}".format(i, n.title))
        # print("{} hash is {}".format(i, n.hash() ))
        # print("----")
        # print("{}".format(n.body))
        # print("----")
        # print("{}".format(body))

        nbtmp.addNote(n)

    return nbtmp
Esempio n. 24
0
class Menu:
    """Display a menu and respond to choices when run."""

    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {
            "1": self.show_notes,
            "2": self.search_notes,
            "3": self.add_note,
            "4": self.modify_note,
            "5": self.quit,
        }

    def display_menu(self):
        print(
            """
            Notebook Menu

            1. Show all Notes
            2. Search Notes
            3. Add Note
            4. Modify Note
            5. Quit
              """)

    def run(self):
        """Display the menu and respond to choices."""
        while True:
            self.display_menu()
            choice = input('Enter an option: ')
            action = self.choices.get(choice)
            if action:
                action()
            else :
                print(f'{choice} is not a valid option')

    def show_notes(self, notes=None)-> List:
        """displays all the notes in the notebook"""
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print(f'{note.id}: {note.tags}\n{note.memo}')

    def search_notes(self):
        """search for a note in the notebook"""
        filter = str(input('search for:'))
        note = self.notebook.search(filter)
        self.show_notes(note)

    def add_note(self):
        """Add a new note"""
        memo = str(input('Enter a memo:'))
        tags = str(input('Enter a tag:'))
        self.notebook.new_note(memo, tags)
        print('You have added a new note')

    def modify_note(self):
        """Modify an existing note"""
        id = input('Enter a note id:')
        memo = str(input('Enter a memo:'))
        tags = str(input('Enter a tag:'))
        if memo:
            self.notebook.modify_memo(id, memo)
        if tags:
            self.notebook.modify_tags(id, tags)

    def quit(self):
        print('Thank you for using the notebook today')
        sys.exit(0)
class PlayListView(object):
    def __init__(self):
        self.one_close = app_theme.get_pixbuf("treeview/1-close.png")
        self.one_open = app_theme.get_pixbuf("treeview/1-open.png")
        self.two_close = app_theme.get_pixbuf("treeview/2-close.png")
        self.two_open = app_theme.get_pixbuf("treeview/2-open.png")
        self.three_close = app_theme.get_pixbuf("treeview/3-close.png")
        self.three_open = app_theme.get_pixbuf("treeview/3-open.png")
        #
        self.tree_view_open = app_theme.get_pixbuf("treeview/open.png")
        self.tree_view_close = app_theme.get_pixbuf("treeview/close.png")
        self.tree_view_right = app_theme.get_pixbuf("treeview/right.png")
        self.tree_view_bottom = app_theme.get_pixbuf("treeview/bottom.png")
        #
        self.listview_color = ui_theme.get_color("scrolledbar")
        self.play_list_vbox = gtk.VBox()
        #
        self.list_view_vbox = gtk.VBox()
        self.list_scroll_win = ScrolledWindow(0, 0)
        self.list_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.list_view = ListView()
        #
        self.play_list_con = PlayListControl()
        #
        self.list_view_vbox.pack_start(self.list_scroll_win, True, True)
        self.list_view_vbox.pack_start(self.play_list_con, False, False)
        # 网络列表,搜索框.
        self.tree_scroll_win = ScrolledWindow(0, 0)
        self.tree_scroll_win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        self.tree_view_vbox = gtk.VBox()
        self.tree_view = TreeViewBase()
        self.search_ali = gtk.Alignment(0, 0, 1, 1)
        self.search = Search()
        self.search_ali.add(self.search)
        #
        self.search_ali.set_padding(7, 5, 12, 12)
        self.tree_view_vbox.pack_start(self.search_ali, False, False)
        self.tree_view_vbox.pack_start(self.tree_scroll_win, True, True)
        self.search_ali.connect("expose-event", self.search_ali_expose_event)
        #
        self.note_book = NoteBook()
        #
        self.list_view.on_draw_sub_item = self.__listview_on_draw_sub_item
        self.list_view.columns.add_range(["filename", "time"])
        self.list_view.columns[0].width = 120
        self.list_view.columns[1].width = 95
        #
        self.note_book.hide_title()
        self.tree_view.paint_nodes_event = self.__treeview_paint_nodes_event
        #
        self.list_scroll_win.add_with_viewport(self.list_view)
        self.tree_scroll_win.add_with_viewport(self.tree_view)
        #self.note_book.add_layout1(self.list_scroll_win)
        self.note_book.add_layout1(self.list_view_vbox)
        self.note_book.add_layout2(self.tree_view_vbox)
        #self.play_list_vbox.pack_start(self.scroll_win, True, True)
        self.play_list_vbox.pack_start(self.note_book, True, True)

    def __listview_on_draw_sub_item(self, e):
        color = self.listview_color.get_color()
        if e.double_items == e.item:
            e.text_color = "#000000"
            text_size = 9
            color_info = [(0, (color, 0.8)), (1, (color, 0.8))]
            draw_vlinear(e.cr, e.x, e.y, e.w, e.h, color_info)
        elif e.item in e.single_items:
            e.text_color = "#FFFFFF"
            text_size = 9
            color_info = [(0, (color, 0.5)), (1, (color, 0.5))]
            draw_vlinear(e.cr, e.x, e.y, e.w, e.h, color_info)
        elif e.motion_items == e.item:
            e.text_color = "#FFFFFF"
            text_size = 9
            color_info = [(0, (color, 0.2)), (1, (color, 0.2))]
            draw_vlinear(e.cr, e.x, e.y, e.w, e.h, color_info)
        else:
            e.text_color = "#FFFFFF"
            text_size = 9
        #
        text = e.text.decode("utf-8")
        one_width = self.list_view.columns[0].width
        two_width = self.list_view.columns[1].width
        #if e.w == one_width: # 显示播放名字的第一列.
        if e.column_index == 0:
            #
            t_width = 0
            t_index = 0
            add_point = False
            for t in text:
                t_width += get_text_size(t, text_size=text_size)[0]
                if t_width > one_width - 20:
                    add_point = True
                    break
                t_index += 1
            if add_point:
                text = text[:t_index] + "..."
            #
            alignment = Text.LEFT
            x = e.x + 15
        elif e.w == two_width:
            alignment = Text.RIGHT
            x = e.x - 15

        e.draw_text(e.cr,
                    str(text),
                    x,
                    e.y,
                    e.w,
                    e.h,
                    text_color=e.text_color,
                    text_size=text_size,
                    alignment=alignment)

    def __treeview_paint_nodes_event(self, node_event):
        color = self.listview_color.get_color()
        text_color = "#FFFFFF"
        # 单击和移动, 双击.
        if node_event.node in node_event.single_items:
            color_info = [(0, (color, 0.45)), (1, (color, 0.45))]
            draw_vlinear(node_event.cr, node_event.x, node_event.y,
                         node_event.w, node_event.h, color_info)
            #text_color = "#000000"
        elif node_event.node in node_event.motion_items:
            color_info = [(0, (color, 0.75)), (1, (color, 0.75))]
            draw_vlinear(node_event.cr, node_event.x, node_event.y,
                         node_event.w, node_event.h, color_info)
        #
        x_padding = 12  # 因为要和搜索框对齐.
        if 0 == node_event.node.leave:  # 根节点. :比如->> >我看过的. >优酷视频. >pps.
            if node_event.node.is_expanded:
                pixbuf = self.one_open.get_pixbuf()
            else:
                pixbuf = self.one_close.get_pixbuf()
        elif 1 == node_event.node.leave:  #
            if node_event.node.is_expanded:
                pixbuf = self.two_open.get_pixbuf()
            else:
                pixbuf = self.two_close.get_pixbuf()
        else:
            if node_event.node.is_expanded:
                pixbuf = self.three_open.get_pixbuf()
            else:
                pixbuf = self.three_close.get_pixbuf()
        #
        icon_x = node_event.x + x_padding
        icon_y = node_event.y + node_event.h / 2 - pixbuf.get_height() / 2 + 1
        if node_event.node.leave > 1:
            icon_x += (node_event.node.leave - 1) * pixbuf.get_width()
        if node_event.node.leave > 0:
            text_color = "#a8a8a8"
        ##########
        # 画图标.
        if node_event.node.nodes != []:
            draw_pixbuf(node_event.cr, pixbuf, icon_x, icon_y)
        # 画文本.
        text_x_padding = 15
        text_size = 9
        draw_text(node_event.cr,
                  node_event.node.text,
                  icon_x + text_x_padding,
                  node_event.y + node_event.h / 2 -
                  get_text_size(node_event.node.text, text_size=9)[1] / 2,
                  text_color=text_color,
                  text_size=text_size)

    def search_ali_expose_event(self, widget, event):
        cr = widget.window.cairo_create()
        rect = widget.allocation
        #
        bg_color = "#272727"
        cr.set_source_rgba(*alpha_color_hex_to_cairo((bg_color, 1.0)))
        cr.rectangle(rect.x, rect.y, rect.width + 1, rect.height)
        cr.fill()
        #
        propagate_expose(widget, event)
        return True
Esempio n. 26
0
note_1 = Note(good_sentence)

print(note_1)
note_1.remove()
print(note_1)

good_sentence = """삶이 있는 한 희망은 있다. - 키케로 """
note_2 = Note(good_sentence)

good_sentence = """하루에 3시간을 걸으면 7년 후에 지구를 한 바퀴 돌 수 있다. - 사무엘 존슨"""
note_3 = Note(good_sentence)

good_sentence = """행복의 문이 하나 닫히면 다른 문이 열린다. 그러나 우리는 종종 닫힌 문을 멍하니 바라보다가 우리를 향해 열린 문을 보지 못하게 된다. - 헬렌 켈러"""
note_4 = Note(good_sentence)

wise_saying_notebook = NoteBook("명언 노트")
wise_saying_notebook.add_note(note_1)
print(wise_saying_notebook.get_number_of_all_pages())

wise_saying_notebook.add_note(note_2)
print(wise_saying_notebook.get_number_of_all_pages())

wise_saying_notebook.add_note(note_3)
wise_saying_notebook.add_note(note_4)
print(wise_saying_notebook.get_number_of_all_pages())
print(wise_saying_notebook.get_number_of_all_characters())

wise_saying_notebook.remove_note(3)
print(wise_saying_notebook.get_number_of_all_pages())

wise_saying_notebook.add_note(note_1, 100)
Esempio n. 27
0
class Menu(object):
    """简单的提供一个菜单接口并允许用户输入他们的选择"""
    def __init__(self):
        self.notebook = NoteBook()
        self.choices = {
            "1": self.show_notes,
            "2": self.search_notes,
            "3": self.add_note,
            "4": self.modify_note,
            "5": self.quit
        }

    def diaplay_menu(self):
        print('''
            NoteBook Menu


        1. Ahow all Notes
        2. Search Notes
        3. Add Note
        4. Modify Note
        5. Quit
            ''')

    def run(self):
        '''列出所有choice并调用相应的action'''
        while True:
            self.diaplay_menu()
            choice = input("Enter an option:")
            action = self.choices.get(choice)
            if action:
                action()
            else:
                print('{0} is not a valid choice'.format(choice))

    def show_notes(self, notes=None):
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print("{0}: {1}\n{2}".format(note.id, note.tags, note.memo))

    def search_notes(self):
        filter = input("Search for:")
        notes = self.notebook.search(filter)
        self.show_notes(notes)

    def add_note(self):
        memo = input("Enter a memo")
        self.notebook.new_note(memo)
        print("Your note has been added")

    def modify_note(self):
        id = input("Enter a note id")
        memo = input("Enter a memo")
        tags = input("Enter tags")
        if memo:
            self.notebook.modify_memo(id, memo)
        if tags:
            self.notebook.modify_tags(id, tags)

    def quit(self):
        print("Thank you for using your notebook today. ")
        sys.exit(0)