Source code for stoqlib.gui.editors.noteeditor

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4

##
## Copyright (C) 2005, 2006 Async Open Source
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##

from stoqlib.domain.base import Domain
from stoqlib.gui.editors.baseeditor import BaseEditor
from stoqlib.lib.message import warning
from stoqlib.lib.translation import stoqlib_gettext as _


[docs]class Note(object): """A helper to generate notes on :class:`NoteEditor` You can use this as a temporary object to get notes when you don't have a real model to use. """ def __init__(self, notes=u''): self.notes = notes def __eq__(self, other): if type(self) != type(other): return False return self.notes == other.notes
# FIXME: s/NoteEditor/NotesEditor/ and propagate that change to the module
[docs]class NoteEditor(BaseEditor): """ Simple editor that offers a label and a textview. """ gladefile = "NoteSlave" proxy_widgets = ('notes', ) size = (500, 200) model_type = object def __init__(self, store, model, attr_name='notes', title=u'', label_text=None, message_text=None, mandatory=False, visual_mode=False, ok_button_label=None, cancel_button_label=None, min_length=0): """ :param store: a store :param model: the model that's going to have it's notes edited :param attr_name: the name of the attribute that contains the text to be edited :param title: if not ``None``, will be used as the dialog's title :param label_text: the text that will be used as a description for the notes' text view. If ``None``, the default "Notes" will be used :param message_label: if not ``None``, it will be used to display a message at the top of the dialog :param mandatory: if we should set the notes' text view as mandatory, making the dialog impossible to confirm if the notes are empty :param visual_mode: if we are working on visual mode :param min_length: if we should consider a minimum note length """ self.title = title self.label_text = label_text self.message_text = message_text self.mandatory = mandatory self.attr_name = attr_name self.min_length = min_length # Keep this for a later rollback. self.original_notes = getattr(model, attr_name, u'') BaseEditor.__init__(self, store, model, visual_mode=visual_mode) self._setup_widgets() if ok_button_label is not None: self.main_dialog.ok_button.set_label(ok_button_label) if cancel_button_label is not None: self.main_dialog.cancel_button.set_label(cancel_button_label) # # Private # def _setup_widgets(self): if self.message_text: self.message_label.set_text(self.message_text) self.message_label.set_visible(True) if self.label_text: self.observations_label.set_text(self.label_text) self.notes.set_accepts_tab(False) self.notes.set_property('mandatory', self.mandatory) # # BaseEditor hooks #
[docs] def setup_proxies(self): self.notes.set_property('model-attribute', self.attr_name) self.add_proxy(self.model, NoteEditor.proxy_widgets)
[docs] def create_model(self, store): return Note()
[docs] def get_title(self, *args): return self.title
[docs] def on_cancel(self): # FIXME: When Kiwi allows proxies to save upon confirm, apply this # here. # If model is not a Domain, changes to it can't be undone by a # store.rollback(). Therefore, we must do the rollback by hand. if not isinstance(self.model, Domain): setattr(self.model, self.attr_name, self.original_notes)
[docs] def confirm(self): if len(self.notes.read()) < self.min_length: warning(_("The note must have at least %s characters.") % self.min_length) return BaseEditor.confirm(self)