From 4280469c52183fd18df36ce16c31ac51023caf8b Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Mon, 28 Oct 2024 16:35:04 +0000 Subject: [PATCH] update presets more --- utils/__pycache__/text_to_mic.cpython-312.pyc | Bin 70478 -> 71908 bytes utils/text_to_mic.py | 69 ++++++++++++++---- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/utils/__pycache__/text_to_mic.cpython-312.pyc b/utils/__pycache__/text_to_mic.cpython-312.pyc index aa7ca5f277e935f434007f892bf416169b89f555..b2c77508f379182ec739d6ee07c957099a86edcb 100644 GIT binary patch delta 11707 zcmbtad3;nw@}Hh7lR0u{awiiA36qe7aNiJea74ltfuJ~<*VlbNAs0wg8`uN4%R zqtyWwMBU%6EJ4A+1w=(WRuoqg4GX@HtH3IXta5p~E5E9KnM{K2@1Ng%KKZ6!cfG3W z>h9|5>i6y+)t~NHN1QO3^a}Wmcrl}4i6_Y?bj4<5R5l8DV8U(E!wnfQ&0!N1PVv= zJw?D%WbmntU3ws%Mg7e{2D2v)$CDxW>fqSEX2tUCU^(>Po8z;xXWXeVLZlEC>=h`b zSf1~{q9mykS`@y*AUV|j28+(>{FcKU1$qPt1- z(H2P;EKwbBmNW}}ElyF=c<~>#u#4gMl6>aXUrNVrwZ>G5YkXDiIgYvlo6X^J_-wW` zsQ2z*>kR1`r!Cg?>K{M!_voVW-jht;{8n(QuNw~|)FGsP*ho6uYFpPpLapQNjDdz|7b(MgBHBOL+2 zW=Cb}rb1!2idHah)Dp5N@J`fOHECkc#GADqq_YLyj;|qP1bE_ldS9(bZfV*q893nyd`mms+V_hN^K@E^vL+^Z~5ci12#^RF7@~*i9tOD!a2; zqz}Q<1)Q(eaBfp7Kv_~ZP=_GDZNX=TkJ|<+2|v{MAF*@!Pe;Ztq@y+s-xEQJ(Pf|*929^ezqoTEleOs0(T8xO$OnB zOL~vf-eU8*n_U9!)2g?#r&#KUeDV&PJ>p{aCrBJl#X2_?V8rDqbK?sq*)1ankq-iE zN6sLov+#yhL;nf?=qK#`QG?8Un%(%$`%FJNi%6_+^uJ-o4I48g1x2;Sg;q~U!;1mu z7>g2!9~hS%`3`EN@lc1$XH~=Me0AIya*_QwE|pwj=J5f|W|$23vXv(?1DD4CQ_F6h ztY^s+V`JKgVD3x^I@k8FwlG#aB|c0mBnq*eNo@Y)Jd(`XCuforRx~+XDWtNalN0bw z7V)4#rEAjxc>*+MOi$MdX+m0O`W_9-oRqB=GCD2n+O+(P@H%CKqE5LC_Nw;qws0X6 zC*c<5#&ETwUEdzgrWR)q9kUfD8T3z*z1rU^+6`?6R6?Z{w8&R24C)-rj!lkdMqQjn zCu9jjnEhsRL}&IMHL!wTyRprPda&V>jVyP%g}pG{qRA14c3Rmd(~B*+LadM{4C~C_ zqv7NVq7Vu;C~PV6lY+fcJctxBdr1Nr&RR-}NfGvyeONMBlP8Sm9LY#&o@$gZniZBN zkTGmV=|GB9pm?veB6h4WP8i=gp-(AOn+dy-pcQgJfr*`yf-SIxnULR+1%vv zdhD)N6HY#h&uv*C+Jy-;9F{b#!55Tr8J#su?Y@^~XMGFuLXZ7Z!zSNHvu zWdE2^NxIpvnW-_{sUn%B&#Nw-SxA8G%yg{P{>ko|HH3W5cF!u(MaVnFUUqKQ z;ssimICUbG^j`Za(N<6GO`@a%E-!C#ft8V6+LF>dczrZcutBk zC2ebEj(+~)E?sJmZpq~sR#5p?ZtcGLhZdpe(x6ht53Sp|Sbrw;Wr+RTZcZV6P zRm?IsL6Zt=fqQdyX?$j2?OcBt*#IYm3>jJcVsjqOUwKkR<1EJjXTaj(GYhBvg>bfL zaaK7GzW92=(RF0D`LBDq4z!(*Pu`xCT6hK-1W(i*v@s zVU=!`NPUhvyAv2_-P9qve0&vv*NJHH)={_9845yWPAqfDYiVOaf~2mkb+4hBz{fjq zu9NDqWFs42y^=JrJ=Iy3$59^(!Y%}y(o(n&qAfn>Xg#}BZ6P9yT3SyQvDHflYmq(8 zV!M`Rg0p{h>99~tQ6onwh3xv$AzBedp9$pNa$K3xqsxXM`;;!FTL)zfxaIOmT^c)f z+ijH>e!hPFx}<4_2;B<{*@nG0u36;}SKH)%{wkDM1|Vwue56zhEtu_tcpuy7yi z0xIf8xG_qoWz%daWE+qsvsJbYq+)AL0|V5B!HS5I6=}j!knA<|E8S_zk74>GUG1?PL4Ab8;!CqX zPoG;gljgD~sUAq$}a>81j}(V~Lg>9cAFaRRpA zH-_B7zVKPd`9OH{d&-PTBvR2REnbWTE%=j{eJMM3kA*B@JMJwB z4EfzSVmOFm4Rz^YPe#Wx*g6c1(HaTP#Zn=*SZ?+R;P?f)51L>Kp;w>>kn9Nr?iMlr zqtg&VMv_;F6y}0W77qIZR?6)_+L{M#X0LXdOsf5SZVYLZ)>C6)fG5EnY-{ zyraE7nGX~1kOn&Bg;}V8Io!J(zhj+y)5%zNV(;5?IV+XCuD?J%ad8J1@;N9EP;VH> zX-y8P=W{nSI7M4uGGQwF^qKqOw#zK?Q7JsEAv<>Gv(=<5@X@o$Y6EwzCN%U{j2y_V z&H@?;K6n&|CyrLrLZ91XfuPKS=MwJ0<=LU7XOZb8gv$s$08+F(`)%NYY_-kx^{{yi z#>UUs-3LyPYi!>0mMosU;DfskU(xn1nE${7sHaC|D%gY1PbVwcspsz!`1^dq^Yg?f zpjE%c`5kiq9wFou`+7?YuptdOh6aca1>ZZvJoZ^GU(pzUnR1J4d^sbE>&1=B7xxcLcQj)#-*r%)?B8%T-!SE^Z1&MKvN_Orbf1d+izU65Vb}in|&<*4?U|9$lxP=1DfVp>){SN6lR4zMz?73IWHz?-9~qgB4@)JyVbw@xo`8Ve z0&Z+Puy}&meD1<5$WRWW*i(P6G~+zvhw^p&7tC;nof@HxRJSVF{5ZP{OD`e3jBpfTB*GW~Nk84~c8Ye_B1pxcW|E<#QLI}b=S^ra z(g_G1Phz7M{3K9H%F4ww7p=n=6drAQ?-lrbkRpSfwXJrz1ovwBP6783DYD7F#^!Uc z5M5q=WkcUU?l+^67a=T0Sb|Uu5V~`S?Y(x8Ez<@swWcuRsT6WC&~y4>72E@?_-JH4 z&ic@{&P^2DIA4XP0UKu(JMqyFk{r15(E=5Cn$k0w2ENX4_~=~bIWx$>T@eq&OWBSy z+dJ@C(lv=*ue|}ne@+S17};_E^IyYc?xLmvrKH9Q0bUtaG598j+vTO)iA_MMXid0G zYjor3LJI2@MC+i<8b&MfkO8E!aQDF&Uv_n`Vr>LWe_P13^ka7B?4Ts{hyCyUAVzhz z*zAssK+3u0s!W+*xqX$p84r(M8U^yfURY0EAe62AwirU{FFs36sDL`zeCv8AC-Szk zU(P465$9t_B`Z5`G4NynUwb9Yb3SQt4R$C3CIMvM>KYwRfr>7E2$s`+e5Ue)F&?XB zKP_Tu0zwCBqv0-E(n5k3wjeqV>Sz=@b3TzQXFr}#B{Kr%&s)e){=#x>T!C-(o_er9 z1IFCL4t|kN76<85DEELU{1JsORxT+Nf;L!N zs#ul**ALna?Cdc!dwhSaxlJqRI}M?1{>DtT!k5H0eU)H>1I?|VMtfMh&X>Yoc_5X| zoo|k7Q@3g0Ze8DL3f@k@ok-Ew=B&0bA)*!N`G3g%!6i6cgTsZkM%Dvv5yIK!2jYz} zL2Zaa)??vwu?c-|4bX^HyuDY_Jg;$5CJGK_8Xqz)4zJ2Qf+gROLe8oNZ5 zg2hFI%yyG6B{-hT$Dl!2`ekGMpu5AN(}O#+`Z^ZT7QuRXf9*+42ChRw3g5^h$0%gq zpnA@)I7YTb_Tv~okmF{u@tPXOvFk}QnaH}U;@P+>abz;uZt&1xhdZso5?mMM_FfmM z;JPS}-F0PhB=-_wo9*GftE)^FldFr1f&kNctCP$lRB+3;^hkS(n48=BJ%Y$5Sz;3*Bcm-Ig9@^8Jd zl@)%QX(&aBT=uQ(mTwo2=;aXAdw{DCx@B-?Jj(yI2j=1*VF}+^48_Q7IzkDX{$2ej z&P*wp2d=IVTqhM`baH#_4bUvb@n`vpu+HtO zcQiCpQHtiZ)V(@X6^`j$dF$gr3G5o9d$)~yP>tazR}0D6s=0IMtysf17XeE=Q@hcuk`Z?EZCyJqq z36F@5S@m<`^v6c2=fnk``T27q^7s@7la9l&-Hsi`IJmM^tuH7jfMxPDRy~0ff5PtR zy&k8-=XAJWN#pq~cogF6`8XHPC^o_`~fyuud zB{z2g_ezkLhw^w(V?m*Pr?1_;TQdq8u!U|w#{E9)alrj5mE)YZ9-2?y9*YF@b7a;D zr2+3gaKpR(7U8@81%&){R69^q!Us4;9+b<=!8;&U*mWb*P5ztk3#||QP9>SEq{I(j zCM7HBf~_$L{>w^oGihTh;Y+u_1EYT!yz`Ai2YrHw&bz= zQY>NqhJQdsi=ZSK{6DewVZ z@EUl6C8t%HQ$R7b)jDP#9CEy(1+EPt9{{X6d_0-umA@sh_q_$&>)ljDmT-+wPzeiz zPvyU$(Jct_sSULs3Lt+Y)azd{TQJ~5C%&9;vmAKFwGxGYxt0voeum?6kAIt%EE>^c zocgKJe9D;7ZOrJh6m^Yub~QD3IahV9TGKVM<)pE-uXR^gm(_mKSj%ipDF zxpHv3jx>@E+ydx9M z05*-|w=t>DL%IKFQTXAPJg7u-&|@Tbl5u?kxY$bQ8Sn4^Awb?>(iwLt2 z3bEVE5NZ)D2zO$`I)pnA__b2#hV0KsG8r366>wyv4+@#nwo) z-R)T7iC0WQQ#00mfpz;4toS$*;Rrq+N8p(xJiOB?Yye>jx*Xs2;NuD?&8E1^Qru=J z_xR}B=_Z6~B!r~{gNE;M!{fNoEdY|qW~+1By7C-Y<}dR>b7F?t$XulUnq$WYScFOMOQlE3-S Z#gN7EEwLnLv(m5GqWM;VWtsw{{|k?k@P+^Y delta 10615 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 diff --git a/utils/text_to_mic.py b/utils/text_to_mic.py index 3f09f71..fa368b0 100644 --- a/utils/text_to_mic.py +++ b/utils/text_to_mic.py @@ -30,6 +30,11 @@ class TextToMic(tk.Tk): super().__init__() self.title("Scorchsoft Text to Mic") + self.default_geometry = "590x800" + self.geometry(self.default_geometry) + + + self.style = ttk.Style(self) if self.tk.call('tk', 'windowingsystem') == 'aqua': self.style.theme_use('aqua') @@ -295,28 +300,46 @@ class TextToMic(tk.Tk): secondary_device_menu = ttk.OptionMenu(main_frame, self.device_index_2, "None", *self.available_devices.keys()) secondary_device_menu.grid(column=1, row=3, sticky=tk.W) - # Preset selection and save button + + spacer = ttk.Frame(main_frame, height=20) # Adjust height as needed + spacer.grid(column=0, row=4, columnspan=2) # Place spacer in the grid + + + # Text to Read Label + ttk.Label(main_frame, text="Text to Read:").grid(column=0, row=5, sticky=tk.W, pady=(10, 0)) + + # Create a frame to contain the dropdown and save button + save_frame = ttk.Frame(main_frame) + save_frame.grid(column=1, row=5, sticky=tk.E, padx=(5, 0), pady=(5, 0)) # Align to the top right + + # Preset Category dropdown self.category_var = tk.StringVar(value="Select Category") categories = [cat["category"] for cat in self.presets] - ttk.OptionMenu(main_frame, self.category_var, *categories).grid(column=1, row=4, sticky=tk.W) + category_menu = ttk.OptionMenu(save_frame, self.category_var, *categories) + category_menu.grid(column=0, row=0, sticky=tk.E, padx=(0, 5)) # Adjust padding for alignment - save_button = ttk.Button(main_frame, text="Save", command=self.save_current_text_as_preset) - save_button.grid(column=2, row=4, sticky=tk.E) + # Save button, reduced size + save_button = ttk.Button(save_frame, text="Save", width=8, command=self.save_current_text_as_preset) + save_button.grid(column=1, row=0, sticky=tk.E) # Align to the right + # Specify the text to read - ttk.Label(main_frame, text="Text to Read:").grid(column=0, row=4, sticky=tk.W, pady=(10, 0)) - self.text_input = tk.Text(main_frame, height=10, width=50) - self.text_input.grid(column=0, row=5, columnspan=2, pady=(0, 20)) # Padding added before submit button + self.text_input = tk.Text(main_frame, height=10, width=68) + self.text_input.grid(column=0, row=6, columnspan=2, pady=(0, 20), sticky="nsew") # Fill available width + + + + # Button configuration self.recording = False # State to check if currently recording self.record_button = ttk.Button(main_frame, text="Record Mic", command=self.toggle_recording) - self.record_button.grid(column=0, row=6, sticky=tk.W + tk.E, pady=(0, 20), padx=(0, 10)) # Left padding to separate buttons + self.record_button.grid(column=0, row=7, sticky=tk.W + tk.E, pady=(0, 20), padx=(0, 10)) # Left padding to separate buttons self.submit_button = ttk.Button(main_frame, text="Play Audio", style="Green.TButton", command=self.submit_text ) - self.submit_button.grid(column=1, row=6, sticky=tk.W + tk.E, pady=(0, 20), padx=(10, 0)) # Right padding to separate buttons + self.submit_button.grid(column=1, row=7, sticky=tk.W + tk.E, pady=(0, 20), padx=(10, 0)) # Right padding to separate buttons @@ -326,7 +349,7 @@ class TextToMic(tk.Tk): #Credits info_label = tk.Label(main_frame, text="Created by Scorchsoft.com App Development", fg="blue", cursor="hand2") - info_label.grid(column=0, row=9, columnspan=2, pady=(0, 0)) + info_label.grid(column=0, row=10, columnspan=2, pady=(0, 0)) info_label.bind("", lambda e: self.open_scorchsoft()) @@ -335,8 +358,8 @@ class TextToMic(tk.Tk): # Accordion frame to show/hide presets section self.presets_frame = ttk.Frame(self) self.presets_button = ttk.Button(self, text="▶ Presets", command=self.toggle_presets) - self.presets_button.grid(column=0, row=7, columnspan=2, sticky=tk.W) - self.presets_frame.grid(column=0, row=8, columnspan=2, sticky=(tk.W, tk.E)) + self.presets_button.grid(column=0, row=8, columnspan=2, sticky=tk.W) + self.presets_frame.grid(column=0, row=9, columnspan=2, sticky=(tk.W, tk.E)) # Tabs for categories with scrolling arrows self.tab_frame = ttk.Frame(self.presets_frame) @@ -375,7 +398,8 @@ class TextToMic(tk.Tk): # Populate tabs and presets self.populate_tabs() self.refresh_presets_display() - + self.toggle_presets() + self.toggle_presets() def scroll_left(self): @@ -1117,19 +1141,27 @@ Please also make sure you read the Terms of use and licence statement before usi # Update canvas width to calculate dynamic column width self.presets_canvas.update_idletasks() - preset_width = max(self.presets_canvas.winfo_width() // 3, 100) # Minimum width of 100 + preset_width = max(self.presets_canvas.winfo_width() // 3, 150) # Minimum width of 100 preset_height = 100 + print(f"preset width: {preset_width}") + # Configure columns to fill available space for col in range(3): self.presets_scrollable_frame.columnconfigure(col, weight=1) + # Populate filtered presets in grid layout for i, phrase in enumerate(display_phrases): frame = ttk.Frame(self.presets_scrollable_frame, width=preset_width, height=preset_height, relief="solid", borderwidth=1) - frame.grid(row=i // 3, column=i % 3, padx=2, pady=2, sticky="nsew") + frame.grid(row=i // 4, column=i % 4, padx=2, pady=2, sticky="nsew") frame.grid_propagate(False) + self.presets_scrollable_frame.grid_columnconfigure(i % 4, weight=1) # Make columns expandable + self.presets_scrollable_frame.grid_rowconfigure(i // 4, weight=1) # Make rows expandable + + + # Text label with truncation for long text wrapped_text = self.wrap_text(phrase["text"], max_lines=3, max_chars_per_line=20) label = ttk.Label(frame, text=wrapped_text, anchor="center", justify="center", width=20) @@ -1210,9 +1242,11 @@ Please also make sure you read the Terms of use and licence statement before usi if self.presets_collapsed: self.presets_frame.grid() self.presets_button.config(text="▼ Presets") + self.geometry(self.default_geometry) else: self.presets_frame.grid_remove() self.presets_button.config(text="▶ Presets") + self.geometry("590x520") self.presets_collapsed = not self.presets_collapsed @@ -1222,6 +1256,11 @@ Please also make sure you read the Terms of use and licence statement before usi category = self.category_var.get() if text and category != "Select Category": self.add_preset(category, text, is_favourite=False) + # Show success message with category information + messagebox.showinfo("Save Successful", f"The text has been successfully saved to the category: '{category}'.") + else: + messagebox.showinfo("Error", "Please enter text and select a category before saving.") + def load_presets(self): """Load presets from the JSON file."""