Skip to content

Commit 0984a0b

Browse files
authoredJul 8, 2022
Settings (#14)
1 parent db8ce15 commit 0984a0b

File tree

6 files changed

+168
-8
lines changed

6 files changed

+168
-8
lines changed
 

‎.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,6 @@ dmypy.json
127127

128128
# Pyre type checker
129129
.pyre/
130+
131+
#Config file
132+
cfg.json

‎requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
sv-ttk
22
ntkutils
33
pynput
4+
darkdetect
45
pywin32

‎src/config.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import ntkutils.cfgtools as cfgtools
2+
3+
def get():
4+
return cfgtools.init({
5+
"theme": "Dark",
6+
"font": "Helvetica",
7+
"font-size": 11,
8+
"mica": False,
9+
"hotkeys": False,
10+
})

‎src/main.py

+41-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
1-
import tkinter, sv_ttk, ntkutils, os
1+
ver = "0.3"
2+
3+
import tkinter, sv_ttk, ntkutils
24
from tkinter import filedialog, ttk
35
from pynput import keyboard
6+
import darkdetect
47

5-
try: import generatesize as size
6-
except: import src.generatesize as size
7-
8+
import generatesize as size
89
import filetype as f
10+
import settings
11+
import config
12+
13+
cfg = config.get()
914

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

20+
def mica():
21+
if cfg["theme"] == "Dark":
22+
ntkutils.blur_window_background(root, dark=True)
23+
textwidget.configure(bg="#1b1c1b")
24+
else:
25+
ntkutils.blur_window_background(root)
26+
textwidget.configure(bg="#fafbfa")
27+
28+
def applysettings():
29+
if cfg["theme"] == "System": sv_ttk.set_theme(darkdetect.theme().lower())
30+
else: sv_ttk.set_theme(cfg["theme"].lower())
31+
if cfg["theme"] == "Dark" or (cfg["theme"] == "System" and darkdetect.isDark()): ntkutils.dark_title_bar(root)
32+
textwidget.configure(font=(cfg["font"], int(cfg["font-size"])))
33+
if cfg["mica"]: mica()
34+
1735
def save(saveas=False):
1836
if filename.get() == "unsaved" or saveas:
1937
file = filedialog.asksaveasfile()
@@ -52,7 +70,16 @@ def changetype():
5270
else:
5371
f.changetype(filename, root)
5472

73+
def settings_():
74+
global cfg
5575

76+
settings.build()
77+
root.wait_window(settings.settings)
78+
79+
if settings.save == True:
80+
cfg = settings.cfg
81+
applysettings()
82+
5683
filename = tkinter.StringVar(value="unsaved")
5784

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

100127
fileboxstate.trace("w", fileboxaction)
101128

129+
btnsettings = ttk.Button(header, text="Settings", command=settings_).pack(side=tkinter.LEFT)
130+
102131
def refreshtitle(e):
103132
if not root.wm_title().endswith("*"):
104133
root.title(root.wm_title() + "*")
@@ -120,6 +149,11 @@ def signal_release_to_hotkeys(key):
120149
for hotkey in hotkeys: hotkey.release(l.canonical(key))
121150

122151
l = keyboard.Listener(on_press=signal_press_to_hotkeys, on_release=signal_release_to_hotkeys)
123-
#l.start()
152+
if cfg["hotkeys"]: l.start()
153+
154+
try:
155+
applysettings()
156+
except:
157+
config.get()
124158

125159
root.mainloop()

‎src/settings.py

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import tkinter, ntkutils, darkdetect
2+
from tkinter import ttk, font
3+
4+
import config
5+
6+
def appearance():
7+
global boxtheme, boxfont, boxsize, page
8+
9+
savechanges()
10+
clearstates()
11+
12+
btnappearence.configure(style="Accent.TButton")
13+
ntkutils.clearwin(frameright)
14+
15+
page = "appearance"
16+
17+
lbltheme = tkinter.Label(frameright, text="Theme:").place(x=10, y=12)
18+
boxtheme = ttk.Combobox(frameright, values=["Dark", "Light", "System"], state="readonly", width=25)
19+
boxtheme.set(cfg["theme"])
20+
boxtheme.pack(padx=10, pady=10, anchor="e")
21+
22+
lblfont = tkinter.Label(frameright, text="Font:").place(x=10, y=67)
23+
boxfont = ttk.Combobox(frameright, state="readonly", values=fonts, width=15)
24+
boxfont.set(cfg["font"])
25+
boxfont.pack(padx=80, pady=10, anchor="e")
26+
boxsize = ttk.Entry(frameright, width=5)
27+
boxsize.insert(0, cfg["font-size"])
28+
boxsize.place(x=260, y=63)
29+
30+
def experimental():
31+
global page, btnmica, btnhotkeys
32+
33+
savechanges()
34+
35+
clearstates()
36+
btnexperimental.configure(style="Accent.TButton")
37+
ntkutils.clearwin(frameright)
38+
39+
page = "experimental"
40+
41+
lblmica = tkinter.Label(frameright, text="Mica Blur:").place(x=10, y=12)
42+
btnmica = ttk.Checkbutton(frameright, style="Switch.TCheckbutton")
43+
btnmica.pack(padx=10, pady=10, anchor="e")
44+
btnmica.state(["!alternate"])
45+
if cfg["mica"]: btnmica.state(["!alternate", "selected"])
46+
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)
47+
48+
lblhotkeys = tkinter.Label(frameright, text="Enable Hotkeys: (Buggy) [needs restart]").place(x=10, y=112)
49+
btnhotkeys = ttk.Checkbutton(frameright, style="Switch.TCheckbutton")
50+
btnhotkeys.pack(padx=10, pady=65, anchor="e")
51+
btnhotkeys.state(["!alternate"])
52+
if cfg["hotkeys"]: btnhotkeys.state(["!alternate", "selected"])
53+
54+
def savechanges():
55+
if page == "appearance":
56+
cfg["theme"] = boxtheme.get()
57+
cfg["font"] = boxfont.get()
58+
cfg["font-size"] = boxsize.get()
59+
elif page == "experimental":
60+
cfg["mica"] = btnmica.instate(["selected"])
61+
cfg["hotkeys"] = btnhotkeys.instate(["selected"])
62+
63+
def apply():
64+
global page, save
65+
66+
savechanges()
67+
68+
ntkutils.cfgtools.SaveCFG(cfg)
69+
save = True
70+
settings.destroy()
71+
72+
73+
def build():
74+
global frameright, frameleft, btnappearence, btnexperimental, settings, page, cfg, save
75+
76+
cfg = config.get()
77+
page = ""
78+
save = False
79+
80+
settings = tkinter.Toplevel()
81+
ntkutils.windowsetup(settings, "txt2 - Settings", "assets/logo.png", False, "500x400")
82+
ntkutils.dark_title_bar(settings)
83+
84+
frameleft = tkinter.Frame(settings, width=175, bg="#202020")
85+
frameleft.pack(side=tkinter.LEFT, fill="y")
86+
frameleft.pack_propagate(False)
87+
88+
if cfg["theme"] == "Light" or (cfg["theme"] == "System" and darkdetect.isLight()):
89+
frameleft.configure(bg="#f3f3f3")
90+
91+
frameright = tkinter.Frame(settings, width=325)
92+
frameright.pack(side=tkinter.LEFT, fill="both")
93+
frameright.pack_propagate(False)
94+
95+
btnappearence = ttk.Button(frameleft, text="Appearence", style="Accent.TButton", width=20, command=appearance)
96+
btnappearence.pack(pady=10)
97+
btnexperimental = ttk.Button(frameleft, text="Experimental Features", width=20, command=experimental)
98+
btnexperimental.pack()
99+
100+
btnapply = ttk.Button(frameleft, text="Apply", style="Accent.TButton", width=20, command=apply)
101+
btnapply.pack(side=tkinter.BOTTOM, pady=10)
102+
103+
getfonts()
104+
appearance()
105+
106+
def clearstates():
107+
for i in frameleft.pack_slaves():
108+
i.configure(style="TButton")
109+
110+
def getfonts():
111+
global fonts
112+
fonts=list(font.families())
113+
fonts.sort()

‎txt2.py

-1
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.