Implement palette groups. Use them to not popdown frame when hover a palette.

This commit is contained in:
Marco Pesenti Gritti 2007-07-06 14:36:59 +02:00
parent 9ec946d2d0
commit 7468faa840
6 changed files with 52 additions and 7 deletions

View File

@ -44,6 +44,8 @@ class ClipboardMenu(Palette):
self._percent = percent self._percent = percent
self._activity = activity self._activity = activity
self.set_group_id('frame')
if percent < 100: if percent < 100:
self._progress_bar = gtk.ProgressBar() self._progress_bar = gtk.ProgressBar()
self._update_progress_bar() self._update_progress_bar()

View File

@ -18,6 +18,7 @@ import hippo
import logging import logging
from sugar.graphics import units from sugar.graphics import units
from sugar.graphics.palette import Palette
from sugar.graphics.xocolor import XoColor from sugar.graphics.xocolor import XoColor
from sugar.graphics.iconbutton import IconButton from sugar.graphics.iconbutton import IconButton
from sugar import profile from sugar import profile
@ -27,7 +28,11 @@ from model import bundleregistry
class ActivityButton(IconButton): class ActivityButton(IconButton):
def __init__(self, activity): def __init__(self, activity):
IconButton.__init__(self, icon_name=activity.get_icon()) IconButton.__init__(self, icon_name=activity.get_icon())
self.set_tooltip(activity.get_name())
palette = Palette(activity.get_name())
palette.set_group_id('frame')
self.set_palette(palette)
self._activity = activity self._activity = activity
def get_bundle_id(self): def get_bundle_id(self):

View File

@ -25,6 +25,7 @@ from model.BuddyModel import BuddyModel
class FriendIcon(BuddyIcon): class FriendIcon(BuddyIcon):
def __init__(self, shell, buddy): def __init__(self, shell, buddy):
BuddyIcon.__init__(self, shell, buddy) BuddyIcon.__init__(self, shell, buddy)
self.get_palette().set_group_id('frame')
def prelight(self, enter): def prelight(self, enter):
if enter: if enter:

View File

@ -20,6 +20,11 @@ import gtk
import gobject import gobject
import hippo import hippo
from sugar.graphics import animator
from sugar.graphics import units
from sugar.graphics import palettegroup
from sugar.clipboard import clipboardservice
from view.frame.eventarea import EventArea from view.frame.eventarea import EventArea
from view.frame.ActivitiesBox import ActivitiesBox from view.frame.ActivitiesBox import ActivitiesBox
from view.frame.ZoomBox import ZoomBox from view.frame.ZoomBox import ZoomBox
@ -28,9 +33,6 @@ from view.frame.FriendsBox import FriendsBox
from view.frame.framewindow import FrameWindow from view.frame.framewindow import FrameWindow
from view.frame.clipboardpanelwindow import ClipboardPanelWindow from view.frame.clipboardpanelwindow import ClipboardPanelWindow
from model.shellmodel import ShellModel from model.shellmodel import ShellModel
from sugar.graphics import animator
from sugar.graphics import units
from sugar.clipboard import clipboardservice
MODE_NONE = 0 MODE_NONE = 0
MODE_MOUSE = 1 MODE_MOUSE = 1
@ -126,6 +128,9 @@ class Frame(object):
self.mode = MODE_NONE self.mode = MODE_NONE
self.visible = False self.visible = False
self._palette_group = palettegroup.get_group('frame')
self._palette_group.connect('popdown', self._palette_group_popdown_cb)
self._left_panel = None self._left_panel = None
self._right_panel = None self._right_panel = None
self._top_panel = None self._top_panel = None
@ -309,10 +314,14 @@ class Frame(object):
if not self._hover: if not self._hover:
return return
if not self._is_hover(): if not self._is_hover() and not self._palette_group.is_up():
self._hover = False self._hover = False
self._mouse_listener.mouse_leave() self._mouse_listener.mouse_leave()
def _palette_group_popdown_cb(self, group):
if not self._is_hover():
self._mouse_listener.mouse_leave()
def _drag_motion_cb(self, window, context, x, y, time): def _drag_motion_cb(self, window, context, x, y, time):
self._mouse_listener.mouse_enter() self._mouse_listener.mouse_enter()

View File

@ -16,6 +16,7 @@ sugar_PYTHON = \
radiotoolbutton.py \ radiotoolbutton.py \
roundbox.py \ roundbox.py \
palette.py \ palette.py \
palettegroup.py \
panel.py \ panel.py \
spreadlayout.py \ spreadlayout.py \
toggletoolbutton.py \ toggletoolbutton.py \

View File

@ -1,4 +1,4 @@
# Copyright (C) 2007, Eduardo Silva (edsiper@gmail.com) # Copyright (C) 2007, Eduardo Silva <edsiper@gmail.com>
# #
# This library is free software; you can redistribute it and/or # This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public # modify it under the terms of the GNU Lesser General Public
@ -22,6 +22,7 @@ import gobject
import time import time
import hippo import hippo
from sugar.graphics import palettegroup
from sugar.graphics import animator from sugar.graphics import animator
from sugar.graphics import units from sugar.graphics import units
from sugar import _sugarext from sugar import _sugarext
@ -51,9 +52,18 @@ class Palette(gobject.GObject):
0, gobject.PARAM_READWRITE) 0, gobject.PARAM_READWRITE)
} }
__gsignals__ = {
'popup' : (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([])),
'popdown' : (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([]))
}
def __init__(self, label, accel_path=None): def __init__(self, label, accel_path=None):
gobject.GObject.__init__(self) gobject.GObject.__init__(self)
self._group_id = None
self._up = False
self._position = self.AUTOMATIC self._position = self.AUTOMATIC
self._palette_popup_sid = None self._palette_popup_sid = None
@ -88,6 +98,9 @@ class Palette(gobject.GObject):
self._menu.connect('button-press-event', self._menu.connect('button-press-event',
self._button_press_event_cb) self._button_press_event_cb)
def is_up(self):
return self._up
def set_primary_text(self, label, accel_path=None): def set_primary_text(self, label, accel_path=None):
self._primary.set_label(label, accel_path) self._primary.set_label(label, accel_path)
@ -119,7 +132,15 @@ class Palette(gobject.GObject):
def append_button(self, button): def append_button(self, button):
self._button_bar.append_button(button) self._button_bar.append_button(button)
self._button_bar.show() self._button_bar.show()
def set_group_id(self, group_id):
if self._group_id:
group = palettegroup.get_group(self._group_id)
group.remove(self)
if group_id:
group = palettegroup.get_group(group_id)
group.add(self)
def do_set_property(self, pspec, value): def do_set_property(self, pspec, value):
if pspec.name == 'invoker': if pspec.name == 'invoker':
self._invoker = value self._invoker = value
@ -206,7 +227,10 @@ class Palette(gobject.GObject):
self._palette_popup_sid = _palette_observer.connect('popup', self._palette_popup_sid = _palette_observer.connect('popup',
self._palette_observer_popup_cb) self._palette_observer_popup_cb)
self._menu.popup(x, y) self._menu.popup(x, y)
self._up = True
_palette_observer.emit('popup', self) _palette_observer.emit('popup', self)
self.emit('popup')
def _hide(self): def _hide(self):
if not self._palette_popup_sid is None: if not self._palette_popup_sid is None:
@ -214,6 +238,9 @@ class Palette(gobject.GObject):
self._palette_popup_sid = None self._palette_popup_sid = None
self._menu.popdown() self._menu.popdown()
self._up = False
self.emit('popdown')
def popup(self): def popup(self):
self._popdown_anim.stop() self._popdown_anim.stop()
self._popup_anim.start() self._popup_anim.start()