You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeutils/superkaramba/examples/service_group/service_group.py

147 lines
5.4 KiB

# Service Groups demo
# Written by Luke Kenneth Casson Leighton <lkcl@lkcl.net>
# This theme is demonstrates how to parse service groups.
# it's done recursively to give a complete dump of your menu
# that you will also be able to double-check against kmenuedit
# and also the KDE Start button.
#
# for a real-live usage, see kroller.sez (try searching kde-look.org),
# which fires off a sub-theme with the service-group menu options when
# you click on a service group on the "main" bar.
#this import statement allows access to the karamba functions
import karamba
# simple function to display
def create_text(widget, line, depth, disp, name=None, command=None, icon=None):
print(name)
print(disp)
x = depth*30
y = line*12
width = 400
height = 12
drop_txt = karamba.createText(widget, x, y, width, height, disp)
karamba.changeTextSize(widget, drop_txt, 11)
karamba.changeTextColor(widget, drop_txt, 252,252,252)
# create a (very narrow! only an 12-pixel-high area!)
# service click area to demonstrate that commands get
# executed correctly.
if name:
karamba.createServiceClickArea( widget,
x,y,width,height,
str(name), str(command), str(icon))
# okay. you really should be looking up the KDE Developer documentation
# on service groups. here is a _brief_ explanation of what they contain.
#
# getServiceGroups returns a list of menu options.
# you can either have a subgroup, or you can have an executable program.
# if a list item is a subgroup, then (0, dict) is returned, where
# dict is a dictionary containing information describing the subgroup.
# if a list item is an executable menu option, then (1, dict) is returned,
# where dict is a dictionary containing information describing the menu option.
#
# the information (keys in the dictionary) returned about a subgroup comprises:
# relpath - the fully qualified path of that subgroup, and
# calling getServiceGroups (again) with that path will get
# you all of the menu options in that subgroup, hurrah.
# icon - the name of an icon (a png, usually) which you can, if you
# so wish, use as the filename argument to createImage().
# caption - i get confused as to which is which, but
# and you can always run this program in combination
# comment with kmenuedit to find out!
#
# the information (keys in the dictionary) returned about an
# executable option comprises:
# exec - obviously the most important bit: the name of the command
# to be executed.
# icon - the filename of the icon (usually a png) which should be
# displayed for this command.
# name - not to be confused with genericname, neither of which i
# am sure about, and if you really want to know, run
# kmenuedit and experiment, or look at the KDE Developer source
# code.
# menuid - don't know what it is for. it's just... there.
#
# how to use the service group info:
#
# the simplest way to get commands actually executed is to hand
# over the name, the command and the icon filename to a
# ServiceClickArea (karamba.createServiceClickArea()).
#
# other than making sure that you put the service click area in
# the right place, you don't have to worry about much else.
#
# or, you could always run it manually, yourself, by using
# karamba.Run(name, command, icon). personally, i prefer
# the service click areas. no, karamba.Run() is not like
# karamba.execute() - if you use karamba.Run() you get to say which
# bouncing icon is used, whereas if you use karamba.execute() you
# always get a superkaramba bouncing icon...
#
# do look out for kroller.sez on http://kde-look.org or other locations
# for a more complex and comprehensive usage of service groups.
def display_svc_group(widget, rel_path, line, depth):
grps = karamba.getServiceGroups(rel_path)
for (type, d) in grps:
if type == 0:
# it's a
sub_relpath = d[b'relpath'].decode('utf-8')
icon = d.get(b'icon', 'unknown').decode('utf-8')
caption = d.get(b'caption', b'').decode('utf-8')
comment = d.get(b'comment', b'').decode('utf-8')
cmt = ''
# get at least something to display
if comment:
cmt = comment
elif caption:
cmt = caption
msg = "SVCGRP: %s %s" % (icon, cmt)
print("MSG="+msg)
create_text(widget, line, depth, msg)
line += 1
line = display_svc_group(widget, str(sub_relpath),
line, depth+1)
elif type == 1 and b'menuid' in d:
relpath = d.get(b'relpath', b'').decode('utf-8')
cmd = d[b'exec'].decode('utf-8')
icon = d.get(b'icon', 'unknown').decode('utf-8')
name = d.get(b'name', b'').decode('utf-8')
genericname = d.get(b'genericname', b'')
cmt = ''
# get at least something to display
if genericname:
cmt = genericname.decode('utf-8')
elif name:
cmt = name
msg = "%s %s %s" % (cmd, icon, cmt)
create_text(widget, line, depth, msg, name, cmd, icon)
line += 1
return line
#this is called when you widget is initialized
def initWidget(widget):
display_svc_group(widget, "", 0, 0)
karamba.redrawWidget(widget)