#!/usr/bin/env python

import pygtk
import gtk
import Numeric
import sys

pygtk.require('2.0')

class GGRPy(object):

	segments = {}
	file = ["GIMP Gradient"]
		
	def drawPreview(self, a):
		print self.i.get_width()
		#array = Numeric.zeros((40, self.i.get_width(),3), 'b')
		data = [[100,255,0,0]]
		for (x,r,g,b) in data:
			self.array[0:40,int(a),:] = (r, g, b)
		self.grad = gtk.gdk.pixbuf_new_from_array(self.array, gtk.gdk.COLORSPACE_RGB, 8)
		self.gradi.set_from_pixbuf(self.grad)
		return
	
	
	def pressImage(self, widget, event):
		pixel = self.i.subpixbuf(int(event.x), int(event.y), 1, 1)
		col = pixel.get_pixels_array()
		pix = []
		#grab the R:G:B values from pixbuffer
		pix.append(col[0][0][0][0])
		pix.append(col[0][0][1][0])
		pix.append(col[0][0][2][0])
		print "(",event.x, ",", event.y,") :", pix
		self.segments[event.x] = pix
		self.drawPreview(event.x)
		# for d in segs:
		# print "ROW: ",d, "COL: ", self.segments[d]
		
	def delete_event(self, widget, event, data=None):
		# create the output file when exiting
		boundrys = []
		self.file.append(len(self.segments)-1)
		print self.file
		file = open(sys.argv[2]+".ggr", "w")
		for line in self.file:
			file.write(str(line)+"\n")
		s_max = max(self.segments.items())[0]
		s_min = min(self.segments.items())[0]
		normal = s_max-s_min
		segs = self.segments.keys()
		segs.sort()
		for seg in segs:
			boundrys.append((seg-s_min)/normal)
		for x in range(0,len(boundrys)-1):
		# calculate the mid point for each boundry and
		# normalize the color values
			file.write("%6f %6f %6f %6f %6f %6f 1.000000 %6f %6f %6f 1.000000 0 0\n" % \
			(boundrys[x],\
			(boundrys[x]+boundrys[x+1])/2,\
			boundrys[x+1],\
			(self.segments[segs[x]][0]/255.0),\
			(self.segments[segs[x]][1]/255.0),\
			(self.segments[segs[x]][2]/255.0),\
			(self.segments[segs[x+1]][0]/255.0),\
			(self.segments[segs[x+1]][1]/255.0),\
			(self.segments[segs[x+1]][2])/255.0)
			)
		file.write("\n")
		file.close()
		return False
	
	def destroy(self, widget, data=None):
		gtk.main_quit()
	
	def __init__(self):
		if len(sys.argv)<2:
			print 'Usage: ggrpy.py IMAGE OUTPUT'
			sys.exit()		
		self.file.append("Name: "+sys.argv[2])
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.connect("delete_event", self.delete_event)
		self.window.connect("destroy", self.destroy)
		self.window.set_border_width(1)
		
		self.i = gtk.gdk.pixbuf_new_from_file(sys.argv[1])
		self.main_vbox = gtk.VBox(False, 1)
		self.main_vbox.set_border_width(1)
		
		self.image = gtk.Image()
		self.image.set_from_pixbuf(self.i)
		self.event_box = gtk.EventBox()
		self.event_box.add(self.image)
		self.event_box.connect("button_release_event", self.pressImage)
		
		self.array = Numeric.zeros((40, self.i.get_width(),3), 'b')
		self.grad = gtk.gdk.pixbuf_new_from_array(self.array, gtk.gdk.COLORSPACE_RGB, 8)
		self.gradi = gtk.Image()
		self.gradi.set_from_pixbuf(self.grad)
		
		self.main_vbox.pack_start(self.event_box, False, True, 0)
		self.main_vbox.pack_start(self.gradi, False, True, 0)

		self.window.add(self.main_vbox)
		self.window.show_all()

	def main(self):
		gtk.main()

if __name__ == '__main__':
	ggr = GGRPy()
	ggr.main()


syntax highlighted by Code2HTML, v. 0.9.1