app/soc/logic/menu.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Sun, 19 Oct 2008 16:17:32 +0000
changeset 390 d12c95ade374
parent 196 089a86d84067
permissions -rw-r--r--
Remove unused imports, fix too long lines and indentions. Patch by: Pawel Solyga Review by: to-be-reviewed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     2
#
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    17
"""Representations and manipulation of arbitrarily nested menus.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    18
"""
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    19
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
__authors__ = [
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    21
  '"Todd Larsen" <tlarsen@google.com>',
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    22
  ]
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    23
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    25
from django.utils import datastructures
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    26
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    27
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    28
class Menu:
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    29
  """Ordered collection of MenuItem objects.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    30
  
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    31
  MenuItems are retrievable as an ordered list or individually by their
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    32
  MenuItem.text key.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    33
  """
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    34
  
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    35
  def __init__(self, items=None):
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    36
    """Initializes ordered list of MenuItems.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    37
    
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    38
    Args:
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    39
      items: list of MenuItem objects in display order
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    40
    """
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    41
    if not items:
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    42
      items = []
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    43
    
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    44
    items = [(i.name, i) for i in items]
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    45
    self._items = datastructures.SortedDict(data=items)
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    46
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    47
  def getItem(self, name):
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    48
    """Returns a MenuItem retrieved by its MenuItem.text."""
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    49
    return self._items.get(name)
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    50
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    51
  def setItem(self, item):
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    52
    """Overwrites an existing MenuItem, or appends a new one."""
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    53
    self._items[item.name] = item
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    54
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    55
  def delItem(self, name):
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    56
    """Removes an existing MenuItem."""
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    57
    del self._items[name]
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    58
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    59
  def _getItems(self):
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    60
    """Returns an ordered list of the MenuItems."""
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    61
    return self._items.values()
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    62
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    63
  items = property(_getItems, doc=
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    64
    """Read-only list of MenuItems, for use in templates.""")
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    65
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    66
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    67
class MenuItem:
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    68
  """Provides menu item properties as easily-accessible attributes.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    69
  """
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    70
  
196
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    71
  def __init__(self, name, value=None, selected=False, annotation=None,
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    72
                sub_menu=None):
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    73
    """Initializes the menu item attributes from supplied arguments.
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    74
    
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    75
    Args:
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    76
      name: name of the menu item
196
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    77
      value: optional value associated with the menu item;
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    78
        default is None
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    79
      selected: Boolean indicating if this menu item is selected;
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    80
        default is False
196
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    81
      annotation: optional annotation associated with the menu item;
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    82
        default is None
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    83
      sub_menu: a Menu of sub-items to display below this menu item;
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    84
        default is None, indicating no sub-menu
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    85
    """
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    86
    self.name = name
196
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    87
    self.value = value
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    88
    self.selected = selected
196
089a86d84067 Make views.helpers.html_menu MenuItem classes and logic.menu MenuItem classes
Todd Larsen <tlarsen@google.com>
parents: 192
diff changeset
    89
    self.annotation = annotation
192
f6bf679dab26 Simple MenuItem and Menu classes for keeping track of ordered menus.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    90
    self.sub_menu = sub_menu