2007-12-03 23:01:55 +01:00
#!/usr/bin/env python
2008-01-01 22:23:40 +01:00
# -*- coding: utf-8 -*-
2007-12-03 23:01:55 +01:00
# This is the main file of btn4ws.
#
2008-01-05 17:26:37 +01:00
# Copyright (c) 1999-2008 Jan Dittberner <jan@dittberner.info>
2007-12-03 23:01:55 +01:00
#
# This file is part of btn4ws.
#
# btn4ws is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# btn4ws is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with btn4ws; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# version: $Id$
#
"""
Gimp script to generate button images for websites . This script is a
port of the older gimp - perl version to python .
2008-01-05 21:45:57 +01:00
( c ) 2007 , 2008 Jan Dittberner < jan @dittberner.info >
2007-12-03 23:01:55 +01:00
"""
2008-01-05 23:19:03 +01:00
import os , urllib , logging , sys , pickle
2008-01-04 22:40:50 +01:00
import gimp , gimpplugin , gimpui , gimpcolor
2008-01-02 22:03:30 +01:00
import pygtk
pygtk . require ( ' 2.0 ' )
import gtk
2008-01-01 22:23:40 +01:00
from gimpenums import *
2008-01-02 22:03:30 +01:00
from gimpshelf import shelf
2008-01-01 22:23:40 +01:00
pdb = gimp . pdb
2007-12-03 23:01:55 +01:00
2008-01-05 23:30:23 +01:00
btn4ws_version = " 0.8.0 "
2007-12-03 23:01:55 +01:00
2009-03-13 20:19:44 +01:00
logging . basicConfig ( level = logging . WARN ,
2008-01-02 22:03:30 +01:00
format = ' %(asctime)s %(levelname)s %(message)s ' ,
2007-12-03 23:01:55 +01:00
stream = sys . stderr )
2007-12-04 14:58:29 +01:00
class text_to_name_mapper :
"""
Text string to name mapper class . This class provides mappings for several target
environments .
"""
def __init__ ( self , strings ) :
self . mapping = { }
for string in strings : self . mapping [ string ] = { }
self . idnum = 1
logging . debug ( " self.mapping= " + str ( self . mapping ) )
def asitemid ( self , text ) :
"""
Get a img itemid for the given text .
"""
if ' itemid ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' itemid ' ] = " id %03d " % ( self . idnum )
self . idnum + = 1
2008-01-05 21:45:57 +01:00
#logging.debug("self.mapping=" + str(self.mapping))
2007-12-04 14:58:29 +01:00
return self . mapping [ text ] [ ' itemid ' ]
def asjavascriptid ( self , text ) :
"""
Get a javascript itemid for the given text .
"""
if ' jsid ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' jsid ' ] = " img %03d " % ( self . idnum )
self . idnum + = 1
2008-01-05 21:45:57 +01:00
#logging.debug("self.mapping=" + str(self.mapping))
2007-12-04 14:58:29 +01:00
return self . mapping [ text ] [ ' jsid ' ]
def aslinktarget ( self , text ) :
"""
Get a link target for the given text .
"""
if ' link ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' link ' ] = urllib . quote ( text )
2008-01-05 21:45:57 +01:00
#logging.debug("self.mapping=" + str(self.mapping))
2007-12-04 14:58:29 +01:00
return " %s .html " % ( self . mapping [ text ] [ ' link ' ] )
def asfilename ( self , text , extension = ' png ' , prefix = ' ' , dirname = None ) :
"""
Get a filename for the given text with optional extension , prefix and dirname .
"""
if ' file ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' file ' ] = text . encode ( ' ascii ' , ' ignore ' )
fname = " %s %s . %s " % ( prefix , self . mapping [ text ] [ ' file ' ] , extension )
2008-01-05 21:45:57 +01:00
#logging.debug("self.mapping=" + str(self.mapping))
2007-12-04 14:58:29 +01:00
if dirname :
return os . path . join ( dirname , fname )
return fname
class text_to_name_mapper :
"""
Text string to name mapper class . This class provides mappings for
several target environments .
"""
def __init__ ( self , strings ) :
self . mapping = { }
for string in strings : self . mapping [ string ] = { }
self . idnum = 1
logging . debug ( " self.mapping= " + str ( self . mapping ) )
def asitemid ( self , text ) :
"""
Get a img itemid for the given text .
"""
if ' itemid ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' itemid ' ] = " id %03d " % ( self . idnum )
self . idnum + = 1
logging . debug ( " self.mapping= " + str ( self . mapping ) )
return self . mapping [ text ] [ ' itemid ' ]
def asjavascriptid ( self , text ) :
"""
Get a javascript itemid for the given text .
"""
if ' jsid ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' jsid ' ] = " img %03d " % ( self . idnum )
self . idnum + = 1
logging . debug ( " self.mapping= " + str ( self . mapping ) )
return self . mapping [ text ] [ ' jsid ' ]
def aslinktarget ( self , text ) :
"""
Get a link target for the given text .
"""
if ' link ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' link ' ] = urllib . quote ( text )
logging . debug ( " self.mapping= " + str ( self . mapping ) )
return " %s .html " % ( self . mapping [ text ] [ ' link ' ] )
def asfilename ( self , text , extension = ' png ' , prefix = ' ' , dirname = None ) :
"""
Get a filename for the given text with optional extension ,
prefix and dirname .
"""
if ' file ' not in self . mapping [ text ] :
self . mapping [ text ] [ ' file ' ] = text . encode ( ' ascii ' , ' ignore ' )
fname = " %s %s . %s " % ( prefix , self . mapping [ text ] [ ' file ' ] , extension )
logging . debug ( " self.mapping= " + str ( self . mapping ) )
if dirname :
return os . path . join ( dirname , fname )
return fname
2008-01-04 22:40:50 +01:00
class IntEntry ( gtk . Entry ) :
""" Input field for integer numbers. """
def __init__ ( self , max = 0 ) :
gtk . Entry . __init__ ( self , max )
self . set_property ( " truncate-multiline " , True )
self . connect ( " insert-text " , self . _cb_int_field_insert )
def _cb_int_field_insert ( self , w , new_text , new_text_length , position ) :
""" Allow integer input only. """
if not new_text . isdigit ( ) :
w . stop_emission ( " insert-text " )
class Btn4wsDialog ( gtk . Assistant ) :
2008-01-02 22:03:30 +01:00
""" This class is the input dialog field for btn4ws """
2008-01-04 22:40:50 +01:00
def _cb_delete_event ( self , widget , event , data = None ) :
logging . debug ( " delete_event " )
2008-01-02 22:03:30 +01:00
return False
2008-01-05 21:45:57 +01:00
def __init__ ( self , args ) :
self . data = args
2008-01-04 22:40:50 +01:00
self . pages = { }
gtk . Assistant . __init__ ( self )
self . _addIntroPage ( )
2008-01-05 17:26:37 +01:00
self . _addPathSelectionPage ( )
self . _addBasicSettingsPage ( )
2008-01-04 22:40:50 +01:00
self . _addLayoutPage ( )
self . _addEffectsPage ( )
self . _addLastPage ( )
self . show ( )
self . connect ( " delete_event " , self . _cb_delete_event )
for pagename in self . pages . iterkeys ( ) :
self . checkcompletion ( pagename )
def _addIntroPage ( self ) :
label = gtk . Label ( """ Buttons for website allows you to produce a series of buttons for use on a website. On the next pages you may choose several options to change the content and the look of the buttons. """ )
label . set_line_wrap ( True )
label . show ( )
self . append_page ( label )
self . set_page_title ( label , " Introduction " )
self . set_page_complete ( label , True )
def _addPathSelectionPage ( self ) :
page = gtk . VBox ( False , 5 )
self . pages [ " pathselection " ] = page
page . set_border_width ( 5 )
page . show ( )
self . append_page ( page )
self . set_page_title ( page ,
" Select the input file and output directory " )
self . set_page_type ( page , gtk . ASSISTANT_PAGE_CONTENT )
label = gtk . Label ( " Please choose the file containing your button labels and the directory where the generated files should be put. " )
label . set_line_wrap ( True )
label . show ( )
page . pack_start ( label , True , True , 0 )
table = gtk . Table ( rows = 2 , columns = 2 , homogeneous = False )
table . show ( )
label = gtk . Label ( " Button label file " )
label . show ( )
table . attach ( label , 0 , 1 , 0 , 1 )
button = gtk . FileChooserButton ( " Choose file " )
button . set_action ( gtk . FILE_CHOOSER_ACTION_OPEN )
2008-01-05 21:45:57 +01:00
if self . data [ " filename " ] :
button . set_filename ( self . data [ " filename " ] )
2008-01-04 22:40:50 +01:00
button . connect ( " selection-changed " , self . _cb_file_selected )
button . show ( )
table . attach ( button , 1 , 2 , 0 , 1 )
label = gtk . Label ( " Output directory " )
label . show ( )
table . attach ( label , 0 , 1 , 1 , 2 )
button = gtk . FileChooserButton ( " Choose directory " )
button . set_action ( gtk . FILE_CHOOSER_ACTION_SELECT_FOLDER )
2008-01-05 21:45:57 +01:00
if self . data [ " outdir " ] :
button . set_filename ( self . data [ " outdir " ] )
else :
self . data [ " outdir " ] = button . get_filename ( )
2008-01-04 22:40:50 +01:00
button . connect ( " selection-changed " , self . _cb_dir_selected )
button . show ( )
table . attach ( button , 1 , 2 , 1 , 2 )
page . pack_end ( table )
def _addBasicSettingsPage ( self ) :
page = gtk . VBox ( False , 5 )
self . pages [ " basicsettings " ] = page
page . set_border_width ( 5 )
page . show ( )
self . append_page ( page )
self . set_page_title ( page ,
" Select the basic button settings " )
self . set_page_type ( page , gtk . ASSISTANT_PAGE_CONTENT )
label = gtk . Label ( " Please choose the basic layout settings of your buttons. " )
label . set_line_wrap ( True )
label . show ( )
page . pack_start ( label , True , True , 0 )
table = gtk . Table ( rows = 4 , columns = 2 , homogeneous = False )
table . show ( )
# font
label = gtk . Label ( " Button text font " )
label . show ( )
table . attach ( label , 0 , 1 , 0 , 1 )
fontsel = gtk . FontButton ( )
fontsel . set_show_size ( True )
if self . data [ " font " ] :
fontsel . set_font_name ( self . data [ " font " ] )
2008-01-05 21:45:57 +01:00
else :
self . data [ " font " ] = fontsel . get_font_name ( )
2008-01-04 22:40:50 +01:00
fontsel . show ( )
fontsel . connect ( " font-set " , self . _cb_set_font )
table . attach ( fontsel , 1 , 2 , 0 , 1 )
# strcolor
label = gtk . Label ( " Button text color " )
label . show ( )
table . attach ( label , 0 , 1 , 1 , 2 )
colorsel = gimpui . ColorSelector ( )
if self . data [ " strcolor " ] :
colorsel . set_color ( self . data [ " strcolor " ] )
2008-01-05 21:45:57 +01:00
else :
self . data [ " strcolor " ] = colorsel . get_color ( )
2008-01-04 22:40:50 +01:00
colorsel . show ( )
colorsel . connect ( " color-changed " , self . _cb_set_color , " strcolor " ,
" basicsettings " )
table . attach ( colorsel , 1 , 2 , 1 , 2 )
# background toggle
bgtoggle = gtk . CheckButton ( " Use a pattern for button " )
bgtoggle . set_active ( self . data [ " usepattern " ] )
bgtoggle . show ( )
table . attach ( bgtoggle , 1 , 2 , 2 , 3 )
# background color / pattern
if self . data [ " usepattern " ] :
label = gtk . Label ( " Button pattern " )
else :
label = gtk . Label ( " Button color " )
label . show ( )
patternsel = gimpui . PatternSelectButton ( )
if self . data [ " pattern " ] :
patternsel . set_pattern ( self . data [ " pattern " ] )
patternsel . connect ( " pattern-set " , self . _cb_set_pattern )
colorsel = gimpui . ColorSelector ( )
if self . data [ " buttoncolor " ] :
2008-01-05 21:45:57 +01:00
colorsel . set_color ( self . data [ " buttoncolor " ] )
else :
self . data [ " buttoncolor " ] = colorsel . get_color ( )
2008-01-04 22:40:50 +01:00
colorsel . connect ( " color-changed " , self . _cb_set_color , " buttoncolor " ,
" basicsettings " )
bgtoggle . connect ( " toggled " , self . _cb_bgtoggle_toggle , label ,
" Button pattern " , patternsel ,
" Button color " , colorsel )
if self . data [ " usepattern " ] :
patternsel . show ( )
else :
colorsel . show ( )
table . attach ( label , 0 , 1 , 3 , 4 )
table . attach ( patternsel , 1 , 2 , 3 , 4 )
table . attach ( colorsel , 1 , 2 , 3 , 4 )
page . pack_end ( table )
def _addLayoutPage ( self ) :
page = gtk . VBox ( False , 5 )
self . pages [ " layout " ] = page
page . set_border_width ( 5 )
page . show ( )
self . append_page ( page )
self . set_page_title ( page ,
" Select the layout settings " )
self . set_page_type ( page , gtk . ASSISTANT_PAGE_CONTENT )
label = gtk . Label ( " Select the layout options for your buttons " )
label . set_line_wrap ( True )
label . show ( )
page . pack_start ( label , True , True , 0 )
2008-01-05 17:26:37 +01:00
table = gtk . Table ( rows = 5 , columns = 2 , homogeneous = False )
2008-01-04 22:40:50 +01:00
table . show ( )
#roundradius
label = gtk . Label ( " Round radius " )
label . show ( )
entry = IntEntry ( max = 2 )
if self . data [ " roundradius " ] :
entry . set_text ( str ( self . data [ " roundradius " ] ) )
entry . connect ( " changed " , self . _cb_set_intvalue , " roundradius " ,
" layout " )
entry . show ( )
table . attach ( label , 0 , 1 , 0 , 1 )
table . attach ( entry , 1 , 2 , 0 , 1 )
#bevelwidth
label = gtk . Label ( " Bevel width " )
label . show ( )
entry = IntEntry ( max = 2 )
entry . connect ( " changed " , self . _cb_set_intvalue , " bevelwidth " ,
" layout " )
entry . show ( )
table . attach ( label , 0 , 1 , 1 , 2 )
table . attach ( entry , 1 , 2 , 1 , 2 )
2008-01-05 17:26:37 +01:00
#padding
label = gtk . Label ( " Padding " )
label . show ( )
entry = IntEntry ( max = 2 )
entry . connect ( " changed " , self . _cb_set_intvalue , " padding " ,
" layout " )
entry . show ( )
table . attach ( label , 0 , 1 , 2 , 3 )
table . attach ( entry , 1 , 2 , 2 , 3 )
2008-01-04 22:40:50 +01:00
#transparency
transp = gtk . CheckButton ( " Transparent button background " )
transp . set_active ( self . data [ " transparency " ] )
transp . show ( )
transp . connect ( " toggled " , self . _cb_toggle_simple , " transparency " ,
" layout " )
2008-01-05 17:26:37 +01:00
table . attach ( transp , 1 , 2 , 3 , 4 )
2008-01-04 22:40:50 +01:00
#bgcolor
label = gtk . Label ( " Background color " )
label . show ( )
colorsel = gimpui . ColorSelector ( )
2008-01-05 21:45:57 +01:00
if self . data [ " bgcolor " ] :
colorsel . set_color ( self . data [ " bgcolor " ] )
else :
self . data [ " bgcolor " ] = colorsel . get_color ( )
2008-01-04 22:40:50 +01:00
colorsel . connect ( " color-changed " , self . _cb_set_color , " bgcolor " ,
" layout " )
colorsel . show ( )
2008-01-05 17:26:37 +01:00
table . attach ( label , 0 , 1 , 4 , 5 )
table . attach ( colorsel , 1 , 2 , 4 , 5 )
2008-01-04 22:40:50 +01:00
page . pack_end ( table )
2008-01-02 22:03:30 +01:00
2008-01-04 22:40:50 +01:00
def _addEffectsPage ( self ) :
page = gtk . VBox ( False , 5 )
self . pages [ " effects " ] = page
page . set_border_width ( 5 )
page . show ( )
self . append_page ( page )
self . set_page_title ( page ,
" Select the effect settings " )
self . set_page_type ( page , gtk . ASSISTANT_PAGE_CONTENT )
2008-01-05 21:45:57 +01:00
table = gtk . Table ( rows = 7 , columns = 2 , homogeneous = False )
2008-01-04 22:40:50 +01:00
table . show ( )
#nova
novatoggle = gtk . CheckButton ( " Enable nova effect " )
novatoggle . set_active ( self . data [ " nova " ] )
novatoggle . show ( )
table . attach ( novatoggle , 1 , 2 , 0 , 1 )
#novacolor
label = gtk . Label ( " Nova color " )
label . show ( )
novacolor = gimpui . ColorSelector ( )
if self . data [ " novacolor " ] :
2008-01-05 21:45:57 +01:00
novacolor . set_color ( self . data [ " novacolor " ] )
else :
self . data [ " novacolor " ] = novacolor . get_color ( )
2008-01-04 22:40:50 +01:00
novacolor . connect ( " color-changed " , self . _cb_set_color , " novacolor " ,
" effects " )
novacolor . set_sensitive ( self . data [ " nova " ] )
novacolor . show ( )
table . attach ( label , 0 , 1 , 1 , 2 )
table . attach ( novacolor , 1 , 2 , 1 , 2 )
#novaradius
2008-01-05 21:45:57 +01:00
label = gtk . Label ( " Nova radius " )
label . show ( )
2008-01-04 22:40:50 +01:00
novaradius = IntEntry ( max = 2 )
if self . data [ " novaradius " ] is not None :
novaradius . set_text ( str ( self . data [ " novaradius " ] ) )
novaradius . connect ( " changed " , self . _cb_set_intvalue , " novaradius " ,
" effects " )
novaradius . set_sensitive ( self . data [ " nova " ] )
novaradius . show ( )
2008-01-05 21:45:57 +01:00
table . attach ( label , 0 , 1 , 2 , 3 )
2008-01-04 22:40:50 +01:00
table . attach ( novaradius , 1 , 2 , 2 , 3 )
#novasparkles
2008-01-05 21:45:57 +01:00
label = gtk . Label ( " Nova sparkles " )
label . show ( )
2008-01-04 22:40:50 +01:00
novasparkles = IntEntry ( max = 2 )
if self . data [ " novasparkles " ] is not None :
novasparkles . set_text ( str ( self . data [ " novasparkles " ] ) )
novasparkles . connect ( " changed " , self . _cb_set_intvalue , " novasparkles " ,
" effects " )
novasparkles . set_sensitive ( self . data [ " nova " ] )
novasparkles . show ( )
2008-01-05 21:45:57 +01:00
table . attach ( label , 0 , 1 , 3 , 4 )
2008-01-04 22:40:50 +01:00
table . attach ( novasparkles , 1 , 2 , 3 , 4 )
novatoggle . connect ( " toggled " , self . _cb_nova_toggle , novacolor ,
novaradius , novasparkles )
#glow
2008-01-05 17:26:37 +01:00
glowtoggle = gtk . CheckButton ( " Enable glow effect " )
glowtoggle . set_active ( self . data [ " glow " ] )
glowtoggle . show ( )
table . attach ( glowtoggle , 1 , 2 , 4 , 5 )
2008-01-04 22:40:50 +01:00
#glowcolor
2008-01-05 17:26:37 +01:00
label = gtk . Label ( " Glow color " )
label . show ( )
glowcolor = gimpui . ColorSelector ( )
if self . data [ " glowcolor " ] :
2008-01-05 21:45:57 +01:00
glowcolor . set_color ( self . data [ " glowcolor " ] )
else :
self . data [ " glowcolor " ] = glowcolor . get_color ( )
2008-01-05 17:26:37 +01:00
glowcolor . connect ( " color-changed " , self . _cb_set_color , " glowcolor " ,
" effects " )
glowcolor . set_sensitive ( self . data [ " glow " ] )
glowcolor . show ( )
table . attach ( label , 0 , 1 , 5 , 6 )
table . attach ( glowcolor , 1 , 2 , 5 , 6 )
2008-01-05 21:45:57 +01:00
#glowsize
label = gtk . Label ( " Glow size " )
label . show ( )
glowsize = IntEntry ( max = 2 )
glowsize . connect ( " changed " , self . _cb_set_intvalue , " glowsize " ,
" effects " )
glowsize . set_sensitive ( self . data [ " glow " ] )
glowsize . show ( )
table . attach ( label , 0 , 1 , 6 , 7 )
table . attach ( glowsize , 1 , 2 , 6 , 7 )
glowtoggle . connect ( " toggled " , self . _cb_glow_toggle , glowcolor ,
glowsize )
2008-01-04 22:40:50 +01:00
page . pack_end ( table )
def _addLastPage ( self ) :
page = gtk . VBox ( False , 5 )
self . pages [ " output " ] = page
page . set_border_width ( 5 )
page . show ( )
self . append_page ( page )
self . set_page_title ( page ,
" Output formats " )
self . set_page_type ( page , gtk . ASSISTANT_PAGE_CONFIRM )
label = gtk . Label ( " Choose the output data. " )
label . show ( )
page . pack_start ( label )
#makejscript
toggle = gtk . CheckButton ( " Make HTML, CSS and JavaScript " )
toggle . set_active ( self . data [ " makejscript " ] )
toggle . connect ( " toggled " , self . _cb_toggle_simple , " makejscript " ,
" output " )
toggle . show ( )
page . pack_start ( toggle )
#makeinactive
toggle = gtk . CheckButton ( " Make inactive buttons " )
toggle . set_active ( self . data [ " makeinactive " ] )
toggle . connect ( " toggled " , self . _cb_toggle_simple , " makeinactive " ,
" output " )
toggle . show ( )
page . pack_start ( toggle )
#makeactive
toggle = gtk . CheckButton ( " Make active buttons " )
toggle . set_active ( self . data [ " makeactive " ] )
toggle . connect ( " toggled " , self . _cb_toggle_simple , " makeactive " ,
" output " )
toggle . show ( )
page . pack_start ( toggle )
#makepressed
toggle = gtk . CheckButton ( " Make pressed buttons " )
toggle . set_active ( self . data [ " makepressed " ] )
toggle . connect ( " toggled " , self . _cb_toggle_simple , " makepressed " ,
" output " )
toggle . show ( )
page . pack_start ( toggle )
#writexcf
toggle = gtk . CheckButton ( " Write the XCF file " )
toggle . set_active ( self . data [ " writexcf " ] )
toggle . connect ( " toggled " , self . _cb_toggle_simple , " writexcf " ,
" output " )
toggle . show ( )
page . pack_start ( toggle )
def checkcompletion ( self , pagename ) :
criteriamatched = False
if pagename == " pathselection " :
2008-01-05 17:26:37 +01:00
criteriamatched = self . data [ " filename " ] is not None and \
self . data [ " outdir " ] is not None
2008-01-04 22:40:50 +01:00
elif pagename == " basicsettings " :
2008-01-05 17:26:37 +01:00
criteriamatched = self . data [ " font " ] is not None and \
self . data [ " strcolor " ] is not None and \
( ( self . data [ " usepattern " ] and self . data [ " pattern " ] ) or \
( not self . data [ " usepattern " ] and \
self . data [ " buttoncolor " ] ) )
2008-01-04 22:40:50 +01:00
elif pagename == " layout " :
criteriamatched = self . data [ " roundradius " ] is not None and \
self . data [ " bevelwidth " ] is not None and \
2008-01-05 17:26:37 +01:00
self . data [ " padding " ] is not None and \
2008-01-04 22:40:50 +01:00
( self . data [ " transparency " ] or self . data [ " bgcolor " ] is not None )
2008-01-05 17:26:37 +01:00
elif pagename == " effects " :
criteriamatched = ( self . data [ " nova " ] == False or ( \
self . data [ " novacolor " ] is not None and \
self . data [ " novaradius " ] is not None and \
self . data [ " novasparkles " ] is not None ) ) and \
2008-01-05 21:45:57 +01:00
( self . data [ " glow " ] == False or ( \
self . data [ " glowcolor " ] is not None and \
self . data [ " glowsize " ] is not None ) )
2008-01-04 22:40:50 +01:00
elif pagename == " output " :
criteriamatched = self . data [ " makejscript " ] is not None and \
self . data [ " makeinactive " ] is not None and \
self . data [ " makeactive " ] is not None and \
2008-01-05 21:45:57 +01:00
self . data [ " makepressed " ] is not None and \
self . data [ " writexcf " ] is not None
2008-01-04 22:40:50 +01:00
if criteriamatched :
self . set_page_complete ( self . pages [ pagename ] , True )
else :
self . set_page_complete ( self . pages [ pagename ] , False )
def _cb_set_intvalue ( self , w , fieldname , pagename ) :
try :
self . data [ fieldname ] = int ( w . get_text ( ) )
except ValueError :
pass
self . checkcompletion ( pagename )
def _cb_toggle_simple ( self , w , datafield , pagename ) :
self . data [ datafield ] = w . get_active ( )
self . checkcompletion ( pagename )
2008-01-05 17:26:37 +01:00
def _cb_file_selected ( self , w ) :
2008-01-04 22:40:50 +01:00
self . data [ " filename " ] = w . get_filename ( )
self . checkcompletion ( " pathselection " )
2008-01-05 17:26:37 +01:00
def _cb_dir_selected ( self , w ) :
2008-01-04 22:40:50 +01:00
self . data [ " outdir " ] = w . get_filename ( )
self . checkcompletion ( " pathselection " )
def _cb_set_font ( self , w ) :
self . data [ " font " ] = w . get_font_name ( )
self . checkcompletion ( " basicsettings " )
def _cb_set_color ( self , w , fieldname , pagename ) :
self . data [ fieldname ] = w . get_color ( )
self . checkcompletion ( pagename )
def _cb_set_pattern ( self , w , patternname , width , height , bpp , mask_data ,
finished ) :
if finished :
self . data [ " pattern " ] = patternname
self . checkcompletion ( " basicsettings " )
def _cb_bgtoggle_toggle ( self , w , label , patterntext , patternsel ,
colortext , colorsel ) :
if w . get_active ( ) :
self . data [ " usepattern " ] = True
colorsel . hide ( )
patternsel . show ( )
label . set_text ( patterntext )
else :
self . data [ " usepattern " ] = False
patternsel . hide ( )
colorsel . show ( )
label . set_text ( colortext )
self . checkcompletion ( " basicsettings " )
def _cb_nova_toggle ( self , w , colorfield , radiusfield , sparksfield ) :
if w . get_active ( ) :
self . data [ " nova " ] = True
colorfield . set_sensitive ( True )
radiusfield . set_sensitive ( True )
sparksfield . set_sensitive ( True )
else :
self . data [ " nova " ] = False
colorfield . set_sensitive ( False )
radiusfield . set_sensitive ( False )
sparksfield . set_sensitive ( False )
self . checkcompletion ( " effects " )
2008-01-02 22:03:30 +01:00
2008-01-05 21:45:57 +01:00
def _cb_glow_toggle ( self , w , colorfield , sizefield ) :
2008-01-05 17:26:37 +01:00
if w . get_active ( ) :
self . data [ " glow " ] = True
colorfield . set_sensitive ( True )
2008-01-05 21:45:57 +01:00
sizefield . set_sensitive ( True )
2008-01-05 17:26:37 +01:00
else :
self . data [ " glow " ] = False
colorfield . set_sensitive ( False )
2008-01-05 21:45:57 +01:00
sizefield . set_sensitive ( False )
2008-01-05 17:26:37 +01:00
self . checkcompletion ( " effects " )
2008-01-01 22:23:40 +01:00
class btn4wsplugin ( gimpplugin . plugin ) :
""" This is the btn4ws gimp plugin. """
2008-01-05 21:45:57 +01:00
def gimp2html_color ( self , color ) :
2007-12-04 14:58:29 +01:00
"""
Converts a color tuple to a hex encoded color for CSS .
"""
return " # %02x %02x %02x " % ( color [ 0 ] , color [ 1 ] , color [ 2 ] )
2008-01-05 21:45:57 +01:00
def parsefont ( self , font ) :
"""
Parses a font into its fontname and size parts .
"""
parts = font . split ( " " )
return ( " " . join ( parts [ : - 1 ] ) , parts [ - 1 ] )
def toprocess ( self , item ) :
2007-12-04 14:58:29 +01:00
"""
Decides whether the plugin is able to process the item or not .
"""
item = item . strip ( )
return len ( item ) > 0 and not item . startswith ( ' # ' )
2008-01-05 21:45:57 +01:00
def getmaxextents ( self , strings , fontsize , fontname ) :
2007-12-04 14:58:29 +01:00
"""
Gets the maximum width and height of texts in strings array
with the given font .
"""
2008-01-01 22:23:40 +01:00
getextents = pdb [ ' gimp_text_get_extents_fontname ' ]
2007-12-04 14:58:29 +01:00
maxx = 0
maxy = 0
for extents in [ getextents ( string , fontsize , 1 , fontname )
for string in strings ] :
maxx = max ( maxx , extents [ 0 ] )
maxy = max ( maxy , extents [ 1 ] )
return ( maxx , maxy )
2008-01-05 21:45:57 +01:00
def writejs ( self , dirname , strings , width , height , t2nm ) :
2007-12-04 14:58:29 +01:00
buf = [
" // " ,
" // JavaScript generated by btn4ws version %s " % ( btn4ws_version ) ,
" // " ,
" " ,
" // function to show image for given image_object " ,
" function hilite(ObjID, imgObjName) { " ,
" ObjID.src = eval(imgObjName + ' .src ' ); " ,
" return true; " ,
" } " ,
" "
]
for item in strings :
for prefix in ( ' a_ ' , ' i_ ' , ' p_ ' ) :
buf . append (
" %(prefix)s %(jsid)s = new Image( %(width)d , %(height)d ); "
" %(prefix)s %(jsid)s .src = ' %(fname)s ' ; "
% {
' prefix ' : prefix ,
' jsid ' : t2nm . asjavascriptid ( item ) ,
' width ' : width ,
' height ' : height ,
' fname ' : urllib . quote ( t2nm . asfilename ( item , ' png ' ,
prefix ) ) } )
jsfile = open ( os . path . join ( dirname , ' imgobjs.js ' ) , ' w ' )
jsfile . write ( " \n " . join ( buf ) )
jsfile . close ( )
2008-01-05 21:45:57 +01:00
def writecss ( self , dirname , bgcolor ) :
2007-12-04 14:58:29 +01:00
buf = [
2008-01-05 21:45:57 +01:00
" html, body { background-color: %s ; } " % ( self . gimp2html_color ( bgcolor ) ) ,
2007-12-04 14:58:29 +01:00
" a img { border-width: 0; } "
]
cssfile = open ( os . path . join ( dirname , ' format.css ' ) , ' w ' )
cssfile . write ( " \n " . join ( buf ) )
cssfile . close ( )
2008-01-05 21:45:57 +01:00
def writehtml ( self , dirname , strings , width , height , t2nm ) :
2007-12-04 14:58:29 +01:00
buf = [
' <?xml version= " 1.0 " encoding= " UTF-8 " ?> ' ,
' <!DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.1//EN " ' ,
' " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd " > ' ,
' <html xmlns= " http://www.w3.org/1999/xhtml " xml:lang= " en " > ' ,
' <head> ' ,
' <title>A JavaScript MouseOver Example</title> ' ,
' <script src= " imgobjs.js " type= " text/javascript " ></script> ' ,
' <link rel= " stylesheet " type= " text/css " href= " format.css " /> ' ,
' </head> ' ,
' <body> ' ,
' <div> '
]
for item in strings :
buf . append (
' <a href= " %(target)s " '
' onmouseover= " return hilite( %(imgid)s , \' a_ %(jsid)s \' ); " '
' onmouseout= " return hilite( %(imgid)s , \' i_ %(jsid)s \' ); " '
' onmousedown= " return hilite( %(imgid)s , \' p_ %(jsid)s \' ); " '
' onmouseup= " return hilite( %(imgid)s , \' a_ %(jsid)s \' ); " > '
' <img src= " %(fname)s " class= " nav " id= " %(imgid)s " width= " %(width)d " height= " %(height)d " '
' alt= " %(text)s " /></a><br /> ' % {
' target ' : t2nm . aslinktarget ( item ) ,
' imgid ' : t2nm . asitemid ( item ) ,
' jsid ' : t2nm . asjavascriptid ( item ) ,
' fname ' : urllib . quote ( t2nm . asfilename ( item , ' png ' , ' i_ ' ) ) ,
' width ' : width ,
' height ' : height ,
' text ' : item } )
buf . extend ( [
' </div> ' ,
' <p><a href= " http://validator.w3.org/check/referer " > '
' <img src= " http://www.w3.org/Icons/valid-xhtml11 " alt= " Valid XHTML 1.1! " height= " 31 " '
' width= " 88 " /></a></p> ' ,
' </html> ' ,
' '
] )
2008-01-05 21:45:57 +01:00
htmlfile = open ( os . path . join ( dirname , ' example.html ' ) , ' w ' )
2007-12-04 14:58:29 +01:00
htmlfile . write ( " \n " . join ( buf ) )
htmlfile . close ( )
2008-01-05 21:45:57 +01:00
def saveaspng ( self , fname , image , transparency ) :
imgcopy = pdb [ ' gimp_image_duplicate ' ] ( image )
2007-12-04 14:58:29 +01:00
if transparency :
imgcopy . merge_visible_layers ( CLIP_TO_BOTTOM_LAYER )
else :
imgcopy . flatten ( )
2008-01-05 21:45:57 +01:00
pdb [ ' file_png_save ' ] ( imgcopy , imgcopy . active_layer , fname , fname ,
False , 9 , False , False , False , False , True )
2007-12-04 14:58:29 +01:00
gimp . delete ( imgcopy )
2008-01-04 22:40:50 +01:00
def __init__ ( self ) :
self . data = { }
2008-01-05 21:45:57 +01:00
self . inputdata = { }
2008-01-05 23:19:03 +01:00
self . datafile = os . path . join ( gimp . directory , " btn4wsrc " )
2008-01-05 21:45:57 +01:00
def checkdata ( self , data ) :
logging . debug ( " checkdata " + str ( data ) )
valid = True
if data [ " filename " ] is None :
logging . error ( " filename is None " )
valid = False
else :
try :
if not os . path . isfile ( data [ " filename " ] ) :
logging . error ( " %s is not a file. " , data [ " filename " ] )
valid = False
except OSError , e :
logging . error ( e )
valid = False
if data [ " outdir " ] is None :
logging . error ( " outdir is None " )
else :
try :
if not os . path . isdir ( data [ " outdir " ] ) :
logging . error ( " %s is not a directory. " , data [ " outdir " ] )
valid = False
except OSError , e :
logging . error ( e )
valid = False
# simple None checks
for key in ( " font " , " strcolor " , " roundradius " , " bevelwidth " ,
" padding " , " makejscript " , " makeinactive " , " makeactive " ,
" makepressed " , " writexcf " ) :
if data [ key ] is None :
logging . error ( " %s is None " % ( key ) )
valid = False
if data [ " usepattern " ] :
if data [ " pattern " ] is None :
logging . error ( " usepattern is True and pattern is None " )
valid = False
elif data [ " buttoncolor " ] is None :
logging . error ( " usepattern is False and buttoncolor is None " )
valid = False
if not data [ " transparency " ] and data [ " bgcolor " ] is None :
logging . error ( " transparency is not enabled and bgcolor is None " )
valid = False
if data [ " nova " ] :
if data [ " novacolor " ] is None :
logging . error ( " nova is enabled and novacolor is None " )
valid = False
if data [ " novaradius " ] is None :
logging . error ( " nova is enabled and novaradius is None " )
valid = False
if data [ " novasparkles " ] is None :
logging . error ( " nova is enabled and novasparkles is None " )
valid = False
if data [ " glow " ] :
if data [ " glowcolor " ] is None :
logging . error ( " glow is enabled and glowcolor is None " )
valid = False
if data [ " glowsize " ] is None :
logging . error ( " glow is enabled and glowsize is None " )
return valid
def makebuttons ( self , filename = None , outdir = None , font = None ,
2008-01-04 22:40:50 +01:00
strcolor = None , transparency = False , bgcolor = None ,
2008-01-01 22:23:40 +01:00
glow = False , glowcolor = None , usepattern = False ,
pattern = None , buttoncolor = None , roundradius = None ,
padding = None , glowsize = None , bevelwidth = None ,
nova = False , novasparkles = None , novaradius = None ,
novacolor = None , writexcf = False , makeinactive = True ,
makeactive = True , makepressed = True , makejscript = True ) :
# import used gimp pdb functions
createtext = pdb [ ' gimp_text_fontname ' ]
selectionlayeralpha = pdb [ ' gimp_selection_layer_alpha ' ]
selectionfeather = pdb [ ' gimp_selection_feather ' ]
bucketfill = pdb [ ' gimp_edit_bucket_fill ' ]
selectionall = pdb [ ' gimp_selection_all ' ]
editclear = pdb [ ' gimp_edit_clear ' ]
rectselect = pdb [ ' gimp_rect_select ' ]
ellipseselect = pdb [ ' gimp_ellipse_select ' ]
selectionshrink = pdb [ ' gimp_selection_shrink ' ]
2008-01-05 21:45:57 +01:00
selectionnone = pdb [ ' gimp_selection_none ' ]
2008-01-01 22:23:40 +01:00
fill = pdb [ ' gimp_edit_fill ' ]
bumpmap = pdb [ ' plug_in_bump_map ' ]
novaplugin = pdb [ ' plug_in_nova ' ]
xcfsave = pdb [ ' gimp_xcf_save ' ]
2008-01-05 21:45:57 +01:00
2008-01-01 22:23:40 +01:00
gimp . progress_init ( )
stringfile = open ( filename )
strings = [ line . strip ( )
for line in stringfile . readlines ( )
2008-01-05 21:45:57 +01:00
if self . toprocess ( line ) ]
2008-01-01 22:23:40 +01:00
stringfile . close ( )
t2nm = text_to_name_mapper ( strings )
2008-01-05 21:45:57 +01:00
( fontname , fontsize ) = self . parsefont ( font )
( maxx , maxy ) = self . getmaxextents ( strings , fontsize , fontname )
2008-01-01 22:23:40 +01:00
logging . debug ( " fontname: %s , fontsize: %d , maxx: %d , maxy: %d " ,
fontname , int ( fontsize ) , maxx , maxy )
width = maxx + ( padding * 4 )
height = maxy + ( padding * 4 )
logging . debug ( " width: %d , height: %d " , width , height )
if roundradius > height / 2 :
roundradius = height / 2 - 1
if roundradius > width / 2 :
roundradius = width / 2 - 1
logging . debug ( " roundradius: %d " , roundradius )
2007-12-04 14:58:29 +01:00
2008-01-01 22:23:40 +01:00
for text in strings :
image = gimp . Image ( width , height , RGB )
image . disable_undo ( )
gimp . set_foreground ( strcolor )
textlayer = createtext ( image , None , padding * 2 , padding * 2 , text ,
0 , 1 , fontsize , 1 , fontname )
# center the text
textlayer . set_offsets ( ( image . width - textlayer . width ) / 2 - 1 ,
( image . height - textlayer . height ) / 2 - 1 )
textlayer . lock_alpha = True
textlayer . name = text
if glow :
texteffect = textlayer . copy ( True )
image . add_layer ( texteffect , len ( image . layers ) )
offs = texteffect . offsets
texteffect . resize ( image . width , image . height , offs [ 0 ] , offs [ 1 ] )
texteffect . lock_alpha = False
image . active_layer = texteffect
selectionlayeralpha ( texteffect )
selectionfeather ( image , glowsize )
gimp . set_foreground ( glowcolor )
bucketfill ( texteffect , FG_BUCKET_FILL , NORMAL_MODE , 100 , 0 ,
True , 0 , 0 )
btnlayer0 = gimp . Layer ( image , " Background " , width , height ,
RGBA_IMAGE , 100 , NORMAL_MODE )
image . add_layer ( btnlayer0 , len ( image . layers ) )
selectionall ( image )
editclear ( btnlayer0 )
offs = btnlayer0 . offsets
rectselect ( image , offs [ 0 ] + roundradius , offs [ 1 ] ,
btnlayer0 . width - roundradius * 2 , btnlayer0 . height ,
CHANNEL_OP_REPLACE , 0 , 0 )
rectselect ( image , offs [ 0 ] , offs [ 1 ] + roundradius ,
btnlayer0 . width , btnlayer0 . height - roundradius * 2 ,
CHANNEL_OP_ADD , 0 , 0 )
ellipseselect ( image , offs [ 0 ] , offs [ 1 ] ,
roundradius * 2 , roundradius * 2 ,
CHANNEL_OP_ADD , False , 0 , 0 )
ellipseselect ( image , offs [ 0 ] + btnlayer0 . width - roundradius * 2 ,
offs [ 1 ] ,
roundradius * 2 , roundradius * 2 ,
CHANNEL_OP_ADD , False , 0 , 0 )
ellipseselect ( image , offs [ 0 ] ,
offs [ 1 ] + btnlayer0 . height - roundradius * 2 ,
roundradius * 2 , roundradius * 2 ,
CHANNEL_OP_ADD , False , 0 , 0 )
ellipseselect ( image , offs [ 0 ] + btnlayer0 . width - roundradius * 2 ,
offs [ 1 ] + btnlayer0 . height - roundradius * 2 ,
roundradius * 2 , roundradius * 2 ,
CHANNEL_OP_ADD , False , 0 , 0 )
selectionshrink ( image , 1 )
selectionfeather ( image , 2 )
if usepattern :
pdb [ ' gimp_context_set_pattern ' ] ( pattern )
bucketfill ( btnlayer0 , PATTERN_BUCKET_FILL , NORMAL_MODE , 100 , 0 ,
True , 0 , 0 )
else :
gimp . set_background ( buttoncolor )
bucketfill ( btnlayer0 , BG_BUCKET_FILL , NORMAL_MODE , 100 , 0 ,
True , 0 , 0 )
selectionnone ( image )
selectionlayeralpha ( btnlayer0 )
selectionfeather ( image , 2 )
bumplayer = gimp . Layer ( image , " Bumpmap " , width , height , RGBA_IMAGE ,
100 , NORMAL_MODE )
gimp . set_background ( 0 , 0 , 0 )
image . add_layer ( bumplayer , 0 )
fill ( bumplayer , BACKGROUND_FILL )
for index in range ( 1 , bevelwidth - 1 ) :
greyness = index * 255 / bevelwidth ;
gimp . set_background ( greyness , greyness , greyness )
bucketfill ( bumplayer , BG_BUCKET_FILL , NORMAL_MODE , 100 , 0 ,
False , 0 , 0 )
selectionshrink ( image , 1 )
gimp . set_background ( 255 , 255 , 255 )
2007-12-04 14:58:29 +01:00
bucketfill ( bumplayer , BG_BUCKET_FILL , NORMAL_MODE , 100 , 0 , False ,
0 , 0 )
2008-01-01 22:23:40 +01:00
selectionnone ( image )
btnlayer1 = btnlayer0 . copy ( True )
btnlayer2 = btnlayer0 . copy ( True )
image . add_layer ( btnlayer1 , len ( image . layers ) )
image . add_layer ( btnlayer2 , len ( image . layers ) )
bumpmap ( image , btnlayer1 , bumplayer , 125 , 45 , 3 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 )
bumpmap ( image , btnlayer2 , bumplayer , 125 , 45 , 3 , 0 , 0 , 0 , 0 , 0 ,
1 , 1 )
image . remove_layer ( bumplayer )
#gimp.delete(bumplayer)
if nova :
novalayer = gimp . Layer ( image , " Nova " , width , height ,
RGBA_IMAGE , 75 , NORMAL_MODE )
image . add_layer ( novalayer , 0 )
selectionall ( image )
image . active_layer = novalayer
editclear ( novalayer )
selectionnone ( image )
novaplugin ( image , novalayer , width / 4 , height / 4 ,
novacolor , novaradius , novasparkles , 0 )
blackboard = gimp . Layer ( image , " Blackboard " , width , height ,
RGBA_IMAGE , 100 , NORMAL_MODE )
image . add_layer ( blackboard , len ( image . layers ) )
2007-12-04 14:58:29 +01:00
selectionall ( image )
2008-01-01 22:23:40 +01:00
if transparency :
2009-03-13 20:19:44 +01:00
blackboard . lock_alpha = True
2008-01-01 22:23:40 +01:00
editclear ( blackboard )
else :
gimp . set_background ( bgcolor )
bucketfill ( blackboard , BG_BUCKET_FILL , NORMAL_MODE , 100 , 0 ,
False , 0 , 0 )
2007-12-04 14:58:29 +01:00
selectionnone ( image )
2008-01-01 22:23:40 +01:00
if writexcf :
fname = t2nm . asfilename ( text , ' xcf ' , dirname = outdir )
xcfsave ( 0 , image , textlayer , fname , fname )
if makepressed :
btnlayer0 . visible = False
btnlayer1 . visible = False
btnlayer2 . visible = True
if nova : novalayer . visible = True
2008-01-05 21:45:57 +01:00
self . saveaspng ( t2nm . asfilename ( text , ' png ' , ' p_ ' , outdir ) ,
image , transparency )
2008-01-01 22:23:40 +01:00
if makeactive :
btnlayer0 . visible = False
btnlayer1 . visible = True
btnlayer2 . visible = False
if nova : novalayer . visible = True
2008-01-05 21:45:57 +01:00
self . saveaspng ( t2nm . asfilename ( text , ' png ' , ' a_ ' , outdir ) ,
image , transparency )
2008-01-01 22:23:40 +01:00
if makeinactive :
btnlayer0 . visible = True
btnlayer1 . visible = False
btnlayer2 . visible = False
if nova : novalayer . visible = False
2008-01-05 21:45:57 +01:00
self . saveaspng ( t2nm . asfilename ( text , ' png ' , ' i_ ' , outdir ) ,
image , transparency )
2008-01-01 22:23:40 +01:00
image . enable_undo ( )
#gimp.Display(image)
gimp . progress_update ( ( strings . index ( text ) + 1 ) / len ( strings ) )
gimp . delete ( image )
if makejscript :
2008-01-05 21:45:57 +01:00
self . writejs ( outdir , strings , width , height , t2nm )
self . writecss ( outdir , bgcolor )
self . writehtml ( outdir , strings , width , height , t2nm )
2008-01-01 22:23:40 +01:00
#gimp.displays_flush()
2008-01-05 21:45:57 +01:00
def _cb_destroy ( self , widget , data = None ) :
logging . debug ( " destroy " )
gtk . main_quit ( )
2008-01-05 23:19:03 +01:00
def _loaddata ( self , data ) :
try :
if os . path . exists ( self . datafile ) :
return pickle . load ( open ( self . datafile ) )
except OSError , e :
pass
return data
def _storedata ( self , data ) :
try :
pickle . dump ( data , open ( self . datafile , ' w ' ) )
except OSError , e :
pass
2008-01-05 21:45:57 +01:00
def _cb_apply ( self , widget ) :
self . data = widget . data
logging . debug ( str ( self . data ) )
2008-01-05 23:19:03 +01:00
if self . checkdata ( self . data ) :
2008-01-05 21:45:57 +01:00
self . makebuttons ( * * self . data )
2008-01-05 23:19:03 +01:00
shelf [ " btn4ws " ] = self . data
self . _storedata ( self . data )
2008-01-05 21:45:57 +01:00
else :
logging . error ( " checking data failed " )
def btn4ws ( self , runmode , filename = None , outdir = None , font = None ,
strcolor = None , transparency = False , bgcolor = None ,
glow = False , glowcolor = None , usepattern = False ,
pattern = None , buttoncolor = None , roundradius = None ,
padding = None , glowsize = None , bevelwidth = None ,
nova = False , novasparkles = None , novaradius = None ,
novacolor = None , writexcf = False , makeinactive = True ,
makeactive = True , makepressed = True , makejscript = True ) :
"""
This function controls the creation of the buttons and is
registered as gimp plugin .
"""
self . inputdata = {
" filename " : filename , " outdir " : outdir , " font " : font ,
" strcolor " : strcolor , " transparency " : transparency ,
" bgcolor " : bgcolor , " glow " : glow , " glowcolor " : glowcolor ,
" usepattern " : usepattern , " pattern " : pattern ,
" buttoncolor " : buttoncolor , " roundradius " : roundradius ,
" padding " : padding , " glowsize " : glowsize ,
" bevelwidth " : bevelwidth , " nova " : nova ,
" novasparkles " : novasparkles , " novaradius " : novaradius ,
" novacolor " : novacolor , " writexcf " : writexcf ,
" makeinactive " : makeinactive , " makeactive " : makeactive ,
" makepressed " : makepressed , " makejscript " : makejscript
}
2008-01-05 23:19:03 +01:00
if runmode in ( RUN_INTERACTIVE , RUN_WITH_LAST_VALS ) :
2008-01-05 21:45:57 +01:00
if shelf . has_key ( " btn4ws " ) :
self . inputdata = shelf [ " btn4ws " ]
2008-01-05 23:19:03 +01:00
else :
self . inputdata = self . _loaddata ( self . inputdata )
2008-01-05 21:45:57 +01:00
dialog = Btn4wsDialog ( self . inputdata )
dialog . connect ( " close " , self . _cb_destroy )
dialog . connect ( " cancel " , self . _cb_destroy )
dialog . connect ( " destroy " , self . _cb_destroy )
dialog . connect ( " apply " , self . _cb_apply )
gtk . main ( )
elif runmode == RUN_NONINTERACTIVE :
logging . debug ( " runmode noninteractive " )
if self . checkdata ( self . inputdata ) :
self . makebuttons ( * * self . inputdata )
else :
logging . error ( " checking data failed " )
else :
logging . error ( " unknown runmode %d " % runmode )
return
2008-01-01 22:23:40 +01:00
def start ( self ) :
gimp . main ( self . init , self . quit , self . query , self . _run )
def init ( self ) :
logging . debug ( " init " )
def quit ( self ) :
logging . debug ( " quit " )
2007-12-03 23:01:55 +01:00
2008-01-01 22:23:40 +01:00
def query ( self ) :
logging . debug ( " query " )
gimp . install_procedure (
" btn4ws " ,
" Buttons for website " , """ Creates buttons for a website. Which have the same size, layout, effects on it. It ' s possible to create JavaScript code, CSS and XHTML examples for MouseOver effects also. """ ,
" Jan Dittberner " ,
" Jan Dittberner <jan@dittberner.info> " ,
" %s , %s " % ( btn4ws_version ,
" $Date$ " ) ,
" <Toolbox>/Xtns/Render/Buttons for website ... " ,
" " , PLUGIN ,
[ ( PDB_INT32 , " run_mode " , " Run mode " ) ,
( PDB_STRING , " string_filename " , " File containing the strings " ) ,
( PDB_STRING , " output_directory " , " Directory for the output files " ) ,
( PDB_STRING , " font " , " Font for the strings " ) , # "Sans 18"),
( PDB_COLOR , " string_color " , " Color of the strings " ) , #, (255, 255, 0)),
( PDB_INT8 , " transparent_background " , " Keep the background transparent (This doesn ' t work in MS Internet Explorer <= 6.0) " ) , #, 0),
( PDB_COLOR , " background_color " , " Color of the background " ) , #, (7, 135, 255)),
( PDB_INT8 , " apply_glow " , " Enable glow effect " ) , #, 1),
( PDB_COLOR , " glow_color " , " Color of the Glow effect " ) , #, (255, 180, 0)),
( PDB_INT8 , " use_pattern " , " Use a pattern for the button " ) , #, 1),
( PDB_STRING , " button_pattern " , " Fill pattern of the button " ) , #, "Rain"),
( PDB_COLOR , " button_color " , " Button color (if you don ' t use a pattern) " ) , #, (0, 0, 255)),
( PDB_INT32 , " round_radius " , " Radius of the round corners " ) , #, 20),
( PDB_INT32 , " padding " , " Space around the text " ) , #, 3),
( PDB_INT32 , " glow_size " , " Size of the Glow effect " ) , #, 10),
( PDB_INT32 , " bevel_width " , " Width of the bevel " ) , #, 5),
( PDB_INT8 , " apply_nova " , " Nova or not Nova? " ) , #, 1),
( PDB_INT32 , " nova_sparkles " , " Sparkles of the Nova " ) , #, 5),
( PDB_INT32 , " nova_radius " , " Radius of the Nova " ) , #, 2),
( PDB_COLOR , " nova_color " , " Color of the Nova effect " ) , #, (255, 238, 0)),
( PDB_INT8 , " write_xcf " , " Write a GIMP xcf file " ) , #, 0),
( PDB_INT8 , " create_inactive " , " Create Inactive Button " ) , #, 1),
( PDB_INT8 , " create_active " , " Create Active Button " ) , #, 1),
( PDB_INT8 , " create_pressed " , " Create Pressed Button " ) , #, 1),
( PDB_INT8 , " create_jscript " , " Create JavaScript, HTML and CSS " ) , #, 1)
] ,
[ ] )
2007-12-03 23:01:55 +01:00
2008-01-01 22:23:40 +01:00
if __name__ == ' __main__ ' :
btn4wsplugin ( ) . start ( )