Compare commits

...

12 Commits

14 changed files with 176 additions and 161 deletions

1
.gitignore vendored
View File

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

View File

@ -19,10 +19,15 @@ 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]
python ./setup install
sudo python ./setup install
[CONTACT]
Anything related to this piece of software can be e-mailed to me, Mario
Frasca <mfrasca@interia.pl>.
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.
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 print this help
-h, --help asprint 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, e:
except ValueError as 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, e:
except getopt.GetoptError as 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.iteritems():
for i in clConfig.items():
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 python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""pywmgeneric.py
@ -37,11 +37,13 @@ import sys
import os
import time
import string
import ConfigParser
import configparser
import getopt
import popen2
import subprocess
import wmdocklib
import wmdocklib.pywmgeneral as pywmgeneral
import wmdocklib.pywmhelpers as pywmhelpers
prevStat = {'user':0,
'nice':0,
@ -76,15 +78,13 @@ class UserMethods:
def result():
global prevStat
try:
f = file('/proc/stat', 'r')
except IOError:
return 'error'
with open('/proc/stat', 'r') as f:
currStat = dict(
[(k, int(v))
for (k,v) in cpuinfo.match(f.readline()).groupdict().items()]
)
f.close()
except IOError:
return 'error'
total = 0
for k,v in currStat.items():
@ -105,11 +105,10 @@ class UserMethods:
def getSysTemp(self):
try:
f = file('/proc/sys/dev/sensors/w83697hf-isa-0290/temp1', 'r')
with open('/proc/sys/dev/sensors/w83697hf-isa-0290/temp1', 'r') as f:
temp = f.readline().split()[2]
except IOError:
return lambda: 'error'
temp = f.readline().split()[2]
f.close()
return lambda: 'sys: %s' % temp
def ls(self):
@ -153,8 +152,8 @@ def addString(s, x, y):
try:
wmdocklib.addString(s, x, y, xOffset, yOffset,
width, height)
except ValueError, e:
sys.stderr.write('Error when painting string:\n' + str(e) + '\n')
except ValueError as e:
sys.stderr.write(f'Error when painting string:\n{e}\n')
sys.exit(3)
def clearLine(y):
@ -194,7 +193,7 @@ class Entry:
self._glue = ' ... '
self._scrollPos = 0
self._tickCount = 0L
self._tickCount = 0
self._runningProcs = []
self._actionProc = None
@ -220,7 +219,7 @@ class Entry:
"""Exec an external command in the background.
Return the running process as created by Popen3()."""
proc = popen2.Popen3(command)
proc = subprocess.Popen(command)
self._runningProcs.append(proc)
return proc
@ -480,7 +479,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()
@ -517,7 +516,7 @@ def parseCommandLine(argv):
'font=', 'debug']
try:
opts, nonOptArgs = getopt.getopt(argv[1:], shorts, longs)
except getopt.GetoptError, e:
except getopt.GetoptError as e:
err('Error when parsing commandline: ' + str(e) + '\n')
err(usage)
sys.exit(2)
@ -551,10 +550,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, e:
except configparser.Error as 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, e:
except ValueError as 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 is not '/':
if path != '/':
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 is not -1:
if area != -1:
self.toggleMount(area-1+self._skipping)
event = wmdocklib.getEvent()
@ -257,7 +257,7 @@ class PywmHDMon:
mounted = True
except NotMounted:
mounted = False
except OSError, e:
except OSError as e:
return
if mounted:
if action == 'mount':
@ -282,7 +282,7 @@ class PywmHDMon:
hdData = self.getHdInfo(path)
except NotMounted:
hdData = (0, 0)
except OSError, e:
except OSError as 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, e:
except getopt.GetoptError as 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.iteritems():
for i in clConfig.items():
config[i[0]] = i[1]
palette = {}

View File

@ -2,16 +2,21 @@
"""pywmnop.py
WindowMaker dockapp doing nothing
WindowMaker dockapp internet radio player
Copyright (C) 2006 Mario Frasca
Licensed under the GNU General Public License.
"""
import sys, time
from wmdocklib import wmoo
devnull = file('/dev/null')
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
class Application(wmoo.Application):
@ -34,16 +39,12 @@ class Application(wmoo.Application):
self.reset()
self._buffered = ''
import re
self._feedback = re.compile(r'.+A:.*?% ([0-9\.]+)%')
self._feedback = compile(r'.+A:.*?% ([0-9\.]+)%')
import fileinput, os
configfile = os.sep.join([os.environ['HOME'], '.pyradiorc'])
configfile = sep.join([environ['HOME'], '.pyradiorc'])
import codecs
f = codecs.open(configfile, 'r', 'utf-8')
with open(configfile, 'r', 'utf-8') as f:
t = f.read()
f.close()
for i in t.split(u'\n'):
radiodef = i.split('\t')
radioname = radiodef[0].lower()
@ -58,7 +59,6 @@ class Application(wmoo.Application):
def handler(self, num, frame):
if self._expectdying:
print self._expectdying
self._expectdying -= 1
else:
self.reset()
@ -66,42 +66,46 @@ class Application(wmoo.Application):
self._colour = 1
def startPlayer(self):
import os, subprocess, signal
commandline = [mplayer,
'-cache', self.radioList[self.currentRadio][2],
'-cache',
str(abs(int(self.radioList[self.currentRadio][2]))),
self.radioList[self.currentRadio][1]
]
self.child = subprocess.Popen(commandline,
stdin =subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=devnull)
signal.signal(signal.SIGCHLD, self.handler)
# 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._flash = 0
self._paused = False
self._buffered = ''
self._buffering = 1
self._cacheLevel = 0
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)
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)
def stopPlayer(self):
if self.child:
print self._expectdying
self.child.stdin.write('q')
# print(self._expectdying)
self.child.stdin.write(b'q')
self.child.stdin.flush()
self._expectdying += 1
self.child = None
def muteStream(self, event):
if self.child and self._buffering == 0:
self.child.stdin.write('m')
self.child.stdin.write(b'm')
self.child.stdin.flush()
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)
@ -128,7 +132,8 @@ class Application(wmoo.Application):
def pauseStream(self, event):
if self.child and not self._buffering:
self.child.stdin.write(' ')
self.child.stdin.write(b' ')
self.child.stdin.flush()
self._paused = not self._paused
if self._paused:
self._colour = 1
@ -164,10 +169,9 @@ class Application(wmoo.Application):
return
self._count = 0
if self.child:
import select
[i, o, e] = select.select([self.child.stdout], [], [], 0)
[i, o, e] = select([self.child.stdout], [], [], 0)
if i:
line = self.child.stdout.read(102400)
line = self.child.stdout.read(102400).decode("utf-8")
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, e:
except ValueError as 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, e:
except OSError as 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, e:
except IOError as 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, e:
except OSError as 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, e:
except getopt.GetoptError as 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.iteritems():
for i in clConfig.items():
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, e:
except OSError as 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 = file(self._procMeminfo, 'r')
except IOError, e:
meminfoFile = open(self._procMeminfo, 'r')
except IOError as 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 = long(line.split()[1])
total = int(line.split()[1])
if line.startswith('MemFree:'):
free = long(line.split()[1])
free = int(line.split()[1])
if line.startswith('Buffers:'):
buffers = long(line.split()[1])
buffers = int(line.split()[1])
if line.startswith('Cached:'):
cached = long(line.split()[1])
cached = int(line.split()[1])
if free and total:
used = total - free
if theLine is not None:
parts = [long(x) for x in theLine.split()[1]]
parts = [int(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 = file(self._procStat, 'r')
except IOError, e:
statFile = open(self._procStat, 'r')
except IOError as e:
sys.stderr.write("Can't open statfile: %s.\n" % str(e))
sys.exit(2)
line = statFile.readline()
statFile.close()
cpu, nice, system, idle = [long(x) for x in line.split()[1:]][:4]
cpu, nice, system, idle = [int(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, e:
except ValueError as 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, e:
except getopt.GetoptError as e:
sys.stderr.write('Error when parsing commandline: ' + str(e) + '\n')
sys.stderr.write(usage)
sys.exit(2)

View File

@ -16,3 +16,10 @@ 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,37 +1,27 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Set these so they match your system.
XLibDir = '/usr/X11R6/lib'
XIncludes = '/usr/X11R6/include'
from __future__ import absolute_import
XLibDir = '/usr/lib/x11'
XIncludes = '/usr/include/x11'
from distutils.core import setup, Extension
from setuptools import setup, Extension
module1 = Extension('wmdocklib.pywmgeneral',
pywmgeneral = Extension('wmdocklib.pywmgeneral',
libraries = ['Xpm', 'Xext', 'X11'],
library_dirs = [XLibDir],
include_dirs = [XIncludes],
sources = ['wmdocklib/pywmgeneral.c'])
setup(name="pywmdockapps",
version = "$Revision: 1.21 $"[11:-2],
description='''
read the whole story at http://pywmdockapps.sourceforge.net/''',
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',
],
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'],
packages=['wmdocklib'],
package_data={'wmdocklib': ['*.xpm']},
ext_modules = [module1])
ext_modules=[pywmgeneral],
)

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,6 +10,9 @@
*
* History:
*
* 2024-09-08 Fredrick W. Warren
* Ported from python 2 to python 3
*
* 2003-06-24 Kristoffer Erlandsson
* Added some additional event handling.
*
@ -29,10 +32,11 @@
*
*/
#include <Python.h>
#include "structmember.h"
#include <stdlib.h>
#include <stdio.h>
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "structmember.h"
#include <string.h>
#include <unistd.h>
#include <ctype.h>
@ -83,11 +87,12 @@ char **pyListToStrs(PyObject *l) {
s = PySequence_GetItem(l, i);
if (s == NULL)
return NULL; /* Shouldn't happen. */
if (!PyString_Check(s)) {
if (!PyUnicode_Check(s)) {
PyErr_SetString(PyExc_TypeError, "String expected.");
return NULL;
}
target[i] = PyString_AsString(s);
// target[i] = strdup(PyUnicode_AsString(s));
target[i] = strdup(PyUnicode_AsUTF8(s));
}
return target;
}
@ -363,8 +368,7 @@ static PyMethodDef Drawable_methods[] = {
};
static PyTypeObject drawable_DrawableType = {
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
PyVarObject_HEAD_INIT(NULL, 0)
"pyywmgeneral.Drawable", /*tp_name*/
sizeof(drawable_DrawableObject), /*tp_basicsize*/
0, /*tp_itemsize*/
@ -787,23 +791,29 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
}
}
#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
#define PyMODINIT_FUNC void
#endif
static struct PyModuleDef pywmgeneral_module = {
PyModuleDef_HEAD_INIT, /* m_base */
"pywmgeneral", /* m_name */
NULL, /* m_doc */
-1, /* m_size */
PyWmgeneralMethods /* m_methods */
};
PyMODINIT_FUNC
initpywmgeneral(void) {
PyInit_pywmgeneral(void)
{
PyObject* m;
drawable_DrawableType.tp_new = PyType_GenericNew;
if (PyType_Ready(&drawable_DrawableType) < 0)
return;
return NULL;
m = Py_InitModule3("pywmgeneral", PyWmgeneralMethods,
"base C module for wmdocklib");
m = PyModule_Create(&pywmgeneral_module);
if (m == NULL)
return;
return NULL;
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, types
import ConfigParser
import os, re
import configparser
charset_start = None
charset_width = None
pattern_start = None
import pywmgeneral
import wmdocklib.pywmgeneral as 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, e:
except configparser.Error as 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,7 +102,7 @@ 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
@ -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,7 +145,7 @@ 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
"""
f = file(fileName, 'r')
with open(fileName, 'r') as f:
lines = [l.rstrip('\n') for l in f.readlines()]
s = ''.join(lines)
res = []
@ -260,7 +260,7 @@ def initPixmap(background=None,
] + [
' '*width for item in range(margin)
]
elif isinstance(background, types.ListType) and not isinstance(background[0], types.StringTypes):
elif isinstance(background, list) and not isinstance(background[0], str):
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"%i for i in newRgb])
new_font_palette[k] = '#'+''.join(["%02x"%int(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,9 +436,8 @@ def getColorCode(colorName, rgbFileName=None):
if rgbFileName is None:
raise ValueError('cannot find rgb file')
f = file(rgbFileName, 'r')
with open(rgbFileName, 'r') as f:
lines = f.readlines()
f.close()
for l in lines:
if l[0] != '!':
words = l.split()

View File

@ -1,5 +1,6 @@
import sys, time
import pywmhelpers
import wmdocklib.pywmhelpers as pywmhelpers
import wmdocklib.pywmgeneral as pywmgeneral
debug = 0
@ -44,7 +45,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)
@ -55,7 +56,6 @@ 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) is not 4:
if area is not None and len(area) != 4:
area = None
self._events.append( (type, key, area, callback,) )
pass