class Main_Panel(wx.Panel): #This is where all widgets are going to be placed

	def __init__(self, parent):

		wx.Panel.__init__(self, parent)

		self.statusLabels = ["\tStatus_Box", "File: None", "Has_Data: False", "PlotType: Scatter", 
						     "xLabel: None", "yLabel: None", "xLimit: None", "yLimit: None"]
		self.parent = parent
		self.style = 'Scatter'
		self.x_axis_label = None
		self.y_axis_label = None
		self.x_axis_range = [0,1]
		self.y_axis_range = [0,1]

		self.graph = Graph(self)                      #Graph Object
		self.yLimit = Axis_Range(self, wx.HORIZONTAL) #Axis Object
		self.xLimit = Axis_Range(self, wx.VERTICAL)   #Axis Object
		self.Labels = Axis_Labels(self)               #Axis Object
		self.status = wx.ListBox(self, choices=self.statusLabels)
		self.plotType = wx.RadioBox(self, label='Graph Style', choices=['Scatter', 'Line', 'Bar'], style=wx.RA_SPECIFY_ROWS)

		self.plotType.Bind(wx.EVT_RADIOBOX, self.updateStyle)

		sizer = wx.BoxSizer(wx.VERTICAL)
		space = wx.BoxSizer(wx.VERTICAL)
		hbox1 = wx.BoxSizer(wx.HORIZONTAL)
		hbox2 = wx.BoxSizer(wx.HORIZONTAL)
		vbox = wx.BoxSizer(wx.HORIZONTAL)
		hbox1.Add(self.yLimit, proportion=1, flag=wx.EXPAND)
		hbox1.Add(self.graph.addObj(), proportion=14, flag=wx.EXPAND)
		sizer.Add(hbox1, proportion=6, flag=wx.EXPAND)
		hbox2.Add(space, proportion=1, flag=wx.EXPAND)
		hbox2.Add(self.xLimit, proportion=14, flag=wx.EXPAND)
		vbox.Add(self.status, proportion=1, flag=wx.EXPAND)
		vbox.Add(self.plotType, proportion=1, flag=wx.EXPAND)
		vbox.Add(self.Labels, proportion=2, flag=wx.EXPAND)
		sizer.Add(hbox2, proportion=1, flag=wx.EXPAND)
		sizer.Add(vbox, proportion=4, border=40, flag=wx.EXPAND|wx.LEFT|wx.RIGHT)
		self.SetSizer(sizer)

		self.Fit()

	def updateStyle(self, evt):
		self.style = evt.EventObject.GetStringSelection()
		self.updateGraphParameters()

	def updateGraphParameters(self):
		self.updateStatus("Plot", self.style)
		self.updateStatus("xLabel", str(self.x_axis_label))
		self.updateStatus("yLabel", str(self.y_axis_label))
		self.updateStatus("xLimit",str(self.xLimit.getRange()))
		self.updateStatus("yLimit",str(self.yLimit.getRange()))
		self.graph.setFile(self.getFile())
		self.graph.setPlotType(self.style)
		self.graph.setXlabel(self.x_axis_label)
		self.graph.setYlabel(self.y_axis_label)
		self.graph.setXrange(self.xLimit.getRange())
		self.graph.setYrange(self.yLimit.getRange())
		if self.graph.canPlot():
			self.graph.updatePlot()

	def updatePlot(self):
		pass

	def updateStatus(self, parameter, label):
		key = self.getKey()
		assert(parameter in key.keys()), "Parameter needs to be " + str(key.keys())
		self.status.SetString(self.status.FindString(key[parameter]), key[parameter].split(' ')[0] + ' ' + label)

	def getKey(self):
		return {"File":self.status.GetString(1),
				"Data":self.status.GetString(2), 
			    "Plot":self.status.GetString(3), 
		        "xLabel":self.status.GetString(4), 
			    "yLabel":self.status.GetString(5), 
			    "xLimit":self.status.GetString(6),
			    "yLimit": self.status.GetString(7)}

	def getFile(self):
		return self.parent.currentFile