mirror of
https://github.com/gryf/wmdocklib.git
synced 2026-01-05 13:24:11 +01:00
131 lines
4.4 KiB
ReStructuredText
131 lines
4.4 KiB
ReStructuredText
=========
|
|
wmdocklib
|
|
=========
|
|
|
|
This is a library which was extracted from a pretty much dead `pywmdockapps`_
|
|
project, and is meant to help with writing Window Maker dockapps in Python.
|
|
|
|
|
|
Installation
|
|
============
|
|
|
|
The installation from source expect there is a C compiler around, as well as X
|
|
and Python headers/dev packages. It might be installed using virtualenv, or
|
|
system wide:
|
|
|
|
.. code::shell-session
|
|
|
|
$ pip install .
|
|
|
|
Note, that you'll need C compiler and Xorg dev package to build the C
|
|
extension.
|
|
|
|
|
|
Usage
|
|
=====
|
|
|
|
There is a base class, a foundation for building custom dockapps. Simplest
|
|
possible usage would be:
|
|
|
|
.. code:: python
|
|
|
|
import wmdocklib
|
|
|
|
app = wmdocklib.DockApp()
|
|
app.run()
|
|
|
|
this will run dockapp, which doesn't do anything, it just displays black
|
|
background with 3 pixel wide border.
|
|
|
|
To build something useful, there will be a need for adding implementation,
|
|
and optionally bitmaps in XPM format for additional graphical elements, like
|
|
fonts, buttons, app mask and so on.
|
|
|
|
To create an application, it simple as:
|
|
|
|
- create a class inherited from DockApp,
|
|
- implement ``run()`` and ``main_loop()`` methods,
|
|
- optionally, add graphics (like bitmap charset), command line options handling,
|
|
and possibly configuration file.
|
|
|
|
So below is the example for displaying random number:
|
|
|
|
.. code:: python
|
|
:number-lines:
|
|
|
|
import random
|
|
import time
|
|
|
|
import wmdocklib
|
|
|
|
|
|
FONTS = '''\
|
|
/* XPM */
|
|
static char *square_[] = {
|
|
"156 8 2 1",
|
|
" c black",
|
|
"% c gray100",
|
|
" % % % % % % % % %%%%% % %%%%% %%%%% % % %%%%% %%%%% %%%%% %%%%% %%%%% ",
|
|
" % % % % % % % % % %% % % % % % % % % % % % ",
|
|
" % % % %%%%% %% %% % % % % % % % % % % % % % % ",
|
|
" % % % % %%%%% % % % % %%%%% %%%% %%%%% %%%%% %%%%% % %%%%% %%%%% ",
|
|
" %%%%% %% %% %% % % % % % % % % % % % % % ",
|
|
" % % % %% %% % % % % % % % % % % % % % % ",
|
|
" % % % % % % %% % %%%%% %%% %%%%% %%%%% % %%%%% %%%%% % %%%%% %%%%% ",
|
|
" % ",
|
|
};
|
|
'''
|
|
|
|
class MyDockApp(wmdocklib.DockApp):
|
|
|
|
font_dimentions = (6, 8)
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.font = FONTS
|
|
|
|
def run(self):
|
|
self.prepare_pixmaps()
|
|
self.open_xwindow()
|
|
self.main_loop()
|
|
|
|
def main_loop(self):
|
|
while True:
|
|
self.add_string(f'{random.randint(0, 999):3}', 1, 1)
|
|
self.redraw()
|
|
time.sleep(0.1)
|
|
|
|
|
|
app = MyDockApp()
|
|
app.run()
|
|
|
|
|
|
In this simple application, there is (partial) charset defined (lines 7-22),
|
|
which is assigned to the ``self.font`` (this attribute can be either a string
|
|
with XPM data like above, or just a filename), by which it will be indicated
|
|
that font data will be used.
|
|
|
|
Than, class ``MyDockApp`` is defined, with overriden methods ``run()`` and
|
|
``main_loop()``.
|
|
|
|
As for method ``run()`` it is kind of initialization of the object and window.
|
|
By calling ``prepare_pixmaps`` there will be prepared combined bitmaps of
|
|
background, pattern and (optionally) fonts, coordinates for the charset, it's
|
|
width and heigh, and finally load prepared pixmap to memory.
|
|
|
|
Function ``open_xwindow`` will create and show the window. And than main loop
|
|
is called, which iterate endlessly calling ``add_string()`` method for display
|
|
string on the dockapp. Note, that ``add_string()`` method (and underlying
|
|
``add_char()``) assuming, that fonts in bitmap are ordered just like ``ord()``
|
|
will do.
|
|
|
|
Method ``redraw()`` will trigger entire window to be refreshed.
|
|
|
|
|
|
License
|
|
=======
|
|
|
|
This work is licensed under (L)GPL license.
|
|
|
|
.. _pywmdockapps: http://pywmdockapps.sourceforge.net
|