def switch_color(self) :
		self.color_switch = SwitchColorWindow(self)
class ApplicationWindow(QtGui.QMainWindow):
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
		self.setWindowTitle("Structure Viewer")

		self.data_manager = DataManager(self)

		self.color_switch = None
		self.lastopenfile = None

		self.initUI()
		self.main_widget.setFocus()
		self.setCentralWidget(self.main_widget)
		self.showMaximized()

		self.update_plot()

	def initUI(self) :
		self.main_widget = QtGui.QWidget(self)
		self.main_widget.move(10, 20)
		self.main_widget.resize(960, 730)
		self.layout = QtGui.QVBoxLayout(self.main_widget)
		self.initMenu()

		self.error_dialog_load = QtGui.QErrorMessage()

	def initMenu(self) :
		self.file_menu = QtGui.QMenu("&Options", self)
		self.file_menu.addAction("&Open file", self.open_file, QtCore.Qt.CTRL + QtCore.Qt.Key_O)
		self.file_menu.addAction("&Save fig", self.save_file, QtCore.Qt.CTRL + QtCore.Qt.Key_S)
		self.file_menu.addAction('&Graph settings', self.switch_color, QtCore.Qt.CTRL + QtCore.Qt.Key_G)

		self.action_border = QtGui.QAction("Border", self)
		self.action_labels = QtGui.QAction("Show all labels", self)

		self.action_border.changed.connect(self.update_plot)
		self.action_border.setCheckable(True)

		self.action_labels.changed.connect(self.update_plot)
		self.action_labels.setCheckable(True)

		self.file_menu.addAction(self.action_border)
		self.file_menu.addAction(self.action_labels)
		self.menuBar().addMenu(self.file_menu)

	def open_file(self) :
		if self.lastopenfile :
			fnames = QtGui.QFileDialog.getOpenFileNames(self, 'Open file', dirname(self.lastopenfile))
		else :
			fnames = QtGui.QFileDialog.getOpenFileNames(self, 'Open file')

		for fname in fnames :
			try :
				self.load_file(fname)
			except SVInternalException as error :
				self.error_dialog_load.showMessage(str(fname) + " : " + str(error))
				return

		self.lastopenfile = str(fname)
		self.update_plot()

	def load_file(self, fname) :
		self.data_manager.add_structure_fname(fname)

	def update_plot(self) :
		# Generate an error, I don't really know why
		border = self.is_border_checked()
		show_all_labels = self.is_all_labels_checked()
		self.canva = self.data_manager.get_canva(edge=border, show_all_labels=show_all_labels)
		if not self.canva : return
		for i in reversed(range(self.layout.count())):
				if isinstance(self.layout.itemAt(i), QtGui.QWidgetItem) :
					self.layout.itemAt(i).widget().setParent(None)

		self.canva.setParent(self.main_widget)
		self.canva.setFocus()
		self.layout.addWidget(self.canva)
		self.show()

	def is_border_checked(self) :
		return self.action_border.isChecked()

	def is_all_labels_checked(self) :
		return self.action_labels.isChecked()

	def popup(self, data, row, column) :
		self.menu = QtGui.QMenu(self)
		go_up_action = QtGui.QAction("Go up", self)
		go_up_action.triggered.connect(partial(self.change_row, data, column, 1))
		go_down_action = QtGui.QAction("Go down", self)
		go_down_action.triggered.connect(partial(self.change_row, data, column, -1))
		sort_action = QtGui.QAction("Sort", self)
		sort_action.triggered.connect(partial(self.sort_pop, data, column))
		self.menu.addAction(go_up_action)
		self.menu.addAction(go_down_action)
		self.menu.addAction(sort_action)
		self.menu.popup(QtGui.QCursor.pos())

	def switch_color(self) :
		self.color_switch = SwitchColorWindow(self)

	def sort_pop(self, data, column) :
		data.reorder_pop(column)
		self.data_manager.uniform_names(data)
		self.update_plot()

	def change_row(self, data, column, level) :
		if data.reorder_column(column, level) :
			self.update_plot()

	def save_file(self) :
		if self.lastopenfile :
			fname = QtGui.QFileDialog.getSaveFileName(self, 'Open file', dirname(self.lastopenfile))
		else :
			fname = QtGui.QFileDialog.getSaveFileName(self, 'Open file')

		self.data_manager.save(str(fname))

	def closeEvent(self, ce) :
		if self.color_switch :
			self.color_switch.terminate()
		self.close()