예제 #1
0
	def __init__(self, show_main):
		QtGui.QDialog.__init__(self)
		self.show_main = show_main
		self.ui = Ui_preferencesDialog()
		self.ui.setupUi(self)
		self.setup()
		self.try_load_from_file()
예제 #2
0
class PreferencesDialog(QtGui.QDialog):

	def __init__(self, show_main):
		QtGui.QDialog.__init__(self)
		self.show_main = show_main
		self.ui = Ui_preferencesDialog()
		self.ui.setupUi(self)
		self.setup()
		self.try_load_from_file()

	def setup(self):
		h = "/home"
		for x in ['HOMEPATH', 'HOME']:
			if x in environ:
				self.default_folder = environ[x]


		for x in ['default', 'alsa', 'oss', 'jack', 'portaudio', 'coreaudio', 
				'sndmgr', 'Direct Sound']:
			self.ui.driver.addItem(x)

		self.connect(self.ui.buttonBox,
			QtCore.SIGNAL("accepted()"),
			self.open_window)

		self.connect(self.ui.browsebutton,
			QtCore.SIGNAL("clicked()"),
			self.load_dialog)

		self.connect(self.ui.browsefolder,
			QtCore.SIGNAL("clicked()"),
			self.load_folder_dialog)

		self.connect(self.ui.no_fluidsynth,
			QtCore.SIGNAL("stateChanged(int)"),
			lambda x: self.ui.browsebutton.setEnabled(not(x)) or \
					self.ui.driver.setEnabled(not(x)))

		self.connect(self.ui.nologin,
			QtCore.SIGNAL("stateChanged(int)"),
			lambda x: self.ui.username.setEnabled(not(x)) or \
					self.ui.password.setEnabled(not(x)))

	def try_load_from_file(self):
		if "HOME" in environ:
			f = path.join(environ["HOME"], ".improviser")
			if path.exists(f):
				try:
					fp = open(f, "r")
					for x in fp.readlines():
						option = x[:-1]
						parts = option.split(":")
						key = parts[0]
						if key == "soundfont":
							self.ui.soundfont.setText(":".join(parts[1:]))
						elif key == "driver":
							i = combo_index_by_text(self.ui.driver, "".join(parts[1:]))
							self.ui.driver.setCurrentIndex(int(i))
						elif key == "no_fluidsynth":
							if parts[1] == "1":
								self.ui.browsebutton.setEnabled(False)
								self.ui.driver.setEnabled(False)
								self.ui.no_fluidsynth.setChecked(True)
						elif key == "nologin":
							if parts[1] == "1":
								self.ui.username.setEnabled(False)
								self.ui.password.setEnabled(False)
								self.ui.nologin.setChecked(True)
						elif key == "checkupdates":
							if parts[1] == "1":
								self.ui.checkupdates.setChecked(True)
						elif key == "folder":
							self.ui.folder.setText(":".join(parts[1:]))
							self.default_folder = ":".join(parts[1:])
						elif key == "user":
							self.ui.username.setText(":".join(parts[1:]))
						elif key == "pass":
							self.ui.password.setText(":".join(parts[1:]))
					fp.close()
				except:
					pass

	def try_save_file(self):
		if "HOME" in environ:
			f = path.join(environ["HOME"], ".improviser")
			try:
				fp = open(f, "w")
				fp.write("soundfont:%s\n" % self.ui.soundfont.text())
				fp.write("driver:%s\n" % self.ui.driver.currentText())
				fp.write("no_fluidsynth:%d\n" % self.ui.no_fluidsynth.isChecked())
				fp.write("user:%s\n" % self.ui.username.text())
				fp.write("pass:%s\n" % self.ui.password.text())
				fp.write("nologin:%d\n" % self.ui.nologin.isChecked())
				fp.write("folder:%s\n" % self.ui.folder.text())
				fp.write("checkupdates:%d\n" % self.ui.checkupdates.isChecked())
				fp.close()
			except:
				pass


	def login(self):

		if self.ui.nologin.isChecked():
			return False
		if str(self.ui.username.text()) == "" or str(self.ui.password.text()) == "":
			q = QtGui.QMessageBox.warning(self, "Error", "Empty username and/or password", 1, 0)
			return False

		params = urllib.urlencode({"name": str(self.ui.username.text()),
			"pass": md5.new(str(self.ui.password.text())).hexdigest()})

		

		try:
			f = urllib.urlopen(Options.UPLOAD_HOME + "login.php?%s" % params)
		except:
			q = QtGui.QMessageBox.critical(self, "Error", "Could not connect to the site.", 1, 0)
			return False
		res = f.read()
		f.close()

		if res == "":
			q = QtGui.QMessageBox.critical(self, "Error", "Empty response from server.", 1, 0)
			return False


		keyword = res.split()[0]
		msg = " ".join(res.split()[1:])

		if keyword == "OK":
			return True
		elif keyword == "NEW":
			q = QtGui.QMessageBox.information(self, "Success", "Created new account '%s'" % str(self.ui.username.text()), 1, 0)
			return True
		elif keyword == "INVALID":
			q = QtGui.QMessageBox.warning(self, "Error", str(msg), 1, 0)
			return False
		elif keyword == "ERROR":
			q = QtGui.QMessageBox.critical(self, "Error", str(msg), 1, 0)
			return False
		
		q = QtGui.QMessageBox.critical(self, "Error", "Invalid response from server.", 1, 0)
		return False


	def toggle_enabled(self):
		if self.ui.no_fluidsynth.isChecked():
			self.ui.browsebutton.enabled()
		else:
			self.ui.browsebutton.enabled()



	def open_window(self):
		soundfont = str(self.ui.soundfont.text())
		driver = str(self.ui.driver.currentText())
		no_fluidsynth = int(self.ui.no_fluidsynth.isChecked())
		self.try_save_file()

		params = { "default_folder": self.default_folder,
			   "checkupdates": self.ui.checkupdates.isChecked(),
			   "username": str(self.ui.username.text()),
			   "password": str(self.ui.password.text()),
			   "login": self.login() }

		if not params['login']:
			if not self.ui.nologin.isChecked():
				return

		if no_fluidsynth:
			self.show_main(params)
			self.reject()
		else:
			if soundfont != "":
				params["soundfont"] = soundfont
				params["driver"] = driver
				self.show_main(params)
				self.reject()

	def load_dialog(self):
		f = QtGui.QFileDialog()
		s = f.getOpenFileName(self, "Load soundfont.",
				self.default_folder, "Soundfont (*.sf2)")
		if s != "":
			self.ui.soundfont.setText(s)

	def load_folder_dialog(self):
		f = QtGui.QFileDialog()
		f.setFileMode(QtGui.QFileDialog.DirectoryOnly)
		s = f.getExistingDirectory(self, "Select folder.", self.default_folder)

		if s != "":
			self.ui.folder.setText(s)
			self.default_folder = s