Compare commits

..

No commits in common. "master" and "v1.21.0" have entirely different histories.

14 changed files with 161 additions and 176 deletions

1
.gitignore vendored
View File

@ -124,7 +124,6 @@ celerybeat.pid
# Environments
.env
.venv
.envrc
env/
venv/
ENV/

View File

@ -19,15 +19,10 @@ the sample scripts are described in the examples/README
a small set of samples are provided. all of them make use of the module
pywmgeneral.
[REQUIREMENTS DEBIAN/UBUNTU]
apt-get install mplayer python3-setuptools libx11-dev libxpm-dev libxext-dev
[INSTALLATION]
sudo python ./setup install
python ./setup install
[CONTACT]
This project was originally started as as a Python 2 application. By Mario
Fransca <mfrasca@interia.pl>. I thank him for all the hard work.
Anything related to this piece of software can be e-mailed to me, Mario
Frasca <mfrasca@interia.pl>.
The project has been ported to Python 3 and now maintained by Fredrick
Warren <fwarren@fastmail.com>

View File

@ -28,7 +28,7 @@ First workingish version
"""
usage = """pywmdatetime.py [options]
Available options are:
-h, --help asprint this help
-h, --help print this help
-f, --foreground <color> set the foreground color
-b, --background <color> set the background color
-F, --font <file> set the font name
@ -69,7 +69,7 @@ def addString(s, x, y):
try:
wmdocklib.addString(s, x, y, xOffset, yOffset,
width, height)
except ValueError as e:
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
sys.stderr.write('test %s' % ((s, x, y, xOffset, yOffset,
width, height),))
@ -119,7 +119,7 @@ def parseCommandLine(argv):
'weekdayformat=', 'weekformat=', 'rgbfile=', 'configfile=', 'font=']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError as e:
except getopt.GetoptError, e:
sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n')
sys.stderr.write(usage)
sys.exit(2)
@ -247,7 +247,7 @@ def main():
# Merge the two configs, let the commandline options overwrite those in the
# configuration file.
config = fileConfig
for i in clConfig.items():
for i in clConfig.iteritems():
config[i[0]] = i[1]
timeFmt = config.get('timeformat', timeDefaultFormat)
@ -282,7 +282,7 @@ def main():
bg=0, fg=2, palette=palette,
background=background,
debug=debug)
maxCharsPerLine = (width-2*xOffset) // char_width
maxCharsPerLine = (width-2*xOffset) / char_width
antialiased = clConfig.get('antialiased', False)
wmdocklib.openXwindow(sys.argv, width, height)

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""pywmgeneric.py
@ -37,13 +37,11 @@ import sys
import os
import time
import string
import configparser
import ConfigParser
import getopt
import subprocess
import popen2
import wmdocklib
import wmdocklib.pywmgeneral as pywmgeneral
import wmdocklib.pywmhelpers as pywmhelpers
prevStat = {'user':0,
'nice':0,
@ -78,14 +76,16 @@ class UserMethods:
def result():
global prevStat
try:
with open('/proc/stat', 'r') as f:
currStat = dict(
[(k, int(v))
for (k,v) in cpuinfo.match(f.readline()).groupdict().items()]
)
f = file('/proc/stat', 'r')
except IOError:
return 'error'
currStat = dict(
[(k, int(v))
for (k,v) in cpuinfo.match(f.readline()).groupdict().items()]
)
f.close()
total = 0
for k,v in currStat.items():
total += v
@ -105,10 +105,11 @@ class UserMethods:
def getSysTemp(self):
try:
with open('/proc/sys/dev/sensors/w83697hf-isa-0290/temp1', 'r') as f:
temp = f.readline().split()[2]
f = file('/proc/sys/dev/sensors/w83697hf-isa-0290/temp1', 'r')
except IOError:
return lambda: 'error'
temp = f.readline().split()[2]
f.close()
return lambda: 'sys: %s' % temp
def ls(self):
@ -152,8 +153,8 @@ def addString(s, x, y):
try:
wmdocklib.addString(s, x, y, xOffset, yOffset,
width, height)
except ValueError as e:
sys.stderr.write(f'Error when painting string:\n{e}\n')
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
sys.exit(3)
def clearLine(y):
@ -193,7 +194,7 @@ class Entry:
self._glue = ' ... '
self._scrollPos = 0
self._tickCount = 0
self._tickCount = 0L
self._runningProcs = []
self._actionProc = None
@ -219,7 +220,7 @@ class Entry:
"""Exec an external command in the background.
Return the running process as created by Popen3()."""
proc = subprocess.Popen(command)
proc = popen2.Popen3(command)
self._runningProcs.append(proc)
return proc
@ -479,7 +480,7 @@ class PywmGeneric:
timeNum = float(timeStr[:-1].strip())
numSecs = timeNum * multiplier
return numSecs
raise ValueError('Invalid literal')
raise ValueError, 'Invalid literal'
def _checkForEvents(self):
event = wmdocklib.getEvent()
@ -516,7 +517,7 @@ def parseCommandLine(argv):
'font=', 'debug']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError as e:
except getopt.GetoptError, e:
err('Error when parsing commandline: ' + str(e) + '\n')
err(usage)
sys.exit(2)
@ -550,10 +551,10 @@ def readConfigFile(fileName):
err("Can't read the configuration file %s.\n" % fileName)
# We can't do much without a configuration file
sys.exit(3)
cp = configparser.ConfigParser()
cp = ConfigParser.ConfigParser()
try:
cp.read(fileName)
except configparser.Error as e:
except ConfigParser.Error, e:
err("Error when reading configuration file:\n%s\n" % str(e))
sys.exit(3)
l = [{}, {}, {}, {}, {}]

View File

@ -89,7 +89,7 @@ class PywmHDMon:
self._pathsToMonitor = pathsToMonitor
self._actMonEnabled = actMonEnabled
self._skipping = skipping
self._lineCount = (height - yOffset*2 - 2) // (char_height+1)
self._lineCount = (height - yOffset*2 - 2) / (char_height+1)
self._statFile = procStat
self._maxIODiff = 0
@ -102,7 +102,7 @@ class PywmHDMon:
def addString(self, s, x, y):
try:
wmdocklib.addString(s, x, y, xOffset, yOffset, width, height)
except ValueError as e:
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
sys.exit(3)
@ -116,7 +116,7 @@ class PywmHDMon:
"""
# check if is mounted <- st_dev(/mount/point) == st_dev(/mount)
if path != '/':
if path is not '/':
statOwn = os.stat(path)
# the following is a bit ugly: it removes the trailing
@ -151,7 +151,7 @@ class PywmHDMon:
def getY(self, line):
"returns the y coordinate of the top line for the box"
interlinea = (height - yOffset*2 - 2 - self._lineCount * char_height) // (self._lineCount-1)
interlinea = (height - yOffset*2 - 2 - self._lineCount * char_height) / (self._lineCount-1)
interlinea += char_height
lastBaseline = yOffset + self._lineCount * interlinea
from math import ceil
@ -163,7 +163,7 @@ class PywmHDMon:
def paintHdData(self, line, data, mode):
total, free = data
xStart = (width*2)//5
xStart = (width*2)/5
if total==0:
self.addString(' ', width-yOffset*2-5*char_width-1, self.getY(line))
self.paintGraph(0, xStart, self.getY(line) + 4,
@ -244,7 +244,7 @@ class PywmHDMon:
sys.exit(0)
elif event['type'] == 'buttonrelease':
area = wmdocklib.checkMouseRegion(event['x'],event['y'])
if area != -1:
if area is not -1:
self.toggleMount(area-1+self._skipping)
event = wmdocklib.getEvent()
@ -257,7 +257,7 @@ class PywmHDMon:
mounted = True
except NotMounted:
mounted = False
except OSError as e:
except OSError, e:
return
if mounted:
if action == 'mount':
@ -282,7 +282,7 @@ class PywmHDMon:
hdData = self.getHdInfo(path)
except NotMounted:
hdData = (0, 0)
except OSError as e:
except OSError, e:
sys.stderr.write(
"Can't get hd data from %s: %s\n" % (path, str(e)))
hdData = (0, 0)
@ -313,7 +313,7 @@ def parseCommandLine(argv):
'skipconf=','font=', 'debug']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError as e:
except getopt.GetoptError, e:
sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n')
sys.stderr.write(usage)
sys.exit(2)
@ -406,7 +406,7 @@ def main():
configFile = os.path.expanduser(configFile)
fileConfig = wmdocklib.readConfigFile(configFile, sys.stderr)
config = fileConfig
for i in clConfig.items():
for i in clConfig.iteritems():
config[i[0]] = i[1]
palette = {}

View File

@ -2,21 +2,16 @@
"""pywmnop.py
WindowMaker dockapp internet radio player
WindowMaker dockapp doing nothing
Copyright (C) 2006 Mario Frasca
Licensed under the GNU General Public License.
"""
from codecs import open
from fcntl import fcntl, F_GETFL, F_SETFL
from os import environ, sep, O_NONBLOCK
from re import compile
from select import select
from signal import signal, SIGCHLD
from subprocess import Popen, DEVNULL, PIPE
from wmdocklib import wmoo as wmoo
import sys, time
from wmdocklib import wmoo
devnull = file('/dev/null')
class Application(wmoo.Application):
@ -39,12 +34,16 @@ class Application(wmoo.Application):
self.reset()
self._buffered = ''
self._feedback = compile(r'.+A:.*?% ([0-9\.]+)%')
import re
self._feedback = re.compile(r'.+A:.*?% ([0-9\.]+)%')
configfile = sep.join([environ['HOME'], '.pyradiorc'])
import fileinput, os
configfile = os.sep.join([os.environ['HOME'], '.pyradiorc'])
with open(configfile, 'r', 'utf-8') as f:
t = f.read()
import codecs
f = codecs.open(configfile, 'r', 'utf-8')
t = f.read()
f.close()
for i in t.split(u'\n'):
radiodef = i.split('\t')
radioname = radiodef[0].lower()
@ -59,6 +58,7 @@ class Application(wmoo.Application):
def handler(self, num, frame):
if self._expectdying:
print self._expectdying
self._expectdying -= 1
else:
self.reset()
@ -66,46 +66,42 @@ class Application(wmoo.Application):
self._colour = 1
def startPlayer(self):
import os, subprocess, signal
commandline = [mplayer,
'-cache',
str(abs(int(self.radioList[self.currentRadio][2]))),
'-cache', self.radioList[self.currentRadio][2],
self.radioList[self.currentRadio][1]
]
# if cache is negative then this is a playlist
if int(self.radioList[self.currentRadio][2]) < 0:
commandline.insert(2, '-playlist')
self.child = Popen(commandline,
stdin =PIPE,
stdout=PIPE,
stderr=DEVNULL)
signal(SIGCHLD, self.handler)
self.child = subprocess.Popen(commandline,
stdin =subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=devnull)
signal.signal(signal.SIGCHLD, self.handler)
self._flash = 0
self._paused = False
self._buffered = ''
self._buffering = 1
self._cacheLevel = 0
flags = fcntl(self.child.stdout, F_GETFL)
fcntl(self.child.stdout, F_SETFL, flags | O_NONBLOCK)
flags = fcntl(self.child.stdin, F_GETFL)
fcntl(self.child.stdin, F_SETFL, flags | O_NONBLOCK)
import fcntl
flags = fcntl.fcntl(self.child.stdout, fcntl.F_GETFL)
fcntl.fcntl(self.child.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)
flags = fcntl.fcntl(self.child.stdin, fcntl.F_GETFL)
fcntl.fcntl(self.child.stdin, fcntl.F_SETFL, flags | os.O_NONBLOCK)
def stopPlayer(self):
if self.child:
# print(self._expectdying)
self.child.stdin.write(b'q')
self.child.stdin.flush()
print self._expectdying
self.child.stdin.write('q')
self._expectdying += 1
self.child = None
def muteStream(self, event):
if self.child and self._buffering == 0:
self.child.stdin.write(b'm')
self.child.stdin.flush()
self.child.stdin.write('m')
self.putPattern(9*self._muting, 0, 9, 11, 30, 29)
self._muting = 1 - self._muting
def printevent(self, event):
print(event)
print event
def previousRadio(self, event):
if self.currentRadio == 0: self.currentRadio = len(self.radioList)
@ -132,8 +128,7 @@ class Application(wmoo.Application):
def pauseStream(self, event):
if self.child and not self._buffering:
self.child.stdin.write(b' ')
self.child.stdin.flush()
self.child.stdin.write(' ')
self._paused = not self._paused
if self._paused:
self._colour = 1
@ -169,9 +164,10 @@ class Application(wmoo.Application):
return
self._count = 0
if self.child:
[i, o, e] = select([self.child.stdout], [], [], 0)
import select
[i, o, e] = select.select([self.child.stdout], [], [], 0)
if i:
line = self.child.stdout.read(102400).decode("utf-8")
line = self.child.stdout.read(102400)
self._buffered += line
npos = self._buffered.rfind('\n')+1
rpos = self._buffered.rfind('\r')+1

View File

@ -85,7 +85,7 @@ class PywmSeti:
try:
wmdocklib.addString(s, x, y, digits,
xOffset, yOffset, width, height)
except ValueError as e:
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
sys.exit(3)
@ -137,7 +137,7 @@ class PywmSeti:
"""
try:
os.kill(pid, 0)
except OSError as e:
except OSError, e:
if e.errno == 1:
return -1
return 0
@ -146,7 +146,7 @@ class PywmSeti:
def openFileRead(self, fileName):
try:
f = file(fileName, 'r')
except IOError as e:
except IOError, e:
sys.stderr.write('Error when opening %s: %s\n' % (fileName, str(e)))
return None
return f
@ -265,7 +265,7 @@ class PywmSeti:
if self._running:
try:
os.kill(self._pid, 15)
except OSError as e:
except OSError, e:
sys.stderr.write(
"Error when ending process: "+str(e)+'\n')
else:
@ -309,7 +309,7 @@ def parseCommandLine(argv):
'indicatorcolor=']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError as e:
except getopt.GetoptError, e:
sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n')
sys.stderr.write(usage)
sys.exit(2)
@ -459,7 +459,7 @@ def main():
# Merge the two configs, let the commandline options overwrite those in the
# configuration file.
config = fileConfig
for i in clConfig.items():
for i in clConfig.iteritems():
config[i[0]] = i[1]
# Get the configurations
setiDir = config.get('setidir')
@ -472,7 +472,7 @@ def main():
setiDir = os.path.expanduser(setiDir)
try:
os.chdir(setiDir)
except OSError as e:
except OSError, e:
sys.stderr.write('Error when accessing seti directory: %s\n' % str(e))
sys.exit(4)
statePath = os.path.join(setiDir, stateFileName)

View File

@ -95,8 +95,8 @@ class PywmSysMon:
Return a tuple with (total_mem, used_mem, buffered_mem, cached_mem).
"""
try:
meminfoFile = open(self._procMeminfo, 'r')
except IOError as e:
meminfoFile = file(self._procMeminfo, 'r')
except IOError, e:
sys.stderr.write("Can't open meminfo file: %s.\n" % str(e))
sys.exit(2)
total = used = free = shared = buffers = cached = theLine = None
@ -105,17 +105,17 @@ class PywmSysMon:
theLine = line
break
if line.startswith('MemTotal:'):
total = int(line.split()[1])
total = long(line.split()[1])
if line.startswith('MemFree:'):
free = int(line.split()[1])
free = long(line.split()[1])
if line.startswith('Buffers:'):
buffers = int(line.split()[1])
buffers = long(line.split()[1])
if line.startswith('Cached:'):
cached = int(line.split()[1])
cached = long(line.split()[1])
if free and total:
used = total - free
if theLine is not None:
parts = [int(x) for x in theLine.split()[1]]
parts = [long(x) for x in theLine.split()[1]]
total, used, free, shared, buffers, cached = parts[:6]
if None in [total, used, buffers, cached]:
sys.stderr.write("Can't find memory information in %s.\n" %
@ -138,13 +138,13 @@ class PywmSysMon:
file. Return the usage in percent.
"""
try:
statFile = open(self._procStat, 'r')
except IOError as e:
statFile = file(self._procStat, 'r')
except IOError, e:
sys.stderr.write("Can't open statfile: %s.\n" % str(e))
sys.exit(2)
line = statFile.readline()
statFile.close()
cpu, nice, system, idle = [int(x) for x in line.split()[1:]][:4]
cpu, nice, system, idle = [long(x) for x in line.split()[1:]][:4]
used = cpu + system
if not self._ignoreNice:
used += nice
@ -161,7 +161,7 @@ class PywmSysMon:
def addString(self, s, x, y):
try:
wmdocklib.addString(s, x, y, digits, xOffset, yOffset, width, height)
except ValueError as e:
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
sys.exit(3)
@ -244,7 +244,7 @@ def parseCommandLine(argv):
'procmeminfo=', 'ignorenice', 'updatedelay=']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError as e:
except getopt.GetoptError, e:
sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n')
sys.stderr.write(usage)
sys.exit(2)

View File

@ -16,10 +16,3 @@ bbcws rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/worldservice/liveinfent.
bbc3 rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/radio3/live/r3_dsat_g2.ra 256
bbc4 rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/radio4/live/r4_dsat_g2.ra 256
# lines starting with # is ignored OR
# lines without exactly two tabs \t in it is ignored
# lines with \t<variable>\t<value> becomes a global variable
# lines with <name>\t<url>\t<bytes-cached> become a station
# <bytes-cached> must be 32 or larger
# positve <bytes-cached> ( 32) are stream urls
# negative <bytes-cached> (-32) are playlist urls

View File

@ -1,27 +1,37 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Set these so they match your system.
from __future__ import absolute_import
XLibDir = '/usr/lib/x11'
XIncludes = '/usr/include/x11'
XLibDir = '/usr/X11R6/lib'
XIncludes = '/usr/X11R6/include'
from setuptools import setup, Extension
from distutils.core import setup, Extension
pywmgeneral = Extension('wmdocklib.pywmgeneral',
libraries = ['Xpm', 'Xext', 'X11'],
library_dirs = [XLibDir],
include_dirs = [XIncludes],
sources = ['wmdocklib/pywmgeneral.c'])
module1 = Extension('wmdocklib.pywmgeneral',
libraries = ['Xpm', 'Xext', 'X11'],
library_dirs = [XLibDir],
include_dirs = [XIncludes],
sources = ['wmdocklib/pywmgeneral.c'])
setup(
name="pywmdockapps",
version = "$Revision: 1.99 $"[11:-2],
description="This helper functions for windowmaker dockapps\nRead the whole story at http://pywmdockapps.sourceforge.net/",
author="Kristoffer Erlandsson & al.",
author_email="mfrasca@zonnet.nl",
url="http://pywmdockapps.sourceforge.net",
license="(L)GPL",
packages=['wmdocklib'],
package_data={'wmdocklib': ['*.xpm']},
ext_modules=[pywmgeneral],
)
setup(name="pywmdockapps",
version = "$Revision: 1.21 $"[11:-2],
description='''
read the whole story at http://pywmdockapps.sourceforge.net/''',
author="Kristoffer Erlandsson & al.",
author_email="mfrasca@zonnet.nl",
url="http://pywmdockapps.sourceforge.net",
license="(L)GPL",
packages=['wmdocklib',
],
scripts=['examples/pywmdatetime.py',
'examples/pywmhdmon.py',
'examples/pywmseti.py',
'examples/pywmsysmon.py',
'examples/pywmphoto.py',
'examples/pywmwet.py',
'examples/pywmradio.py',
'examples/pywmgeneric.py'],
package_data={'wmdocklib': ['*.xpm']},
ext_modules = [module1])

View File

@ -6,7 +6,7 @@ wmgeneral.c, but some new functions are added too.
to get help about a contained package, try:
help(wmdocklib.<name>)
"""
from .pywmgeneral import *
from .pywmhelpers import *
from pywmgeneral import *
from pywmhelpers import *
__all__ = ['wmoo']

View File

@ -10,9 +10,6 @@
*
* History:
*
* 2024-09-08 Fredrick W. Warren
* Ported from python 2 to python 3
*
* 2003-06-24 Kristoffer Erlandsson
* Added some additional event handling.
*
@ -32,11 +29,10 @@
*
*/
#include <stdlib.h>
#include <stdio.h>
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "structmember.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
@ -87,12 +83,11 @@ char **pyListToStrs(PyObject *l) {
s = PySequence_GetItem(l, i);
if (s == NULL)
return NULL; /* Shouldn't happen. */
if (!PyUnicode_Check(s)) {
if (!PyString_Check(s)) {
PyErr_SetString(PyExc_TypeError, "String expected.");
return NULL;
}
// target[i] = strdup(PyUnicode_AsString(s));
target[i] = strdup(PyUnicode_AsUTF8(s));
target[i] = PyString_AsString(s);
}
return target;
}
@ -368,7 +363,8 @@ static PyMethodDef Drawable_methods[] = {
};
static PyTypeObject drawable_DrawableType = {
PyVarObject_HEAD_INIT(NULL, 0)
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"pyywmgeneral.Drawable", /*tp_name*/
sizeof(drawable_DrawableObject), /*tp_basicsize*/
0, /*tp_itemsize*/
@ -791,29 +787,23 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
}
}
static struct PyModuleDef pywmgeneral_module = {
PyModuleDef_HEAD_INIT, /* m_base */
"pywmgeneral", /* m_name */
NULL, /* m_doc */
-1, /* m_size */
PyWmgeneralMethods /* m_methods */
};
#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
#define PyMODINIT_FUNC void
#endif
PyMODINIT_FUNC
PyInit_pywmgeneral(void)
{
initpywmgeneral(void) {
PyObject* m;
drawable_DrawableType.tp_new = PyType_GenericNew;
if (PyType_Ready(&drawable_DrawableType) < 0)
return NULL;
return;
m = PyModule_Create(&pywmgeneral_module);
m = Py_InitModule3("pywmgeneral", PyWmgeneralMethods,
"base C module for wmdocklib");
if (m == NULL)
return NULL;
return;
Py_INCREF(&drawable_DrawableType);
PyModule_AddObject(m, "Drawable", (PyObject *)&drawable_DrawableType);
return m;
}

View File

@ -26,14 +26,14 @@ Some changes to handle the additional event handling in pywmgeneral
First workingish version
"""
import os, re
import configparser
import os, re, types
import ConfigParser
charset_start = None
charset_width = None
pattern_start = None
import wmdocklib.pywmgeneral as pywmgeneral
import pywmgeneral
defaultRGBFileList = [
'/etc/X11/rgb.txt',
'/usr/lib/X11/rgb.txt',
@ -55,10 +55,10 @@ def readConfigFile(fileName, errOut):
errOut.write(
'Configuration file is not readable. Using defaults.\n')
return {}
cp = configparser.ConfigParser()
cp = ConfigParser.ConfigParser()
try:
cp.read(fileName)
except configparser.Error as e:
except ConfigParser.Error, e:
if errOut:
errOut.write('Error in configuration file:\n')
errOut.write(str(e) + '\nUsing defaults.')
@ -75,7 +75,7 @@ def getCenterStartPos(s, areaWidth, offset):
"""Get the x starting position if we want to paint s centred."""
w = len(s) * char_width
textArea = areaWidth - offset * 2 - 1
return (textArea - w) // 2
return (textArea - w) / 2
def addChar(ch, x, y, xOffset, yOffset, width, height, drawable=None):
"""Paint the character ch at position x, y in the window.
@ -102,13 +102,13 @@ def addChar(ch, x, y, xOffset, yOffset, width, height, drawable=None):
pos = (ord(ch)-32) * char_width
# translate pos into chX, chY, rolling back and down each linelength
# bits. character definition start at row 64, column 0.
chY = (pos // linelength) * char_height + charset_start
chY = (pos / linelength) * char_height + charset_start
chX = pos % linelength
targX = x + xOffset
targY = y + yOffset
chW = char_width
if ch in "',.:;":
chW =char_twidth
chW = char_twidth
if drawable is None:
pywmgeneral.copyXPMArea(chX, chY, chW, char_height, targX, targY)
else:
@ -131,7 +131,7 @@ def getVertSpacing(numLines, margin, height, yOffset):
margin is the space we want between the first line and the top."""
h = height - (numLines * char_height + 1) - yOffset * 2 - margin
return h // (numLines - 1)
return h / (numLines - 1)
def readXPM(fileName):
@ -145,8 +145,8 @@ def readXPM(fileName):
Raise IOError if we run into trouble when trying to read the file. This
function has not been tested extensively. do not try to use more than
"""
with open(fileName, 'r') as f:
lines = [l.rstrip('\n') for l in f.readlines()]
f = file(fileName, 'r')
lines = [l.rstrip('\n') for l in f.readlines()]
s = ''.join(lines)
res = []
while 1:
@ -260,7 +260,7 @@ def initPixmap(background=None,
] + [
' '*width for item in range(margin)
]
elif isinstance(background, list) and not isinstance(background[0], str):
elif isinstance(background, types.ListType) and not isinstance(background[0], types.StringTypes):
nbackground = [[' ']*width for i in range(height)]
for ((left, top),(right, bottom)) in background:
for x in range(left, right+1):
@ -329,7 +329,7 @@ def initPixmap(background=None,
origRgb = [int(origColor[i*2:i*2+2],16)/256. for i in range(3)]
intensity = sum(origRgb) / 3
newRgb = [i * intensity + base for i,base in zip(fg_vec, bg_point)]
new_font_palette[k] = '#'+''.join(["%02x"%int(i) for i in newRgb])
new_font_palette[k] = '#'+''.join(["%02x"%i for i in newRgb])
return new_font_palette
@ -364,10 +364,10 @@ def initPixmap(background=None,
for line in fontdef
]
if debug:
print('/* XPM */\nstatic char *_x_[] = {')
print '/* XPM */\nstatic char *_x_[] = {'
for item in xpm:
print('"%s",' % item)
print('};')
print '"%s",' % item
print '};'
pywmgeneral.includePixmap(xpm)
return char_width, char_height
@ -436,8 +436,9 @@ def getColorCode(colorName, rgbFileName=None):
if rgbFileName is None:
raise ValueError('cannot find rgb file')
with open(rgbFileName, 'r') as f:
lines = f.readlines()
f = file(rgbFileName, 'r')
lines = f.readlines()
f.close()
for l in lines:
if l[0] != '!':
words = l.split()

View File

@ -1,6 +1,5 @@
import sys, time
import wmdocklib.pywmhelpers as pywmhelpers
import wmdocklib.pywmgeneral as pywmgeneral
import pywmhelpers
debug = 0
@ -45,7 +44,7 @@ class Application:
if size is None:
size = (self._char_width * len(text), self._char_height)
pixmapwidth = self._char_width * len(text)
# import pywmgeneral
import pywmgeneral
labelPixmap = pywmgeneral.Drawable(pixmapwidth, self._char_height)
self._elements[labelId] = [orig, size, pixmapwidth, 0, labelPixmap]
self.setLabelText(labelId, text)
@ -56,6 +55,7 @@ class Application:
(orig_x,orig_y), (size_x, size_y), width, offset, pixmap = self._elements[labelId]
newwidth = self._char_width * len(text)
if newwidth > width:
import pywmgeneral
pixmap = pywmgeneral.Drawable(newwidth, self._char_height)
self._elements[labelId][4] = pixmap
self._elements[labelId][2] = newwidth
@ -101,7 +101,7 @@ class Application:
mouse or keyboard event. all fields may be left to their 'None'
default value, in which case the callback is activated on any event.
"""
if area is not None and len(area) != 4:
if area is not None and len(area) is not 4:
area = None
self._events.append( (type, key, area, callback,) )
pass