Module albow.text.TextScreen
Source code
from pygame.locals import *
from albow.core.ui.Screen import Screen
from albow.themes.FontProperty import FontProperty
from albow.widgets.Button import Button
from albow.text.Page import Page
from albow.core.ResourceUtility import ResourceUtility
from albow.vectors import add
from albow.vectors import maximum
class TextScreen(Screen):
bg_color = (0, 0, 0)
fg_color = (255, 255, 255)
border = 20
heading_font = FontProperty('heading_font')
button_font = FontProperty('button_font')
def __init__(self, shell, filename, **kwds):
""""""
text = ResourceUtility.get_text(filename)
text_pages = text.split("\nPAGE\n")
pages = []
page_size = (0, 0)
for text_page in text_pages:
lines = text_page.strip().split("\n")
page = Page(self, lines[0], lines[1:])
pages.append(page)
page_size = maximum(page_size, page.size)
self.pages = pages
bf = self.button_font
b1 = Button("Prev Page", font=bf, action=self.prev_page)
b2 = Button("Menu", font=bf, action=self.go_back)
b3 = Button("Next Page", font=bf, action=self.next_page)
b = self.margin
# page_rect = Rect((b, b), page_size)
width_height = list(map(lambda x: x, page_size))
page_rect = Rect((b, b),(width_height[0],width_height[1]))
gap = (0, 18)
#
# Python 3 update
#
# In Python 3 maps and list are not auto-converted
#
# b1.topleft = add(page_rect.bottomleft, gap)
# b2.midtop = add(page_rect.midbottom, gap)
# b3.topright = add(page_rect.bottomright, gap)
b1.topleft = list(add(page_rect.bottomleft, gap))
b2.midtop = list(add(page_rect.midbottom, gap))
b3.topright = list(add(page_rect.bottomright, gap))
# Screen.__init__(self, shell, **kwds)
super().__init__(shell, **kwds)
#
# Python 3 update
#
# In Python 3 maps and list are not auto-converted
#
# self.size = add(b3.bottomright, (b, b))
self.size = list(add(b3.bottomright, (b, b)))
self.add(b1)
self.add(b2)
self.add(b3)
self.prev_button = b1
self.next_button = b3
self.set_current_page(0)
def draw(self, surface):
b = self.margin
self.pages[self.current_page].draw(surface, self.fg_color, (b, b))
def at_first_page(self):
return self.current_page == 0
def at_last_page(self):
return self.current_page == len(self.pages) - 1
def set_current_page(self, n):
self.current_page = n
self.prev_button.enabled = not self.at_first_page()
self.next_button.enabled = not self.at_last_page()
def prev_page(self):
if not self.at_first_page():
self.set_current_page(self.current_page - 1)
def next_page(self):
if not self.at_last_page():
self.set_current_page(self.current_page + 1)
def go_back(self):
self.parent.show_menu()
Classes
class TextScreen (shell, filename, **kwds)
-
Screen is an abstract base class for widgets to be uses as screens by a Shell.
Source code
class TextScreen(Screen): bg_color = (0, 0, 0) fg_color = (255, 255, 255) border = 20 heading_font = FontProperty('heading_font') button_font = FontProperty('button_font') def __init__(self, shell, filename, **kwds): """""" text = ResourceUtility.get_text(filename) text_pages = text.split("\nPAGE\n") pages = [] page_size = (0, 0) for text_page in text_pages: lines = text_page.strip().split("\n") page = Page(self, lines[0], lines[1:]) pages.append(page) page_size = maximum(page_size, page.size) self.pages = pages bf = self.button_font b1 = Button("Prev Page", font=bf, action=self.prev_page) b2 = Button("Menu", font=bf, action=self.go_back) b3 = Button("Next Page", font=bf, action=self.next_page) b = self.margin # page_rect = Rect((b, b), page_size) width_height = list(map(lambda x: x, page_size)) page_rect = Rect((b, b),(width_height[0],width_height[1])) gap = (0, 18) # # Python 3 update # # In Python 3 maps and list are not auto-converted # # b1.topleft = add(page_rect.bottomleft, gap) # b2.midtop = add(page_rect.midbottom, gap) # b3.topright = add(page_rect.bottomright, gap) b1.topleft = list(add(page_rect.bottomleft, gap)) b2.midtop = list(add(page_rect.midbottom, gap)) b3.topright = list(add(page_rect.bottomright, gap)) # Screen.__init__(self, shell, **kwds) super().__init__(shell, **kwds) # # Python 3 update # # In Python 3 maps and list are not auto-converted # # self.size = add(b3.bottomright, (b, b)) self.size = list(add(b3.bottomright, (b, b))) self.add(b1) self.add(b2) self.add(b3) self.prev_button = b1 self.next_button = b3 self.set_current_page(0) def draw(self, surface): b = self.margin self.pages[self.current_page].draw(surface, self.fg_color, (b, b)) def at_first_page(self): return self.current_page == 0 def at_last_page(self): return self.current_page == len(self.pages) - 1 def set_current_page(self, n): self.current_page = n self.prev_button.enabled = not self.at_first_page() self.next_button.enabled = not self.at_last_page() def prev_page(self): if not self.at_first_page(): self.set_current_page(self.current_page - 1) def next_page(self): if not self.at_last_page(): self.set_current_page(self.current_page + 1) def go_back(self): self.parent.show_menu()
Ancestors
Class variables
var border
Instance variables
-
The FontProperty class is a property descriptor used for defining theme properties whose values are font objects.
Rather than an actual font object, the corresponding attribute of a Theme object should contain a tuple (size, filename) specifying the font. The first time the font property is accessed for a given instance, the FontProperty descriptor loads the font using get_font and caches the resulting font object.
Example
class DramaticScene(Widget): villain_gloat_font = FontProperty('villain_gloat_font') from albow.themes.Theme import themeRoot themeRoot.DramaticScene = theme.Theme('DramaticScene') themeRoot.DramaticScene.villain_gloat_font = (27, "EvilLaughter.ttf")
var heading_font
-
The FontProperty class is a property descriptor used for defining theme properties whose values are font objects.
Rather than an actual font object, the corresponding attribute of a Theme object should contain a tuple (size, filename) specifying the font. The first time the font property is accessed for a given instance, the FontProperty descriptor loads the font using get_font and caches the resulting font object.
Example
class DramaticScene(Widget): villain_gloat_font = FontProperty('villain_gloat_font') from albow.themes.Theme import themeRoot themeRoot.DramaticScene = theme.Theme('DramaticScene') themeRoot.DramaticScene.villain_gloat_font = (27, "EvilLaughter.ttf")
Methods
def at_first_page(self)
-
Source code
def at_first_page(self): return self.current_page == 0
def at_last_page(self)
-
Source code
def at_last_page(self): return self.current_page == len(self.pages) - 1
def go_back(self)
-
Source code
def go_back(self): self.parent.show_menu()
def next_page(self)
-
Source code
def next_page(self): if not self.at_last_page(): self.set_current_page(self.current_page + 1)
def prev_page(self)
-
Source code
def prev_page(self): if not self.at_first_page(): self.set_current_page(self.current_page - 1)
def set_current_page(self, n)
-
Source code
def set_current_page(self, n): self.current_page = n self.prev_button.enabled = not self.at_first_page() self.next_button.enabled = not self.at_last_page()
Inherited members
Screen
:add
add_anchor
add_centered
anchor
attention_lost
augment_mouse_event
begin_frame
bg_color
bg_image
border_color
border_width
call_handler
call_parent_handler
defer_drawing
dismiss
draw
draw_over
enter_screen
fg_color
focus
focus_switch
font
get_cursor
get_focus
get_margin_rect
get_root
get_top_widget
get_visible
global_to_local
has_focus
inherited
invalidate
is_gl_container
key_down
key_up
leave_screen
local_to_global
margin
menu_bar
parent
parent_resized
present
rect
relative_mode
remove
remove_anchor
resized
scale_bg
sel_color
set_parent
set_size_for_text
tab_stop
timer_event
visible