cpython/Tools/pynche/Main.py

151 lines
3.6 KiB
Python
Raw Normal View History

1998-01-27 03:19:00 +00:00
"""Pynche: The PYthon Natural Color and Hue Editor.
Pynche is based largely on a similar color editor I wrote years ago for the
Sunview window system. That editor was called ICE: the Interactive Color
Editor. I'd always wanted to port the editor to X but didn't feel like
hacking X and C code to do it. Fast forward many years, to where Python +
1998-09-28 16:28:04 +00:00
Tkinter provides such a nice programming environment, with enough power, that
I finally buckled down and implemented it. I changed the name because these
days, too many other systems have the acronym `ICE'.
1998-01-27 03:19:00 +00:00
1998-09-28 16:28:04 +00:00
This program currently requires Python 1.5 with Tkinter. It has only been
tested on Solaris 2.6. Feedback is greatly appreciated. Send email to
bwarsaw@python.org
1998-09-28 16:28:04 +00:00
Usage: %(PROGRAM)s [-d file] [-h] [initialcolor]
1998-01-27 03:19:00 +00:00
Where:
1998-09-28 16:28:04 +00:00
--database file
-d file
Alternate location of a color database file
1998-01-27 03:19:00 +00:00
--help
-h
print this message
1998-09-28 16:28:04 +00:00
initialcolor
initial color, as a color name or #RRGGBB format
1998-01-27 03:19:00 +00:00
"""
__version__ = '1.0'
import sys
import os
import getopt
import ColorDB
from PyncheWidget import PyncheWidget
1998-09-28 16:28:04 +00:00
from Switchboard import Switchboard
1998-09-28 23:41:53 +00:00
from StripViewer import StripViewer
1998-10-01 16:47:06 +00:00
from ChipViewer import ChipViewer
from TypeinViewer import TypeinViewer
PROGRAM = sys.argv[0]
# Default locations of rgb.txt or other textual color database
RGB_TXT = [
# Solaris OpenWindows
'/usr/openwin/lib/rgb.txt',
# The X11R6.4 rgb.txt file
os.path.join(sys.path[0], 'rgb.txt'),
# add more here
]
def usage(status, msg=''):
print __doc__ % globals()
if msg:
print msg
sys.exit(status)
1998-10-06 19:50:33 +00:00
def initial_color(s, colordb):
# function called on every color
def scan_color(s, colordb=colordb):
try:
r, g, b = colordb.find_byname(s)
except ColorDB.BadColor:
try:
r, g, b = ColorDB.rrggbb_to_triplet(s)
except ColorDB.BadColor:
return None, None, None
return r, g, b
#
# First try the passed in color
r, g, b = scan_color(s)
if r is None:
# try the same color with '#' prepended, since some shells require
# this to be escaped, which is a pain
r, g, b = scan_color('#' + s)
if r is None:
print 'Bad initial color, using gray50:', s
r, g, b = scan_color('gray50')
if r is None:
usage(1, 'Cannot find an initial color to use')
# does not return
return r, g, b
def main():
try:
1998-09-28 16:28:04 +00:00
opts, args = getopt.getopt(
sys.argv[1:],
'hd:',
['database=', 'help'])
except getopt.error, msg:
usage(1, msg)
1998-09-28 16:28:04 +00:00
if len(args) == 0:
initialcolor = 'grey50'
elif len(args) == 1:
initialcolor = args[0]
else:
usage(1)
for opt, arg in opts:
if opt in ('-h', '--help'):
usage(0)
1998-09-28 16:28:04 +00:00
elif opt in ('-d', '--database'):
RGB_TXT.insert(0, arg)
# create the windows and go
for f in RGB_TXT:
try:
colordb = ColorDB.get_colordb(f)
if colordb:
break
except IOError:
pass
else:
usage(1, 'No color database file found, see the -d option.')
1998-10-06 19:50:33 +00:00
# get the initial color as components
red, green, blue = initial_color(initialcolor, colordb)
1998-09-28 16:28:04 +00:00
1998-09-28 23:41:53 +00:00
# create all output widgets
1998-10-01 16:47:06 +00:00
s = Switchboard(colordb)
# create the application window decorations
app = PyncheWidget(__version__, s)
parent = app.parent()
1998-09-28 23:41:53 +00:00
s.add_view(StripViewer(s, parent))
1998-10-01 16:47:06 +00:00
s.add_view(ChipViewer(s, parent))
s.add_view(TypeinViewer(s, parent))
1998-09-28 23:41:53 +00:00
s.update_views(red, green, blue)
try:
1998-09-28 23:41:53 +00:00
app.start()
except KeyboardInterrupt:
pass
if __name__ == '__main__':
main()