def _show(gui, currentversion, newversion, returns): def _clickYes(): returns[0], returns[1] = True, False top.quit_top() def _clickNo(): returns[0], returns[1] = False, bool(cbVar.get()) top.quit_top() top = PopUp(helper.empty_function, gui._root) top.title("A wild fishy update appeared!") dialogLabel = tk.Label(top, text="There is a new fishy update available (" + currentversion + "->" + newversion + "). Do you want to update now?") dialogLabel.grid(row=0, columnspan=2, padx=5, pady=5) cbVar = tk.IntVar() dialogCheckbutton = tk.Checkbutton(top, text="don't ask again", variable=cbVar) dialogCheckbutton.grid(row=1, columnspan=2, padx=5, pady=0) top.update() buttonWidth = int(dialogLabel.winfo_width() / 2) - 20 pixelVirtual = tk.PhotoImage( width=1, height=1) # trick to use buttonWidth as pixels, not #symbols dialogBtnNo = tk.Button(top, text="No " + str(chr(10005)), fg='red4', command=_clickNo, image=pixelVirtual, width=buttonWidth, compound="c") dialogBtnNo.grid(row=2, column=0, padx=5, pady=5) dialogBtnYes = tk.Button(top, text="Yes " + str(chr(10003)), fg='green', command=_clickYes, image=pixelVirtual, width=buttonWidth, compound="c") dialogBtnYes.grid(row=2, column=1, padx=5, pady=5) dialogBtnYes.focus_set() dialogBtnYes.update() top.protocol('WM_DELETE_WINDOW', _clickNo) top.start()
def start_fullfisher_config(gui: 'GUI'): top = PopUp(helper.empty_function, gui._root, background=gui._root["background"]) controls_frame = Frame(top) top.title("Config") def file_name(): file = config.get("full_auto_rec_file", None) if file is None: return "Not Selected" return os.path.basename(file) def select_file(): file = askopenfilename(filetypes=[('Python Files', '*.fishy')]) if not file: logging.error("file not selected") else: config.set("full_auto_rec_file", file) logging.info(f"loaded {file}") file_name_label.set(file_name()) file_name_label = StringVar(value=file_name()) Label(controls_frame, textvariable=file_name_label).grid(row=0, column=0) Button(controls_frame, text="Select fishy file", command=select_file).grid(row=0, column=1) Label(controls_frame, text="Use semi-fisher config for rest").grid(row=2, column=0, columnspan=2) controls_frame.pack(padx=(5, 5), pady=(5, 5)) top.start()
def start_semifisher_config(gui: 'GUI'): def save(): gui._config.set("action_key", action_key_entry.get(), False) gui._config.set("borderless", borderless.instate(['selected']), False) gui._config.save_config() top = PopUp(save, gui._root, background=gui._root["background"]) controls_frame = Frame(top) top.title("Config") Label(controls_frame, text="Notification:").grid(row=0, column=0) gui._notify = IntVar(0) gui._notify_check = Checkbutton(controls_frame, command=lambda: _give_notification_link(gui), variable=gui._notify) gui._notify_check.grid(row=0, column=1) gui._notify_check['state'] = DISABLED is_subbed = web.is_subbed(gui._config.get('uid')) if is_subbed[1]: gui._notify_check['state'] = NORMAL gui._notify.set(is_subbed[0]) Label(controls_frame, text="Fullscreen: ").grid(row=1, column=0, pady=(5, 5)) borderless = Checkbutton(controls_frame, var=BooleanVar(value=gui._config.get("borderless"))) borderless.grid(row=1, column=1) Label(controls_frame, text="Action Key:").grid(row=2, column=0) action_key_entry = Entry(controls_frame, justify=CENTER) action_key_entry.grid(row=2, column=1) action_key_entry.insert(0, gui._config.get("action_key", "e")) controls_frame.pack(padx=(5, 5), pady=(5, 5)) top.start()
def start_fullfisher_config(gui: 'GUI'): def save(): gui._config.set("tesseract_dir", tesseract_entry.get(), False) gui._config.save_config() top = PopUp(save, gui._root, background=gui._root["background"]) controls_frame = Frame(top) top.title("Config") Label(controls_frame, text="Tesseract Directory:").grid(row=0, column=0) tesseract_entry = Entry(controls_frame, justify=CENTER) tesseract_entry.insert(0, gui._config.get("tesseract_dir", "")) tesseract_entry.grid(row=0, column=1) controls_frame.pack(padx=(5, 5), pady=(5, 5)) top.start()
def _open_save_popup(self): top = PopUp(empty_function, self.engine.get_gui()._root, background=self.engine.get_gui()._root["background"]) recorder_frame = ttk.Frame(top) top.title("Save Recording?") button = [-1] def button_pressed(_button): button[0] = _button top.quit_top() selected_text = f"\n\nSelected: {os.path.basename(config.get('full_auto_rec_file'))}" if config.get( 'edit_recorder_mode') else "" ttk.Label( recorder_frame, text=f"Do you want to save the recording?{selected_text}").grid( row=0, column=0, columnspan=3, pady=(0, 5)) _overwrite = tk.NORMAL if config.get( "edit_recorder_mode") else tk.DISABLED ttk.Button(recorder_frame, text="Overwrite", command=lambda: button_pressed(0), state=_overwrite).grid(row=1, column=0, pady=(5, 0)) ttk.Button(recorder_frame, text="Save As", command=lambda: button_pressed(1)).grid(row=1, column=1) ttk.Button(recorder_frame, text="Cancel", command=lambda: button_pressed(2)).grid(row=1, column=2) recorder_frame.pack(padx=(5, 5), pady=(5, 5)) recorder_frame.update() top.start() return button[0]
def start_semifisher_config(gui: 'GUI'): def save(): gui.config.set("action_key", action_key_entry.get(), False) gui.config.set("collect_key", collect_key_entry.get(), False) gui.config.set("collect_allow_auto", collect_allow_auto.instate(['selected']), False) gui.config.set("borderless", borderless.instate(['selected']), False) gui.config.set("jitter", jitter.instate(['selected']), False) gui.config.set("sound_notification", sound.instate(['selected']), False) gui.config.save_config() def toggle_sub(): if web.is_subbed()[0]: if web.unsub(): gui._notify.set(0) else: if web.sub(): gui._notify.set(1) def toggle_collect(): gui.config.set("collect_allow_auto", collect_allow_auto.instate(['selected']), False) collect_key_entry['state'] = NORMAL if config.get( "collect_allow_auto") else DISABLED def del_entry_key(event): event.widget.delete(0, "end") event.widget.insert(0, str(event.char)) top = PopUp(save, gui._root, background=gui._root["background"]) controls_frame = Frame(top) top.title("Config") Label(controls_frame, text="Notification:").grid(row=0, column=0) gui._notify = IntVar(0) gui._notify_check = Checkbutton(controls_frame, command=toggle_sub, variable=gui._notify) gui._notify_check.grid(row=0, column=1) gui._notify_check['state'] = DISABLED is_subbed = web.is_subbed() if is_subbed[1]: gui._notify_check['state'] = NORMAL gui._notify.set(is_subbed[0]) Label(controls_frame, text="Fullscreen: ").grid(row=1, column=0, pady=(5, 5)) borderless = Checkbutton(controls_frame, var=BooleanVar(value=config.get("borderless"))) borderless.grid(row=1, column=1) Label(controls_frame, text="Action Key:").grid(row=2, column=0) action_key_entry = Entry(controls_frame, justify=CENTER) action_key_entry.grid(row=2, column=1) action_key_entry.insert(0, config.get("action_key", "e")) action_key_entry.bind("<KeyRelease>", del_entry_key) Label(controls_frame, text="Auto-Looting: ").grid(row=3, column=0, pady=(15, 0)) collect_allow_auto = Checkbutton( controls_frame, command=toggle_collect, var=BooleanVar(value=config.get("collect_allow_auto"))) collect_allow_auto.grid(row=3, column=1, pady=(15, 0)) Label(controls_frame, text="Looting Key:").grid(row=4, column=0, pady=(0, 15)) collect_key_entry = Entry(controls_frame, justify=CENTER) collect_key_entry.grid(row=4, column=1, pady=(0, 15)) collect_key_entry.insert(0, config.get("collect_key", "r")) collect_key_entry['state'] = NORMAL if config.get( "collect_allow_auto") else DISABLED collect_key_entry.bind("<KeyRelease>", del_entry_key) Label(controls_frame, text="Sound Notification: ").grid(row=5, column=0, pady=(5, 5)) sound = Checkbutton(controls_frame, var=BooleanVar(value=config.get("sound_notification"))) sound.grid(row=5, column=1) Label(controls_frame, text="Human-Like Delay: ").grid(row=6, column=0, pady=(5, 5)) jitter = Checkbutton(controls_frame, var=BooleanVar(value=config.get("jitter"))) jitter.grid(row=6, column=1) controls_frame.pack(padx=(5, 5), pady=(5, 5)) top.start()
def start_fullfisher_config(gui: 'GUI'): top = PopUp(helper.empty_function, gui._root, background=gui._root["background"]) controls_frame = ttk.Frame(top) top.title("Config") def file_name(): file = config.get("full_auto_rec_file", None) if file is None: return "Not Selected" return os.path.basename(file) def select_file(): file = askopenfilename(filetypes=[('Python Files', '*.fishy')]) if not file: logging.error("file not selected") else: config.set("full_auto_rec_file", file) logging.info(f"loaded {file}") file_name_label.set(file_name()) def start_calibrate(): top.quit_top() config.set("calibrate", True) gui.engine.toggle_fullfisher() def mode_command(): config.set("full_auto_mode", mode_var.get()) edit_cb['state'] = "normal" if config.get( "full_auto_mode", 0) == FullAutoMode.Recorder.value else "disable" # todo repetitive code fix file_name_label = tk.StringVar(value=file_name()) mode_var = tk.IntVar(value=config.get("full_auto_mode", 0)) edit_var = tk.IntVar(value=config.get("edit_recorder_mode", 0)) tabout_var = tk.IntVar(value=config.get("tabout_stop", 1)) look_for_hole = tk.IntVar(value=config.get("look_for_hole", 1)) row = 0 ttk.Label(controls_frame, text="Calibration: ").grid(row=row, column=0, pady=(5, 0)) ttk.Button(controls_frame, text="RUN", command=start_calibrate).grid(row=row, column=1) row += 1 ttk.Label(controls_frame, text="Mode: ").grid(row=row, column=0, rowspan=2) ttk.Radiobutton(controls_frame, text="Player", variable=mode_var, value=FullAutoMode.Player.value, command=mode_command).grid(row=row, column=1, sticky="w", pady=(5, 0)) row += 1 ttk.Radiobutton(controls_frame, text="Recorder", variable=mode_var, value=FullAutoMode.Recorder.value, command=mode_command).grid(row=2, column=1, sticky="w") row += 1 ttk.Label(controls_frame, text="Edit Mode: ").grid(row=row, column=0) edit_state = tk.NORMAL if config.get( "full_auto_mode", 0) == FullAutoMode.Recorder.value else tk.DISABLED edit_cb = ttk.Checkbutton( controls_frame, variable=edit_var, state=edit_state, command=lambda: config.set("edit_recorder_mode", edit_var.get())) edit_cb.grid(row=row, column=1, pady=(5, 0)) row += 1 ttk.Label(controls_frame, text="Tabout Stop: ").grid(row=row, column=0) ttk.Checkbutton( controls_frame, variable=tabout_var, command=lambda: config.set("tabout_stop", tabout_var.get())).grid( row=row, column=1, pady=(5, 0)) row += 1 ttk.Label(controls_frame, text="Look for hole: ").grid(row=row, column=0) ttk.Checkbutton( controls_frame, variable=look_for_hole, command=lambda: config.set("look_for_hole", look_for_hole.get())).grid( row=row, column=1, pady=(5, 0)) row += 1 ttk.Label(controls_frame, text="Fishy file: ").grid(row=row, column=0, rowspan=2) ttk.Button(controls_frame, text="Select", command=select_file).grid(row=row, column=1, pady=(5, 0)) row += 1 ttk.Label(controls_frame, textvariable=file_name_label).grid(row=row, column=1, columnspan=2) row += 1 ttk.Label(controls_frame, text="Use semi-fisher config for rest").grid(row=row, column=0, columnspan=2, pady=(20, 0)) controls_frame.pack(padx=(5, 5), pady=(5, 10)) controls_frame.update() top.start()