1
from ContainerTarget import ContainerTarget
2
from utils.datatypes import *
3
from layout import Unit
11
from utils.tiling import Tiling
14
log("Could not import tiling module!")
19
# Class for putting frames around targets.
21
class TargetFrame(ContainerTarget):
23
def __init__(self, name, parent):
25
self.__frame_widths = [Unit.ZERO] * 4
29
ContainerTarget.__init__(self, name, parent)
30
self.__table = gtk.Table(3, 3)
31
self.__table.set_direction(gtk.TEXT_DIR_LTR)
34
r, g, b, a = utils.parse_color("black")
35
for x, y in ((0, 1), (1, 0), (2, 1), (1, 2),
36
(0, 0), (2, 0), (2, 2), (0, 2)):
38
img.set_from_color(r, g, b, a)
40
self.__table.attach(img, x, x + 1, y, y + 1)
41
self.__images.append(img)
43
self.__box = gtk.HBox()
45
self.__table.attach(self.__box, 1, 2, 1, 2)
47
self._register_property("border-uris", TYPE_LIST,
48
self._setp_border_uris, self._getp)
49
self._register_property("border-width", TYPE_UNIT_LIST,
50
self._setp_border_width, self._getp)
51
self._register_property("color", TYPE_STRING,
52
self._setp_border_color, self._getp)
54
self.set_prop("border-width",
55
[Unit.Unit(2, Unit.UNIT_PX), Unit.Unit(2, Unit.UNIT_PX),
56
Unit.Unit(2, Unit.UNIT_PX), Unit.Unit(2, Unit.UNIT_PX)])
57
self._setp("color", "black")
60
# watch for geometry changes
61
self.add_observer(self.__on_observe_size)
65
def get_widget(self): return self.__table
67
def new_child(self, childtype, settings, children):
69
child = ContainerTarget.new_child(self, childtype, settings, children)
70
self.__box.add(child.get_widget())
76
# Observer for size changes.
78
def __on_observe_size(self, src, cmd, *args):
80
x, y, w, h = src.get_geometry()
81
if (cmd == src.OBS_GEOMETRY and
82
(w.as_px() != 0) and (h.as_px() != 0)):
87
def __redraw_frame(self, src = None, event = None):
89
x, y, w, h = self.get_geometry()
90
w1, h1, w2, h2 = self.__frame_widths
92
iw = max(Unit.ZERO, w - w1 - w2)
93
ih = max(Unit.ZERO, h - h1 - h2)
95
self.__box.set_size_request(iw.as_px(), ih.as_px())
97
for bw, bh in ((w1, ih), (iw, h1),
101
img = self.__images[cnt]
104
if (bw.as_px() == 0 or bh.as_px() == 0):
109
img.tile(bw.as_px(), bh.as_px())
110
img.set_size_request(bw.as_px(), bh.as_px())
115
def __set_border_width(self, args):
117
for i in xrange(len(args)):
118
self.__frame_widths[i] = args[i]
120
self.get_layout_object().set_border_width(*args)
124
def __set_border(self, args):
128
uri = self._get_display().get_full_path(uri)
129
if (vfs.exists(uri)):
131
data = vfs.read_entire_file(uri)
134
self.__images[cnt].set_from_data(data)
137
self.__redraw_frame()
141
def __set_border_color(self, color):
143
r, g, b, a = utils.parse_color(color)
145
self.__images[cnt].set_from_color(r, g, b, a)
147
self.__redraw_frame()
151
def get_border_size(self):
153
w1, h1, w2, h2 = self.__frame_widths
154
return (w1, h1, w2, h2)
158
def _setp_border_uris(self, key, value):
160
self.__set_border(value)
161
self._setp(key, value)
165
def _setp_border_color(self, key, value):
167
self.__set_border_color(value)
168
self._setp(key, value)
172
def _setp_border_width(self, key, value):
174
self.__set_border_width(value)
175
self._setp(key, value)