aboutsummaryrefslogblamecommitdiff
path: root/helpers/mapping.py
blob: 58aaf3d698461fed22e2913a5ffdb757e33dc597 (plain) (tree)
1
2
3
4
5
6
7
8
9








                          








                      


















                                                   
                                                       
                                                      
                                                       



                                                      
                                                       
                                                      

                                                       



















                                                                     
                                                                                  
 
                                                                                     










                                                    
                                                     























                                                                                        
                                                                           
























                                                                                        







                                                     






                                                         
                                                                                                                   





































                                                     
import threading
import pygame
from .key import *

class Mapping:
    WIDTH  = 903
    HEIGHT = 298
    SIZE   = WIDTH, HEIGHT

    ROW_POSITIONS = {
        'first':    0,
        'second':  50,
        'third':  100,
        'fourth': 150,
        'fifth':  200,
        'sixth':  250,
    }

    KEYS = [
        (pygame.K_ESCAPE, 'ESC', 'first',   0, {}),

        (pygame.K_F1,     'F1',  'first', 100, {}),
        (pygame.K_F2,     'F2',  'first', 150, {}),
        (pygame.K_F3,     'F3',  'first', 200, {}),
        (pygame.K_F4,     'F4',  'first', 250, {}),

        (pygame.K_F5,     'F5',  'first', 325, {}),
        (pygame.K_F6,     'F6',  'first', 375, {}),
        (pygame.K_F7,     'F7',  'first', 425, {}),
        (pygame.K_F8,     'F8',  'first', 475, {}),

        (pygame.K_F9,     'F9',  'first', 550, {}),
        (pygame.K_F10,    'F10', 'first', 600, {}),
        (pygame.K_F11,    'F11', 'first', 650, {}),
        (pygame.K_F12,    'F12', 'first', 700, {}),


        (178,                 '²', 'second',   0, {}),
        (pygame.K_AMPERSAND,  '&', 'second',  50, {}),
        (233,                 'é', 'second', 100, {}),
        (pygame.K_QUOTEDBL,   '"', 'second', 150, {}),
        (pygame.K_QUOTE,      "'", 'second', 200, {}),
        (pygame.K_LEFTPAREN,  '(', 'second', 250, {}),
        (pygame.K_MINUS,      '-', 'second', 300, {}),
        (232,                 'è', 'second', 350, {}),
        (pygame.K_UNDERSCORE, '_', 'second', 400, {}),
        (231,                 'ç', 'second', 450, {}),
        (224,                 'à', 'second', 500, {}),
        (pygame.K_RIGHTPAREN, ')', 'second', 550, {}),
        (pygame.K_EQUALS,     '=', 'second', 600, {}),

        (pygame.K_BACKSPACE,  '<-', 'second', 650, { 'width': 98 }),


        (pygame.K_TAB,        'tab', 'third',   0, { 'width' : 73 }),
        (pygame.K_a,          'a',   'third',  75, {}),
        (pygame.K_z,          'z',   'third', 125, {}),
        (pygame.K_e,          'e',   'third', 175, {}),
        (pygame.K_r,          'r',   'third', 225, {}),
        (pygame.K_t,          't',   'third', 275, {}),
        (pygame.K_y,          'y',   'third', 325, {}),
        (pygame.K_u,          'u',   'third', 375, {}),
        (pygame.K_i,          'i',   'third', 425, {}),
        (pygame.K_o,          'o',   'third', 475, {}),
        (pygame.K_p,          'p',   'third', 525, {}),
        (pygame.K_CARET,      '^',   'third', 575, {}),
        (pygame.K_DOLLAR,     '$',   'third', 625, {}),

        (pygame.K_RETURN,   'Enter', 'third', 692, { 'width': 56, 'height': 98 }),

        (pygame.K_CAPSLOCK, 'CAPS', 'fourth',  0, { 'width': 88, 'disabled': True }),

        (pygame.K_q,        'q', 'fourth',  90, {}),
        (pygame.K_s,        's', 'fourth', 140, {}),
        (pygame.K_d,        'd', 'fourth', 190, {}),
        (pygame.K_f,        'f', 'fourth', 240, {}),
        (pygame.K_g,        'g', 'fourth', 290, {}),
        (pygame.K_h,        'h', 'fourth', 340, {}),
        (pygame.K_j,        'j', 'fourth', 390, {}),
        (pygame.K_k,        'k', 'fourth', 440, {}),
        (pygame.K_l,        'l', 'fourth', 490, {}),
        (pygame.K_m,        'm', 'fourth', 540, {}),
        (249,               'ù', 'fourth', 590, {}),
        (pygame.K_ASTERISK, '*', 'fourth', 640, {}),


        (pygame.K_LSHIFT, 'LShift', 'fifth', 0, { 'width': 63, 'disabled': True }),

        (pygame.K_LESS,      '<', 'fifth',  65, {}),
        (pygame.K_w,         'w', 'fifth', 115, {}),
        (pygame.K_x,         'x', 'fifth', 165, {}),
        (pygame.K_c,         'c', 'fifth', 215, {}),
        (pygame.K_v,         'v', 'fifth', 265, {}),
        (pygame.K_b,         'b', 'fifth', 315, {}),
        (pygame.K_n,         'n', 'fifth', 365, {}),
        (pygame.K_COMMA,     ',', 'fifth', 415, {}),
        (pygame.K_SEMICOLON, ';', 'fifth', 465, {}),
        (pygame.K_COLON,     ':', 'fifth', 515, {}),
        (pygame.K_EXCLAIM,   '!', 'fifth', 565, {}),

        (pygame.K_RSHIFT, 'RShift', 'fifth', 615, { 'width': 133, 'disabled': True }),

        (pygame.K_LCTRL,    'LCtrl',   'sixth',   0, { 'width': 63, 'disabled': True }),
        (pygame.K_LSUPER,   'LSuper',  'sixth', 115, { 'disabled': True }),
        (pygame.K_LALT,     'LAlt',    'sixth', 165, { 'disabled': True }),
        (pygame.K_SPACE,    'Espace',  'sixth', 215, { 'width': 248 }),
        (pygame.K_MODE,     'AltGr',   'sixth', 465, { 'disabled': True }),
        (314,               'Compose', 'sixth', 515, { 'disabled': True }),
        (pygame.K_RCTRL,    'RCtrl',   'sixth', 565, { 'width': 63, 'disabled': True }),


        (pygame.K_INSERT,   'ins',  'second', 755, {}),
        (pygame.K_HOME,     'home', 'second', 805, {}),
        (pygame.K_PAGEUP,   'pg_u', 'second', 855, {}),
        (pygame.K_DELETE,   'del',  'third',  755, {}),
        (pygame.K_END,      'end',  'third',  805, {}),
        (pygame.K_PAGEDOWN, 'pg_d', 'third',  855, {}),


        (pygame.K_UP,       'up',    'fifth',  805, {}),
        (pygame.K_DOWN,     'down',  'sixth',  805, {}),
        (pygame.K_LEFT,     'left',  'sixth',  755, {}),
        (pygame.K_RIGHT,    'right', 'sixth',  855, {}),
    ]

    def __init__(self, screen, draw_lock):
        self.draw_lock = draw_lock
        self.screen = screen
        self.background = pygame.Surface(self.SIZE).convert()
        self.background.fill((250, 250, 250))
        self.keys = {}
        self.running = []
        for key in self.KEYS:
            if key[2] in self.ROW_POSITIONS:
                position = self.ROW_POSITIONS[key[2]]
            else:
                position = key[2]
            self.keys[key[0]] = Key(self,
                    self.draw_lock,
                    key[0], key[1], position, key[3],
                    **key[4])

    def draw(self):
        for key_name in self.keys:
            key = self.keys[key_name]
            should_redraw_key = key.draw(self.background)

            if should_redraw_key:
                threading.Thread(name = "MSPollRedraw", target = key.poll_redraw, args = [self.background]).start()
        self.blit()

    def blit(self):
        self.draw_lock.acquire()
        self.screen.blit(self.background, (5, 5))
        pygame.display.flip()
        self.draw_lock.release()

    def find_by_key_num(self, key_num):
        if key_num in self.keys:
            return self.keys[key_num]
        return None

    def find_by_collidepoint(self, position):
        for key in self.keys:
            if self.keys[key].collidepoint(position):
                return self.keys[key]
        return None

    def find_by_unicode(self, key_sym):
        for key in self.keys:
            if self.keys[key].key_sym == key_sym:
                return self.keys[key]
        return None

    def stop_all_running(self):
        self.running = []

    def start_running(self, key, start_time):
        self.running.append((key, start_time))

    def keep_running(self, key, start_time):
        return (key, start_time) in self.running

    def finished_running(self, key, start_time):
        if (key, start_time) in self.running:
            self.running.remove((key, start_time))