summaryrefslogtreecommitdiffstats
path: root/superkaramba/examples/cleanbar
diff options
context:
space:
mode:
Diffstat (limited to 'superkaramba/examples/cleanbar')
-rw-r--r--superkaramba/examples/cleanbar/README25
-rw-r--r--superkaramba/examples/cleanbar/cleanbar.py263
-rw-r--r--superkaramba/examples/cleanbar/cleanbar.theme14
-rw-r--r--superkaramba/examples/cleanbar/pics/bar2.pngbin0 -> 6801 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/rightend.pngbin0 -> 311 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/rightend_new.pngbin0 -> 4634 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/slickbar.pngbin0 -> 1993 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/startup.pngbin0 -> 2475 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/task.pngbin0 -> 305 bytes
-rw-r--r--superkaramba/examples/cleanbar/pics/task_new.pngbin0 -> 2382 bytes
10 files changed, 302 insertions, 0 deletions
diff --git a/superkaramba/examples/cleanbar/README b/superkaramba/examples/cleanbar/README
new file mode 100644
index 0000000..2c6b146
--- /dev/null
+++ b/superkaramba/examples/cleanbar/README
@@ -0,0 +1,25 @@
+Cleanbar for SuperKaramba, version 0.4
+Written by Adam Geitgey <adam@rootnode.org>
+Released under the GNU General Public License version 2
+
+
+Cleanbar requires SuperKaramba 0.31 or higher!!
+
+
+Cleanbar is a simple taskbar, xmms control, and clock. Cleanbar is quick,
+simple, and appealing.
+
+The Launch button brings up the TDE Menu. The play control buttons will control
+XMMS (xmmsctrl is required). A clock is shown on the right. Tasks show up
+along the middle and the taskbar works just like any other taskbar from the
+last 10 years.
+
+I created this basically as a quick example of how to use the new
+event-based task control API in SuperKaramba 0.31.
+
+It also demonstrates how to create themes that work at any resolution. You
+should not have to change anything for this to work on your desktop.
+
+Please report any major problems you have.
+
+Thanks.
diff --git a/superkaramba/examples/cleanbar/cleanbar.py b/superkaramba/examples/cleanbar/cleanbar.py
new file mode 100644
index 0000000..16bd18f
--- /dev/null
+++ b/superkaramba/examples/cleanbar/cleanbar.py
@@ -0,0 +1,263 @@
+#this import statement allows access to the karamba functions
+import karamba
+import os
+import time
+
+######################################
+## Globals
+######################################
+
+init = 0
+numOfTasks = 0
+
+## Default res
+## You don't need to change it. It should auto-detect.
+resX = 1024
+resY = 768
+
+# list of tasks
+taskList = []
+
+# focused task
+activeTask = 0
+
+## Task display stuff
+taskPanels = []
+taskText = []
+taskMenu = 0
+taskMenuLookup = {}
+timeText = 0
+
+## My code to detect resolution
+havexwi = os.system("which xwininfo")
+
+if (havexwi == 0):
+ pass
+else:
+ print("\nCan't find xwininfo in your path.")
+
+fp = os.popen("xwininfo -root -stats")
+output = fp.read()
+output = output.splitlines()
+i = 0
+for x in output:
+ param = x.split()
+ if (len(param) > 1):
+ if param[0].find("Width:") != -1:
+ resX = int(param[1])
+ if param[0].find("Height:") != -1:
+ resY = int(param[1])
+
+
+def drawTaskbar(widget):
+ global taskPanels
+ global taskText
+ global numOfTasks
+
+ taskList = karamba.getTaskList(widget)
+
+ for image in taskPanels:
+ karamba.hideImage(widget, image)
+
+ for text in taskText:
+ karamba.changeText(widget, text, "")
+ karamba.changeTextShadow(widget, text, 0)
+ karamba.changeTextColor(widget,text,0,0,0)
+
+ length = len(taskList)
+ if (numOfTasks < length):
+ length = numOfTasks
+
+
+ knownGroups = {}
+ groups = []
+ groupRefs = {}
+
+ activeGroup = 0
+ groupCount = 0
+
+ #build groups list that contains sub-lists of taskInfo sorted by group
+ for j in range(len(taskList)):
+ taskinfo = karamba.getTaskInfo(widget, taskList[j])
+
+ if (taskinfo[2] in knownGroups) == 0:
+ groupCount = groupCount + 1
+ if (taskinfo[7] == 1):
+ activeGroup = groupCount
+ knownGroups[taskinfo[2]] = 1
+ thisGroup = []
+ thisGroup.append(taskinfo)
+ groupRefs[taskinfo[2]] = len(groups)
+ groups.append(thisGroup)
+ else:
+ if (taskinfo[7] == 1):
+ activeGroup = groupRefs[taskinfo[2]] + 1
+ knownGroups[taskinfo[2]] = knownGroups[taskinfo[2]] + 1
+ thisGroup = groups[groupRefs[taskinfo[2]]]
+ thisGroup.append(taskinfo)
+
+ #fill out the task bar
+ j = 0
+ for group in groups:
+ #safety check (could be more task groups than bar is long)
+ if (j < length):
+ karamba.showImage(widget, taskPanels[j])
+ if len(group) != 1:
+ karamba.changeText(widget, taskText[j], group[0][2].decode('utf-8') + ' [' + str(len(group)) + ']')
+ else:
+ karamba.changeText(widget, taskText[j], group[0][0].decode('utf-8'))
+ j = j + 1
+
+ if (activeGroup != 0):
+ karamba.changeTextShadow(widget, taskText[activeGroup - 1], 1)
+ karamba.changeTextColor(widget, taskText[activeGroup - 1], 239, 220, 11)
+
+ karamba.moveWidget(widget, 0, resY - 32)
+ karamba.resizeWidget(widget, resX, resY)
+ karamba.redrawWidget(widget)
+
+#this is called when your widget is initialized
+def initWidget(widget):
+ global resX
+ global numOfTasks
+ global taskPanels
+ global taskText
+ global timeText
+
+ karamba.createImage(widget, resX - 149, 0, "pics/rightend_new.png")
+ numOfTasks = (resX - 198 - 149) // 121
+
+ timeText = karamba.createText(widget, resX - 149 + 54, 10, 140, 20, "time")
+ karamba.changeTextColor(widget, timeText, 0,0,0)
+ karamba.changeTextSize(widget, timeText, 9)
+
+ for i in range(numOfTasks):
+ taskPanels.append(karamba.createImage(widget, 198 + (121*i), 3, "pics/task_new.png"))
+ taskText.append(karamba.createText(widget, 198 + (121*i) +9, 9, 100, 20, ""))
+
+ for text in taskText:
+ karamba.changeTextSize(widget,text,9)
+
+ drawTaskbar(widget)
+
+# called to indicate that a new task is currently started
+def startupAdded(widget, startup):
+ pass
+
+# called whenever a startup is removed. Which either means the task is
+# successfully started (and taskAdded will be called), or the task could
+# not be started for some reason.
+def startupRemoved(widget, startup):
+ pass
+
+# called whenever a new task has been started
+def taskAdded(widget, task):
+ drawTaskbar(widget)
+
+# called whenever a task is removed
+def taskRemoved(widget, task):
+ drawTaskbar(widget)
+
+# called whenever a new task has gained focus.
+# task = the active task
+def activeTaskChanged(widget, task):
+ drawTaskbar(widget)
+
+#this is called everytime your widget is updated
+#the update inverval is specified in the .theme file
+def widgetUpdated(widget):
+ global timeText
+
+ karamba.changeText(widget, timeText, time.strftime("%I:%M %p %a",time.localtime(time.time())))
+ karamba.redrawWidget(widget)
+
+
+#This gets called everytime our widget is clicked.
+#Notes:
+# widget = reference to our widget
+# x = x position (relative to our widget)
+# y = y position (relative to our widget)
+# botton = button clicked:
+# 1 = Left Mouse Button
+# 2 = Middle Mouse Button
+# 3 = Right Mouse Button, but this will never happen
+# because the right mouse button brings up the
+# Karamba menu.
+# 4,5 = Scroll wheel up and down
+def widgetClicked(widget, x, y, button):
+ global numOfTasks
+ global taskMenu
+ global taskMenuLookup
+
+ taskSelected = (x-198) // 121
+
+ ## Make sure its a valid task
+ if (0 <= taskSelected < numOfTasks):
+ taskList = karamba.getTaskList(widget)
+
+ #free last menu
+ karamba.deleteMenu(widget, taskMenu)
+
+ #create new menu
+ taskMenu = karamba.createMenu(widget)
+ taskMenuLoopup = {}
+
+ length = len(taskList)
+ if (numOfTasks < length):
+ length = numOfTasks
+
+
+ knownGroups = {}
+ groups = []
+ groupRefs = {}
+ for j in range(len(taskList)):
+ taskinfo = karamba.getTaskInfo(widget, taskList[j])
+
+ if (taskinfo[2] in knownGroups) == 0:
+ knownGroups[taskinfo[2]] = 1
+ thisGroup = []
+ thisGroup.append(taskinfo)
+ groupRefs[taskinfo[2]] = len(groups)
+ groups.append(thisGroup)
+ else:
+ knownGroups[taskinfo[2]] = knownGroups[taskinfo[2]] + 1
+ thisGroup = groups[groupRefs[taskinfo[2]]]
+ thisGroup.append(taskinfo)
+
+ if taskSelected < len(groups):
+ taskGroup = groups[taskSelected]
+
+ if len(taskGroup) == 1:
+ #only one task in group - just switch to that app
+ ## perform the task action (see Task API for list of numbers)
+ karamba.performTaskAction(widget, taskGroup[0][8], 8)
+ else:
+ #more than one task in this group, make a popup
+ for task in taskGroup:
+ #if it's minimized, put []'s around name
+ if task[5] == 1:
+ item = karamba.addMenuItem(widget, taskMenu, "[ " + task[0].decode('utf-8') + " ]", task[2].decode('utf-8'))
+ else:
+ item = karamba.addMenuItem(widget, taskMenu, task[0].decode('utf-8'), task[2].decode('utf-8'))
+ #save the taskInfo item for later use
+ #so we will know info for the task that
+ #will be clicked in the callback
+ taskMenuLookup[item] = task
+
+ numOfItems = len(taskGroup)
+ karamba.popupMenu(widget, taskMenu, 198 + (121*taskSelected), -1 * (numOfItems * 26))
+
+ if (taskSelected == numOfTasks):
+ karamba.toggleShowDesktop(widget)
+
+
+#This gets called when an item is clicked in a popup menu you have created.
+# menu = a reference to the menu
+# id = the number of the item that was clicked.
+def menuItemClicked(widget, menu, id):
+ global taskMenuLookup
+
+ taskinfo = taskMenuLookup[id]
+ karamba.performTaskAction(widget, taskinfo[8], 8)
+
+
diff --git a/superkaramba/examples/cleanbar/cleanbar.theme b/superkaramba/examples/cleanbar/cleanbar.theme
new file mode 100644
index 0000000..0dc6faa
--- /dev/null
+++ b/superkaramba/examples/cleanbar/cleanbar.theme
@@ -0,0 +1,14 @@
+KARAMBA X=0 Y=0 W=1600 H=31 LOCKED=true ONTOP=TRUE BOTTOMBAR=true INTERVAL=20000
+
+IMAGE X=0 Y=0 PATH="pics/bar2.png"
+
+#TDE Menu
+CLICKAREA X=4 Y=6 W=64 H=25 ONCLICK="dcop kicker kicker popupKMenu 0"
+
+#XMMS controls
+CLICKAREA X=96 Y=6 W=15 H=23 ONCLICK="xmmsctrl prev"
+CLICKAREA X=121 Y=6 W=10 H=23 ONCLICK="xmmsctrl play"
+CLICKAREA X=140 Y=6 W=12 H=23 ONCLICK="xmmsctrl pause"
+CLICKAREA X=159 Y=6 W=12 H=23 ONCLICK="xmmsctrl stop"
+CLICKAREA X=180 Y=6 W=12 H=23 ONCLICK="xmmsctrl next"
+
diff --git a/superkaramba/examples/cleanbar/pics/bar2.png b/superkaramba/examples/cleanbar/pics/bar2.png
new file mode 100644
index 0000000..aa1c4f5
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/bar2.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/rightend.png b/superkaramba/examples/cleanbar/pics/rightend.png
new file mode 100644
index 0000000..7f852bf
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/rightend.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/rightend_new.png b/superkaramba/examples/cleanbar/pics/rightend_new.png
new file mode 100644
index 0000000..45adc7b
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/rightend_new.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/slickbar.png b/superkaramba/examples/cleanbar/pics/slickbar.png
new file mode 100644
index 0000000..57f0830
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/slickbar.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/startup.png b/superkaramba/examples/cleanbar/pics/startup.png
new file mode 100644
index 0000000..a5a99f1
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/startup.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/task.png b/superkaramba/examples/cleanbar/pics/task.png
new file mode 100644
index 0000000..f9bc4eb
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/task.png
Binary files differ
diff --git a/superkaramba/examples/cleanbar/pics/task_new.png b/superkaramba/examples/cleanbar/pics/task_new.png
new file mode 100644
index 0000000..1ac95c8
--- /dev/null
+++ b/superkaramba/examples/cleanbar/pics/task_new.png
Binary files differ