Exemple #1
0
class Board(object):
    def __init__(self, w=W_DEFAULT, h=H_DEFAULT, suffix=""):
        self.node = DrawNode(suffix)
        self.image = Draw(w, h)
        self.okey()

    def okey(self):
        w, h = self.size()
        if w < 0 or h < 0:
            print("Error: Negative Image Size " + str(w) + "x" + str(h))
            self.close()
            exit(1)

    def clearBoard(self):
        self.image.clear()

    def addTrace(self):
        self.image.addTrace()

    def addPoint(self, x, y):
        self.image.addPoint(x, y)

    def size(self):
        return [self.width(), self.height()]

    def width(self):
        return self.image.W

    def height(self):
        return self.image.H

    def send(self):
        self.node.publishImage(self.image.getImgDraw())

    def isOkROS(self):
        return not self.node.isClosed()

    def close(self):
        self.clearBoard()
        self.node.close()
Exemple #2
0
class Reader(Dialog):

    PUNCT_MARKS = (",", ".", "-", ":", "?", "!")

    def __init__(self, cbk, book_title, book_path, last_pos):
        menu = [(u"Start", self.reader_start), (u"Pause", self.reader_pause),
                (u"Close book", self.close_reader)]

        self.book_title = book_title
        self.book_path = book_path
        self.pause = False
        self.currword_idx = last_pos
        self.wpm = 250
        self.init_delay()
        self.words = []
        self.words_num = 0
        self.parse_words()

        self.old_orientation = appuifw.app.orientation
        appuifw.app.orientation = "landscape"
        self.draw = Draw()

        Dialog.__init__(self, cbk, self.book_title, self.draw.canvas, menu,
                        self.close_reader)

        self.reader_pause()

    def init_delay(self):
        self.word_delay = 60. / self.wpm
        self.punct_delay = self.word_delay * 2

    def parse_words(self):
        """ Parse words from book into self.word """
        book_ext = self.book_path.split(".")[-1]

        if book_ext == "txt":
            self.parse_txt()
        elif book_ext == "fb2":
            self.parse_fb2()

        self.words_num = len(self.words) - 1

    def parse_txt(self):
        book_file = codecs.open(self.book_path, "r", "utf-8")

        for line in book_file:
            for w in line.split():
                self.words.append(w)

        book_file.close()

    def parse_fb2(self):
        fb2 = FB2Parser(self.book_path)
        self.words = fb2.parse_words()

    def reader_start(self):
        self.pause = False
        self.draw.canvas.bind(key_codes.EScancode5, self.reader_pause)
        # disable rewind when reading
        self.draw.canvas.bind(key_codes.EScancode6, lambda: None)
        self.draw.canvas.bind(key_codes.EScancode4, lambda: None)
        self.draw.canvas.bind(key_codes.EScancode7, lambda: None)
        self.draw.canvas.bind(key_codes.EScancode9, lambda: None)
        self.draw.canvas.bind(key_codes.EScancodeStar, lambda: None)
        self.draw.canvas.bind(key_codes.EScancodeHash, lambda: None)
        self.start_reading()

    def reader_pause(self):
        self.pause = True
        self.draw.canvas.bind(key_codes.EScancode5, self.reader_start)
        # enable rewind when pause
        self.draw.canvas.bind(key_codes.EScancode6, lambda: self.rewind(-1))
        self.draw.canvas.bind(key_codes.EScancode4, lambda: self.rewind(1))
        self.draw.canvas.bind(key_codes.EScancode7, lambda: self.rewind(10))
        self.draw.canvas.bind(key_codes.EScancode9, lambda: self.rewind(-10))
        self.draw.canvas.bind(key_codes.EScancodeStar, self.inc_wpm)
        # EScancodeHash doesn't work?
        self.draw.canvas.bind(key_codes.EKeyHash, self.dec_wpm)
        self.display_scene()

    def inc_wpm(self):
        new_wpm = self.wpm + 50
        if new_wpm <= 1000:
            self.wpm = new_wpm
            self.init_delay()
            self.display_scene()

    def dec_wpm(self):
        new_wpm = self.wpm - 50
        if new_wpm >= 50:
            self.wpm = new_wpm
            self.init_delay()
            self.display_scene()

    def rewind(self, offset):
        new_idx = self.currword_idx + offset

        if new_idx >= 0 and new_idx <= self.words_num:
            self.currword_idx = new_idx
        elif new_idx < 0:
            self.currword_idx = 0
        elif new_idx > self.words_num:
            self.currword_idx = self.words_num

        self.display_scene()

    def display_scene(self):
        word = self.words[self.currword_idx]
        best_letter = self.best_letter_pos(word)

        self.draw.clear()
        self.draw.word(word, best_letter)
        if self.pause:
            self.draw.info(self.wpm)
        self.draw.redraw()

    def best_letter_pos(self, word):
        """ Primitive algorithm for defining focus letter """
        word_len = len(word)
        best_letter = 0

        if word_len == 1:
            best_letter = 0
        elif word_len >= 2 and word_len <= 5:
            best_letter = 1
        elif word_len >= 6 and word_len <= 9:
            best_letter = 2
        elif word_len >= 10 and word_len <= 13:
            best_letter = 3
        else:
            best_letter = 4

        return best_letter

    def check_punct(self, word):
        if word[-1] in Reader.PUNCT_MARKS:
            return True
        return False

    def start_reading(self):
        offset = self.currword_idx
        last_idx = len(self.words) - 1

        for i in range(offset, last_idx):
            # when user press pause or exit from reader
            if self.pause or self.cancel:
                self.pause = False
                break

            self.currword_idx += 1
            self.display_scene()

            if self.check_punct(self.words[self.currword_idx]):
                e32.ao_sleep(self.punct_delay)
            else:
                e32.ao_sleep(self.word_delay)

        self.reader_pause()

    def close_reader(self):
        del self.words[:]
        appuifw.app.orientation = self.old_orientation
        self.cancel_app()
import turtle
from draw import Draw

window = turtle.Screen()
canvas = Draw()

canvas.draw_triangle()

canvas.clear()

canvas.draw_rectangle()

canvas.clear()

canvas.draw_pixel("red")

canvas.clear()

canvas.draw_centered_line(400)

canvas.clear()

canvas.draw_centered_circle(100)

window.mainloop()