3
# Copyright © 2012 Umang Varma <umang.me@gmail.com>
5
# This file is part of indicator-stickynotes.
7
# indicator-stickynotes is free software: you can redistribute it and/or
8
# modify it under the terms of the GNU General Public License as published by
9
# the Free Software Foundation, either version 3 of the License, or (at your
10
# option) any later version.
12
# indicator-stickynotes is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17
# You should have received a copy of the GNU General Public License along with
18
# indicator-stickynotes. If not, see <http://www.gnu.org/licenses/>.
20
from datetime import datetime
22
from gi.repository import Gtk, Gdk, Gio, GObject, GtkSource
24
class StickyNote(object):
26
def __init__(self, note):
28
self.locked = self.note.properties.get("locked", False)
29
self.builder = Gtk.Builder()
30
GObject.type_register(GtkSource.View)
31
self.builder.add_from_file("StickyNotes.glade")
32
self.builder.connect_signals(self)
33
# Get necessary objects
34
self.txtNote = self.builder.get_object("txtNote")
35
self.winMain = self.builder.get_object("MainWindow")
36
self.winMain.set_name("main-window")
37
self.bAdd = self.builder.get_object("bAdd")
38
self.imgAdd = self.builder.get_object("imgAdd")
39
self.imgResizeR = self.builder.get_object("imgResizeR")
40
self.eResizeR = self.builder.get_object("eResizeR")
41
self.bLock = self.builder.get_object("bLock")
42
self.imgLock = self.builder.get_object("imgLock")
43
self.imgUnlock = self.builder.get_object("imgUnlock")
44
self.bClose = self.builder.get_object("bClose")
45
self.confirmDelete = self.builder.get_object("confirmDelete")
50
# (Maybe?) Remove this eventually
51
settings = Gtk.Settings.get_default()
52
settings.props.gtk_button_images = True
54
css = Gtk.CssProvider()
55
css.load_from_file(Gio.File.new_for_path("style.css"))
56
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
59
self.bbody = GtkSource.Buffer()
60
self.bbody.begin_not_undoable_action()
61
self.bbody.set_text(self.note.body)
62
self.bbody.set_highlight_matching_brackets(False)
63
self.bbody.end_not_undoable_action()
64
self.txtNote.set_buffer(self.bbody)
68
self.winMain.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
69
self.eResizeR.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
71
self.winMain.move(*self.note.properties.get("position", (10,10)))
72
self.winMain.resize(*self.note.properties.get("size", (200,150)))
74
self.eResizeR.get_window().set_cursor(Gdk.Cursor.new_for_display(
75
self.eResizeR.get_window().get_display(),
76
Gdk.CursorType.BOTTOM_RIGHT_CORNER))
78
self.set_locked_state(self.locked)
80
def show(self, widget=None, event=None):
81
self.winMain.present()
83
self.winMain.move(*self.note.properties.get("position", (10,10)))
85
def hide(self, *args):
88
def update_note(self):
89
self.note.update(self.bbody.get_text(self.bbody.get_start_iter(),
90
self.bbody.get_end_iter(), True))
92
def move(self, widget, event):
93
self.winMain.begin_move_drag(event.button, event.x_root,
94
event.y_root, event.get_time())
97
def resize(self, widget, event, *args):
98
self.winMain.begin_resize_drag(Gdk.WindowEdge.SOUTH_EAST,
99
event.button, event.x_root, event.y_root, event.get_time())
102
def properties(self):
103
prop = {"position":self.winMain.get_position(),
104
"size":self.winMain.get_size(), "locked":self.locked}
105
if not self.winMain.get_visible():
106
prop["position"] = self.note.properties.get("position", (10, 10))
107
prop["size"] = self.note.properties.get("size", (200, 200))
110
def save(self, *args):
111
self.note.noteset.save()
114
def add(self, *args):
115
self.note.noteset.new()
118
def delete(self, *args):
119
confirm = self.confirmDelete.run()
120
self.confirmDelete.hide()
128
def set_locked_state(self, locked):
130
if not self.bLock.get_active() == self.locked:
131
self.bLock.set_active(self.locked)
132
self.txtNote.set_editable(not self.locked)
133
self.txtNote.set_cursor_visible(not self.locked)
134
self.bLock.set_image({True:self.imgLock,
135
False:self.imgUnlock}[self.locked])
137
def lock_toggled(self, *args):
138
self.set_locked_state(self.bLock.get_active())
140
def quit(self, *args):
143
def focus_out(self, *args):