Merge lp:~codeforger/simplegc/label into lp:simplegc

Proposed by Michael Rochester
Status: Merged
Approved by: Sam Bull
Approved revision: 209
Merged at revision: 216
Proposed branch: lp:~codeforger/simplegc/label
Merge into: lp:simplegc
Diff against target: 227 lines (+126/-44) (has conflicts)
2 files modified
sgc/example/test.py (+9/-2)
sgc/widgets/label.py (+117/-42)
Text conflict in sgc/example/test.py
To merge this branch: bzr merge lp:~codeforger/simplegc/label
Reviewer Review Type Date Requested Status
Sam Bull Approve
Review via email: mp+100381@code.launchpad.net

Description of the change

NOt an up to date branch, I couldent work out how )':

To post a comment you must log in.
Revision history for this message
Sam Bull (dreamsorcerer) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'sgc/example/test.py'
--- sgc/example/test.py 2012-03-31 20:18:37 +0000
+++ sgc/example/test.py 2012-04-02 10:33:19 +0000
@@ -49,8 +49,8 @@
4949
5050
51# Title51# Title
52title = sgc.widgets.Label(text="Simple Game Code " + ver_no,52title = sgc.widgets.Label(label="Simple Game Code " + ver_no,
53 font=sgc.Font["title"], color=sgc.Font.col)53 font=sgc.Font["title"], label_col=sgc.Font.col,)
54title.rect.center = (screen.rect.w/2, 40)54title.rect.center = (screen.rect.w/2, 40)
55title.add()55title.add()
5656
@@ -108,10 +108,17 @@
108radio_box = sgc.widgets.VBox(widgets=(radio1, radio2, radio3), pos=(40,320))108radio_box = sgc.widgets.VBox(widgets=(radio1, radio2, radio3), pos=(40,320))
109radio_box.add(2)109radio_box.add(2)
110110
111<<<<<<< TREE
111# Toggle Button112# Toggle Button
112toggle = sgc.widgets.Toggle(label="Toggle", pos=(200,320))113toggle = sgc.widgets.Toggle(label="Toggle", pos=(200,320))
113toggle.add(3)114toggle.add(3)
114115
116=======
117# Selectable Label
118label1 = sgc.widgets.Label(label="Your confirmation code is:AD14-F4GH-SW33",
119 pos=(160,320), selectable=True)
120label1.add()
121>>>>>>> MERGE-SOURCE
115while True:122while True:
116 time = clock.tick(30)123 time = clock.tick(30)
117 for event in pygame.event.get():124 for event in pygame.event.get():
118125
=== modified file 'sgc/widgets/label.py'
--- sgc/widgets/label.py 2012-03-26 13:32:19 +0000
+++ sgc/widgets/label.py 2012-04-02 10:33:19 +0000
@@ -1,73 +1,148 @@
1#!/usr/bin/env python1#!/usr/bin/env python
22
3# Copyright (C) 2010-2012 Sam Bull3# Copyright (C) 2010-2012 Michael Rochester
44
5"""5"""
6Label to display information to the user.6Label to display information to the user.
77
8"""8"""
99
10import pygame.mouse
11from pygame.locals import *
12
10from _locals import *13from _locals import *
11from base_widget import Simple14from base_widget import Simple
1215
16
13class Label(Simple):17class Label(Simple):
1418
15 """19 """
16 Label20 Label
1721
18 Attributes:22 Attributes:
19 text: Text displayed in label. Can be assigned as a shortcut for23 label: ``str`` displayed in label. Can be assigned as a shortcut for
20 ``config(text=)`` with no second paramenter.24 ``config(label=)`` with no second paramenter.
21
22 """25 """
2326 _settings_default = {"label": "", "label_col": Font.col,
24 _settings_default = {"text": "", "color": Font.col, "font": Font["widget"]}27 "font": Font["widget"],
28 "col_selection": (118, 45, 215),
29 "selectable": False}
2530
26 def _config(self, **kwargs):31 def _config(self, **kwargs):
27 """32 """
28 text: Either ``str`` containing text to be displayed or33 label: Either ``str`` containing text to be displayed.
29 ``tuple`` containing two strings. First string is text to34 label_col: ``tuple`` (r,g,b) Text colour.
30 be displayed, second string is rect attribute to be used
31 for position. Defaults to 'topleft' if not passing a tuple.
32 color: ``tuple`` (r,g,b) Text colour.
33 font: Font object the label will render with.35 font: Font object the label will render with.
3436 selectable ``bool`` if true, the text will be selectable.
37 col_selection ``tuple`` (r,g,b) colour of selection box.
35 """38 """
36 if "text" in kwargs:39 if "label" in kwargs:
37 if isinstance(kwargs["text"], str):40 self._settings["label"] = [kwargs["label"],None]
38 self._settings["text"] = kwargs["text"]41 if "label_col" in kwargs:
39 else:42 self._settings["label_col"] = kwargs["label_col"]
40 self._settings["text"] = kwargs["text"][0]
41 self._temp_pos = kwargs["text"][1]
42 if "color" in kwargs:
43 self._settings["color"] = kwargs["color"]
44 if "font" in kwargs:43 if "font" in kwargs:
45 self._settings["font"] = kwargs["font"]44 self._settings["font"] = kwargs["font"]
45 if "selectable" in kwargs:
46 self._settings["selectable"] = kwargs["selectable"]
47 self._can_focus = True
48 if "col_selection" in kwargs:
49 self._settings["col_selection"] = kwargs["col_selection"]
4650
51 strings = pygame.cursors.textmarker_strings
52 cursor = pygame.cursors.compile(strings)
53 size = (len(strings[0]), len(strings))
54 hotspot = (size[0]/2, size[1]/2)
55 self.mouse = (cursor, size, hotspot,pygame.mouse.get_cursor())
56 self._draw()
57
47 def _draw(self, draw):58 def _draw(self, draw):
48 if hasattr(self, "_temp_pos"):59 label = Simple(self._settings["font"].render\
49 pos = getattr(self.rect, self._temp_pos)60 (self._settings["label"][0], False,
50 elif hasattr(self, "image"):61 self._settings["label_col"]))
51 pos = self.rect.topleft62
63 self._settings["label"][1] = label
64
65 if not hasattr(self, "image"):
66 self._create_base_images((label.rect.w+6, label.rect.h))
67
68 self._images["image"].fill(0)
69
70 if self._settings["selectable"]:
71 self.char_width = [3]
72 for c in self._settings["label"][0]:
73 char = Simple(self._settings["font"].render\
74 (c, True,self._settings["label_col"]))
75 self.char_width.append(self.char_width[-1] + char.rect.w)
76
77 def _event(self, event):
78 if event.type == MOUSEBUTTONDOWN and event.button == 1:
79 self.mouse_x = event.pos[0] - self.pos_abs[0]
80 self.selected = None
81 for x in self.char_width:
82 if x > self.mouse_x and self.selected is None:
83 self.selected = [self.char_width.index(x)-1,
84 self.char_width.index(x)-1]
85
86 elif event.type == MOUSEMOTION and event.buttons == (1,0,0):
87 self.mouse_x = event.pos[0] - self.pos_abs[0]
88 for x in self.char_width:
89 if x > self.mouse_x and\
90 self.char_width[self.char_width.index(x)-1] < self.mouse_x:
91 self.selected[1] = self.char_width.index(x)\
92 if self.selected[1] >\
93 self.selected[0] else\
94 self.char_width.index(x) - 1
95 elif event.type == KEYDOWN:
96 if event.unicode:
97 if event.mod & KMOD_CTRL:
98 if event.key == K_a: # Select all
99 self.selected = [0,-1]
100 elif event.key == K_c and\
101 self.selected is not None: # Copy
102 string = "".join(self._settings["label"][0]\
103 [self.selected[0]:self.selected[1]])
104 try:
105 pygame.scrap.put(SCRAP_TEXT, string)
106 except pygame.error:
107 print "Please run 'pygame.scrap.init()'" \
108 " to use the clipboard."
109
110 def update(self, time):
111 """Update the Label each frame."""
112 if self.rect_abs.collidepoint(pygame.mouse.get_pos()):
113 pygame.mouse.set_cursor(self.mouse[1],
114 self.mouse[2],
115 *self.mouse[0])
52 else:116 else:
53 pos = None117 pygame.mouse.set_cursor(*self.mouse[3])
54118 draw = self.get_draw()
55 text = self._settings["font"].render(self._settings["text"], True,119 self._images["image"].blit(self._settings["label"][1].image, (3,0))
56 self._settings["color"])120 self.image = self._images["image"].copy()
57 self._create_base_images(text)121 if self.has_focus() and self._settings["selectable"]\
58122 and self.selected is not None:
59 # Copy position attribute over123 # Semi-transparent selection rectangle
60 if pos is not None:124 w=abs(self.char_width[self.selected[1]] -\
61 if hasattr(self, "_temp_pos"):125 self.char_width[self.selected[0]])
62 setattr(self.rect, self._temp_pos, pos)126 selection = Simple((w, self.rect.h-2))
63 del self._temp_pos127 selection.pos = (self.char_width[self.selected[0]], 1)
64 else:128 selection.image.fill(self._settings["col_selection"])
65 self.rect.topleft = pos129 selection.image.set_alpha(100)
130 # Border around selection rectangle
131 selection_b = Simple((selection.rect.w+1,\
132 selection.rect.h+1))
133 draw.rect(selection_b.image, self._settings["col_selection"],
134 selection_b.rect, 1)
135 if self.selected[0] < self.selected[1]or self.selected[0] == 0:
136 pos = (selection.rect.x - 1, selection.rect.y)
137 else:
138 pos = (selection.rect.x - w - 1, selection.rect.y)
139 self.image.blit(selection.image, pos)
140 self.image.blit(selection_b.image, (pos[0]-1, pos[1]-1))
66141
67 @property142 @property
68 def text(self):143 def label(self):
69 return self._settings["text"]144 return self._settings["label"]
70 @text.setter145 @label.setter
71 def text(self, value):146 def label(self, value):
72 self._settings["text"] = value147 self._settings["label"] = value
73 self._draw()148 self._draw()

Subscribers

People subscribed via source and target branches