Skip to content

Settings #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Jul 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,6 @@ dmypy.json

# Pyre type checker
.pyre/

#Config file
cfg.json
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
sv-ttk
ntkutils
pynput
darkdetect
pywin32
10 changes: 10 additions & 0 deletions src/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import ntkutils.cfgtools as cfgtools

def get():
return cfgtools.init({
"theme": "Dark",
"font": "Helvetica",
"font-size": 11,
"mica": False,
"hotkeys": False,
})
48 changes: 41 additions & 7 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,37 @@
import tkinter, sv_ttk, ntkutils, os
ver = "0.3"

import tkinter, sv_ttk, ntkutils
from tkinter import filedialog, ttk
from pynput import keyboard
import darkdetect

try: import generatesize as size
except: import src.generatesize as size

import generatesize as size
import filetype as f
import settings
import config

cfg = config.get()

root = tkinter.Tk()
sv_ttk.set_theme("dark")
ntkutils.windowsetup(root, title="txt2 - Untitled *", resizeable=False, size=size.get(), icon="assets/logo.png")
ntkutils.dark_title_bar(root)
ntkutils.placeappincenter(root)
root.update()

def mica():
if cfg["theme"] == "Dark":
ntkutils.blur_window_background(root, dark=True)
textwidget.configure(bg="#1b1c1b")
else:
ntkutils.blur_window_background(root)
textwidget.configure(bg="#fafbfa")

def applysettings():
if cfg["theme"] == "System": sv_ttk.set_theme(darkdetect.theme().lower())
else: sv_ttk.set_theme(cfg["theme"].lower())
if cfg["theme"] == "Dark" or (cfg["theme"] == "System" and darkdetect.isDark()): ntkutils.dark_title_bar(root)
textwidget.configure(font=(cfg["font"], int(cfg["font-size"])))
if cfg["mica"]: mica()

def save(saveas=False):
if filename.get() == "unsaved" or saveas:
file = filedialog.asksaveasfile()
Expand Down Expand Up @@ -52,7 +70,16 @@ def changetype():
else:
f.changetype(filename, root)

def settings_():
global cfg

settings.build()
root.wait_window(settings.settings)

if settings.save == True:
cfg = settings.cfg
applysettings()

filename = tkinter.StringVar(value="unsaved")

header = tkinter.Frame(root, height="50")
Expand Down Expand Up @@ -99,6 +126,8 @@ def fileboxaction(*args):

fileboxstate.trace("w", fileboxaction)

btnsettings = ttk.Button(header, text="Settings", command=settings_).pack(side=tkinter.LEFT)

def refreshtitle(e):
if not root.wm_title().endswith("*"):
root.title(root.wm_title() + "*")
Expand All @@ -120,6 +149,11 @@ def signal_release_to_hotkeys(key):
for hotkey in hotkeys: hotkey.release(l.canonical(key))

l = keyboard.Listener(on_press=signal_press_to_hotkeys, on_release=signal_release_to_hotkeys)
#l.start()
if cfg["hotkeys"]: l.start()

try:
applysettings()
except:
config.get()

root.mainloop()
113 changes: 113 additions & 0 deletions src/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import tkinter, ntkutils, darkdetect
from tkinter import ttk, font

import config

def appearance():
global boxtheme, boxfont, boxsize, page

savechanges()
clearstates()

btnappearence.configure(style="Accent.TButton")
ntkutils.clearwin(frameright)

page = "appearance"

lbltheme = tkinter.Label(frameright, text="Theme:").place(x=10, y=12)
boxtheme = ttk.Combobox(frameright, values=["Dark", "Light", "System"], state="readonly", width=25)
boxtheme.set(cfg["theme"])
boxtheme.pack(padx=10, pady=10, anchor="e")

lblfont = tkinter.Label(frameright, text="Font:").place(x=10, y=67)
boxfont = ttk.Combobox(frameright, state="readonly", values=fonts, width=15)
boxfont.set(cfg["font"])
boxfont.pack(padx=80, pady=10, anchor="e")
boxsize = ttk.Entry(frameright, width=5)
boxsize.insert(0, cfg["font-size"])
boxsize.place(x=260, y=63)

def experimental():
global page, btnmica, btnhotkeys

savechanges()

clearstates()
btnexperimental.configure(style="Accent.TButton")
ntkutils.clearwin(frameright)

page = "experimental"

lblmica = tkinter.Label(frameright, text="Mica Blur:").place(x=10, y=12)
btnmica = ttk.Checkbutton(frameright, style="Switch.TCheckbutton")
btnmica.pack(padx=10, pady=10, anchor="e")
btnmica.state(["!alternate"])
if cfg["mica"]: btnmica.state(["!alternate", "selected"])
micainfo = tkinter.Label(frameright, text="When switching from dark to light theme with this\noption enabled, you have to perform a restart!", justify="left", fg="grey").place(x=10, y=42)

lblhotkeys = tkinter.Label(frameright, text="Enable Hotkeys: (Buggy) [needs restart]").place(x=10, y=112)
btnhotkeys = ttk.Checkbutton(frameright, style="Switch.TCheckbutton")
btnhotkeys.pack(padx=10, pady=65, anchor="e")
btnhotkeys.state(["!alternate"])
if cfg["hotkeys"]: btnhotkeys.state(["!alternate", "selected"])

def savechanges():
if page == "appearance":
cfg["theme"] = boxtheme.get()
cfg["font"] = boxfont.get()
cfg["font-size"] = boxsize.get()
elif page == "experimental":
cfg["mica"] = btnmica.instate(["selected"])
cfg["hotkeys"] = btnhotkeys.instate(["selected"])

def apply():
global page, save

savechanges()

ntkutils.cfgtools.SaveCFG(cfg)
save = True
settings.destroy()


def build():
global frameright, frameleft, btnappearence, btnexperimental, settings, page, cfg, save

cfg = config.get()
page = ""
save = False

settings = tkinter.Toplevel()
ntkutils.windowsetup(settings, "txt2 - Settings", "assets/logo.png", False, "500x400")
ntkutils.dark_title_bar(settings)

frameleft = tkinter.Frame(settings, width=175, bg="#202020")
frameleft.pack(side=tkinter.LEFT, fill="y")
frameleft.pack_propagate(False)

if cfg["theme"] == "Light" or (cfg["theme"] == "System" and darkdetect.isLight()):
frameleft.configure(bg="#f3f3f3")

frameright = tkinter.Frame(settings, width=325)
frameright.pack(side=tkinter.LEFT, fill="both")
frameright.pack_propagate(False)

btnappearence = ttk.Button(frameleft, text="Appearence", style="Accent.TButton", width=20, command=appearance)
btnappearence.pack(pady=10)
btnexperimental = ttk.Button(frameleft, text="Experimental Features", width=20, command=experimental)
btnexperimental.pack()

btnapply = ttk.Button(frameleft, text="Apply", style="Accent.TButton", width=20, command=apply)
btnapply.pack(side=tkinter.BOTTOM, pady=10)

getfonts()
appearance()

def clearstates():
for i in frameleft.pack_slaves():
i.configure(style="TButton")

def getfonts():
global fonts
fonts=list(font.families())
fonts.sort()
1 change: 0 additions & 1 deletion txt2.py

This file was deleted.