Use Tkinter instead of easygui for the settings dialog.
This commit is contained in:
parent
5b959aa87f
commit
c93cf8e1e6
|
@ -6,7 +6,6 @@ from elite_api import companion
|
||||||
from elite_api.inara import InaraSession
|
from elite_api.inara import InaraSession
|
||||||
import Tkinter as tk
|
import Tkinter as tk
|
||||||
import utils
|
import utils
|
||||||
import easygui
|
|
||||||
|
|
||||||
arg_parser = argparse.ArgumentParser()
|
arg_parser = argparse.ArgumentParser()
|
||||||
arg_parser.add_argument("--no-gui",
|
arg_parser.add_argument("--no-gui",
|
||||||
|
@ -26,23 +25,24 @@ def update_inara(inara_session):
|
||||||
inara_session.update_location(data['lastSystem']['name'])
|
inara_session.update_location(data['lastSystem']['name'])
|
||||||
|
|
||||||
|
|
||||||
class UpdateWindow:
|
class UpdateWindow(object):
|
||||||
def __init__(self, parent, settings):
|
def __init__(self, parent, settings):
|
||||||
frame = tk.Frame(parent)
|
self.parent = parent
|
||||||
frame.pack(expand=True, fill=tk.BOTH)
|
self.frame = tk.Frame(parent)
|
||||||
|
self.frame.pack(expand=True, fill=tk.BOTH)
|
||||||
|
|
||||||
self.message = tk.StringVar()
|
self.message = tk.StringVar()
|
||||||
self.message.set("Click Update to update!")
|
self.message.set("Click Update to update!")
|
||||||
message_label = tk.Label(frame, textvariable=self.message)
|
message_label = tk.Label(self.frame, textvariable=self.message)
|
||||||
message_label.grid(columnspan=3, padx=20, pady=20)
|
message_label.grid(columnspan=2, padx=20, pady=20)
|
||||||
|
|
||||||
self.update_button = tk.Button(frame, text="Update", height=2, width=4,
|
self.update_button = tk.Button(self.frame, text="Update", height=2, width=4,
|
||||||
command=self._update_inara)
|
command=self._update_inara)
|
||||||
self.update_button.grid(row=1, column=0, columnspan=2, pady=10)
|
self.update_button.grid(row=1, column=0, pady=10)
|
||||||
|
|
||||||
config_button = tk.Button(frame, text="Config", height=1, width=2,
|
config_button = tk.Button(self.frame, text="Config", height=1, width=2,
|
||||||
command=utils.init_settings)
|
command=lambda: utils.update_settings(True, parent, settings))
|
||||||
config_button.grid(row=1, column=2)
|
config_button.grid(row=1, column=1, sticky=tk.E+tk.S, padx=5, pady=5)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.session = do_logins(settings)
|
self.session = do_logins(settings)
|
||||||
|
@ -52,6 +52,7 @@ class UpdateWindow:
|
||||||
|
|
||||||
def _update_inara(self):
|
def _update_inara(self):
|
||||||
self.message.set("Updating, please wait...")
|
self.message.set("Updating, please wait...")
|
||||||
|
self.parent.update()
|
||||||
update_inara(self.session)
|
update_inara(self.session)
|
||||||
self.message.set("Update successful! (Last update: %s)" %
|
self.message.set("Update successful! (Last update: %s)" %
|
||||||
datetime.now().isoformat(' ')[:16])
|
datetime.now().isoformat(' ')[:16])
|
||||||
|
@ -60,14 +61,14 @@ class UpdateWindow:
|
||||||
def main():
|
def main():
|
||||||
args = arg_parser.parse_args()
|
args = arg_parser.parse_args()
|
||||||
|
|
||||||
settings = utils.get_settings(args.gui)
|
|
||||||
|
|
||||||
if args.gui:
|
if args.gui:
|
||||||
root = tk.Tk()
|
root = tk.Tk()
|
||||||
root.wm_title("Inara Updater")
|
root.wm_title("Inara Updater")
|
||||||
|
settings = utils.get_settings(True, root)
|
||||||
app = UpdateWindow(root, settings)
|
app = UpdateWindow(root, settings)
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
else:
|
else:
|
||||||
|
settings = utils.get_settings(False)
|
||||||
inara_session = do_logins(settings)
|
inara_session = do_logins(settings)
|
||||||
update_inara(inara_session)
|
update_inara(inara_session)
|
||||||
print("Inara updated!")
|
print("Inara updated!")
|
||||||
|
|
87
utils.py
87
utils.py
|
@ -1,6 +1,7 @@
|
||||||
from ConfigParser import ConfigParser
|
from ConfigParser import ConfigParser
|
||||||
import os
|
import os
|
||||||
import easygui
|
import Tkinter as tk
|
||||||
|
import tkSimpleDialog, tkMessageBox
|
||||||
import platform
|
import platform
|
||||||
|
|
||||||
def get_config_dir(make=False):
|
def get_config_dir(make=False):
|
||||||
|
@ -11,7 +12,7 @@ def get_config_dir(make=False):
|
||||||
|
|
||||||
return os.path.join(os.path.expanduser('~'), config_suffix)
|
return os.path.join(os.path.expanduser('~'), config_suffix)
|
||||||
|
|
||||||
def get_settings(use_gui=True):
|
def get_settings(use_gui=True, parent=None):
|
||||||
"""
|
"""
|
||||||
Try to read the settings from file into ConfigParser object.
|
Try to read the settings from file into ConfigParser object.
|
||||||
If the config file isn't found, initialize it.
|
If the config file isn't found, initialize it.
|
||||||
|
@ -27,16 +28,18 @@ def get_settings(use_gui=True):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
settings = init_settings(use_gui)
|
settings = update_settings(use_gui, parent)
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
def init_settings(gui=True):
|
|
||||||
settings = ConfigParser()
|
def update_settings(gui=True, parent=None, settings=None):
|
||||||
settings.add_section('ed_companion')
|
if settings is None:
|
||||||
settings.add_section('inara')
|
settings = ConfigParser()
|
||||||
|
settings.add_section('ed_companion')
|
||||||
|
settings.add_section('inara')
|
||||||
if gui:
|
if gui:
|
||||||
_settings_prompt_gui(settings)
|
dialog = ConfigDialog(parent, settings)
|
||||||
else:
|
else:
|
||||||
_settings_prompt_cli(settings)
|
_settings_prompt_cli(settings)
|
||||||
print "To change these settings later, edit " + filename
|
print "To change these settings later, edit " + filename
|
||||||
|
@ -46,29 +49,57 @@ def init_settings(gui=True):
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
def _settings_prompt_gui(settings):
|
|
||||||
data = []
|
|
||||||
data = easygui.multenterbox(
|
|
||||||
"Enter your E:D and Inara credentials. You only need to do this once.",
|
|
||||||
"Authentication Data",
|
|
||||||
["Elite Username (email address)", "Elite Password",
|
|
||||||
"Inara Username", "Inara Password"]
|
|
||||||
)
|
|
||||||
|
|
||||||
for i in range(4):
|
|
||||||
if data[i].strip() == '':
|
|
||||||
easygui.msgbox("You must provide data for all fields.")
|
|
||||||
_settings_prompt_gui(settings)
|
|
||||||
return
|
|
||||||
|
|
||||||
settings.set('ed_companion', 'username', data[0].strip())
|
|
||||||
settings.set('ed_companion', 'password', data[1].strip())
|
|
||||||
settings.set('inara', 'username', data[2].strip())
|
|
||||||
settings.set('inara', 'password', data[3].strip())
|
|
||||||
|
|
||||||
|
|
||||||
def _settings_prompt_cli(settings):
|
def _settings_prompt_cli(settings):
|
||||||
settings.set('ed_companion', 'username', raw_input("Elite Username (email address): "))
|
settings.set('ed_companion', 'username', raw_input("Elite Username (email address): "))
|
||||||
settings.set('ed_companion', 'password', raw_input("Elite Password: "))
|
settings.set('ed_companion', 'password', raw_input("Elite Password: "))
|
||||||
settings.set('inara', 'username', raw_input("Inara Username: "))
|
settings.set('inara', 'username', raw_input("Inara Username: "))
|
||||||
settings.set('inara', 'password', raw_input("Inara Password: "))
|
settings.set('inara', 'password', raw_input("Inara Password: "))
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigDialog(tkSimpleDialog.Dialog):
|
||||||
|
def __init__(self, parent, settings, title="Authentication Data"):
|
||||||
|
self.settings = settings
|
||||||
|
self.entries = []
|
||||||
|
self.data = []
|
||||||
|
tkSimpleDialog.Dialog.__init__(self, parent, title)
|
||||||
|
|
||||||
|
def body(self, parent):
|
||||||
|
i = 0
|
||||||
|
values = []
|
||||||
|
|
||||||
|
for section, value in (('ed_companion', 'username'),
|
||||||
|
('ed_companion', 'password'),
|
||||||
|
('inara', 'username'),
|
||||||
|
('inara', 'password')):
|
||||||
|
if self.settings.has_option(section, value):
|
||||||
|
values.append(self.settings.get(section, value))
|
||||||
|
else:
|
||||||
|
values.append("")
|
||||||
|
|
||||||
|
for field in ("Elite Username (email address):",
|
||||||
|
"Elite Password:",
|
||||||
|
"Inara Username:",
|
||||||
|
"Inara Password:"):
|
||||||
|
label = tk.Label(parent, text=field)
|
||||||
|
label.grid(row=i, column=0, sticky=tk.W)
|
||||||
|
entry = tk.Entry(parent, width=30)
|
||||||
|
entry.insert(0, values[i])
|
||||||
|
entry.grid(row=i, column=1, sticky=tk.E)
|
||||||
|
self.entries.append(entry)
|
||||||
|
i += 1
|
||||||
|
return self.entries[0]
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
for entry in self.entries:
|
||||||
|
if entry.get().strip() == "":
|
||||||
|
tkMessageBox.showwarning("Missing Data",
|
||||||
|
"You must provide a value for every field.")
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def apply(self):
|
||||||
|
self.settings.set('ed_companion', 'username', self.entries[0].get().strip())
|
||||||
|
self.settings.set('ed_companion', 'password', self.entries[1].get().strip())
|
||||||
|
self.settings.set('inara', 'username', self.entries[2].get().strip())
|
||||||
|
self.settings.set('inara', 'password', self.entries[3].get().strip())
|
||||||
|
|
Reference in New Issue
Block a user