Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
crossover / opt / cxoffice / lib / python / bottletreeview.py
Size: Mime:
# (c) Copyright 2009-2012. CodeWeavers, Inc.

import cxmenu

class Launcher(object):
    can_launch = False
    can_move = False
    can_rename = False
    can_delete = False
    can_add_shortcut = False

    description = ''
    id = ''
    bottle = None
    children = ()
    parent = None
    path = None
    expanded = True
    menuitem = None


class MenuFolder(Launcher):
    def __init__(self):
        Launcher.__init__(self)
        self.children = []

class MenuLauncher(Launcher):
    def start(self):
        if self.menuitem is not None:
            self.menuitem.start()

class BottleTreeView(object):
    def get_items(self, bottlename):
        if bottlename is None:
            return

        result = []

        menu_folder_objects = {}

        # enumerate menus
        menuprefs = cxmenu.MenuPrefs(bottlename, False)
        menuprefs.fast_refresh()

        for menu in menuprefs:
            menuitem = menuprefs[menu]
            path = menuitem.path
            splitpath = path.split('/')
            if path.startswith('StartMenu'):
                # FIXME: Localize, or better yet use the bottle's menuroot configuration
                splitpath[0] = "Start Menu"
            elif path.startswith('Desktop'):
                # FIXME: Localize
                splitpath[0] = "Desktop"

            for i in range(0, len(splitpath)-1):
                folder_name = '/'.join(splitpath[0:i+1])
                if folder_name not in menu_folder_objects:
                    menufolder = MenuFolder()
                    menufolder.description = splitpath[i]
                    menufolder.id = folder_name
                    if i != 0:
                        menufolder.parent = menu_folder_objects['/'.join(splitpath[0:i])]
                        menufolder.parent.children.append(menufolder)
                    else:
                        result.append(menufolder)
                    menu_folder_objects[menufolder.id] = menufolder

            item = MenuLauncher()
            item.description = splitpath[-1]
            item.description = item.description.replace(".lnk", "")
            item.menuitem = menuitem
            item.id = menu
            item.parent = menu_folder_objects['/'.join(splitpath[0:-1])]
            item.bottle = bottlename
            item.path = menuitem.full_path

            menu_folder_objects['/'.join(splitpath[0:-1])].children.append(item)

        return result