# Path: flumotion/common/log.py
# def init():
# 
# Path: flumotion/common/messages.py
# (ERROR,
#  WARNING,
#  INFO) = range(1, 4)
# class Message(pb.Copyable, pb.RemoteCopy, FancyEqMixin):
# class Result(pb.Copyable, pb.RemoteCopy):
#     def __init__(self, level, translatable, debug=None, mid=None, priority=50,
#         timestamp=None):
#     def __repr__(self):
#     def add(self, translatable):
#     def getTimeStamp(self):
#     def getDescription(self):
# def Error(*args, **kwargs):
# def Warning(*args, **kwargs):
# def Info(*args, **kwargs):
#     def __init__(self):
#     def succeed(self, value):
#     def add(self, message):


import gettext
import os
import gobject
import gtk
from flumotion.common import componentui, log, errors, messages
from flumotion.common.common import pathToModuleName
from flumotion.common.planet import AdminComponentState, moods
from flumotion.common.i18n import N_, gettexter
from twisted.internet import defer
from gettext import gettext as _
        self._state = dict(mood=moods.happy,
                           name='multiple-components',
                           type='MultipleComponents')

    def addListener(self, *args, **kwargs):
        for state in self._componentStates:
            try:
                state.addListener(*args, **kwargs)
            except KeyError, e:
                self.debug('Error adding listener for component %s',
                           state.get('name'))

    def removeListener(self, listener):
        for state in self._componentStates:
            try:
                state.removeListener(listener)
            except KeyError:
                self.debug('Error removing listener for component %s',
                           state.get('name'))

    def hasKey(self, key):
        return key in self._state.keys()

    def get(self, key):
        return self._state.get(key, None)

    def getComponentStates(self):
        return self._componentStates



# Path: flumotion/common/log.py
# def init():
# 
# Path: flumotion/common/messages.py
# (ERROR,
#  WARNING,
#  INFO) = range(1, 4)
# class Message(pb.Copyable, pb.RemoteCopy, FancyEqMixin):
# class Result(pb.Copyable, pb.RemoteCopy):
#     def __init__(self, level, translatable, debug=None, mid=None, priority=50,
#         timestamp=None):
#     def __repr__(self):
#     def add(self, translatable):
#     def getTimeStamp(self):
#     def getDescription(self):
# def Error(*args, **kwargs):
# def Warning(*args, **kwargs):
# def Info(*args, **kwargs):
#     def __init__(self):
#     def succeed(self, value):
#     def add(self, message):


# Path: flumotion/admin/gtk/componentview.py
import gettext
import os
import gobject
import gtk
from flumotion.common import componentui, log, errors, messages
from flumotion.common.common import pathToModuleName
from flumotion.common.planet import AdminComponentState, moods
from flumotion.common.i18n import N_, gettexter
from twisted.internet import defer
from gettext import gettext as _

        self._state = dict(mood=moods.happy,
                           name='multiple-components',
                           type='MultipleComponents')

    def addListener(self, *args, **kwargs):
        for state in self._componentStates:
            try:
                state.addListener(*args, **kwargs)
            except KeyError, e:
                self.debug('Error adding listener for component %s',
                           state.get('name'))

    def removeListener(self, listener):
        for state in self._componentStates:
            try:
                state.removeListener(listener)
            except KeyError:
                self.debug('Error removing listener for component %s',
                           state.get('name'))

    def hasKey(self, key):
        return key in self._state.keys()

    def get(self, key):
        return self._state.get(key, None)

    def getComponentStates(self):
        return self._componentStates



class ComponentView(gtk.VBox, log.Loggable):