sugar-toolkit-gtk3/sugar/shell/WindowManager.py

93 lines
2.3 KiB
Python
Raw Normal View History

2006-06-14 22:30:53 +02:00
import pygtk
pygtk.require('2.0')
import gtk
2006-06-15 01:00:56 +02:00
import gobject
2006-06-14 22:30:53 +02:00
class WindowManager:
__managers_list = []
CENTER = 0
LEFT = 1
RIGHT = 2
TOP = 3
BOTTOM = 4
2006-06-14 22:30:53 +02:00
ABSOLUTE = 0
SCREEN_RELATIVE = 1
2006-06-15 01:00:56 +02:00
2006-06-14 22:30:53 +02:00
def __init__(self, window):
self._window = window
window.connect("key-press-event", self.__key_press_event_cb)
WindowManager.__managers_list.append(self)
2006-06-15 01:00:56 +02:00
2006-06-14 22:30:53 +02:00
def __key_press_event_cb(self, window, event):
manager = None
if event.keyval == gtk.keysyms.Left and \
event.state & gtk.gdk.CONTROL_MASK:
for wm in WindowManager.__managers_list:
if wm._position == WindowManager.LEFT:
manager = wm
if event.keyval == gtk.keysyms.Up and \
event.state & gtk.gdk.CONTROL_MASK:
for wm in WindowManager.__managers_list:
if wm._position == WindowManager.TOP:
manager = wm
2006-06-14 22:30:53 +02:00
if manager and manager._window.get_property('visible'):
manager.slide_window_out()
elif manager:
manager.slide_window_in()
def set_width(self, width, width_type):
self._width = width
self._width_type = width_type
def set_height(self, height, height_type):
self._height = height
self._height_type = height_type
def set_position(self, position):
self._position = position
2006-06-15 01:00:56 +02:00
2006-06-14 22:30:53 +02:00
def _update_size_and_position(self):
screen_width = self._window.get_screen().get_width()
screen_height = self._window.get_screen().get_height()
if self._width_type is WindowManager.ABSOLUTE:
width = self._width
elif self._width_type is WindowManager.SCREEN_RELATIVE:
2006-06-15 04:08:18 +02:00
width = int(screen_width * self._width)
2006-06-14 22:30:53 +02:00
if self._height_type is WindowManager.ABSOLUTE:
height = self._height
elif self._height_type is WindowManager.SCREEN_RELATIVE:
2006-06-15 04:08:18 +02:00
height = int(screen_height * self._height)
2006-06-14 22:30:53 +02:00
if self._position is WindowManager.CENTER:
2006-06-15 04:08:18 +02:00
x = int((screen_width - width) / 2)
y = int((screen_height - height) / 2)
2006-06-14 22:30:53 +02:00
elif self._position is WindowManager.LEFT:
x = 0
2006-06-15 04:08:18 +02:00
y = int((screen_height - height) / 2)
elif self._position is WindowManager.TOP:
x = int((screen_width - width) / 2)
y = 0
2006-06-14 22:30:53 +02:00
self._window.move(x, y)
self._window.resize(width, height)
2006-06-15 01:00:56 +02:00
2006-06-14 22:30:53 +02:00
def slide_window_in(self):
self._window.show()
2006-06-14 22:30:53 +02:00
def slide_window_out(self):
self._window.hide()
2006-06-15 01:00:56 +02:00
def show(self):
self._window.show()
2006-06-15 01:00:56 +02:00
def manage(self):
2006-06-14 22:30:53 +02:00
self._update_size_and_position()