示例#1
0
 def new_subcat(self, subcat):
     tb = ui.Textbox(subcat, tsize=40, underline=True)
     space_width = tb.get_text_rect(' ').width
     spaces = ((self.popup.rect.width - tb.rect.width) // space_width) - 1
     tb.set_message(subcat + (' ' * spaces))
     tb = tb.to_static()
     self.node_labels[subcat] = tb
示例#2
0
def log_menu(name, data):
    objects = []

    title = ui.Textbox.static_textbox(name, tsize=35)
    title.rect.topleft = (30, 20)
    objects.append(title)

    info_rect = pg.Rect(0, 0, 400, 200)
    info_surf = pg.Surface(info_rect.size).convert()
    pg.draw.rect(info_surf, (255, 255, 255),
                 info_rect,
                 width=3,
                 border_radius=10)
    info_rect.topleft = (30, 150)
    i = ui.Image(info_surf)
    i.rect = info_rect.copy()
    objects.append(i)

    label = ui.Textbox.static_textbox('info:', tsize=20)
    label.rect.bottomleft = info_rect.topleft
    label.rect.x += 10
    label.rect.y -= 5
    objects.append(label)

    node_info = ui.Textbox(data['info'])
    node_info.fit_text(info_rect.inflate(-10, -10), tsize=20, allignment='l')
    node_info.rect.center = info_rect.center
    objects.append(node_info)

    key_tb = ui.Textbox.static_textbox('key')
    key_tb.rect.topleft = (width // 2, 40)
    objects.append(key_tb)

    value_tb = ui.Textbox.static_textbox('return value')
    value_tb.rect.x = key_tb.rect.right + 30
    value_tb.rect.y = key_tb.rect.y
    objects.append(value_tb)

    value_rect = value_tb.rect.inflate(150, 50)

    y = value_tb.rect.bottom + 20

    for key, value in data['data'].items():
        k = ui.Textbox.static_textbox(key)
        k.rect.right = key_tb.rect.right
        k.rect.y = y
        objects.append(k)

        v = ui.Textbox(value)
        v.fit_text(value_rect, allignment='l')
        v.crop_fitted()
        v.rect.left = value_tb.rect.left
        v.rect.y = y
        objects.append(v)

        y = v.rect.bottom + 5

    b = ui.Button.text_button('back', color2=(0, 200, 0), tag='break')
    b.rect.centerx = width // 2
    b.rect.bottom = height - 10
    objects.append(b)

    return objects
示例#3
0
def error_screen(errors):
    objects = []

    body = pg.Rect(0, 0, 500, 300)
    upper = pg.Rect(0, 0, 500, 250)
    lower = pg.Rect(0, 100, 500, 50)
    outline = pg.Rect(0, 0, body.width + 10, body.height + 10)

    s = pg.Surface(outline.size).convert()
    pg.draw.rect(s, (255, 255, 255), outline, border_radius=10)
    body.center = outline.center
    pg.draw.rect(s, (100, 100, 100), body, border_radius=10)
    lower.bottomleft = body.bottomleft
    pg.draw.rect(s, (50, 50, 50),
                 lower,
                 border_bottom_right_radius=10,
                 border_bottom_left_radius=10)
    i = ui.Image(s)
    i.rect.center = (width // 2, height // 2)
    objects.append(i)

    body.center = (width // 2, height // 2)
    upper.topleft = body.topleft
    lower.bottomleft = body.bottomleft

    num = len(errors)
    if num:
        text_rect = pg.Rect(0, 0, 200, 25)
        text_rect.center = upper.center

        if len(errors) < 6:
            message = f"{num} error{'s' if num > 1 else ''} found:"
        else:
            message = '5+ errors found:'

        t = ui.Textbox(message, olcolor=(0, 0, 0))
        t.fit_text(text_rect, tsize=25, allignment='l')
        t.rect.topleft = upper.topleft
        t.rect.x += 10
        t.rect.y += 10
        objects.append(t)

        x = t.rect.left
        y = t.rect.bottom + 10
        text_rect = pg.Rect(0, 0, body.width, 30)

        for err in errors[:5]:
            t = ui.Textbox(err, olcolor=(0, 0, 0))
            t.fit_text(text_rect, tsize=25, allignment='l')
            t.rect.topleft = (x, y)
            objects.append(t)

            y += text_rect.height + 10
            rx = t.rect.left - i.rect.left
            ry = t.rect.top - i.rect.top
            pg.draw.line(i.image, (0, 0, 0), (rx, ry + t.rect.height + 5),
                         (i.rect.width - rx, ry + t.rect.height + 5),
                         width=2)

    else:
        text_rect = pg.Rect(0, 0, upper.width - 15, upper.height - 15)
        text_rect.center = upper.center
        message = 'all tests passed, no errors found!'
        t = ui.Textbox(message, olcolor=(0, 0, 0))
        t.fit_text(text_rect, tsize=25)
        t.rect.center = text_rect.center
        objects.append(t)

    b = ui.Button.text_button('ok', color2=(0, 200, 0), tag='break')
    b.rect.center = lower.center
    objects.append(b)

    return objects
示例#4
0
def info_menu(n):
    objects = []
    n = type(n)(None, -1)
    n.set_enabled(False)

    with open('data/node_info.json', 'r') as f:
        data = json.load(f)
    data = data.get(n.name, {})

    title = ui.Textbox(n.get_name(), tsize=35)
    title.rect.topleft = (30, 20)
    objects.append(title)

    info_rect = pg.Rect(0, 0, 400, 200)
    info_surf = pg.Surface(info_rect.size).convert()
    pg.draw.rect(info_surf, (255, 255, 255),
                 info_rect,
                 width=3,
                 border_radius=10)
    info_rect.topleft = (30, 150)
    i = ui.Image(info_surf)
    i.rect = info_rect.copy()
    objects.append(i)

    label = ui.Textbox('info:', tsize=20)
    label.rect.bottomleft = info_rect.topleft
    label.rect.x += 10
    label.rect.y -= 5
    objects.append(label)

    node_info = ui.Textbox(data.get('info', ''))
    node_info.fit_text(info_rect.inflate(-10, -10), tsize=20, allignment='l')
    node_info.rect.center = info_rect.center

    if data.get('tips'):

        node_tips = ui.Textbox(data['tips'])
        node_tips.fit_text(info_rect.inflate(-10, -10),
                           tsize=20,
                           allignment='l')
        node_tips.rect.center = info_rect.center

        node_text = ui.Image(node_info.image)
        node_text.rect.center = info_rect.center
        objects.append(node_text)

        def update_info():
            if label.get_message() == 'info:':
                label.set_message('tips:')
                node_text.image = node_tips.image
            else:
                label.set_message('info:')
                node_text.image = node_info.image

        b = ui.Button.text_button('>',
                                  padding=(15, 15),
                                  func=update_info,
                                  border_radius=20)
        b.rect.midleft = info_rect.midright
        objects.append(b)

    else:
        objects.append(node_info)

    port_rect = pg.Rect(0, 0, 300, 200)
    w, h = port_rect.size
    port_surf = pg.Surface(port_rect.size).convert()
    port_surf.fill((1, 1, 1))
    port_info_rect = pg.Rect(5, 20, w - 10, h - 25)
    pg.draw.rect(port_surf, (0, 0, 0), port_info_rect)
    port_surf.set_colorkey((1, 1, 1))
    port_box = ui.Image(port_surf, bgcolor=(100, 100, 100))
    port_box.rect = port_rect.copy()
    port_box.rect.topleft = (650, 100)
    objects.append(port_box)

    port_label_rect = pg.Rect(0, 0, w, 20)
    port_label_rect.midtop = port_box.rect.midtop
    port_info_rect.midtop = port_label_rect.midbottom
    port_info_rect.inflate_ip(-10, -5)

    port_data = []
    port_index = [0]
    for p in n.ports:
        info_text = data.get('ports', {}).get(str(p.port))
        if info_text is None:
            continue
        d = {'port': p, 'color': p.get_color(p.types)}
        p_label = ui.Textbox(f'Port {p.port}', fgcolor=(0, 0, 0))
        p_label.fit_text(port_label_rect, tsize=20, allignment='l')
        d['label'] = p_label.image
        p_info = ui.Textbox(info_text)
        p_info.fit_text(port_info_rect, tsize=15, allignment='l')
        d['info'] = p_info.image
        port_data.append(d)

    n.rect.midtop = port_box.rect.midbottom
    n.rect.y += 100
    n.set_port_pos()
    objects.append(n)

    if port_data:

        port_label = ui.Image(port_data[0]['label'])
        port_label.rect.center = port_label_rect.center
        port_label.rect.x += 5
        objects.append(port_label)
        port_info = ui.Image(port_data[0]['info'])
        port_info.rect.center = port_info_rect.center
        objects.append(port_info)
        port_box.set_background(port_data[0]['color'])

        def update_points(port):
            start = port.rect.center
            end = port_box.rect.midbottom

            xs, ys = start
            xe, ye = end

            if port.port > 0:
                return (start, (xs - 20, ys), (xs - 20, n.rect.top - 50),
                        (port_box.rect.centerx, n.rect.top - 50), end)
            else:
                return (start, (xs + 20, ys), (xs + 20, n.rect.top - 50),
                        (port_box.rect.centerx, n.rect.top - 50), end)

        points = update_points(port_data[0]['port'])
        o = Draw_Lines(points, color=port_data[0]['color'])
        objects.append(o)

        if len(port_data) > 1:

            def update_port_info(port_index, dir=None, i=None):
                if i is None:
                    port_index[0] = (port_index[0] + dir) % len(port_data)
                else:
                    port_index[0] = i
                d = port_data[port_index[0]]
                port_label.image = d['label']
                port_info.image = d['info']
                port_box.set_background(d['color'])
                o.set_color(d['color'])
                o.set_points(update_points(d['port']))

            b = ui.Button.text_button('>',
                                      padding=(15, 15),
                                      func=update_port_info,
                                      args=[port_index],
                                      kwargs={'dir': 1},
                                      border_radius=20)
            b.rect.midleft = port_box.rect.midright
            objects.append(b)
            b = ui.Button.text_button('<',
                                      padding=(15, 15),
                                      func=update_port_info,
                                      args=[port_index],
                                      kwargs={'dir': -1},
                                      border_radius=20)
            b.rect.midright = port_box.rect.midleft
            objects.append(b)

            for i, pd in enumerate(port_data):
                r = pd['port'].rect
                b = ui.Button(r.size,
                              func=update_port_info,
                              args=[port_index],
                              kwargs={'i': i})
                b.rect.center = r.center
                objects.insert(0, b)

    else:
        objects.pop(-2)

    b = ui.Button.text_button('back', color2=(0, 200, 0), tag='break')
    b.rect.centerx = width // 2
    b.rect.bottom = height - 10
    objects.append(b)

    return objects
示例#5
0
import ui, caesar, vernam, aes
import rsa_encryption as rsa
#Defining the menu page,
menu = ui.Page(Caesar=ui.Button("Caesar Cipher", 50, 325, 250, 100),
            Vernam=ui.Button("Vernam Cipher", 724, 325, 250, 100),
            RSA=ui.Button("RSA", 50, 575, 250, 100),
            AES=ui.Button("AES", 724, 575, 250, 100),
            subtitle1=ui.Text("Simple Ciphers", (512, 250), ui.subtitle_font),
            subtitle2=ui.Text("Complex Ciphers", (512, 500), ui.subtitle_font),
            explanation=ui.Text("A program for teaching people about encryption", (512, 150), ui.header3))
#Defining the back to menu button that is used across all the pages.
back_button = ui.Button("Menu", 50, 35, 150, 100, function_to_call=menu.run_page)
#Defining the Caesar cipher page
caesar_page = ui.Page(back_button,
                   encrypt_text_box = ui.Textbox(360, 250, 300, 50, ui.screen, 20),
                    encrypt_shift_box = ui.Textbox(360, 400, 300, 50, ui.screen, 15, True, 2, "1", True),
                      plaintext_title = ui.Text("Plaintext:", (512, 200), ui.subtitle_font),
                    shift_title=ui.Text("Shift:", (512, 350), ui.subtitle_font),
                      clear_textbox_button = ui.Button("Clear Boxes", 730, 300, 175, 100),
                      encrypt_button = ui.Button("Encrypt!", 330, 535, 150, 100, to_return=True),
                      decrypt_button = ui.Button("Decrypt!", 550, 535, 150, 100, to_return=True),
                      ciphertext = ui.OutputBox(50, 650, 924, 100),
                      ciphertext_label = ui.Text("Output:", (125, 630), ui.header3))

#Defining all of the buttons functions and linked textboxes and output boxes for the Caesar cipher page
menu.Caesar.function = caesar_page.run_page
caesar_page.clear_textbox_button.function = caesar_page.clear_textboxes
caesar_page.encrypt_button.dedi_output_box = caesar_page.ciphertext
caesar_instance = caesar.Caesar
caesar_page.encrypt_button.function = caesar_instance.caesar
caesar_page.encrypt_button.linked_textboxes = [caesar_page.encrypt_text_box, caesar_page.encrypt_shift_box]
示例#6
0
    def builder_objects(self):
        objects = [self.card]

        x = self.objects_dict['card'].rect.right + 10

        for i, rgb in enumerate(('r', 'g', 'b')):

            s = ui.RGBSlider((20, 200),
                             'y',
                             rgb,
                             hcolor=(255, 255, 255),
                             func=self.update_color)
            s.rect.topleft = (x, 10)
            s.set_state(self.objects_dict['card'].color[i])
            objects.append(s)
            self.objects_dict[rgb] = s

            x += s.rect.width + 40

        type_text = ui.Textbox.static_textbox('card type:',
                                              fgcolor=(255, 255, 255))
        type_text.rect.topleft = s.rect.topleft
        type_text.rect.x += 50
        objects.append(type_text)

        ts = Type_Selector(self.card)
        ts.rect.midtop = type_text.rect.midbottom
        ts.rect.y += 5
        objects.append(ts)
        self.objects_dict['type_select'] = ts

        tag_text = ui.Textbox.static_textbox('card tags:',
                                             fgcolor=(255, 255, 255))
        tag_text.rect.topleft = type_text.rect.topright
        tag_text.rect.x += 50
        objects.append(tag_text)

        tag_select = Tag_Selector(self.card)
        tag_select.rect.midtop = tag_text.rect.midbottom
        tag_select.rect.y += 5
        objects.append(tag_select)
        self.objects_dict['tag_select'] = tag_select

        custom_text = ui.Textbox.static_textbox('custom tag:',
                                                fgcolor=(255, 255, 255))
        custom_text.rect.topleft = tag_text.rect.topright
        custom_text.rect.x += 30
        objects.append(custom_text)

        custom = ui.Input((100, 30),
                          'tag',
                          color=(255, 255, 255),
                          fgcolor=(0, 0, 0),
                          check=ui.Input.alnum_check)
        custom.set_func(add_custom_tag, args=[custom, tag_select])
        custom.rect.topleft = custom_text.rect.bottomleft
        custom.rect.y += 5
        objects.append(custom)
        self.objects_dict['custom_tag'] = custom

        b = ui.Button.text_button('import image', func=self.open_image)
        b.rect.topleft = self.objects_dict['r'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['image'] = b

        b = ui.Button.text_button('use webcam', func=self.record_video)
        b.rect.topleft = self.objects_dict['image'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['cam'] = b

        b = ui.Button.text_button('node editor', func=self.node_editor.run)
        b.rect.topleft = self.objects_dict['cam'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['node_editor'] = b

        b = ui.Button.text_button('save card',
                                  func=save_card,
                                  args=[self.card, self.node_editor])
        b.rect.topleft = self.objects_dict['node_editor'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['save'] = b

        b = ui.Button.text_button('publish card',
                                  func=publish_card,
                                  args=[self.card, self.node_editor])
        b.rect.topleft = self.objects_dict['save'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['publish'] = b

        b = ui.Button.text_button('return to menu', tag='break')
        b.rect.topleft = self.objects_dict['publish'].rect.bottomleft
        b.rect.y += 20
        objects.append(b)
        self.objects_dict['quit'] = b

        t = ui.Textbox('published: False', tsize=20)
        t.set_func(self.update_published)
        t.rect.topleft = self.objects_dict['quit'].rect.topright
        t.rect.x += 20
        objects.append(t)
        self.objects_dict['published'] = t

        am = Audio_Manager(self.mic)
        am.rect.topleft = self.objects_dict['published'].rect.bottomleft
        am.rect.y += 20
        objects.append(am)
        self.objects_dict['audio_manager'] = am

        return objects
示例#7
0
    def __init__(self,
                 name='Title',
                 type='play',
                 description='description',
                 tags=None,
                 color=[161, 195, 161],
                 id=None,
                 image='',
                 node_data={},
                 weight=1,
                 code='',
                 lines=(0, 0),
                 published=False,
                 **kwargs):
        super().__init__()

        self.id = id
        self.node_data = node_data
        self.weight = weight
        self.code = code
        self.lines = lines
        self.published = published

        if tags is None:
            tags = []

        self.image = pg.Surface(card_size).convert_alpha()
        self.image.fill((50, 50, 50))
        self.rect = self.image.get_rect()
        r = self.rect.inflate(-30, -30)
        pg.draw.rect(self.image, (1, 0, 0), r)
        self.image.set_colorkey((1, 0, 0))

        self.objects_dict = {}

        bg = ui.Image(pg.Surface(r.size).convert())
        bg.image.fill(color)
        bg.rect.center = self.rect.center
        self.add_child(bg, current_offset=True)
        self.objects_dict['bg'] = bg

        name_box = ui.Image_Manager.get_surface((255, 45),
                                                color=(255, 255, 255),
                                                olcolor=(0, 0, 0))
        name = ui.Input.from_image(name_box,
                                   message=name,
                                   fitted=True,
                                   color=(0, 0, 0, 0),
                                   fgcolor=(0, 0, 0),
                                   tsize=30)
        name.rect.centerx = bg.rect.centerx
        name.rect.y = 30
        self.add_child(name, current_offset=True)
        self.objects_dict['name'] = name

        pw, ph = Card.IMAGE_SIZE
        pic_outline = ui.Image.from_style((pw + 4, ph + 4), color=(0, 0, 0))
        pic_outline.rect.centerx = bg.rect.centerx
        pic_outline.rect.y = name.rect.bottom + 6
        self.objects_dict['pic_outline'] = pic_outline
        self.add_child(pic_outline, current_offset=True)

        pic = ui.Image(Card.load_pic(image))
        pic.rect.center = pic_outline.rect.center
        self.objects_dict['pic'] = pic
        self.add_child(pic, current_offset=True)

        desc_box = ui.Image_Manager.get_surface((225, 170),
                                                color=(255, 255, 255),
                                                olcolor=(0, 0, 0))
        desc = ui.Input.from_image(desc_box,
                                   message=description,
                                   fitted=True,
                                   color=(0, 0, 0, 0),
                                   fgcolor=(0, 0, 0),
                                   tsize=35,
                                   length=300)
        desc.rect.centerx = bg.rect.centerx
        desc.rect.y += 300
        self.add_child(desc, current_offset=True)
        self.objects_dict['desc'] = desc

        type_box_image = ui.Image_Manager.get_surface(
            ((pic.rect.width // 3) - 4, 20),
            color=(255, 255, 255),
            olcolor=(0, 0, 0))
        type_box = ui.Image(type_box_image)
        type_box.rect.x = pic.rect.x
        type_box.rect.y += 475
        self.add_child(type_box, current_offset=True)
        self.objects_dict['type_box'] = type_box
        type_rect = type_box_image.get_rect()

        type = ui.Textbox(type, tsize=45, fgcolor=(0, 0, 0))
        type.fit_text(type_rect)
        type.rect.center = type_box.rect.center
        self.add_child(type, current_offset=True)
        self.objects_dict['type'] = type

        tags_box_image = ui.Image_Manager.get_surface(
            (pic.rect.width - type.rect.width - 4, 20),
            color=(255, 255, 255),
            olcolor=(0, 0, 0))
        tags_box = ui.Image(tags_box_image)
        tags_box.rect.right = pic.rect.right
        tags_box.rect.y += 475
        self.add_child(tags_box, current_offset=True)
        self.objects_dict['tags_box'] = tags_box
        tags_rect = tags_box_image.get_rect()

        tags = ui.Textbox(str(tags).replace("'", ''),
                          tsize=45,
                          fgcolor=(0, 0, 0))
        tags.fit_text(tags_rect)
        tags.rect.center = tags_box.rect.center
        self.add_child(tags, current_offset=True)
        self.objects_dict['tags'] = tags