#-----------------------------------------------------------------------------
#
#   Python GUI - Gtk - Utilities
#
#-----------------------------------------------------------------------------

class GtkFixedSize(object):
    #  Mixin for Gtk widgets to force them to always request exactly the
    #  size set using set_size_request().
    
    def do_get_preferred_width(self):
        w = self.get_size_request()[0]
        #print "GtkFixedSize.do_get_preferred_width:", w ###
        return w, w

    def do_get_preferred_height(self):
        h = self.get_size_request()[1]
        #print "GtkFixedSize.do_get_preferred_height:", h ###
        return h, h

    def do_get_preferred_height_for_width(self, width):
        #print "GtkFixedSize.do_get_preferred_height_for_width:", width ###
        return self.do_get_preferred_height()

    def do_get_preferred_width_for_height(self, height):
        #print "GtkFixedSize.do_get_preferred_width_for_height:", height ###
        return self.do_get_preferred_width()

#-----------------------------------------------------------------------------

def mix_in(*src_classes):
    #  Workaround for do_xxx method overrides not working properly
    #  with multiple inheritance.
    #
    #  Usage:
    #
    #    class MyClass(Gtk.SomeBaseClass):
    #      mix_in(Class1, Class2, ...)
    #
    import sys
    frame = sys._getframe(1)
    dst_dict = frame.f_locals
    for src_class in src_classes:
        for name, value in src_class.__dict__.iteritems():
            if name not in dst_dict:
                dst_dict[name] = value
