Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from os import path
- from content.pages.home.config.setup import setup
- from pynput.mouse import Listener
- from cache import Cache
- from widgets import Container
- from menus import PopupMenu
- from tkinter import messagebox
- ABS_PATH = path.dirname(path.realpath(__file__))
- PAGES_PATH = path.join(f'{ABS_PATH}', 'plugins')
- popups = {
- 'default': {
- 'type': 'PopupMenu',
- 'config': [
- ('bd', 1),
- ('font', 'helvetica 10'),
- ('relief', 'raised'),
- ('tearoff', 0),
- ('foreground', '#000000'),
- ('background', '#eff0f1'),
- ('activeforeground', '#ffffff'),
- ('activebackground', '#00aaff'),
- ],
- 'cut': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Cut'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'copy': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Copy'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'paste': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Paste'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- },
- 'treeview': {
- 'type': 'PopupMenu',
- 'config': [
- ('bd', 1),
- ('font', 'helvetica 10'),
- ('relief', 'raised'),
- ('tearoff', 0),
- ('foreground', '#000000'),
- ('background', '#eff0f1'),
- ('activeforeground', '#ffffff'),
- ('activebackground', '#00aaff'),
- ],
- 'cut': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Cut'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'copy': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Copy'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'paste': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Paste'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'sep1': {
- 'type': 'MenuSeparator',
- },
- 'new_menu': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Add Menu'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- 'new_item': {
- 'type': 'MenuItem',
- 'options': [
- ('label', 'Add Menu Item'),
- ('image', 'drive-harddisk.png'),
- ('underline', 0),
- ('accelerator', 'Alt+D '),
- ],
- },
- },
- }
- class Plugin(Container):
- def __init__(self, parent, key):
- Container.__init__(self, parent, key, **setup)
- self.popup = \
- self.listener = None
- def build(self):
- pmc = Cache(key='popups', data=popups)
- def cut(_uri, tko):
- ent_path.event_generate('<Control-x>')
- def copy(_uri, tko):
- ent_path.event_generate('<Control-c>')
- def paste(_uri, tko):
- ent_path.event_generate('<Control-v>')
- def create_project(e):
- print(22222, e.widget.get())
- def option(_uri, tko):
- messagebox.showinfo(_uri, f'You clicked "{tko.label}".')
- def validate_entry(value):
- if not value:
- return True
- char = value[0] if len(value) == 1 else value[-1]
- if char.isalnum() or char == '_':
- if len(value) >= 2 and value[-1] == '_' and value[-2] == '_':
- return False
- return True
- return False
- def context_menu(event):
- try:
- event.widget.focus()
- PopupMenu(event.widget, key, **{key: event.widget.cfg}).tk_popup(event.x_root + 5, event.y_root + 5)
- except tk.TclError:
- pass
- register = self.parent.register(validate_entry)
- pane = self.get_item('body/pane')
- treeview = pane.get_item('left/treeview')
- ent_path = pane.get_item('left/path/ent_path')
- ent_name = pane.get_item('right/section1/ent_name')
- ent_name.bind('<Return>', create_project)
- ent_name.bind('<KP_Enter>', create_project)
- ent_name.config(validate='key', validatecommand=(register, '%P'))
- default_commands = dict((
- ('default/copy/options', ('command', copy)),
- ('default/paste/options', ('command', paste)),
- ('default/cut/options', ('command', cut)),
- ))
- popup_widgets = {
- 'path': {'widget': ent_path, 'commands': default_commands},
- 'ent_name': {'widget': ent_name, 'commands': default_commands},
- 'treeview': {
- 'widget': treeview,
- 'commands': dict((
- ('treeview/copy/options', ('command', option)),
- ('treeview/paste/options', ('command', option)),
- ('treeview/cut/options', ('command', option)),
- ('treeview/delete/options', ('command', option)),
- ('treeview/new_menu/options', ('command', option)),
- ('treeview/new_item/options', ('command', option)),
- )),
- },
- }
- for key, popup in popup_widgets.items():
- widget = popup.get('widget')
- widget.commands = popup.get('commands')
- for _uri, command in widget.commands.items():
- opts = pmc.get(_uri)
- if not opts:
- opts = pmc.get(f'default/{_uri.split("/", 1)[1]}')
- if opts:
- opts.append(command)
- widget.cfg = popups.get(key, popups.get('default'))
- for popup in popup_widgets.values():
- popup.get('widget').bind(f'<Button-3>', context_menu)
- return self
- def show(self):
- for k, n in self.parent.nodes.items():
- if self.key != k:
- n.grid_remove()
- self.grid(**self.grid_args)
- return self
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement