#!/opt/bin/perl -w

use Gtk2;
use Gimp qw(:auto);

use strict 'vars';

# Gimp::set_trace(TRACE_ALL);

# 12/5/03: <sjburges@gimp.org>
#  s/->mask/->get_mask
# 3/21/04: <sjburges@gimp.org>
#  s/AlphaFade/alpha_fade/ to be compatible with PDB naming conventions

###
# Globals
###
my ($direction, $cancelFlag);
my ($plugin) = "plug_in_alpha_fade";

# XPM's that I removed the $ and the @'s from (they get intrepreted in 
# strings, which makes for nasty problems).

my @arr = (
["24 24 66 1",
" 	c None",
".	c #A0A0A0",
"+	c #A2A2A2",
"X	c #787878",
"#	c #7B7B7B",
"Z	c #A8A8A8",
"%	c #AAAAAA",
"&	c #848484",
"*	c #868686",
"=	c #B0B0B0",
"-	c #B2B2B2",
";	c #8F8F8F",
">	c #929292",
",	c #B8B8B8",
"'	c #BABABA",
")	c #9B9B9B",
"!	c #9E9E9E",
"~	c #C0C0C0",
"{	c #C2C2C2",
"]	c #A7A7A7",
"^	c #C7C7C7",
"/	c #C9C9C9",
"(	c #B3B3B3",
"_	c #B5B5B5",
":	c #A4A4A4",
"<	c #7E7E7E",
"[	c #ACACAC",
"}	c #898989",
"|	c #B4B4B4",
"1	c #959595",
"2	c #BCBCBC",
"3	c #A1A1A1",
"4	c #C3C3C3",
"5	c #ADADAD",
"6	c #CCCCCC",
"7	c #CFCFCF",
"8	c #D2D2D2",
"9	c #D3D3D3",
"0	c #BEBEBE",
"a	c #C1C1C1",
"b	c #C4C4C4",
"c	c #D8D8D8",
"d	c #D9D9D9",
"e	c #DBDBDB",
"f	c #CACACA",
"g	c #CDCDCD",
"h	c #D0D0D0",
"i	c #DFDFDF",
"j	c #E1E1E1",
"k	c #E3E3E3",
"l	c #D6D6D6",
"m	c #DCDCDC",
"n	c #E7E7E7",
"o	c #E9E9E9",
"p	c #EBEBEB",
"q	c #E2E2E2",
"r	c #E4E4E4",
"s	c #EFEFEF",
"t	c #F1F1F1",
"u	c #F3F3F3",
"v	c #EDEDED",
"w	c #F0F0F0",
"x	c #F7F7F7",
"y	c #F9F9F9",
"z	c #FBFBFB",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W:#<%[*}-|>1'2!3{4%5/6_W",
"W#Z%&*=-;>,')!~{]%^/(_7W",
"W<%[*}-|>1'2!3{4%5/6_,8W",
"W%&*=-;>,')!~{]%^/(_780W",
"W[*}-|>1'2!3{4%5/6_,89aW",
"W*=-;>,')!~{]%^/(_780acW",
"W}-|>1'2!3{4%5/6_,89abdW",
"W-;>,')!~{]%^/(_780acdfW",
"W|>1'2!3{4%5/6_,89abdegW",
"W>,')!~{]%^/(_780acdfgiW",
"W1'2!3{4%5/6_,89abdeghjW",
"W')!~{]%^/(_780acdfgijlW",
"W2!3{4%5/6_,89abdeghjkdW",
"W!~{]%^/(_780acdfgijldnW",
"W3{4%5/6_,89abdeghjkdmoW",
"W{]%^/(_780acdfgijldnoqW",
"W4%5/6_,89abdeghjkdmoprW",
"W%^/(_780acdfgijldnoqrsW",
"W5/6_,89abdeghjkdmoprntW",
"W/(_780acdfgijldnoqrstvW",
"W6_,89abdeghjkdmoprntuwW",
"W_780acdfgijldnoqrstvwxW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 47 1",
" 	c None",
".	c #A0A0A0",
"+	c #A4A4A4",
"X	c #7E7E7E",
"#	c #848484",
"Z	c #B0B0B0",
"%	c #B4B4B4",
"&	c #959595",
"*	c #9B9B9B",
"=	c #C0C0C0",
"-	c #C3C3C3",
";	c #ADADAD",
">	c #B3B3B3",
",	c #CFCFCF",
"'	c #D3D3D3",
")	c #C4C4C4",
"!	c #CACACA",
"~	c #DFDFDF",
"{	c #E3E3E3",
"]	c #DCDCDC",
"^	c #E2E2E2",
"/	c #EFEFEF",
"(	c #F3F3F3",
"_	c #F9F9F9",
":	c #727272",
"<	c #787878",
"[	c #A8A8A8",
"}	c #ACACAC",
"|	c #898989",
"1	c #8F8F8F",
"2	c #B8B8B8",
"3	c #BCBCBC",
"4	c #A1A1A1",
"5	c #A7A7A7",
"6	c #C7C7C7",
"7	c #CCCCCC",
"8	c #BEBEBE",
"9	c #D8D8D8",
"0	c #DBDBDB",
"a	c #D0D0D0",
"b	c #D6D6D6",
"c	c #E7E7E7",
"d	c #EBEBEB",
"e	c #EDEDED",
"f	c #F7F7F7",
"g	c #FBFBFB",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"W<[}|12345672890abcdcefW",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W+X#Z%&*=-;>,')!~{]^/((W",
"W<[}|12345672890abcdcefW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 65 1",
" 	c None",
".	c #CFCFCF",
"+	c #D2D2D2",
"X	c #BEBEBE",
"#	c #C1C1C1",
"Z	c #D8D8D8",
"%	c #D9D9D9",
"&	c #CACACA",
"*	c #CDCDCD",
"=	c #DFDFDF",
"-	c #E1E1E1",
";	c #D6D6D6",
">	c #E7E7E7",
",	c #E9E9E9",
"'	c #E2E2E2",
")	c #E4E4E4",
"!	c #EFEFEF",
"~	c #F1F1F1",
"{	c #EDEDED",
"]	c #F0F0F0",
"^	c #F7F7F7",
"/	c #F9F9F9",
"(	c #FCFCFC",
"_	c #BCBCBC",
":	c #D5D5D5",
"<	c #C7C7C7",
"[	c #DDDDDD",
"}	c #D3D3D3",
"|	c #E5E5E5",
"1	c #DEDEDE",
"2	c #EBEBEB",
"3	c #F5F5F5",
"4	c #F6F6F6",
"5	c #B3B3B3",
"6	c #B5B5B5",
"7	c #AFAFAF",
"8	c #C9C9C9",
"9	c #C6C6C6",
"0	c #A7A7A7",
"a	c #AAAAAA",
"b	c #A4A4A4",
"c	c #C0C0C0",
"d	c #C2C2C2",
"e	c #BDBDBD",
"f	c #9B9B9B",
"g	c #9E9E9E",
"h	c #989898",
"i	c #B8B8B8",
"j	c #BABABA",
"k	c #B6B6B6",
"l	c #8F8F8F",
"m	c #929292",
"n	c #8D8D8D",
"o	c #B0B0B0",
"p	c #B2B2B2",
"q	c #AEAEAE",
"r	c #848484",
"s	c #868686",
"t	c #808080",
"u	c #A8A8A8",
"v	c #A6A6A6",
"w	c #787878",
"x	c #7B7B7B",
"y	c #757575",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W._X:Z<&[=};|>1'{!2{3^4W",
"W6.+X#Z%&*=-;%>,')!~{]^W",
"W5*._X:Z<&[=};|>1'{!2{3W",
"W856.+X#Z%&*=-;%>,')!~{W",
"W<75*._X:Z<&[=};|>1'{!2W",
"Wa<856.+X#Z%&*=-;%>,')!W",
"W09<75*._X:Z<&[=};|>1'{W",
"Wd0a<856.+X#Z%&*=-;%>,'W",
"Wcb09<75*._X:Z<&[=};|>1W",
"Wgcd0a<856.+X#Z%&*=-;%>W",
"Wfecb09<75*._X:Z<&[=};|W",
"Wjfgcd0a<856.+X#Z%&*=-;W",
"Wihfecb09<75*._X:Z<&[=}W",
"Wmijfgcd0a<856.+X#Z%&*=W",
"Wlkihfecb09<75*._X:Z<&[W",
"Wplmijfgcd0a<856.+X#Z%&W",
"Wonlkihfecb09<75*._X:Z<W",
"Wsoplmijfgcd0a<856.+X#ZW",
"Wrqonlkihfecb09<75*._X:W",
"Warsoplmijfgcd0a<856.+XW",
"Wutrqonlkihfecb09<75*._W",
"Wxuarsoplmijfgcd0a<856.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[ "24 24 47 1",
" 	c None",
".	c #A0A0A0",
"+	c #727272",
"X	c #A4A4A4",
"#	c #787878",
"Z	c #7E7E7E",
"%	c #A8A8A8",
"&	c #848484",
"*	c #ACACAC",
"=	c #B0B0B0",
"-	c #898989",
";	c #B4B4B4",
">	c #8F8F8F",
",	c #959595",
"'	c #B8B8B8",
")	c #9B9B9B",
"!	c #BCBCBC",
"~	c #C0C0C0",
"{	c #A1A1A1",
"]	c #C3C3C3",
"^	c #A7A7A7",
"/	c #ADADAD",
"(	c #C7C7C7",
"_	c #B3B3B3",
":	c #CCCCCC",
"<	c #CFCFCF",
"[	c #D3D3D3",
"}	c #BEBEBE",
"|	c #C4C4C4",
"1	c #D8D8D8",
"2	c #CACACA",
"3	c #DBDBDB",
"4	c #DFDFDF",
"5	c #D0D0D0",
"6	c #E3E3E3",
"7	c #D6D6D6",
"8	c #DCDCDC",
"9	c #E7E7E7",
"0	c #E2E2E2",
"a	c #EBEBEB",
"b	c #EFEFEF",
"c	c #F3F3F3",
"d	c #EDEDED",
"e	c #F7F7F7",
"f	c #F9F9F9",
"g	c #FBFBFB",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"WX##XX##XX##XX##XX##XX#W",
"WZ%%ZZ%%ZZ%%ZZ%%ZZ%%ZZ%W",
"W&**&&**&&**&&**&&**&&*W",
"W=--==--==--==--==--==-W",
"W;>>;;>>;;>>;;>>;;>>;;>W",
"W,'',,'',,'',,'',,'',,'W",
"W)!!))!!))!!))!!))!!))!W",
"W~{{~~{{~~{{~~{{~~{{~~{W",
"W]^^]]^^]]^^]]^^]]^^]]^W",
"W/((//((//((//((//((//(W",
"W_::__::__::__::__::__:W",
"W<''<<''<<''<<''<<''<<'W",
"W[}}[[}}[[}}[[}}[[}}[[}W",
"W|11||11||11||11||11||1W",
"W2332233223322332233223W",
"W4554455445544554455445W",
"W6776677667766776677667W",
"W8998899889988998899889W",
"W0aa00aa00aa00aa00aa00aW",
"Wb99bb99bb99bb99bb99bb9W",
"WcddccddccddccddccddccdW",
"WceecceecceecceecceecceW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 79 1",
" 	c None",
".	c #A0A0A0",
"+	c #727272",
"X	c #A2A2A2",
"#	c #A4A4A4",
"Z	c #7B7B7B",
"%	c #7D7D7D",
"&	c #A8A8A8",
"*	c #A7A7A7",
"=	c #797979",
"-	c #A3A3A3",
";	c #A6A6A6",
">	c #808080",
",	c #848484",
"'	c #AEAEAE",
")	c #AFAFAF",
"!	c #898989",
"~	c #ACACAC",
"{	c #A9A9A9",
"]	c #ADADAD",
"^	c #8B8B8B",
"/	c #8F8F8F",
"(	c #B6B6B6",
"_	c #B7B7B7",
":	c #959595",
"<	c #949494",
"[	c #B4B4B4",
"}	c #868686",
"|	c #A5A5A5",
"1	c #ABABAB",
"2	c #909090",
"3	c #B8B8B8",
"4	c #BBBBBB",
"5	c #9E9E9E",
"6	c #C0C0C0",
"7	c #BFBFBF",
"8	c #9A9A9A",
"9	c #828282",
"0	c #B0B0B0",
"a	c #939393",
"b	c #C3C3C3",
"c	c #C7C7C7",
"d	c #8A8A8A",
"e	c #BCBCBC",
"f	c #C1C1C1",
"g	c #AAAAAA",
"h	c #CDCDCD",
"i	c #CFCFCF",
"j	c #CACACA",
"k	c #BABABA",
"l	c #D4D4D4",
"m	c #D6D6D6",
"n	c #C4C4C4",
"o	c #D1D1D1",
"p	c #D2D2D2",
"q	c #D8D8D8",
"r	c #CECECE",
"s	c #DFDFDF",
"t	c #DEDEDE",
"u	c #CCCCCC",
"v	c #B1B1B1",
"w	c #757575",
"x	c #DDDDDD",
"y	c #DADADA",
"z	c #E7E7E7",
"A	c #E6E6E6",
"B	c #E9E9E9",
"C	c #EDEDED",
"D	c #E4E4E4",
"E	c #E2E2E2",
"F	c #C5C5C5",
"G	c #F4F4F4",
"H	c #F3F3F3",
"I	c #EEEEEE",
"J	c #FFFFFF",
"K	c #F7F7F7",
"L	c #DCDCDC",
"M	c #7E7E7E",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W.++..++X#Z%&*Z=X.++..+W",
"W+..++-;>,')!!'~>Z-.++.W",
"W+..+={]^/(_:<([^}{#++.W",
"W.++|1!2345.67583[!9|.+W",
"W.+=10a87b{~cc{|74ad1#+W",
"W+-{!aefg0hi3_hjg-e(!>-W",
"W+;]28fc[klmnblo[~f42};W",
"WX>^37g[pqjrstjnpug.3v>W",
"W#,/4b0kqxlyzAlhqo0|4[,W",
"WZ'(5{hljlBCzDBEj7hF5a'W",
"W%)_.~imryCGHICArbic.<)W",
"W&!:6c3nszzHJKzLsq3]63!W",
"W*!<7c_btADIKGDytm_~7_!W",
"WZ'(5{hljlBCzDBEj7hF5a'W",
"W=~[8|jonhEALyExnkjb8/~W",
"WX>^37g[pqjrstjnpug.3v>W",
"W.Z}[4-~uo7bqm7kuc-8[]ZW",
"W+-{!aefg0hi3_hjg-e(!>-W",
"W+.#9d(4.|Fc]~Fb.8(09=.W",
"W.++|1!2345.67583[!9|.+W",
"W.++.#>}v[a<3_a/v]>=..+W",
"W+..++-;>,')!!'~>Z-.++.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
["24 24 46 1",
" 	c None",
".	c #FFFFFF",
"+	c #FBFBFB",
"X	c #F9F9F9",
"#	c #F3F3F3",
"Z	c #F7F7F7",
"%	c #EDEDED",
"&	c #EFEFEF",
"*	c #E7E7E7",
"=	c #EBEBEB",
"-	c #E2E2E2",
";	c #DCDCDC",
">	c #D6D6D6",
",	c #E3E3E3",
"'	c #DFDFDF",
")	c #D0D0D0",
"!	c #DBDBDB",
"~	c #CACACA",
"{	c #C4C4C4",
"]	c #D8D8D8",
"^	c #BEBEBE",
"/	c #D3D3D3",
"(	c #CFCFCF",
"_	c #B8B8B8",
":	c #CCCCCC",
"<	c #B3B3B3",
"[	c #ADADAD",
"}	c #C7C7C7",
"|	c #A7A7A7",
"1	c #C3C3C3",
"2	c #C0C0C0",
"3	c #A1A1A1",
"4	c #BCBCBC",
"5	c #9B9B9B",
"6	c #959595",
"7	c #8F8F8F",
"8	c #B4B4B4",
"9	c #B0B0B0",
"0	c #898989",
"a	c #ACACAC",
"b	c #848484",
"c	c #7E7E7E",
"d	c #A8A8A8",
"e	c #787878",
"f	c #A4A4A4",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+XX++XX++XX++XX++XX++XW",
"W#ZZ##ZZ##ZZ##ZZ##ZZ##ZW",
"W%##%%##%%##%%##%%##%%#W",
"W&**&&**&&**&&**&&**&&*W",
"W=--==--==--==--==--==-W",
"W;**;;**;;**;;**;;**;;*W",
"W>,,>>,,>>,,>>,,>>,,>>,W",
"W'))''))''))''))''))'')W",
"W!~~!!~~!!~~!!~~!!~~!!~W",
"W{]]{{]]{{]]{{]]{{]]{{]W",
"W^//^^//^^//^^//^^//^^/W",
"W(__((__((__((__((__((_W",
"W:<<::<<::<<::<<::<<::<W",
"W[}}[[}}[[}}[[}}[[}}[[}W",
"W|11||11||11||11||11||1W",
"W2332233223322332233223W",
"W4554455445544554455445W",
"W6__66__66__66__66__66_W",
"W7887788778877887788778W",
"W9009900990099009900990W",
"WabbaabbaabbaabbaabbaabW",
"WcddccddccddccddccddccdW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[ "24 24 65 1",
" 	c None",
".	c #CFCFCF",
"+	c #CDCDCD",
"X	c #B3B3B3",
"#	c #AFAFAF",
"Z	c #C7C7C7",
"%	c #C6C6C6",
"&	c #A7A7A7",
"*	c #A4A4A4",
"=	c #C0C0C0",
"-	c #BDBDBD",
";	c #9B9B9B",
">	c #989898",
",	c #B8B8B8",
"'	c #B6B6B6",
")	c #8F8F8F",
"!	c #8D8D8D",
"~	c #B0B0B0",
"{	c #AEAEAE",
"]	c #848484",
"^	c #808080",
"/	c #A8A8A8",
"(	c #A6A6A6",
"_	c #787878",
":	c #757575",
"<	c #D2D2D2",
"[	c #B5B5B5",
"}	c #C9C9C9",
"|	c #AAAAAA",
"1	c #C2C2C2",
"2	c #9E9E9E",
"3	c #BABABA",
"4	c #929292",
"5	c #B2B2B2",
"6	c #868686",
"7	c #7B7B7B",
"8	c #BEBEBE",
"9	c #BCBCBC",
"0	c #C1C1C1",
"a	c #D8D8D8",
"b	c #D5D5D5",
"c	c #D9D9D9",
"d	c #CACACA",
"e	c #DFDFDF",
"f	c #DDDDDD",
"g	c #E1E1E1",
"h	c #D6D6D6",
"i	c #D3D3D3",
"j	c #E7E7E7",
"k	c #E5E5E5",
"l	c #E9E9E9",
"m	c #E2E2E2",
"n	c #DEDEDE",
"o	c #E4E4E4",
"p	c #EFEFEF",
"q	c #EDEDED",
"r	c #F1F1F1",
"s	c #EBEBEB",
"t	c #F0F0F0",
"u	c #F7F7F7",
"v	c #F5F5F5",
"w	c #F9F9F9",
"x	c #F6F6F6",
"y	c #FCFCFC",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W.[X}Z|&1=2;3,4)5~6]|/7W",
"W9.+X#Z%&*=-;>,')!~{]^/W",
"W8<.[X}Z|&1=2;3,4)5~6]|W",
"Wb89.+X#Z%&*=-;>,')!~{]W",
"Wa08<.[X}Z|&1=2;3,4)5~6W",
"WZab89.+X#Z%&*=-;>,')!~W",
"Wdca08<.[X}Z|&1=2;3,4)5W",
"WfdZab89.+X#Z%&*=-;>,')W",
"We+dca08<.[X}Z|&1=2;3,4W",
"WiefdZab89.+X#Z%&*=-;>,W",
"Whge+dca08<.[X}Z|&1=2;3W",
"WkhiefdZab89.+X#Z%&*=-;W",
"Wjchge+dca08<.[X}Z|&1=2W",
"WnjkhiefdZab89.+X#Z%&*=W",
"Wmljchge+dca08<.[X}Z|&1W",
"WqmnjkhiefdZab89.+X#Z%&W",
"Wpomljchge+dca08<.[X}Z|W",
"WspqmnjkhiefdZab89.+X#ZW",
"Wqrpomljchge+dca08<.[X}W",
"WvqspqmnjkhiefdZab89.+XW",
"Wutqrpomljchge+dca08<.[W",
"WxuvqspqmnjkhiefdZab89.W",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 46 1",
" 	c None",
".	c #FFFFFF",
"+	c #FBFBFB",
"X	c #F3F3F3",
"#	c #EDEDED",
"Z	c #EFEFEF",
"%	c #EBEBEB",
"&	c #DCDCDC",
"*	c #D6D6D6",
"=	c #DFDFDF",
"-	c #DBDBDB",
";	c #C4C4C4",
">	c #BEBEBE",
",	c #CFCFCF",
"'	c #CCCCCC",
")	c #ADADAD",
"!	c #A7A7A7",
"~	c #C0C0C0",
"{	c #BCBCBC",
"]	c #959595",
"^	c #8F8F8F",
"/	c #B0B0B0",
"(	c #ACACAC",
"_	c #7E7E7E",
":	c #787878",
"<	c #F9F9F9",
"[	c #F7F7F7",
"}	c #E7E7E7",
"|	c #E2E2E2",
"1	c #E3E3E3",
"2	c #D0D0D0",
"3	c #CACACA",
"4	c #D8D8D8",
"5	c #D3D3D3",
"6	c #B8B8B8",
"7	c #B3B3B3",
"8	c #C7C7C7",
"9	c #C3C3C3",
"0	c #A1A1A1",
"a	c #9B9B9B",
"b	c #B4B4B4",
"c	c #898989",
"d	c #848484",
"e	c #A8A8A8",
"f	c #A4A4A4",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"W<[X}|}1234567890a6bcdeW",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W+X#Z%&*=-;>,')!~{]^/(_W",
"W<[X}|}1234567890a6bcdeW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
],
[
"24 24 62 1",
" 	c None",
".	c #FFFFFF",
"+	c #FDFDFD",
"X	c #F9F9F9",
"#	c #F6F6F6",
"Z	c #F7F7F7",
"%	c #F5F5F5",
"&	c #EDEDED",
"*	c #EBEBEB",
"=	c #EFEFEF",
"-	c #E2E2E2",
";	c #DEDEDE",
">	c #E7E7E7",
",	c #E5E5E5",
"'	c #D6D6D6",
")	c #D3D3D3",
"!	c #DFDFDF",
"~	c #DDDDDD",
"{	c #CACACA",
"]	c #C7C7C7",
"^	c #D8D8D8",
"/	c #D5D5D5",
"(	c #BEBEBE",
"_	c #BCBCBC",
":	c #FBFBFB",
"<	c #F3F3F3",
"[	c #DCDCDC",
"}	c #E3E3E3",
"|	c #D0D0D0",
"1	c #DBDBDB",
"2	c #C4C4C4",
"3	c #B8B8B8",
"4	c #CFCFCF",
"5	c #CDCDCD",
"6	c #CCCCCC",
"7	c #B3B3B3",
"8	c #AFAFAF",
"9	c #ADADAD",
"0	c #C6C6C6",
"a	c #C3C3C3",
"b	c #A7A7A7",
"c	c #A4A4A4",
"d	c #A1A1A1",
"e	c #C0C0C0",
"f	c #BDBDBD",
"g	c #9B9B9B",
"h	c #989898",
"i	c #959595",
"j	c #B6B6B6",
"k	c #B4B4B4",
"l	c #8F8F8F",
"m	c #8D8D8D",
"n	c #898989",
"o	c #B0B0B0",
"p	c #AEAEAE",
"q	c #ACACAC",
"r	c #848484",
"s	c #808080",
"t	c #7E7E7E",
"u	c #A8A8A8",
"v	c #A6A6A6",
"W      c #000000",
"WWWWWWWWWWWWWWWWWWWWWWWW",
"W:#<%<*>&*;[,})|~1]2/)_W",
"W#Z%&*=&-;>,')!~{]^/(_4W",
"W<%<*>&*;[,})|~1]2/)_35W",
"W%&*=&-;>,')!~{]^/(_457W",
"W<*>&*;[,})|~1]2/)_3568W",
"W*=&-;>,')!~{]^/(_4578]W",
"W>&*;[,})|~1]2/)_356890W",
"W&-;>,')!~{]^/(_4578]0bW",
"W*;[,})|~1]2/)_356890acW",
"W;>,')!~{]^/(_4578]0bceW",
"W[,})|~1]2/)_356890acdfW",
"W,')!~{]^/(_4578]0bcefgW",
"W})|~1]2/)_356890acdf_hW",
"W)!~{]^/(_4578]0bcefgh3W",
"W|~1]2/)_356890acdf_hijW",
"W~{]^/(_4578]0bcefgh3jlW",
"W1]2/)_356890acdf_hijkmW",
"W]^/(_4578]0bcefgh3jlmoW",
"W2/)_356890acdf_hijkmnpW",
"W/(_4578]0bcefgh3jlmoprW",
"W)_356890acdf_hijkmnpqsW",
"W_4578]0bcefgh3jlmoprsuW",
"WWWWWWWWWWWWWWWWWWWWWWWW"
]);

###
# Subroutines 
###
sub do_fade
{
  my ($image, $drawable) = @_;
  my (@bounds, $mask, $prevBack, $prevFore);
  
  if (!$drawable->is_layer)
    {
      die "$plugin: Cannot operate on anything other than layers\n";
    }
    
  $image->undo_group_start;
  @bounds = $image->selection_bounds;
 
  if (!$drawable->has_alpha)
    {
      $drawable->add_alpha;
    }
 
  if ($drawable->get_mask)
    {
      $mask = $drawable->get_mask;
    }
  else
    {
      $mask = $drawable->create_mask(ADD_ALPHA_MASK);
      $image->add_layer_mask($drawable, $mask);
    }
    
  $prevBack = Palette->get_background;
  $prevFore = Palette->get_foreground;
  Palette->set_background([0.0,0.0,0.0,1.0]);
  Palette->set_foreground([1.0,1.0,1.0,1.0]);

  # Direction Map
  # 0 3 6
  # 1 4 7
  # 2 5 8

  # Bounds Map
  # (1,2) (3,2)
  # (1,4) (3,4)
  
  if ($direction==0)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, 
                   NORMAL_MODE, 
		   GRADIENT_LINEAR, 
		   100.0,             # opacity
		   0.0,               # offset
                   REPEAT_NONE, 
		   0,                 # reverse 
		   0,                 # supersample
		   1,                 # recursion levels
		   0.1,               # supersample threshold
	           0,		      # dither
		   $bounds[3], $bounds[4],
		   $bounds[1], $bounds[2]);
    }
  elsif ($direction==1)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0,
		   $bounds[3], ($bounds[2]+$bounds[4])/2,
		   $bounds[1], ($bounds[2]+$bounds[4])/2);
    
    }
  elsif ($direction==2)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   $bounds[3], $bounds[2],
		   $bounds[1], $bounds[4]);

    }
  elsif ($direction==3)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0,
		   ($bounds[3]+$bounds[1])/2, $bounds[4],
		   ($bounds[3]+$bounds[1])/2, $bounds[2]);
    }
  elsif ($direction==4)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, RADIAL, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   ($bounds[1]+$bounds[3])/2, 
		   ($bounds[2]+$bounds[4])/2, 
		   ($bounds[3]+$bounds[1])/2, $bounds[4]);

    }
  elsif ($direction==5)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   ($bounds[3]+$bounds[1])/2, $bounds[2],
		   ($bounds[3]+$bounds[1])/2, $bounds[4]);
    }
  elsif ($direction==6)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   $bounds[1], $bounds[4],
		   $bounds[3], $bounds[2]);
    }
  elsif ($direction==7)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   $bounds[1], ($bounds[2]+$bounds[4])/2,
		   $bounds[3], ($bounds[2]+$bounds[4])/2);
    }
  elsif ($direction==8)
    {
      $mask->edit_blend(FG_BG_RGB_MODE, DARKEN_ONLY_MODE, GRADIENT_LINEAR, 100.0, 0.0, 
                   REPEAT_NONE, 0, 0, 0, 1, 0, 
		   $bounds[1], $bounds[2],
		   $bounds[3], $bounds[4]);
    }
  if ($direction >=0 && $direction <9)
    {
      $image->remove_layer_mask($drawable, MASK_APPLY);
    }
  
  Palette->set_background($prevBack);
  Palette->set_foreground($prevFore);
  $image->undo_group_end;
}

sub btn_pressed 
{
  my ($widget, $btnIndex) = @_;
  $direction = $btnIndex;
}

sub add_pixmap
{
  my ($window, $but, $num) = @_;
  my @tar = @{$arr[$num]};
  my ($pixmap, $mask) = Gtk2::Gdk::Pixmap->colormap_create_from_xpm_d(undef,
                        $but->get_colormap,
                        $but->style->bg('normal'), 
			@{$arr[$num]});
  my ($pixmapId) = new_from_pixmap Gtk2::Image($pixmap, $mask);
  
  $pixmapId->show;
  $but->add($pixmapId);
}

sub okCbk
{
  $cancelFlag = 0;
  Gtk2->main_quit;
} 

sub create_window
{ 
  my ($window, $frm, $box1, $hbox, $hsep, $btnTable, $i, $j, $btn);

  $window = new Gtk2::Window('toplevel');
  $window->set_name("Alpha Fader");
  $window->set_wmclass("Gimp", "AlphaFader");
  
  $window->signal_connect("destroy" => \&Gtk2::main_quit);
  $window->signal_connect("delete_event" => \&Gtk2::false);

  $box1 = new Gtk2::VBox(0, 0);
  $box1->set_spacing(2);
  $window->add($box1);

  $frm = new Gtk2::Frame "Fade Type";
  $frm->set_border_width(6);
  $frm->show;

  $box1->pack_start($frm, 1, 1, 0);
  $btnTable = new Gtk2::Table(3,3,1);
  $btnTable->set_border_width(6);
  $frm->add($btnTable);
  
  $btn = new Gtk2::RadioButton;

  for ($i=0;$i<3;$i++)
    {
      for ($j=0;$j<3;$j++)
        {
	   $btn = Gtk2::RadioButton->new_from_widget($btn);
           $btn->set_mode(0);
	   $btn->signal_connect("clicked", \&btn_pressed, $i*3+$j);
	   $btn->show;
	   $btnTable->attach_defaults($btn, $i, $i+1, $j, $j+1); 
	   add_pixmap($window, $btn, $i*3+$j);
	   
	   if (Gimp->get_data($plugin) ne "")
	     { # if run before, get last data
	       if (Gimp->get_data($plugin) == $i*3+$j)
	         {
	           $btn->clicked;
	         }
	     }
	   else 
	     { # first run of plug-in, set first button
	       if ($i==0 && $j==0)
	         {
		   $btn->clicked;
		 }
             }
	}
    }

  $hsep = new Gtk2::HSeparator;
  $box1->pack_start($hsep, 0, 0, 0);
  $hsep->show;
 
  $hbox = new Gtk2::HButtonBox;
  $hbox->set_border_width(2);
  $hbox->set_spacing(4);
  $box1->pack_start($hbox, 0, 0, 0);
  $hbox->show;
 
  $btn = new Gtk2::Button "OK";
  $btn->can_default(1);
  $btn->signal_connect("clicked" => \&okCbk);
  $btn->show;
  $hbox->pack_start($btn, 0, 0, 0);
  $btn->grab_default;

  $btn = new Gtk2::Button "Cancel";
  $btn->can_default(1);
  $btn->signal_connect("clicked" => \&Gtk2::main_quit);
  $btn->show;
  $hbox->pack_start($btn, 0, 0, 0);
  
  $btnTable->show;
  $box1->show;
  $window->show;
}

Gimp::on_run 
{
  my ($interactive, $img, $drw);
  ($interactive, $img, $drw, $direction) = @_;

  $cancelFlag = 1;
  if ($interactive==1)
    { 
       $cancelFlag = 0;
    }
  elsif ($interactive==2)
    {
       $direction = Gimp->get_data($plugin); 
       $cancelFlag = 0;
    }
  else
    {
      init Gtk2;
      create_window;
      main Gtk2;
    }
    
  # Do the gimply stuff on it
  if (!$cancelFlag)
    {
      do_fade($img, $drw);
      Gimp->displays_flush;
      Gimp->set_data($plugin, $direction);
    }
};

Gimp::on_query {
gimp_install_procedure(
$plugin, 
"Fade the alpha channel of a layer from one side to another", 
"This was written as a slightly useful exercise,  
mostly to learn Gtk's excellent perl interface.  It was  
inspired by a mailing list question that asked how to do 
exactly what this does, which is fade the alpha from one 
side to another.", 
"Seth Burgess", 
"Seth Burgess", 
"2000", 
"<Image>/Image/Alpha/Fade", 
"*", 
PLUGIN,  
[
 [PDB_INT32, "run_mode", "Interactive, [non-interactive"],  
 [PDB_IMAGE, "image", "Input image (unused)"],
 [PDB_DRAWABLE, "drawable", "Input drawable"],
 [PDB_INT32, "direction", "Direction to fade(0-8)"]
],
[]);
};

exit main;
