1 # Copyright (c) 2005-2006 The Regents of The University of Michigan
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are
6 # met: redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer;
8 # redistributions in binary form must reproduce the above copyright
9 # notice, this list of conditions and the following disclaimer in the
10 # documentation and/or other materials provided with the distribution;
11 # neither the name of the copyright holders nor the names of its
12 # contributors may be used to endorse or promote products derived from
13 # this software without specific prior written permission.
15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 # Authors: Nathan Binkert
30 class ChartOptions(object):
31 defaults
= { 'chart_size' : (8, 4),
32 'figure_size' : [0.1, 0.1, 0.6, 0.85],
35 'legend_loc' : 'upper right',
46 def __init__(self
, options
=None, **kwargs
):
47 self
.init(options
, **kwargs
)
52 def init(self
, options
=None, **kwargs
):
54 self
.update(options
, **kwargs
)
56 def update(self
, options
=None, **kwargs
):
57 if options
is not None:
58 if not isinstance(options
, ChartOptions
):
59 raise AttributeError, \
60 'attribute options of type %s should be %s' % \
61 (type(options
), ChartOptions
)
62 self
.options
.update(options
.options
)
64 for key
,value
in kwargs
.iteritems():
65 if key
not in ChartOptions
.defaults
:
66 raise AttributeError, \
67 "%s instance has no attribute '%s'" % (type(self
), key
)
68 self
.options
[key
] = value
70 def __getattr__(self
, attr
):
71 if attr
in self
.options
:
72 return self
.options
[attr
]
74 if attr
in ChartOptions
.defaults
:
75 return ChartOptions
.defaults
[attr
]
77 raise AttributeError, \
78 "%s instance has no attribute '%s'" % (type(self
), attr
)
80 def __setattr__(self
, attr
, value
):
81 if attr
in ChartOptions
.defaults
:
82 self
.options
[attr
] = value
84 super(ChartOptions
, self
).__setattr
__(attr
, value
)