From e1ba40720937af85499f99dd5cbd1a3745703790 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 17 May 2013 11:26:36 +0200 Subject: [PATCH 1/4] new person fields salutation and (academic) title --- organize/interfaces.py | 42 +++++++++++----- .../de/LC_MESSAGES/cybertools.organize.mo | Bin 1134 -> 1402 bytes .../de/LC_MESSAGES/cybertools.organize.po | 46 ++++++++++++------ util/__init__.py | 22 ++++++++- 4 files changed, 82 insertions(+), 28 deletions(-) diff --git a/organize/interfaces.py b/organize/interfaces.py index bfd2b3b..afc3568 100644 --- a/organize/interfaces.py +++ b/organize/interfaces.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Helmut Merz helmutm@cy55.de +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Interfaces for organizational stuff like persons, addresses, tasks, services... - -$Id$ """ from zope import schema @@ -30,6 +28,7 @@ from zope.i18nmessageid import MessageFactory from cybertools.composer.schema.factory import Email from cybertools.tracking.interfaces import ITrack from cybertools.util.jeep import Jeep, Term +from cybertools.util import KeywordVocabulary _ = MessageFactory('cybertools.organize') @@ -43,31 +42,48 @@ class LinesList(schema.List): pass # persons, addresses, ... +salutations = ((None, u''), + ('m', _(u'Mr')), + ('f', _(u'Mrs'))) + + class IPerson(Interface): """ Resembles a human being with a name (first and last name), a birth date, and a set of addresses. """ + salutation = schema.Choice( + title=_(u'Salutation'), + description=_(u'Salutation in letter.'), + vocabulary=KeywordVocabulary(salutations), + default=None, + required=False) + + academicTitle = schema.TextLine( + title=_(u'Academic Title'), + description=_(u'Academic title or name affix.'), + required=False) + firstName = schema.TextLine( - title=_(u'First name'), - description=_(u'The first name'), + title=_(u'First Name'), + description=_(u'The first name.'), required=False,) lastName = schema.TextLine( - title=_(u'Last name'), - description=_(u'The last name or surname'),) - email = Email(title=_(u'E-Mail address'), - description=_(u'The standard email address of the person'),) + title=_(u'Last Name'), + description=_(u'The last name or surname.'),) + email = Email(title=_(u'E-Mail Address'), + description=_(u'The standard email address of the person.'),) #phoneNumbers = SimpleList( phoneNumbers = schema.List( value_type=schema.TextLine(), default=[], - title=_(u'Phone numbers'), - description=_(u'Note one or more phone numbers here'), + title=_(u'Phone Numbers'), + description=_(u'Note one or more phone numbers here.'), required=False,) birthDate = schema.Date( - title=_(u'Date of birth'), + title=_(u'Date of Birth'), description=_(u'The date of birth - should be a ' - 'datetime.date object'), + 'datetime.date object.'), required=False,) age = schema.Int( diff --git a/organize/locales/de/LC_MESSAGES/cybertools.organize.mo b/organize/locales/de/LC_MESSAGES/cybertools.organize.mo index 60bf080b4c0310608a53e795c62ba0499a332ac6..14b572521c0a5bb42d67be95e4b5511fe9813517 100644 GIT binary patch literal 1402 zcmZvbL5~wR6vs_V3xrZ&5fVtP^rS9Qk#IIyx?&ZeBD>APN}DZ$6bUZKn|YZrcs!BE z1MG6?k!w}87moBJ^w>(R_yT+Y)N2n&9QXwNze&{>oQdVDe1}6x83%5voAuoGWKP{Su8Jnw!q0t@_2f844o!7Cnh+P(PPS%v+TG8&(lkPzpRh?yiJ2}bN2Lr~$NCKL~N81-hN?_df# zI<&Z%EH-X_JJ9QaYiU}prbElE)~aqV>sFiE%biw>)_Vi^>0A8B%Fch?+81?eMYk`_ zxyfDWK`_2_CKjPXH`wJ>q&|l|x{}pKer>qBveHcW>&BMxX=PH@12%bwTv3cmO861G zLX`i{j{au9x1U10*=np8KC(yD-7&;ReiE0)&RBn$hM5T^$E)8BHuUPgpQsyg&^dmoeoX#-sn&QFVP_M4TKuG00Tq#6m>cgJ~I}_p2|0epGpET0?a_Y5vb=0`AO=5CzCQJh3c!b#FwihFVL zgeQ_0(@=1A-006C-Hp0&wKn^udfdEIy=(UG(vIXZau&Z_h_|#Va?y@o2^?j^c!**fyw{? diff --git a/organize/locales/de/LC_MESSAGES/cybertools.organize.po b/organize/locales/de/LC_MESSAGES/cybertools.organize.po index 3f1f5c8..4744b23 100644 --- a/organize/locales/de/LC_MESSAGES/cybertools.organize.po +++ b/organize/locales/de/LC_MESSAGES/cybertools.organize.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: $Id$\n" "POT-Creation-Date: 2008-12-01 12:00 CET\n" -"PO-Revision-Date: 2010-02-20 12:00 CET\n" +"PO-Revision-Date: 2013-05-17 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -11,31 +11,49 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: kwrite\n" -msgid "First name" +msgid "Salutation" +msgstr "Anrede" + +msgid "Salutation in letter." +msgstr "Bitte Anrede auswählen." + +msgid "Academic Title" +msgstr "Titel/Namenszusatz" + +msgid "Academic title or name affix." +msgstr "Akademischer Titel oder Namenszusatz." + +msgid "Mr" +msgstr "Herr" + +msgid "Mrs" +msgstr "Frau" + +msgid "First Name" msgstr "Vorname" -msgid "The first name" -msgstr "Bitte den oder die Vornamen eingeben" +msgid "The first name." +msgstr "Bitte den Vornamen eingeben." -msgid "Last name" +msgid "Last Name" msgstr "Nachname" -msgid "The last name or surname" -msgstr "Bitte den Nachnamen eingeben" +msgid "The last name or surname." +msgstr "Bitte den Nachnamen eingeben." -msgid "E-Mail address" +msgid "E-Mail Address" msgstr "E-Mail-Adresse" -msgid "The standard email address of the person" -msgstr "Bitte eine gültige E-Mail-Adresse eingeben" +msgid "The standard email address of the person." +msgstr "Bitte eine gültige E-Mail-Adresse eingeben." -msgid "Phone numbers" +msgid "Phone Numbers" msgstr "Telefonnummern" -msgid "Note one or more phone numbers here" -msgstr "Bitte eine oder mehrere Telefonnummern (je Zeile eine) eingeben" +msgid "Note one or more phone numbers here." +msgstr "Bitte eine oder mehrere Telefonnummern (je Zeile eine) eingeben." -msgid "Date of birth" +msgid "Date of Birth" msgstr "Geburtsdatum" msgid "Age" diff --git a/util/__init__.py b/util/__init__.py index 38314f3..20f22a4 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -1,3 +1,23 @@ """ -$Id$ +common utilities """ + +from zope.schema import vocabulary + + +class KeywordVocabulary(vocabulary.SimpleVocabulary): + + def __init__(self, items, *interfaces): + """ ``items`` may be a tuple of (token, title) or a dictionary + with corresponding elements named 'token' and 'title'. + """ + terms = [] + for t in items: + if type(t) is dict: + token, title = t['token'], t['title'] + else: + token, title = t + terms.append(vocabulary.SimpleTerm(token, token, title)) + super(KeywordVocabulary, self).__init__(terms, *interfaces) + + From e3240b100062bd52f2b7245c2e43478089a1d4f3 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 17 May 2013 11:27:12 +0200 Subject: [PATCH 2/4] add new illustrative icons --- browser/icons/dialog-information.png | Bin 0 -> 9081 bytes browser/icons/dialog-warning.png | Bin 0 -> 4780 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 browser/icons/dialog-information.png create mode 100644 browser/icons/dialog-warning.png diff --git a/browser/icons/dialog-information.png b/browser/icons/dialog-information.png new file mode 100644 index 0000000000000000000000000000000000000000..1b99d0b3d9e0e6ba4e53d3eb0bd676960ffa9074 GIT binary patch literal 9081 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 literal 0 HcmV?d00001 diff --git a/browser/icons/dialog-warning.png b/browser/icons/dialog-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..325e5c00806a49bcf2e193b65ea1f28323886207 GIT binary patch literal 4780 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 Date: Fri, 17 May 2013 13:16:56 +0200 Subject: [PATCH 3/4] backport util module from bluebream branch --- organize/interfaces.py | 2 +- util/__init__.py | 20 -------------------- util/util.py | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 util/util.py diff --git a/organize/interfaces.py b/organize/interfaces.py index afc3568..27bccf5 100644 --- a/organize/interfaces.py +++ b/organize/interfaces.py @@ -28,7 +28,7 @@ from zope.i18nmessageid import MessageFactory from cybertools.composer.schema.factory import Email from cybertools.tracking.interfaces import ITrack from cybertools.util.jeep import Jeep, Term -from cybertools.util import KeywordVocabulary +from cybertools.util.util import KeywordVocabulary _ = MessageFactory('cybertools.organize') diff --git a/util/__init__.py b/util/__init__.py index 20f22a4..8ee1202 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -1,23 +1,3 @@ """ common utilities """ - -from zope.schema import vocabulary - - -class KeywordVocabulary(vocabulary.SimpleVocabulary): - - def __init__(self, items, *interfaces): - """ ``items`` may be a tuple of (token, title) or a dictionary - with corresponding elements named 'token' and 'title'. - """ - terms = [] - for t in items: - if type(t) is dict: - token, title = t['token'], t['title'] - else: - token, title = t - terms.append(vocabulary.SimpleTerm(token, token, title)) - super(KeywordVocabulary, self).__init__(terms, *interfaces) - - diff --git a/util/util.py b/util/util.py new file mode 100644 index 0000000..baa4af6 --- /dev/null +++ b/util/util.py @@ -0,0 +1,40 @@ +# +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Utility functions. +""" + +from zope.schema import vocabulary + + +class KeywordVocabulary(vocabulary.SimpleVocabulary): + + def __init__(self, items, *interfaces): + """ ``items`` may be a tuple of (token, title) or a dictionary + with corresponding elements named 'token' and 'title'. + """ + terms = [] + for t in items: + if type(t) is dict: + token, title = t['token'], t['title'] + else: + token, title = t + terms.append(vocabulary.SimpleTerm(token, token, title)) + super(KeywordVocabulary, self).__init__(terms, *interfaces) + From cc6e1a5f3ec83510773977cf1b7b4184ea865ee5 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 20 Jun 2013 13:33:43 +0200 Subject: [PATCH 4/4] provide unified access to state icon (or colored led) --- stateful/definition.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stateful/definition.py b/stateful/definition.py index 1c3d8c6..cee7063 100644 --- a/stateful/definition.py +++ b/stateful/definition.py @@ -43,6 +43,10 @@ class State(object): for k, v in kw.items(): setattr(self, k, v) + @property + def stateIcon(self): + return 'cybertools.icons/' + (self.icon or 'led%s.png' % self.color) + class Action(object):