summaryrefslogtreecommitdiffstats
path: root/superkaramba/examples/service_group/service_group.py
diff options
context:
space:
mode:
Diffstat (limited to 'superkaramba/examples/service_group/service_group.py')
-rw-r--r--superkaramba/examples/service_group/service_group.py143
1 files changed, 143 insertions, 0 deletions
diff --git a/superkaramba/examples/service_group/service_group.py b/superkaramba/examples/service_group/service_group.py
new file mode 100644
index 0000000..276b9c8
--- /dev/null
+++ b/superkaramba/examples/service_group/service_group.py
@@ -0,0 +1,143 @@
+# 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):
+
+ x = depth*30
+ y = line*7
+ width = 400
+ height = 8
+ drop_txt = karamba.createText(widget, x, y, width, height, disp)
+ karamba.changeTextSize(widget, drop_txt, 7)
+ karamba.changeTextColor(widget, drop_txt, 252,252,252)
+
+ # create a (very narrow! only an 8-pixel-high area!)
+ # service click area to demonstrate that commands get
+ # executed correctly.
+
+ if name:
+ karamba.createServiceClickArea( widget,
+ x,y,width,height,
+ name, command, 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 is 0:
+
+ # it's a
+
+ sub_relpath = d['relpath']
+ icon = d.get('icon', 'unknown')
+ caption = d.get('caption', None)
+ comment = d.get('comment', None)
+ cmt = ''
+
+ # get at least something to display
+ if comment:
+ cmt = comment
+ elif caption:
+ cmt = caption
+
+ msg = "SVCGRP: %s %s" % (icon, cmt)
+ create_text(widget, line, depth, msg)
+ line += 1
+ line = display_svc_group(widget, sub_relpath,
+ line, depth+1)
+
+ elif type is 1 and d.has_key('menuid'):
+
+ relpath = d.get('relpath', '')
+ cmd = d['exec']
+ icon = d.get('icon', 'unknown')
+ name = d.get('name', None)
+ genericname = d.get('genericname', None)
+ cmt = ''
+
+ # get at least something to display
+ if genericname:
+ cmt = genericname
+ 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)
+