Welcome, guest | Sign In | My Account | Store | Cart
# Version: 0.2
# Author: Miguel Martinez Lopez
# Uncomment the next line to see my email
# print "Author's email: ", "61706c69636163696f6e616d656469646140676d61696c2e636f6d".decode("hex")


import Tkinter as Tk

class DraggableWindow(object):

	def __init__(self, disable_draggingd =False, release_command = None):
		if disable_draggingd == False:
			self.bind('<Button-1>', self.initiate_motion)
			self.bind('<ButtonRelease-1>', self.release_dragging)

		self.release_command = release_command


	def initiate_motion(self, event) :
		mouse_x, mouse_y = self.winfo_pointerxy()

		self.deltaX = mouse_x - self.winfo_x()
		self.deltaY = mouse_y - self.winfo_y()

		self.bind('<Motion>', self.drag_window)


	def drag_window (self, event) :
		mouse_x, mouse_y = self.winfo_pointerxy()

		new_x = mouse_x - self.deltaX
		new_y = mouse_y - self.deltaY

		if new_x < 0 :
			new_x = 0

		if new_y < 0 :
			new_y = 0

		self.wm_geometry("+%s+%s" % (new_x, new_y))

	def release_dragging(self, event):
		self.unbind('<Motion>')

		if self.release_command != None :
			self.release_command()

	def disable_dragging(self) :
		self.unbind('<Button-1>')
		self.unbind('<ButtonRelease-1>')
		self.unbind('<Motion>')

	def enable_dragging(self):
		self.bind('<Button-1>', self.initiate_motion)
		self.bind('<ButtonRelease-1>', self.release_dragging)


class AutoResizedText(Tk.Text):
	def __init__(self, *args, **kwargs):
		Tk.Text.__init__(self, *args, **kwargs)

		self.min_width = kwargs.get('width', 0)
		self.min_height = kwargs.get('height', 0)

		self.bindtags(('autoresizetext',)+self.bindtags())
		self.bind_class("autoresizetext", "<KeyPress>",self.update_textbox)

	def update_textbox(self, event):
		widget_width = self.min_width
		widget_height = max(float(self.index(Tk.END)), self.min_height)

		old_text = self.get("1.0", Tk.END)

		if event.keysym == 'BackSpace':
			self.delete("%s-1c" % Tk.INSERT, Tk.INSERT)
			new_text = old_text
		if event.keysym == 'Delete':
			self.delete("%s+1c" % Tk.INSERT, Tk.INSERT)
			new_text = old_text
		elif len(event.char) == 1:
			if event.keysym == 'Return':
				new_char = '\n'
			else:
				new_char = event.char

 			new_text = self.insert_character_into_message(old_text, self.index(Tk.INSERT), new_char)

		for line in new_text.split("\n"):
			if len(line) > widget_width:
				widget_width = len(line)+1

		self.config(width=widget_width, height=widget_height)
		self.update_idletasks()

		if event.keysym != 'BackSpace' and event.keysym != 'Delete':
			self.insert(Tk.INSERT, new_char)
			return "break"
		else:
			# Checking whether the char is a special character or not
			# If it is a special character we don't break the binding chain
			if len(event.char) == 1:
				return "break"

	def insert_character_into_message(self,message, coordinate, char):
		target_row, target_column = map( int, coordinate.split('.'))

		this_row = 1
		this_column = 0
		index = 0

		for ch in message:
			if this_row == target_row and this_column == target_column:
				message = message[:index] +char + message[index:]
				return message

			index += 1

			if ch == '\n':
				this_row += 1
				this_column = 0
			else:
				this_column += 1


class DesktopNote(Tk.Toplevel, DraggableWindow):
	BG_NOTE = '#%02x%02x%02x' % (255, 255, 125)

	def __init__(self, parent, title='Without title', min_width =10, min_height = 3):
		Tk.Toplevel.__init__(self, parent)
		DraggableWindow.__init__(self)

		self.overrideredirect(True)

		self.close_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
		self.minimize_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
   		self.restore_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
		self.minimizeAtRightSide_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")


		frameNote = Tk.Frame(self, bg=self.BG_NOTE, bd=1, highlightbackground='black',highlightcolor='black',highlightthickness=1)
		frameNote.pack()

		self.mimizedNote = Tk.Label(frameNote, text=title, bg=self.BG_NOTE, wraplength=1)
		self.mimizedNote.bind('<Button-1>', lambda event: self.maximize_from_right_side())

		self.maximizedNote = Tk.Frame(frameNote)
		self.maximizedNote.pack()

		Header = Tk.Frame(self.maximizedNote, bg=self.BG_NOTE)
		Header.pack(fill=Tk.X)

		HR = Tk.Frame(self.maximizedNote,bg='black', height=1)
		HR.pack(padx=1, fill=Tk.X)

		titleLabel = Tk.Label(Header, text = title, bg=self.BG_NOTE)
		titleLabel.pack(side=Tk.LEFT)

		Tk.Button(Header, compound=Tk.TOP, image=self.close_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)

		self.iconifyButton = Tk.Button(Header, image=self.minimize_IMG, command=self.minimize,  bg=self.BG_NOTE, activebackground=self.BG_NOTE)
		self.iconifyButton.pack(side=Tk.RIGHT)

		Tk.Button(Header, compound=Tk.TOP, image=self.minimizeAtRightSide_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.minimize_at_right_side).pack(side=Tk.RIGHT)

		self.text_box = AutoResizedText(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=min_width, height=min_height)
		self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)


	def minimize_at_right_side(self):
		self.disable_dragging()
		self.maximizedNote.pack_forget()
		self.mimizedNote.pack()

		self.x = self.winfo_x()
		self.y = self.winfo_y()

		self.wm_geometry('-0+%d'%self.y)


	def maximize_from_right_side(self):
		self.maximizedNote.pack()
		self.mimizedNote.pack_forget()
		self.wm_geometry('+%d+%d'% (self.x,self.y))
		self.enable_dragging()

	def minimize(self):
		self.text_box.pack_forget()
		self.iconifyButton['command'] = self.maximize
		self.iconifyButton['image'] = self.restore_IMG

	def maximize(self):
		self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
		self.iconifyButton['command'] = self.minimize
		self.iconifyButton['image'] = self.minimize_IMG


class Test(Tk.Tk):
	def __init__(self):
		self.root = Tk.Tk()
		Tk.Label(self.root,text="Title:").pack(side=Tk.LEFT)

		self.title = Tk.StringVar()
		self.title.set('TITLE')

		entry_title = Tk.Entry(self.root, textvariable=self.title)
		entry_title.pack(side=Tk.LEFT)
		entry_title.bind('<Return>', lambda event: self.create_note() )

		Tk.Button(self.root, text="Create another note", command=self.create_note).pack(side=Tk.LEFT)

		self.create_note()

	def create_note(self):
		New_note = DesktopNote(self.root, self.title.get())
		New_note.text_box.focus()

	def run(self):
		self.root.mainloop()

if __name__ == '__main__':
	Test().run()

Diff to Previous Revision

--- revision 4 2014-06-03 23:28:46
+++ revision 5 2014-06-04 19:03:07
@@ -1,4 +1,4 @@
-# Version: 0.1
+# Version: 0.2
 # Author: Miguel Martinez Lopez
 # Uncomment the next line to see my email
 # print "Author's email: ", "61706c69636163696f6e616d656469646140676d61696c2e636f6d".decode("hex")
@@ -8,14 +8,14 @@
 
 class DraggableWindow(object):
 
-	def __init__(self, disabled =False, release_command = None):
-		if disabled == False:
+	def __init__(self, disable_draggingd =False, release_command = None):
+		if disable_draggingd == False:
 			self.bind('<Button-1>', self.initiate_motion)
 			self.bind('<ButtonRelease-1>', self.release_dragging)
 
 		self.release_command = release_command
-	
-	
+
+
 	def initiate_motion(self, event) :
 		mouse_x, mouse_y = self.winfo_pointerxy()
 
@@ -24,7 +24,7 @@
 
 		self.bind('<Motion>', self.drag_window)
 
-		
+
 	def drag_window (self, event) :
 		mouse_x, mouse_y = self.winfo_pointerxy()
 
@@ -41,120 +41,179 @@
 
 	def release_dragging(self, event):
 		self.unbind('<Motion>')
-		
+
 		if self.release_command != None :
 			self.release_command()
 
-	def disable(self) :
+	def disable_dragging(self) :
 		self.unbind('<Button-1>')
 		self.unbind('<ButtonRelease-1>')
 		self.unbind('<Motion>')
-		
-	def enable(self):
+
+	def enable_dragging(self):
 		self.bind('<Button-1>', self.initiate_motion)
-		self.bind('<ButtonRelease-1>', self.release_dragging)		
-
+		self.bind('<ButtonRelease-1>', self.release_dragging)
+
+
+class AutoResizedText(Tk.Text):
+	def __init__(self, *args, **kwargs):
+		Tk.Text.__init__(self, *args, **kwargs)
+
+		self.min_width = kwargs.get('width', 0)
+		self.min_height = kwargs.get('height', 0)
+
+		self.bindtags(('autoresizetext',)+self.bindtags())
+		self.bind_class("autoresizetext", "<KeyPress>",self.update_textbox)
+
+	def update_textbox(self, event):
+		widget_width = self.min_width
+		widget_height = max(float(self.index(Tk.END)), self.min_height)
+
+		old_text = self.get("1.0", Tk.END)
+
+		if event.keysym == 'BackSpace':
+			self.delete("%s-1c" % Tk.INSERT, Tk.INSERT)
+			new_text = old_text
+		if event.keysym == 'Delete':
+			self.delete("%s+1c" % Tk.INSERT, Tk.INSERT)
+			new_text = old_text
+		elif len(event.char) == 1:
+			if event.keysym == 'Return':
+				new_char = '\n'
+			else:
+				new_char = event.char
+
+ 			new_text = self.insert_character_into_message(old_text, self.index(Tk.INSERT), new_char)
+
+		for line in new_text.split("\n"):
+			if len(line) > widget_width:
+				widget_width = len(line)+1
+
+		self.config(width=widget_width, height=widget_height)
+		self.update_idletasks()
+
+		if event.keysym != 'BackSpace' and event.keysym != 'Delete':
+			self.insert(Tk.INSERT, new_char)
+			return "break"
+		else:
+			# Checking whether the char is a special character or not
+			# If it is a special character we don't break the binding chain
+			if len(event.char) == 1:
+				return "break"
+
+	def insert_character_into_message(self,message, coordinate, char):
+		target_row, target_column = map( int, coordinate.split('.'))
+
+		this_row = 1
+		this_column = 0
+		index = 0
+
+		for ch in message:
+			if this_row == target_row and this_column == target_column:
+				message = message[:index] +char + message[index:]
+				return message
+
+			index += 1
+
+			if ch == '\n':
+				this_row += 1
+				this_column = 0
+			else:
+				this_column += 1
 
 
 class DesktopNote(Tk.Toplevel, DraggableWindow):
 	BG_NOTE = '#%02x%02x%02x' % (255, 255, 125)
-	
+
 	def __init__(self, parent, title='Without title', min_width =10, min_height = 3):
-		self.min_width = min_width
-		self.min_height = min_height
-		
 		Tk.Toplevel.__init__(self, parent)
 		DraggableWindow.__init__(self)
-		
+
 		self.overrideredirect(True)
+
+		self.close_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
+		self.minimize_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
+   		self.restore_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
+		self.minimizeAtRightSide_IMG = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")
 
 
 		frameNote = Tk.Frame(self, bg=self.BG_NOTE, bd=1, highlightbackground='black',highlightcolor='black',highlightthickness=1)
 		frameNote.pack()
 
 		self.mimizedNote = Tk.Label(frameNote, text=title, bg=self.BG_NOTE, wraplength=1)
-		self.mimizedNote.bind('<Button-1>', lambda event: self.side_maximize())
-
-		
+		self.mimizedNote.bind('<Button-1>', lambda event: self.maximize_from_right_side())
+
 		self.maximizedNote = Tk.Frame(frameNote)
 		self.maximizedNote.pack()
-		
+
 		Header = Tk.Frame(self.maximizedNote, bg=self.BG_NOTE)
 		Header.pack(fill=Tk.X)
 
 		HR = Tk.Frame(self.maximizedNote,bg='black', height=1)
 		HR.pack(padx=1, fill=Tk.X)
+
 		titleLabel = Tk.Label(Header, text = title, bg=self.BG_NOTE)
 		titleLabel.pack(side=Tk.LEFT)
-		self.noteclos = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAImDI6ZFu3/DpxO0mlvBLFX7oEfJo5QZlZNaZTupp2shsY13So6VwAAOw==")
-		Tk.Button(Header, compound=Tk.TOP, image=self.noteclos, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)
-		self.notemini = Tk.PhotoImage(data="R0lGODlhEAAQAPAAAAQEBAAAACH5BAEAAAEALAAAAAAQABAAAAIiDI6ZFu3/DpxO0mlvBBrmbnBg83Wldl6ZgoljSsFYqNRcAQA7")
-   		self.iconifyButton = Tk.Button(Header, image=self.notemini, command=self.minimize,  bg=self.BG_NOTE, activebackground=self.BG_NOTE)
+
+		Tk.Button(Header, compound=Tk.TOP, image=self.close_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.destroy).pack(side=Tk.RIGHT)
+
+		self.iconifyButton = Tk.Button(Header, image=self.minimize_IMG, command=self.minimize,  bg=self.BG_NOTE, activebackground=self.BG_NOTE)
 		self.iconifyButton.pack(side=Tk.RIGHT)
-		self.minright = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAg+AP8FGEiwYEGB/xIqXLhwIMOHCh1CfChxosSKEC8GmJhQI0eBG0F+9MiRpMWQGCmiDPmxI8uWKUuCNEhzY0AAOw==")
-		Tk.Button(Header, compound=Tk.TOP, image=self.minright, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.side_minimize).pack(side=Tk.RIGHT)
-		
-		self.text_box = Tk.Text(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=self.min_width, height=self.min_height)
+
+		Tk.Button(Header, compound=Tk.TOP, image=self.minimizeAtRightSide_IMG, bg=self.BG_NOTE,activebackground=self.BG_NOTE, command= self.minimize_at_right_side).pack(side=Tk.RIGHT)
+
+		self.text_box = AutoResizedText(self.maximizedNote, bd=0, bg=self.BG_NOTE, width=min_width, height=min_height)
 		self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
-		self.text_box.bind("<Key>", self.update_textbox)
-
-		self.noterest = Tk.PhotoImage(data="R0lGODlhEAAQAPcAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAhFAP8FGEiwYEGB/xIqXLhwIMOHCh02NBgxAEODFhNKjNiwYsWDGQWGxIhQ48iJI09ynLhS48WUB1lCfLhxpkebHTHqtBgQADs=")
-		
-	def side_minimize(self):
-		self.disable()
+
+
+	def minimize_at_right_side(self):
+		self.disable_dragging()
 		self.maximizedNote.pack_forget()
 		self.mimizedNote.pack()
+
 		self.x = self.winfo_x()
 		self.y = self.winfo_y()
+
 		self.wm_geometry('-0+%d'%self.y)
 
-		
-	def side_maximize(self):
+
+	def maximize_from_right_side(self):
 		self.maximizedNote.pack()
 		self.mimizedNote.pack_forget()
 		self.wm_geometry('+%d+%d'% (self.x,self.y))
-		self.enable()
-		
+		self.enable_dragging()
+
 	def minimize(self):
 		self.text_box.pack_forget()
 		self.iconifyButton['command'] = self.maximize
-		self.iconifyButton['image'] = self.noterest
-		
+		self.iconifyButton['image'] = self.restore_IMG
+
 	def maximize(self):
 		self.text_box.pack(expand=Tk.YES, fill=Tk.BOTH)
 		self.iconifyButton['command'] = self.minimize
-		self.iconifyButton['image'] = self.notemini
-		
-	def update_textbox(self, event):
-		widget_width = 0
-		widget_height = float(event.widget.index(Tk.END))
-		for line in event.widget.get("1.0", Tk.END).split("\n"):
-			if len(line) > widget_width:
-				widget_width = len(line)+1
-		widget_width = max(widget_width,self.min_width)
-		widget_height = max(widget_height,self.min_height)
-		event.widget.config(width=widget_width, height=widget_height)
-	
+		self.iconifyButton['image'] = self.minimize_IMG
+
+
 class Test(Tk.Tk):
 	def __init__(self):
 		self.root = Tk.Tk()
 		Tk.Label(self.root,text="Title:").pack(side=Tk.LEFT)
-		
+
 		self.title = Tk.StringVar()
 		self.title.set('TITLE')
-		
+
 		entry_title = Tk.Entry(self.root, textvariable=self.title)
 		entry_title.pack(side=Tk.LEFT)
-		entry_title.bind('<Return>', lambda event: self.create_note() ) 
-		
+		entry_title.bind('<Return>', lambda event: self.create_note() )
+
 		Tk.Button(self.root, text="Create another note", command=self.create_note).pack(side=Tk.LEFT)
-		
+
 		self.create_note()
-	
+
 	def create_note(self):
 		New_note = DesktopNote(self.root, self.title.get())
 		New_note.text_box.focus()
-		
+
 	def run(self):
 		self.root.mainloop()
 

History