Exemplo n.º 1
0
    def make_new_sample(self):

        # validate colors

        back = self.r_col['background 1'].get()
        high = self.r_col['background 2'].get()
        table = self.r_col['background 3'].get()
        fonts = self.r_col['font color'].get()    

        try_these = [
            (back, self.r_col['background 1']), 
            (high, self.r_col['background 2']), 
            (table, self.r_col['background 3']), 
            (fonts, self.r_col['font color'])]

        for tup in try_these:
            if len(tup[0]) == 0:
                return
        
        test_color = Frame(self.root) # don't grid this

        for tup in try_these:
            try:
                test_color.config(bg=tup[0])
            except tk.TclError:
                tup[1].delete(0, tk.END)
                messagebox.showerror(
                    'Color Not Recognized.',
                    'A color was entered that is unknown to the system.')
                return

        self.get_new_scheme()
        for child in self.colors_content.winfo_children():
            child.destroy()
        self.make_samples()
Exemplo n.º 2
0
    def save_new_subtopic(self):
        if self.selected_subtopic.cget('text') != self.new_subtopic_label_text:
            return
        self.subtopic_dialog = Toplevel(self.root)
        self.subtopic_dialog.title('New Note: Subtopic Input Dialog')
        headlab = LabelH3(self.subtopic_dialog,
                          text='Unique subtopic name for new note:')
        self.subtopic_input = Entry(self.subtopic_dialog, width=64)
        self.subtopic_input.focus_set()
        buttonbox = Frame(self.subtopic_dialog)
        self.subtopic_dialog.grid_columnconfigure(0, weight=1)
        new_note_ok = Button(buttonbox,
                             text='Submit Note and Subtitle',
                             command=self.submit_new_note)
        new_note_cancel = Button(buttonbox,
                                 text='Cancel',
                                 command=self.close_subtopic_dialog)

        headlab.grid(column=0, row=0, pady=(24, 0), columnspan=2)
        self.subtopic_input.grid(column=0,
                                 row=1,
                                 padx=24,
                                 pady=24,
                                 columnspan=2)
        buttonbox.grid(column=1, row=2, sticky='we', padx=24, pady=24)
        new_note_ok.grid(column=0, row=0, sticky='e', padx=12)
        new_note_cancel.grid(column=1, row=0, sticky='e', padx=12)

        self.subtopic_dialog.bind('<Escape>', self.close_subtopic_dialog)
        self.subtopic_dialog.protocol('WM_DELETE_WINDOW',
                                      self.close_subtopic_dialog)
Exemplo n.º 3
0
    def __init__(self, master, resizer=True, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)

        self.master = master  # root or toplevel

        self.sizer = Sizer(self.master)

        self.grid_columnconfigure(0, weight=1)
        # With custom window border, you can't use the otherwise
        #   desirable option bd=2, relief='sunken' for a border on statusbar
        #   because edge grabber for resizing is below statusbar
        #   so border looks wrong there. Instead put a Separator
        #   above the statusbar frame.
        # relief = Frame(self, bd=2, relief='sunken')
        relief = Frame(self, bd=0)
        relief.grid(column=0, row=0, sticky='news')
        relief.grid_columnconfigure(0, weight=1)

        self.status_label = LabelStatusbar(relief, cursor='arrow', anchor='w')
        self.tooltip_label = LabelStatusbar(relief,
                                            bd=2,
                                            relief='sunken',
                                            anchor='e')

        if resizer is True:
            self.sizer.place(relx=1.0, x=-3, rely=1.0, anchor='se')
            self.sizer.bind('<Button-1>', self.sizer.get_pos)
        self.status_label.grid(column=0, row=0, sticky='w')
Exemplo n.º 4
0
    def build_page3(self):
        box = Box(orientation=VERTICAL, spacing=6)
        box.set_border_width(10)

        _row1 = Frame()

        _log_view_textbuffer = m._page3_log_view.get_buffer()
        self._handlers.clear_log_view_buffer(None)

        _end = _log_view_textbuffer.get_end_iter()
        _log_view_textbuffer.create_mark('end', _end, False)

        _scrolled = g.ScrolledWindow()
        _scrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _scrolled.add(m._page3_log_view)
        _row1.add(_scrolled)

        _row2 = Box()
        m._page3_read_target_btn.connect('clicked',
                                         self._handlers.read_target_file)
        m._page3_clear_btn.connect('clicked',
                                   self._handlers.clear_log_view_buffer)
        m._page3_read_log_btn.connect('clicked', self._handlers.read_log_file)

        _row2.pack_start(m._page3_read_target_btn, True, False, 0)
        _row2.pack_start(m._page3_clear_btn, True, False, 0)
        _row2.pack_start(m._page3_read_log_btn, True, False, 0)

        box.pack_start(_row1, True, True, 5)
        box.pack_end(_row2, False, True, 0)
        return box
Exemplo n.º 5
0
    def go_to_graphics(self, graphics):

        # if frame with this name already exists it's replaced
        # https://stackoverflow.com/questions/59518905/naming-a-widget-to-auto-destroy-replace-it
        picwin = Frame(graphics, name='exists')
        picwin.pack()

        curr_pic = self.picfile_lab.get(1.0, 'end')
        curr_pic = curr_pic.strip('\n')

        img_path = curr_pic
        edit_pic = Image.open(img_path)
        edit_img = ImageTk.PhotoImage(edit_pic)
        editlab = LabelStay(
            picwin,
            image=edit_img)

        editlab.image = edit_img
        self.nbook.select(graphics)

        # scroll to top so controls are seen when tab opens
        self.canvas.yview_moveto(0.0)
        
        if self.parent.winfo_class() == 'Toplevel':
            self.parent.lower(belowThis=self.nbook)

        editlab.pack() # When this grids a big pic, the whole notebook gets big
        
        # prevent large pics from blowing up size of the whole notebook
        #    when placed here by edit button on a gallery
        #    Will need more attention when ready to make the graphics tab.
        editlab.config(width=700, height=700)
Exemplo n.º 6
0
    def make_widgets(self):
        self.entry = Entry(self, textvariable=self.var)
        self.arrow = LabelHilited(self, text='\u25BC', width=2)
        # self.arrow = ComboboxArrow(self, text='\u25BC', width=2)

        self.entry.grid(column=0, row=0)
        self.arrow.grid(column=1, row=0)

        self.update_idletasks()
        self.width = self.winfo_reqwidth()

        self.drop = ToplevelHilited(self, bd=0)
        self.drop.bind('<Destroy>', self.clear_reference_to_dropdown)
        self.drop.withdraw()
        Combobox.hive.append(self.drop)
        for widg in (self.master, self.drop):
            widg.bind('<Escape>', self.hide_all_drops, add='+')

        self.drop.grid_columnconfigure(0, weight=1)
        self.drop.grid_rowconfigure(0, weight=1)

        self.canvas = CanvasHilited(self.drop)
        self.canvas.grid(column=0, row=0, sticky='news')

        self.scrollv_combo = Scrollbar(self.drop,
                                       hideable=True,
                                       command=self.canvas.yview)
        self.canvas.config(yscrollcommand=self.scrollv_combo.set)
        self.content = Frame(self.canvas)

        self.content.grid_columnconfigure(0, weight=1)
        self.content.grid_rowconfigure('all', weight=1)

        self.scrollv_combo.grid(column=1, row=0, sticky='ns')

        self.entry.bind('<KeyPress>', self.open_or_close_dropdown)
        self.entry.bind('<Tab>', self.open_or_close_dropdown)

        for widg in (self.entry, self.arrow):
            widg.bind('<Button-1>', self.open_or_close_dropdown, add='+')

        self.arrow.bind('<Button-1>', self.focus_entry_on_arrow_click, add='+')

        for frm in (self, self.content):
            frm.bind('<FocusIn>', self.arrow.highlight)
            frm.bind('<FocusOut>', self.arrow.unhighlight)

        self.drop.bind('<FocusIn>', self.focus_dropdown)
        self.drop.bind('<Unmap>', self.unhighlight_all_drop_items)

        self.current_combo_parts = [
            self, self.entry, self.arrow, self.scrollv_combo
        ]
        for part in self.current_combo_parts:
            part.bind('<Enter>', self.unbind_combo_parts)
            part.bind('<Leave>', self.rebind_combo_parts)

        self.config_values(self.values)

        config_generic(self.drop)
Exemplo n.º 7
0
    def make_widgets(self):

        self.make_scrollbars()

        self.make_menus()

        scridth = 20
        scridth_n = Frame(self, height=scridth)
        scridth_w = Frame(self, width=scridth)
        header = Frame(self)
        heading = LabelH3(header, text='header text')
        self.main_tabs = Frame(self)
        persons_tab = Frame(self.main_tabs)
        footer = Frame(self)
        boilerplate = Label(footer, text='footer')

        current_person_area = Frame(persons_tab)
        current_person = LabelH3(current_person_area)
        right_panel = Frame(persons_tab)
        attributes_table = Label(right_panel, text='attributes table')

        findings_table = EventsTable(persons_tab, self.view, self.treebard)

        # children of self
        scridth_n.grid(column=0, row=0, sticky='ew')
        scridth_w.grid(column=0, row=1, sticky='ns')
        header.grid(column=1, row=1, sticky='ew')
        self.columnconfigure(1, weight=1)
        self.rowconfigure(2, weight=1)
        self.main_tabs.grid(column=1, row=2, sticky='ew')
        footer.grid(column=1, row=3, sticky='ew')

        # children of header
        heading.grid(column=0, row=0, sticky='ew')

        # children of self.main_tabs
        persons_tab.grid(column=0, row=0, sticky='news')

        # children of persons_tab
        current_person_area.grid(column=0, row=0, sticky='w')
        right_panel.grid(column=1, row=0, sticky='e')
        findings_table.grid(column=0, row=1, columnspan=2, sticky='news')

        # children of current_person_area
        current_person.grid(column=0, row=0, sticky='w')

        # children of right_panel
        attributes_table.grid(column=0, row=0, sticky='news')

        # children of footer
        boilerplate.grid()
Exemplo n.º 8
0
    def build_page2(self):
        '''
    用subprocess不可实现与sqlmap的交互!
    不管是多线程, 同步还是异步, 都不行, 只能使用pty
    '''
        box = Box(orientation=VERTICAL, spacing=6)
        box.set_border_width(10)

        _row1 = Box(spacing=6)
        m._page2_respwan_btn.connect('clicked',
                                     self._handlers.respawn_terminal)
        m._page2_right_btn.connect("button-press-event", self.on_right_click)
        # can not disable
        # m._page2_right_btn.set_sensitive(False)
        self._build_page2_context()

        _row1.pack_start(m._page2_respwan_btn, False, True, 0)
        _row1.pack_start(m._page2_right_btn, False, True, 0)

        _row2 = Frame()
        # equals: _pty = m._page2_terminal.pty_new_sync(Vte.PtyFlags.DEFAULT)
        _pty = Vte.Pty.new_sync(Vte.PtyFlags.DEFAULT)
        m._page2_terminal.set_pty(_pty)
        m._page2_terminal.connect('key_press_event', self.on_clipboard_by_key)
        m._page2_terminal.connect("button-press-event", self.on_right_click,
                                  m._page2_right_btn)

        # https://stackoverflow.com/questions/55105447/virtual-python-shell-with-vte-pty-spawn-async
        # https://gtk-d.dpldocs.info/vte.Pty.Pty.spawnAsync.html
        # API手册上的该方法签名有问题, 与实际的对不上
        # 最后一个参数为回调函数, 是必填项
        _pty.spawn_async(str(Path.home()), [self._handlers.shell], None,
                         GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None, -1,
                         None, lambda pty, task: None)

        _scrolled = g.ScrolledWindow()
        _scrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _scrolled.add(m._page2_terminal)
        _row2.add(_scrolled)

        box.pack_start(_row1, False, True, 5)
        box.pack_end(_row2, True, True, 0)
        return box
Exemplo n.º 9
0
    def reorder_notes(self):
        '''
        '''
        if self.toc.size() < 2:
            return

        self.order_dlg = Toplevel(self)
        self.order_dlg.grab_set()
        self.order_dlg.protocol('WM_DELETE_WINDOW', self.ignore_changes)
        self.order_dlg.bind('<Return>', self.save_close_reorder_dlg)
        self.order_dlg.bind('<Escape>', self.ignore_changes)
        self.order_dlg.grid_columnconfigure(0, weight=1)
        self.order_dlg.title('Reorder Subtopics')

        instrux = ('Tab or Ctrl+Tab selects movable subtopic.\n'
                   'Arrow keys change subtopic order up or down.')

        top = LabelH3(self.order_dlg, text=instrux, anchor='center')

        self.labels = Frame(self.order_dlg)

        e = 0
        for subtopic in self.subtopics:
            lab = LabelMovable(self.labels, text=subtopic, anchor='w')
            if e == 0:
                first = lab
            e += 1
            lab.grid(column=0, row=e, padx=3, sticky='ew')
        first.focus_set()

        close2 = Button(self.order_dlg,
                        text='OK',
                        command=self.save_close_reorder_dlg)

        top.grid(column=0, row=0, pady=(24, 0), padx=24, columnspan=2)
        self.labels.grid(column=0, row=1, columnspan=2, padx=24, pady=24)
        self.labels.grid_columnconfigure(0, weight=1)
        close2.grid(column=1, row=2, sticky='se', padx=12, pady=(0, 12))

        center_window(self.order_dlg)
Exemplo n.º 10
0
    def _build_page2(self):
        '''
    用subprocess不可实现与sqlap的交互!
    不管是多线程, 同步还是异步, 都不行, 只能使用pty
    '''
        box = Box(orientation=VERTICAL, spacing=6)
        box.set_border_width(10)

        _row1 = Box(spacing=6)
        # m._page2_cmdline_str_label.set_alignment(0, 0.5)    # 怎么没有垂直居中?
        m._page2_respwan_btn.connect('clicked',
                                     self._handlers.respawn_terminal)

        # _row1.pack_start(m._page2_cmdline_str_label, True, True, 0)
        _row1.pack_start(m._page2_respwan_btn, False, True, 0)

        _row2 = Frame()
        # 等价于_pty = m._page2_terminal.pty_new_sync(Vte.PtyFlags.DEFAULT)
        _pty = Vte.Pty.new_sync(Vte.PtyFlags.DEFAULT)
        m._page2_terminal.set_pty(_pty)

        # https://stackoverflow.com/questions/55105447/virtual-python-shell-with-vte-pty-spawn-async
        # https://gtk-d.dpldocs.info/vte.Pty.Pty.spawnAsync.html
        # API手册上的该方法签名有问题, 与实际的对不上
        # 最后一个参数为回调函数, 是必填项
        _pty.spawn_async(str(Path.home()), [self._handlers.shell], None,
                         GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None, -1,
                         None, lambda pty, task: None)

        _scrolled = g.ScrolledWindow()
        _scrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _scrolled.add(m._page2_terminal)
        _row2.add(_scrolled)

        box.pack_start(_row1, False, True, 5)
        box.pack_end(_row2, True, True, 0)
        return box
Exemplo n.º 11
0
    def build_page5(self):
        box = Box(orientation=VERTICAL)
        box.set_border_width(10)

        _row1 = Box()
        self._get_sqlmap_path_btn = btn.new_with_label('sqlmap -hh')
        self._get_sqlmap_path_btn.set_sensitive(False)
        self._get_sqlmap_path_btn.connect('clicked', self._make_help_thread)

        _row1.pack_start(self._get_sqlmap_path_btn, False, True, 5)

        _row2 = Frame()

        self._make_help_thread(None)

        _scrolled = g.ScrolledWindow()
        _scrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _scrolled.add(m._page5_manual_view)

        _row2.add(_scrolled)

        box.pack_start(_row1, False, True, 5)
        box.pack_start(_row2, True, True, 5)
        return box
Exemplo n.º 12
0
    def create_widgets(self):
        #Label((275,50,180,50), font=self.fonts[2], text=f"SCORE: {self.score}", bgcolor=BGCOLOR, fgcolor=BLACK).draw(self.screen)

        fonts = [
            pygame.font.SysFont('Arial', size, True) for size in (70, 40, 25)
        ]
        self.lose_label = Label(center=True,
                                size=(200, 100),
                                font=fonts[1],
                                text='You Lose',
                                fgcolor=BLACK)

        # Restart UI
        self.restartUI = Frame(pos=(45, 145),
                               size=(405, 405),
                               bgcolor=BLACK,
                               transparency=100)
        restart_lbl = Frame(parent=self.restartUI,
                            pos=(100, 100),
                            size=(205, 105),
                            bgcolor=(100, 100, 190))
        Label(parent=restart_lbl, center=True, font=fonts[1], text='Restart?')

        cancel_restart = Frame(parent=self.restartUI,
                               pos=(220, 215),
                               size=(75, 35),
                               bgcolor=(192, 100, 100))
        Button(parent=cancel_restart,
               center=True,
               font=fonts[1],
               text='No',
               command=lambda _: self.set_restart(False))

        do_restart = Frame(parent=self.restartUI,
                           pos=(115, 215),
                           size=(75, 35),
                           bgcolor=(192, 100, 100))
        Button(parent=do_restart,
               center=True,
               font=fonts[1],
               text='Yes',
               command=self.restart)

        # Main UI
        self.mainUI = Frame(pos=(0, 0),
                            size=(SCREENX, SCREENY),
                            bgcolor=BGCOLOR)

        undo_btn_image = Frame(parent=self.mainUI,
                               pos=(390, 95),
                               size=(50, 50),
                               image=pygame.image.load('undo.png'))
        Button(parent=undo_btn_image, command=self.undo)

        restart_btn_image = Frame(parent=self.mainUI,
                                  pos=(330, 95),
                                  size=(50, 50),
                                  image=pygame.image.load('restart.png'))
        Button(parent=restart_btn_image,
               command=lambda _: self.set_restart(True))

        title_frame = Frame(parent=self.mainUI, pos=(25, 50), size=(200, 80))
        Label(parent=title_frame, center=True, font=fonts[0], text="2048")

        score_frame = Frame(parent=self.mainUI, pos=(275, 50), size=(180, 50))
        self.score_label = Label(parent=score_frame,
                                 center=True,
                                 font=fonts[2],
                                 text='score')
Exemplo n.º 13
0
    def make_widgets(self):

        all_pics = self.get_all_pics()

        lab1 = Label(self, text='Gender:')
        self.gender_input = ClearableReadonlyCombobox(self, values=GENDER_TYPES)

        lab2 = Label(self, text='Main Image:')
        self.image_input = ClickAnywhereCombo(self, values=all_pics)

        lab3 = Label(self, text='Name Type:')
        self.name_type_input = ClearableReadonlyCombobox(self, values=self.get_name_types())

        lab4 = Label(self, text='Full Name')
        self.name_input = Entry(self, width=65)

        self.how = LabelH3(
            self, 
            text='Alphabetize name: after clicking auto-sort, tab into '
                  'auto-filled name fields to modify\nsort order with '
                  'arrow keys or if sort order is correct, just click ADD.')

        autosort = Button(
            self, text='AUTOSORT', command=self.show_sort_order)

        self.order_frm = Frame(self)

        s = 0
        for stg in range(20):
            mov = LabelMovable(self.order_frm)
            mov.grid(column=s, row=0, padx=3)
            s += 1 

        self.buttonbox = Frame(self)
        self.add_butt = Button(self.buttonbox, text='ADD', width=8)

        lab1.grid(column=0, row=3)
        self.gender_input.grid(
            column=1, row=3, padx=12, pady=12, sticky='e')
        lab2.grid(column=2, row=3)
        self.image_input.grid(column=3, row=3, padx=12, pady=12)
        lab3.grid(column=0, row=4)
        self.name_type_input.grid(
            column=1, row=4,  padx=12, pady=12, sticky='e')
        lab4.grid(column=2, row=4)
        self.name_input.grid(column=3, row=4, padx=12, pady=12)

        self.how.grid(column=0, row=5, padx=6, pady=6, columnspan=4)
        autosort.grid(column=0, row=6, padx=6, pady=6)
        self.order_frm.grid(column=1, row=6, columnspan=4, pady=24)
        self.buttonbox.grid(column=1, row=7, sticky='e')
        self.add_butt.grid(column=0, row=0, padx=6, pady=6, sticky='e')

        self.new_person_statusbar = StatusbarTooltips(self.parent, resizer=False)
        visited = (
            (self.gender_input, 
                "Gender Input", 
                "'Unknown' used if left blank."),
            (self.image_input, 
                "Image Input", 
                "Use an old photo of person's home town if no photo available."),
            (self.name_type_input, 
                "Name Type Input", 
                "Choose the name type."),
            (self.name_input, 
                "Name Input", 
                "Autofills but you can change it."),
            (autosort, 
                "Autosort Button", 
                "Click to auto-create a sortable name."),
            (self.order_frm, 
                "", 
                "Tab to focus name element. Arrow to change order.")
)        
        run_statusbar_tooltips(
            visited, 
            self.new_person_statusbar.status_label, 
            self.new_person_statusbar.tooltip_label)

        self.preset()

        rcm_widgets = (self.name_input, self.name_type_input)
        make_rc_menus(
            rcm_widgets, 
            self.rc_menu, 
            person_add_msg)
Exemplo n.º 14
0
    def make_widgets(self):

        self.grid(column=0, row=1, sticky='news')

        self.border_top = FrameTitleBar(self.master, height=3, name='top')
        self.title_bar = FrameTitleBar(self.master)

        self.menu = Frame(self.master)
        self.ribbon = Frame(self.master)

        self.border_left = FrameTitleBar(self.master, width=3, name='left')
        self.border_right = FrameTitleBar(self.master, width=3, name='right')

        self.statusbar = StatusbarTooltips(self.master)

        self.border_bottom = FrameTitleBar(self.master,
                                           height=3,
                                           name='bottom')
        self.master.grid_columnconfigure(1, weight=1)
        self.master.grid_rowconfigure(4, weight=1)

        self.border_top.config(cursor='sb_v_double_arrow')
        self.border_left.config(cursor='sb_h_double_arrow')
        self.border_right.config(cursor='sb_h_double_arrow')
        self.border_bottom.config(cursor='sb_v_double_arrow')

        self.border_top.grid(column=0, row=0, columnspan=4, sticky='ew')
        self.title_bar.grid(column=1, row=1, columnspan=2, sticky='ew')
        if self.menubar is True:
            self.menu.grid(column=1, row=2, columnspan=2, sticky='ew')
        if self.ribbon_menu is True:
            self.ribbon.grid(column=1, row=3, columnspan=2, sticky='ew')
        self.grid(column=1, row=4, sticky='news')
        self.border_left.grid(column=0, row=1, rowspan=6, sticky='ns')
        self.border_right.grid(column=3, row=1, rowspan=6, sticky='ns')
        self.statusbar.grid(column=1, row=6, columnspan=2, sticky='ew')
        self.border_bottom.grid(column=0, row=7, columnspan=4, sticky='ew')

        self.config(cursor='arrow')

        # children of self.title_bar
        self.title_bar.grid_columnconfigure(0, weight=1)
        self.title_bar.grid_columnconfigure(1, weight=0)
        self.title_frame = FrameTitleBar(self.title_bar)
        self.buttonbox = FrameTitleBar(self.title_bar)

        self.title_frame.pack(side='left')
        self.buttonbox.place(relx=1.0, x=-100, rely=0.125, y=-2)

        # children of self.title_frame
        self.logo = TitleBarButtonSolidBG(self.title_frame,
                                          icon='logo',
                                          icon_size=self.icon_size)

        self.txt_frm = FrameTitleBar(self.title_frame)
        self.logo.pack(side='left', pady=(0, 3), padx=(0, 12))
        self.txt_frm.pack(side='left')

        # children of text_frm
        self.title_1 = LabelTitleBar(self.txt_frm,
                                     size=self.icon_size,
                                     text='Toykinter Demo')
        self.title_1b = FrameTitleBar(self.txt_frm, width=36)
        self.title_2 = LabelTitleBar(self.txt_frm,
                                     size=self.icon_size,
                                     text='for all ages')

        self.title_1.grid(column=0, row=0)
        self.title_1b.grid(column=1, row=0, sticky='ew')
        self.title_2.grid(column=2, row=0)

        # children of self.buttonbox
        self.minn = TitleBarButton(self.buttonbox,
                                   icon='min',
                                   icon_size=self.icon_size)
        self.maxx = TitleBarButton(self.buttonbox,
                                   icon='max',
                                   icon_size=self.icon_size)
        self.restore = TitleBarButton(self.buttonbox,
                                      icon='restore',
                                      icon_size=self.icon_size)
        self.quitt = TitleBarButton(self.buttonbox,
                                    icon='quit',
                                    icon_size=self.icon_size)

        self.minn.grid(column=0, row=0, sticky='w')
        self.maxx.grid(column=1, row=0, sticky='w', padx=(0, 3))
        self.restore.grid(column=1, row=0, sticky='w', padx=(0, 3))
        self.restore.grid_remove()
        self.quitt.grid(column=2, row=0, sticky='e', padx=(0, self.size))

        self.master.update_idletasks()
        to_the_left = self.buttonbox.winfo_reqwidth()
        self.buttonbox.place(relx=1.0,
                             x=-to_the_left,
                             rely=0.125,
                             y=-2 * self.rel_y)

        # bindings
        self.master.bind('<Map>', self.hide_windows_titlebar)
        self.minn.bind('<Button-1>', self.minimize)
        self.maxx.bind('<Button-1>', self.toggle_max_restore)
        self.restore.bind('<Button-1>', self.toggle_max_restore)
        self.quitt.bind('<Button-1>', close)
        x = [
            i.bind('<Map>', self.recolorize_on_restore)
            for i in (self.minn, self.quitt)
        ]

        for widg in (self.title_bar, self.title_frame, self.logo, self.title_1,
                     self.title_1b, self.title_2, self.txt_frm,
                     self.buttonbox):
            widg.bind('<B1-Motion>', self.move_window)
            widg.bind('<Button-1>', self.get_pos)
            widg.bind('<Double-Button-1>', self.toggle_max_restore)

        for widg in (self.border_top, self.border_left, self.border_right,
                     self.border_bottom):
            widg.bind('<Button-1>', self.start_edge_sizer)
            widg.bind('<B1-Motion>', self.stop_edge_sizer)
            widg.bind('<ButtonRelease-1>', self.stop_edge_sizer)

        config_generic(self.master)
Exemplo n.º 15
0
    def build_page4(self):
        box = Box(orientation=VERTICAL)
        box.set_border_width(10)

        _row1 = Box(spacing=6)
        _row1.pack_start(m._page4_api_server_label, False, True, 0)
        _row1.pack_start(m._page4_api_server_entry, True, True, 0)
        _row1.pack_start(m._page4_admin_token_label, False, True, 0)
        _row1.pack_start(m._page4_admin_token_entry, True, True, 0)

        _row2 = Box(spacing=6)
        _arrow_down = g.Image.new_from_icon_name('pan-down-symbolic', 1)
        m._page4_admin_list_btn.set_image(_arrow_down)
        m._page4_admin_list_btn.set_image_position(g.PositionType.RIGHT)
        m._page4_admin_list_btn.set_always_show_image(True)

        m._page4_task_new_btn.connect('clicked', self._handlers.api.task_new)
        m._page4_admin_list_btn.connect('clicked',
                                        self._handlers.api.admin_list)
        m._page4_admin_flush_btn.connect('clicked',
                                         self._handlers.api.admin_flush)
        m._page4_clear_task_view_btn.connect(
            'clicked', self._handlers.clear_task_view_buffer)

        _row2.pack_start(m._page4_task_new_btn, False, True, 0)
        _row2.pack_start(m._page4_admin_list_btn, False, True, 0)
        _row2.pack_start(m._page4_admin_flush_btn, False, True, 0)
        _row2.pack_start(m._page4_clear_task_view_btn, False, True, 0)
        _row2.pack_end(m._page4_password_entry, False, True, 0)
        _row2.pack_end(m._page4_password_label, False, True, 0)
        _row2.pack_end(m._page4_username_entry, False, True, 0)
        _row2.pack_end(m._page4_username_label, False, True, 0)

        _row3 = Frame()
        _paned = g.Paned()

        self._api_admin_list_rows = g.ListBox.new()
        self._api_admin_list_rows.set_selection_mode(g.SelectionMode.NONE)

        _lscrolled = g.ScrolledWindow()
        _lscrolled.set_size_request(400, -1)
        _lscrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _lscrolled.add(self._api_admin_list_rows)

        _rbox = Box(orientation=VERTICAL)
        _page4_option_set_view_tip = label(
            label='check optiondict.py of sqlmap about options.',
            halign=g.Align.START)
        _option_set_view_textbuffer = m._page4_option_set_view.get_buffer()
        _options_example = ("{\n"
                            "  'url': 'http://www.site.com/vuln.php?id=1',\n"
                            "  'level': 1, 'risk': 1,\n\n"
                            "}\n")
        _option_set_view_textbuffer.set_text(
            _options_example, len(_options_example.encode('utf8')))
        # 貌似scrollwindow要直接包含textview,
        # 不然一直回车后, 页面不会向上滚
        _option_set_scrolled = g.ScrolledWindow()
        _option_set_scrolled.set_size_request(400, -1)
        _option_set_scrolled.set_policy(g.PolicyType.NEVER,
                                        g.PolicyType.ALWAYS)
        _option_set_scrolled.add(m._page4_option_set_view)

        _rbox.pack_start(m._page4_option_get_entry, False, True, 2)
        _rbox.pack_start(_page4_option_set_view_tip, False, True, 2)
        _rbox.pack_start(_option_set_scrolled, True, True, 2)

        # Warning: don't edit pack1(), pack2() again, otherwise it becomes strange.
        _paned.pack1(_lscrolled, False, False)
        _paned.pack2(_rbox, False, True)
        _row3.add(_paned)

        _row4 = Frame()

        _task_view_textbuffer = m._page4_task_view.get_buffer()
        _end = _task_view_textbuffer.get_end_iter()
        _task_view_textbuffer.create_mark('end', _end, False)
        self._handlers.api.task_view_append('response result:')

        _scrolled = g.ScrolledWindow()
        _scrolled.set_policy(g.PolicyType.NEVER, g.PolicyType.ALWAYS)
        _scrolled.add(m._page4_task_view)

        _row4.add(_scrolled)

        box.pack_start(_row1, False, True, 5)
        box.pack_start(_row2, False, True, 5)
        box.pack_start(_row3, True, True, 5)
        box.pack_start(_row4, True, True, 5)
        return box
Exemplo n.º 16
0
        if string_input in caseless_colors:
            color = string_input
            ok = '{}\nis a\nvalid\ncolor.'.format(color.title())
            cbox_select.config(text=ok)
        else:
            cbox_select.config(text=msg)

    def test_bind_to_dropdown_items(evt):
        print("evt.widget.cget('text'):", evt.widget.cget('text'))

    root = tk.Tk()
    root.focus_set()
    root.grid_columnconfigure(0, weight=1)
    root.geometry('+500+200')

    content = Frame(root)
    content.grid()

    b = Combobox(content,
                 root,
                 callback=color_background,
                 height=75,
                 values=caseless_colors,
                 scrollbar_size=16)
    flat = ButtonFlatHilited(content, text='Apply Combo 1')
    flat.config(command=lambda button=flat: color_background(button))
    b.config_values(short_list)

    # You can't do this in ttk.Combobox:
    for widg in b.buttons:
        widg.bind('<FocusOut>', test_bind_to_dropdown_items)
Exemplo n.º 17
0
    def make_widgets(self):

        self.frm = Frame(self)
        self.frm.grid(column=0, row=0, pady=(0, 18))

        self.errlab = Label(self.frm, text='Input was: ')
        self.errlab.grid(column=0, row=0, padx=24, pady=(24, 0), sticky='w')
        self.errshow = LabelItalic(self.frm)
        self.errshow.grid(column=1, row=0, pady=(24, 0), sticky='w')

        self.errmsg = tk.Message(self.frm,
                                 text=self.message,
                                 bd=3,
                                 relief='raised',
                                 aspect=400)
        self.errmsg.grid(column=0, row=1, padx=36, pady=(0, 18), columnspan=2)

        self.promptlab = Label(self.frm)
        self.var = tk.StringVar()
        self.altentry = Entry(self.frm)
        self.altentry.config(textvariable=self.var)

        self.promptlab.grid(column=0, row=2, pady=24, padx=24, sticky='w')
        self.altentry.grid(column=1, row=2, pady=24, sticky='w')
        self.promptlab.grid_remove()
        self.altentry.grid_remove()

        self.altentry.focus_set()
        self.altentry.bind('<Return>', self.on_ok)

        self.bbox = Frame(self)
        self.bbox.grid(column=0, row=3, columnspan=2)

        self.done = Button(self.bbox, text='DONE', command=self.on_ok, width=9)
        self.done.grid(column=0, row=0, padx=24, pady=(12, 24))
        self.done.grid_remove()

        self.stop = Button(self.bbox,
                           text='CANCEL1',
                           command=self.on_cancel,
                           width=9)
        self.stop.grid(column=1, row=0, padx=24, pady=(12, 24))
        self.stop.grid_remove()

        self.done.focus_set()

        self.accept = Button(self.bbox,
                             text='Accept Original Input',
                             command=self.on_ok,
                             width=36)
        self.accept.grid(column=0, row=0, padx=24, pady=12)
        self.accept.grid_remove()

        self.edit = Button(self.bbox,
                           text='Submit Edited Input',
                           command=self.on_alt,
                           width=36)
        self.edit.grid(column=0, row=1, padx=24, pady=12)
        self.edit.grid_remove()

        self.cancel_all = Button(self.bbox,
                                 text="Cancel (Don't Submit Anything)",
                                 command=self.on_cancel,
                                 width=36)
        self.cancel_all.grid(column=0, row=2, padx=24, pady=(12, 36))
        self.cancel_all.grid_remove()

        self.bind('<Escape>', self.on_cancel)

        PlaySound('SystemHand', SND_ASYNC)

        self.protocol("WM_DELETE_WINDOW", self.on_cancel)
Exemplo n.º 18
0
    def make_widgets(self):
        def combobox_selected(combo):
            '''
                The reason this function is nested is that I have no experience 
                with overriding methods. When I tried to add `self` as the first 
                parameter, there was an error and I didn't know what to do. I 
                nested it so I wouldn't have to use `self`.
            '''
            if combo == self.combos["select_input_font"]:
                input_sample.config(font=(self.all_fonts[combo.current],
                                          self.fontSize))
            elif combo == self.combos["select_output_font"]:
                output_sample.config(font=(self.all_fonts[combo.current],
                                           self.fontSize))
            else:
                print("case not handled")
            # update_idletasks() seems to speed up the redrawing of the
            #   app with the new font
            self.update_idletasks()

        sample_text = ["Sample", "Text ABCDEFGHxyz 0123456789 iIl1 o0O"]

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        sample = Frame(self)

        self.output_sample = Label(sample, text=" Output ".join(sample_text))

        self.input_sample = Entry(sample, width=50)
        self.input_sample.insert(0, " Input ".join(sample_text))

        self.fontSizeVar = tk.IntVar()
        self.fontSize = self.font_scheme[0]

        self.font_size = Scale(
            self,
            from_=8.0,
            to=26.0,
            tickinterval=6.0,
            label="Text Size",  # Can this be centered over the Scale?
            orient="horizontal",
            length=200,
            variable=self.fontSizeVar,
            command=self.show_font_size)
        self.font_size.set(self.fontSize)

        combo_names = ["select_output_font", "select_input_font"]
        self.combos = {}

        j = 2
        for name in combo_names:
            cbo = Combobox(self,
                           self.root,
                           values=self.all_fonts,
                           height=300,
                           scrollbar_size=12)
            self.combos[name] = cbo
            name = name.replace("_", " ").title()
            lab = Label(self, text=name)
            lab.grid(column=0, row=j, pady=(24, 6))
            cbo.grid(column=0, row=j + 1, pady=(6, 20))
            j += 2

        self.apply_button = Button(self, text="APPLY", command=self.apply)

        sample.grid(column=0, row=0)
        self.output_sample.grid(padx=24, pady=20)
        self.input_sample.grid(padx=24, pady=20)
        self.font_size.grid(column=0, row=1, pady=24)
        self.apply_button.grid(column=0,
                               row=7,
                               sticky="e",
                               padx=(0, 24),
                               pady=(0, 24))

        Combobox.combobox_selected = combobox_selected
Exemplo n.º 19
0
    def make_widgets(self):

        self.title('{}{} ({})'.format('Notes for Conclusion #',
                                      self.finding_id, self.birth_name))

        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=1)
        header = Frame(self)
        header.grid_columnconfigure(1, weight=1)
        header.grid_rowconfigure(0, weight=1)

        self.notes_dialog_header = Frame(header)

        content = Frame(self)

        left_panel = Frame(content)

        topiclab = Label(left_panel, text='Note Subtopics')

        self.toc = Listbox(left_panel,
                           self.sorted_subtopics,
                           view_height=424,
                           view_width=180,
                           scrollbar=False)

        self.new_index = len(self.subtopics)
        self.toc.insert(self.new_index, self.new_subtopic_label_text)
        self.toc.focus_set()
        self.toc.selection_set(0)

        self.toc.store_new_subtopic_name = self.store_new_subtopic_name
        self.toc.pass_ctrl_click = self.open_links_dialog
        self.toc.pass_delete_key = self.delete_note

        self.selected_subtopic = Label(content, text='New Note')

        self.note_input = ScrolledText(content)

        note_submit = Button(content,
                             text='Submit Changes',
                             command=self.save_changes)

        order = Button(content,
                       text='Change Order of Subtopics',
                       command=self.reorder_notes)

        radframe = LabelFrame(content, text='Make selected note...')

        self.public = Radiobutton(radframe,
                                  text='...public',
                                  anchor='w',
                                  variable=self.privacy,
                                  value=0,
                                  command=self.save_privacy_setting)

        self.private = Radiobutton(radframe,
                                   text='...private',
                                   anchor='w',
                                   variable=self.privacy,
                                   value=1,
                                   command=self.save_privacy_setting)

        close = Button(content, text='DONE', command=self.close_roles_dialog)

        # notes_statusbar = StatusbarTooltips(self)

        # visited = (
        # (above,
        # 'this is a notes_statusbar message',
        # 'this is a tooltip'),
        # (below,
        # 'this is also a notes_statusbar message',
        # 'this is another tooltip'))

        # run_statusbar_tooltips(
        # visited,
        # notes_statusbar.status_label,
        # notes_statusbar.tooltip_label)

        # grid in self
        header.grid(column=0, row=0, columnspan=2, pady=12, sticky='we')
        content.grid(column=0, row=1, sticky='news', padx=(0, 6))
        # notes_statusbar.grid(column=0, row=2, sticky='ew')

        # grid in header
        self.notes_dialog_header.grid(column=1, row=0, sticky='ew')
        self.notes_dialog_header.grid_columnconfigure(0, weight=1)

        # grid in content
        left_panel.grid(column=0, row=1, sticky='news', rowspan=2, pady=24)
        self.selected_subtopic.grid(column=1, row=1, sticky='w')
        self.note_input.grid(column=1,
                             row=2,
                             columnspan=3,
                             sticky='nsew',
                             padx=(0, 24),
                             pady=12)
        note_submit.grid(column=3, row=3, sticky='se')
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
        content.grid_rowconfigure(1, weight=1)
        order.grid(column=1, row=4)
        radframe.grid(column=2, row=5, sticky='n', pady=24)
        close.grid(column=3, row=6, sticky='se', padx=24, pady=(0, 24))

        # grid in left_panel
        topiclab.grid(column=0, row=0)
        self.toc.grid(column=0, row=1)
        for child in self.toc.listbox_content.winfo_children():
            child.bind('<<ListboxSelected>>', self.switch_note)

        self.subtopic_widgets = self.toc.listbox_content.winfo_children()

        # grid in radframe
        self.public.grid(column=0, row=0, sticky='news', padx=24)
        self.private.grid(column=0, row=1, sticky='news', padx=24)

        # rcm_widgets = (self.subtopic_input, self.note_input.text)
        # make_rc_menus(
        # rcm_widgets,
        # self.rc_menu,
        # note_dlg_msg,
        # header_parent=self.notes_dialog_header,
        # header=self.header,
        # which_dlg='notes')

        config_generic(self)
        center_window(self)
Exemplo n.º 20
0
    def make_widgets(self):

        stripview = Frame(self.parent)
        stripview.grid(column=0, row=0, padx=12, pady=12)

        self.parent.update_idletasks()
        self.colors_canvas = Canvas(
            stripview, 
            bd=1, highlightthickness=1, 
            highlightbackground=formats['highlight_bg'], 
            bg=formats['bg'],
            width=840,
            height=118
) 
        hscroll = Scrollbar(
            stripview, orient='horizontal', command=self.colors_canvas.xview)
        self.colors_canvas.configure(xscrollcommand=hscroll.set)
        
        self.colors_canvas.grid(column=0, row=0, sticky='news')
        hscroll.grid(column=0, row=1, sticky="ew")

        self.colors_content = Frame(self.colors_canvas)

        bbox1 = Frame(self.parent)
        bbox1.grid(column=0, row=1, padx=12, pady=12, sticky='we')
        bbox1.columnconfigure(1, weight=1)
        bbox1.rowconfigure(1, weight=1)

        self.try_button = Button(
            bbox1, text='TRY', width=7, command=self.config_local)
        self.try_button.grid(column=0, row=0, sticky='w')

        self.copy_button = Button(
            bbox1, text='COPY', width=7, command=self.copy_scheme)
        self.copy_button.grid(column=1, row=0)

        self.apply_button = Button(
            bbox1, text='APPLY', width=7, command=self.apply_scheme)
        self.apply_button.grid(column=2, row=0, sticky='e')

        bottom = Frame(self.parent)
        bottom.grid(column=0, row=2, padx=12, pady=12)

        addlab = LabelH3(bottom, text='New Color Scheme')
        addlab.grid(column=0, row=0, padx=6, pady=6, columnspan=2)

        self.colors_table = Frame(bottom)
        self.colors_table.grid(column=0, row=1, columnspan=2)
        self.colors_table.columnconfigure(0, weight=1)
        self.colors_table.rowconfigure(0, weight=1)

        all_schemes = get_color_schemes()

        self.h1 = Label(
            self.colors_table,
            anchor='w', 
            text=' Domain',
            font=formats['output_font'])

        self.h2 = Label(
            self.colors_table,
            anchor='w',
            text=' Color')

        opening_colors = (
            formats['bg'], 
            formats['highlight_bg'], 
            formats['head_bg'], 
            formats['fg'])

        displabel = self.make_colors_table(opening_colors)

        bbox2 = Frame(bottom)
        bbox2.grid(
            column=0, row=2, 
            padx=12, pady=12, 
            sticky='ew', columnspan=2)
        bbox2.columnconfigure(1, weight=1)
        bbox2.rowconfigure(0, weight=1)

        self.new_button = Button(
            bbox2, 
            text='CREATE NEW COLOR SAMPLE', 
            command=self.make_new_sample)
        self.new_button.grid(column=0, row=0, padx=6, pady=6, columnspan=2)

        self.make_samples()

        self.colors_canvas.create_window(
            0, 0, anchor='nw', window=self.colors_content)
        self.resize_color_samples_scrollbar()
Exemplo n.º 21
0
    finding = 1

    view = tk.Tk()
    treebard = view  # mockup; this isn't what really happens

    entry = EntryAutofill(view, width=50)
    entry.config(textvariable=entry.var)
    entry.values = place_strings
    entry.autofill = True
    entry.grid()
    entry.focus_set()
    entry.bind("<FocusOut>", get_final)

    traverse = Entry(view)
    traverse.grid()
    frame = Frame(view)
    frame.grid()

    view.mainloop()

# DO LIST

# input to db
# add a search box for ids by name or name by ids
# test all cases and make more cases to test
# concoct a case where there are
#   2 contiguous insertions not at first or last
#   2 contiguous insertions at first
#   2 contiguous insertions at last
#   2 non-contiguous insertions not at first or last
#   2 non-contiguous insertions at first
Exemplo n.º 22
0
    def show_choices(self):
        conn = sqlite3.connect(current_file)
        cur = conn.cursor()

        self.radvars = []
        for dd in self.place_dicts:
            self.var = tk.IntVar(None, 0)
            self.radvars.append(self.var)

        d = 0
        t = 0
        bullet = len(self.place_dicts)
        # configure place_id for query
        for dkt in self.place_dicts:
            add_new_place_option = False
            place_hints = []
            if len(dkt["id"]) == 1:
                if dkt.get("temp_id") is None:
                    place_id = (dkt["id"][0], )
                else:
                    place_id = (dkt["id"][0])
                    add_new_place_option = True
            elif len(dkt["id"]) > 1:
                if dkt.get("temp_id") is not None:
                    add_new_place_option = True
                place_id = dkt["id"]
            elif dkt.get("temp_id") is None:
                place_id = ("none", )
            elif dkt.get("temp_id"):
                # place id will be int type which marks it as a new place
                place_id = dkt["temp_id"]
            else:
                print("line", looky(seeline()).lineno, "case not handled")
            if type(place_id) is int:
                place_hints.append('')
            else:
                for num in place_id:
                    if num == "none":
                        place_hints.append('')
                    else:
                        cur.execute(select_place_hint, (num, ))
                        place_hint = cur.fetchone()
                        if place_hint[0] is None:
                            place_hint = ''
                        else:
                            place_hint = place_hint[0]
                        place_hints.append(place_hint)
            # reconfigure place_id for display
            if type(place_id) is int:
                if dkt["temp_id"] is not None and len(dkt["id"]) > 0:
                    place_hints.append('')
            elif add_new_place_option is True:
                place_hints.append('')
            elif len(place_id) == 1:
                place_id = place_id[0]
            else:
                print("line", looky(seeline()).lineno, "case not handled")
            place_input = dkt["input"]
            place_string = '{}: {}, place ID #{}'.format(
                bullet, place_input, place_id)

            lab = Label(self.frm, text=place_string)
            lab.grid(column=0, row=d, sticky='w')

            self.hint_frm = Frame(self.frm, name="nest{}".format(bullet - 1))
            self.hint_frm.grid(column=0,
                               row=d + 1,
                               sticky='w',
                               padx=(0, 3),
                               columnspan=2)
            self.hint_frm.columnconfigure(0, minsize=48)

            self.make_edit_row(self.hint_frm)

            h = 0
            row = 0
            for hint in place_hints:
                if dkt.get("temp_id") is not None and len(dkt["id"]) > 0:
                    # user will choose between a new ID or one of the existing IDs
                    new_id = dkt["temp_id"]
                    last_idx = len(dkt["id"])
                    if h == last_idx:
                        current_id = new_id
                        rad_string = "{}: {} (new place and new place ID)".format(
                            current_id, dkt["input"])
                    else:
                        current_id = dkt["id"][h]
                        cur.execute(select_first_nested_place, (current_id, ))
                        nesting = cur.fetchone()
                        nesting = [i for i in nesting if i]
                        nesting = ", ".join(nesting)
                        rad_string = "{}: {}".format(current_id, nesting)
                elif dkt.get("temp_id") is not None and len(dkt["id"]) == 0:
                    # user will OK or CANCEL new ID
                    current_id = dkt["temp_id"]
                    rad_string = "{}: {} (new place and new place ID)".format(
                        current_id, dkt["input"])
                else:
                    current_id = dkt["id"][h]
                    cur.execute(select_first_nested_place, (current_id, ))
                    nesting = cur.fetchone()
                    nesting = [i for i in nesting if i]
                    nesting = ", ".join(nesting)
                    rad_string = "{}: {}".format(current_id, nesting)
                rad = RadiobuttonBig(self.hint_frm,
                                     variable=self.radvars[t],
                                     value=h,
                                     text=rad_string,
                                     anchor="w")
                lab = Label(self.hint_frm,
                            text="hint: {}".format(hint),
                            anchor='w',
                            bg='red')
                editx = ButtonQuiet(
                    self.hint_frm,
                    width=2,
                    command=lambda hint=hint: self.grid_edit_row(hint))

                self.hint_frm.columnconfigure(1, weight=1)
                rad.grid(column=0, row=row, sticky='we', columnspan=2)
                editx.grid(column=0, row=row + 1, pady=(0, 3), sticky='e')
                lab.grid(column=1, row=row + 1, sticky='w', padx=6)

                editx.bind('<Enter>', self.on_hover)
                editx.bind('<Leave>', self.on_unhover)
                editx.bind('<Button-1>', self.get_clicked_row)
                editx.bind('<space>', self.get_clicked_row)
                editx.bind('<FocusIn>', self.on_hover)
                editx.bind('<FocusOut>', self.on_unhover)
                h += 1
                row += 2

            sep = Separator(self.frm, 3)
            sep.grid(column=0,
                     row=d + 2,
                     sticky='ew',
                     columnspan=3,
                     pady=(3, 0))
            d += 3
            t += 1
            bullet -= 1

        cur.close()
        conn.close()
Exemplo n.º 23
0
    def make_widgets(self):
        def show_message():

            window.columnconfigure(1, weight=1)
            window.rowconfigure(1, weight=1)
            lab = MessageHilited(window,
                                 text=self.message,
                                 justify='left',
                                 aspect=500)
            lab.grid(column=1, row=1, sticky='news', ipady=18)

        def ok():
            if self.do_on_ok:
                self.do_on_ok()
            cancel()

        def cancel():
            self.new_places_dialog.destroy()

        size = (self.parent.winfo_screenwidth(),
                self.parent.winfo_screenheight())
        self.new_places_dialog = Toplevel(self.parent)
        self.new_places_dialog.geometry("+84+84")
        self.new_places_dialog.maxsize(width=int(size[0] * 0.85),
                                       height=int(size[1] * 0.95))
        self.new_places_dialog.columnconfigure(1, weight=1)
        self.new_places_dialog.rowconfigure(4, weight=1)
        canvas = Border(self.new_places_dialog, size=3)  # don't hard-code size
        canvas.title_1.config(text=self.title)
        canvas.title_2.config(text='')

        window = Frame(canvas)
        canvas.create_window(0, 0, anchor='nw', window=window)
        scridth = 16
        scridth_n = Frame(window, height=scridth)
        scridth_w = Frame(window, width=scridth)
        scridth_n.grid(column=0, row=0, sticky='ew')
        scridth_w.grid(column=0, row=1, sticky='ns')
        # DO NOT DELETE THESE LINES, UNCOMMENT IN REAL APP
        # self.treebard.scroll_mouse.append_to_list([canvas, window])
        # self.treebard.scroll_mouse.configure_mousewheel_scrolling()

        window.vsb = Scrollbar(self.new_places_dialog,
                               hideable=True,
                               command=canvas.yview,
                               width=scridth)
        window.hsb = Scrollbar(self.new_places_dialog,
                               hideable=True,
                               width=scridth,
                               orient='horizontal',
                               command=canvas.xview)
        canvas.config(xscrollcommand=window.hsb.set,
                      yscrollcommand=window.vsb.set)
        window.vsb.grid(column=2, row=4, sticky='ns')
        window.hsb.grid(column=1, row=5, sticky='ew')

        buttonbox = Frame(window)
        b1 = Button(buttonbox, text=self.button_labels[0], width=7, command=ok)
        b2 = Button(buttonbox,
                    text=self.button_labels[1],
                    width=7,
                    command=cancel)

        scridth_n.grid(column=0, row=0, sticky='ew')
        scridth_w.grid(column=0, row=1, sticky='ns')
        window.columnconfigure(2, weight=1)
        window.rowconfigure(1, minsize=60)
        buttonbox.grid(column=1, row=3, sticky='se', pady=6)

        b1.grid(column=0, row=0)
        b2.grid(column=1, row=0, padx=(2, 0))

        self.frm = Frame(window)
        self.frm.grid(column=1, row=2, sticky='news', pady=12)

        show_message()
        self.show_choices()

        resize_scrolled_content(self.new_places_dialog, canvas, window)

        self.new_places_dialog.focus_set()
Exemplo n.º 24
0
    def make_widgets(self):

        if self.parent.winfo_class() == 'Toplevel':
            gallery_canvas = Canvas(
                self.parent,
                bd=0,
                highlightthickness=0)

            self.gallery_content = Frame(gallery_canvas)
            gallery_canvas.grid(row=0, column=0, sticky='nsew')

            self.parent.grid_columnconfigure(0, weight=1)
            self.parent.grid_rowconfigure(0, weight=1)
        else:
            self.gallery_content = Frame(self.parent)
            self.gallery_content.grid(column=0, row=0)

        self.thumb_canvas = Canvas(
            self.gallery_content, 
            bd=0, 
            highlightthickness=0,
            bg=formats['bg'])
        self.thumb_canvas.pack(padx=12, pady=12)

        self.thumbstrip = Frame(self.thumb_canvas)
        self.thumbstrip.pack(side='top')

        self.previous_img = Button(self.gallery_content, text='<<', width=6)

        self.pic_canvas = Canvas(
            self.gallery_content, 
            highlightbackground=formats['bg'])
        self.pic_canvas.bind('<Button-1>', self.focus_clicked)
        self.pic_canvas.bind('<Button-1>', self.scroll_start, add='+')
        self.pic_canvas.bind('<B1-Motion>', self.scroll_move)     

        self.img_path = '{}treebard_gps\data\{}\images\{}'.format(
            root_drive, self.image_dir, self.main_pic)
        img_big = Image.open(self.img_path)
        self.tk_img = ImageTk.PhotoImage(img_big)
        self.pic_canvas.image = self.tk_img

        z = 0
        self.current_pictures = sorted(self.current_pictures)

        for img in self.current_pictures:
            pic_col = Frame(self.thumbstrip)
            pic_col.pack(side='left', expand=1, fill='y')

            pic_file = img
            self.img_path = '{}treebard_gps\data\{}\images\{}'.format(root_drive, self.image_dir, pic_file)
            idx = len(pic_file)
            bare = pic_file[0:idx-4]
            thumbsy = Image.open(self.img_path)
            self.width_strings.append(thumbsy.width)
            self.height_strings.append(thumbsy.height)
            thumbsy.thumbnail((185,85))
            thumb_path = 'images/{}_tmb.png'.format(bare)
            # overwrites file by same name if it exists 
            thumbsy.save(thumb_path)
            small = ImageTk.PhotoImage(file=thumb_path, master=self.thumbstrip)

            thumb = Label(
                pic_col,
                image=small)
            thumb.pack(expand=1, fill='y')
            thumb.image = small

            self.thumb_labels.append(thumb)

            # lambda used to save value in loop
            if self.parent.winfo_class() == 'Toplevel':
                rad = Radiobutton(
                    pic_col,
                    takefocus=0,
                    value=pic_file,
                    command=lambda pic_file=pic_file: self.set_main_pic(
                        pic_file))   
                rad.pack()

                if rad['value'] == self.main_pic:
                    rad.select()

            else:                
                rad = Frame(
                    pic_col,
                    height=24,
                    width=24)   
                rad.pack(expand=1, fill='both')
                if self.parent.winfo_name() == 'source_tab':
                    pic_file = '{}, {}'.format(self.source, pic_file)
            
            create_tooltip(rad, pic_file)

            z += 1

        self.pil_img = img_big
        self.fit_canvas_to_pic()

        self.thumb_dict = dict(zip(self.thumb_labels, self.current_pictures))
        self.next_img = Button(self.gallery_content, text='>>', width=6)

        panel = Frame(self.gallery_content)

        subject = LabelH3(panel, text=self.curr_entity)
        subject.grid(column=0, row=0, sticky='ew')

        # labels with selectable multiline text
        self.caption_lab = MessageCopiable(panel, width=36)
        self.picfile_lab = MessageCopiable(panel, width=36)
        self.picsize_lab = MessageCopiable(panel, width=36)
        edit = Button(
            panel, 
            text='EDIT', 
            width=8, 
            command=lambda graphics=self.t7: self.go_to_graphics(graphics))

        self.previous_img.config(command=self.back)
        self.next_img.config(command=self.forward)

        panel.grid_rowconfigure(0, weight=2)
        panel.grid_rowconfigure(1, weight=1)
        panel.grid_rowconfigure(4, weight=2)

        self.caption_lab.grid(column=0, row=1, pady=(12,12), sticky='ew')
        self.caption_lab.insert(1.0, self.caption_text)

        self.picfile_lab.grid(column=0, row=2, pady=(12,0), sticky='ew')
        self.picfile_lab.insert(1.0, self.img_path)

        self.picsize_lab.grid(column=0, row=3, pady=(0,24), sticky='ew')
        self.picsize_lab.insert(
            1.0, 
            'width: {}, height: {}'.format(
                self.pil_img.width, self.pil_img.height))

        edit.grid(column=0, row=4)

        self.caption_lab.set_height()
        self.picfile_lab.set_height()
        self.picsize_lab.set_height()

        self.previous_img.pack(side='left', padx=12)
        self.pic_canvas.pack(side='left', expand=1, fill='y')
        self.next_img.pack(side='left', padx=12)

        panel.pack(side='left', expand=1, fill='y')

        for thumb in self.thumb_labels:
            thumb.bind('<Button-1>', self.show_clicked)

        self.pic_canvas.bind('<Key-Left>', lambda evt: self.back())

        self.pic_canvas.bind('<Key-Right>', lambda evt: self.forward())

        # add statusbar-tooltips

        self.visited = (
            (self.thumbstrip, 
                "Thumbnail Views", 
                "Click thumbnail to display. Hover below to see "
                   "file name. If radio, click to make main image."),
            (self.pic_canvas, 
                "Image", 
                "Arrow keys change image when it's in focus."),
            (self.previous_img, 
                "Left Button", 
                "Click with mouse or when highlighted click with spacebar."),
            (self.next_img, 
                "Right Button", 
                "Click with mouse or when highlighted click with spacebar.")) 

        if self.parent.winfo_class() == 'Toplevel':
     
            box = Frame(self.parent)
            box.grid(column=0, row=1, pady=12)

            close = Button(
                box, 
                text='CLOSE', 
                width=8, 
                command=self.cancel_gallery)  
            close.grid()
            self.parent.protocol('WM_DELETE_WINDOW', self.cancel_gallery)

        self.thumb_canvas.create_window(0, 0, anchor='nw', window=self.thumbstrip)
        self.thumb_canvas.config(
            scrollregion=(
                0, 0, 
                self.thumbstrip.winfo_reqwidth(), 
                self.thumbstrip.winfo_reqheight()))
        
        self.thumb_canvas.config(
            width=self.root.maxsize()[0], 
            height=self.thumbstrip.winfo_reqheight())
        
        scroll_width = int(self.thumb_canvas['scrollregion'].split(' ')[2])

        if scroll_width >= int(self.thumb_canvas['width']):
            for child in self.thumbstrip.winfo_children():
                for gchild in child.winfo_children():
                    gchild.bind("<Enter>", self.thumb_start)
                    gchild.bind("<Motion>", self.thumb_move)

        if self.parent.winfo_class() == 'Toplevel':

            gallery_canvas.create_window(
                0, 0, anchor=tk.NW, window=self.gallery_content)
            self.resize_scrollbar()
            self.resize_window()

        self.config_labels()
Exemplo n.º 25
0
    def delete_note(self):
        '''
            Since any given note can be re-used more than once by linking it 
            to any number of findings, delete note from note table only if 
            the note_id no longer exists at all in the findings_notes table; 
            not every time a note_id is deleted from the findings_notes table. 
        '''
        def ok_delete():
            run_delete()
            cancel_delete()

        def cancel_delete():
            self.focus_set()
            deleter.destroy()

        def run_delete():

            note_count_per_finding = 0

            self.toc.delete(selected)
            self.note_input.text.delete(1.0, 'end')
            self.selected_subtopic.config(text='')
            cur.execute(delete_findings_notes, (deletable, self.finding_id))
            conn.commit()

            if delete_var.get() == 1:
                cur.execute(select_count_findings_notes_note_id, (deletable, ))
                linked_notes = cur.fetchone()[0]

                if linked_notes == 0:
                    cur.execute(delete_note, (deletable, ))
                    conn.commit()
                cur.execute(select_count_findings_notes_finding_id,
                            (self.finding_id, ))
                note_count_per_finding = cur.fetchone()[0]

            cur.close()
            conn.close()

            self.toc.selection_clear()

            if note_count_per_finding == 0:
                self.pressed.config(text='     ')

            self.refresh()

        selected = self.toc.curselection()
        subtopic = self.toc.get(selected)
        if subtopic is None:
            return

        conn = sqlite3.connect(self.current_file)
        conn.execute('PRAGMA foreign_keys = 1')
        cur = conn.cursor()
        cur.execute(select_note_id, (subtopic, ))
        deletable = cur.fetchone()
        if deletable is None:
            return
        elif deletable is not None:
            deletable = deletable[0]

        delete_var = tk.IntVar()

        deleter = Toplevel(self)
        deleter.title('Delete Note Dialog')

        instrux = LabelH3(
            deleter, text='Any note can be linked to any number of entities.')

        radio1 = Radiobutton(deleter,
                             text='Delete this instance of this note.',
                             value=0,
                             variable=delete_var)

        radio2 = Radiobutton(deleter,
                             text='Delete all instances of this note.',
                             value=1,
                             variable=delete_var)

        instrux.grid(column=0, row=0, columnspan=2, padx=24, pady=24)
        radio1.grid(column=0, row=1)
        radio2.grid(column=1, row=1)

        buttonbox = Frame(deleter)
        buttonbox.grid(column=1, row=2, sticky='e')
        b1 = Button(buttonbox, text='OK', command=ok_delete)
        b2 = Button(buttonbox, text='Cancel', command=cancel_delete)
        b1.grid(column=0, row=0)
        b2.grid(column=1, row=0)