'''
Created on Dec 23, 2013

@author: Chris
'''

import wx

class FrameHeader(wx.Panel):
	
	def __init__(self,
				heading="Doin Stuff here",
				subheading="Small notification or intructional message",
				image_path=None,
				dlg_style=1,
				**kwargs):

		wx.Panel.__init__(self, **kwargs)
		self.SetBackgroundColour('#ffffff')
		self.SetMinSize((120, 90))

		header = self._bold_static_text(label=heading)
		subheader = wx.StaticText(self, label=subheading)
		img = self._load_image(image_path)
		
		sizer = wx.BoxSizer(wx.HORIZONTAL)
		headings_sizer = self.build_heading_sizer(header, subheader)
		sizer.Add(headings_sizer, 1, wx.ALIGN_LEFT | wx.EXPAND | wx.LEFT, 20)
		sizer.Add(img, 0, wx.ALIGN_RIGHT | wx.EXPAND | wx.RIGHT, 20)
		self.SetSizer(sizer)

		# for i in dir(self): print i 

	def _load_image(self, image_path):
		try:
				bitmap = wx.Bitmap(image_path)

				bitmap = self._resize_bitmap(bitmap)
				return wx.StaticBitmap(self, -1, bitmap)
		except:
				raise IOError('Invalid Image path')
			
	def _resize_bitmap(self, bmap):
		'''
		Resizes a bitmap to a height of 89 pixels (the 
		size of the top panel), while keeping aspect ratio 
		in tact
		'''
		image = wx.ImageFromBitmap(bmap) 
		width, height = image.GetSize()
		ratio = float(width) / height
		target_height = 79 
		image = image.Scale(target_height * ratio, target_height,
				wx.IMAGE_QUALITY_HIGH
				)
		return wx.BitmapFromImage(image)

	def _bold_static_text(self, label):
		txt = wx.StaticText(self, label=label)
		txt.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT,
				wx.FONTWEIGHT_NORMAL, wx.FONTWEIGHT_BOLD, False)
		)
		return txt 

	def build_heading_sizer(self, header, subheader):
		sizer = wx.BoxSizer(wx.VERTICAL)
		sizer.AddStretchSpacer(1)
		sizer.Add(header, 1)
		sizer.Add(subheader, 1)
		sizer.AddStretchSpacer(1)
		return sizer