Skip to content

Commit 616bbce

Browse files
committed
Fixed main ui
1 parent b19ff98 commit 616bbce

File tree

2 files changed

+80
-39
lines changed

2 files changed

+80
-39
lines changed

src/window.py

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ class PytimerWindow(Adw.ApplicationWindow):
1515
time_label = Gtk.Template.Child('time_label')
1616
minutes_spin = Gtk.Template.Child('minutes_spin')
1717
header_bar = Gtk.Template.Child('header_bar')
18-
button_box = Gtk.Template.Child('button_box')
18+
reset_button = Gtk.Template.Child('reset_button')
19+
start_button = Gtk.Template.Child('start_button')
20+
reset_revealer = Gtk.Template.Child('reset_revealer') # Added
21+
#reset_button_revealer = Gtk.Template.Child('reset_button_revealer') # Removed
1922

2023
def __init__(self, **kwargs):
2124
super().__init__(**kwargs)
@@ -27,42 +30,43 @@ def __init__(self, **kwargs):
2730
self.elapsed_time = 0
2831
self.start_time = 0
2932
self.timeout_id = None
30-
31-
# Create buttons programmatically
32-
self.start_button = Gtk.Button()
33-
self.start_button.set_icon_name("media-playback-start-symbolic")
34-
self.start_button.add_css_class("circular")
35-
self.start_button.add_css_class("raised")
36-
self.start_button.connect('clicked', self._on_start_clicked)
37-
38-
self.reset_button = Gtk.Button()
39-
self.reset_button.set_icon_name("edit-undo-symbolic")
40-
self.reset_button.add_css_class("circular")
41-
self.reset_button.add_css_class("small")
42-
self.reset_button.add_css_class("destructive-action")
43-
self.reset_button.set_visible(False)
44-
self.reset_button.connect('clicked', self._on_reset_clicked)
45-
46-
# Add buttons to GtkFixed and set positions
47-
self.button_box.put(self.start_button, 15, 0)
48-
self.button_box.put(self.reset_button, 65, 0)
33+
self.timer_paused_once = False
4934

5035
# Connect signals
5136
self.minutes_spin.connect('value-changed', self._on_minutes_changed)
37+
self.start_button.connect('clicked', self._on_start_clicked)
38+
self.reset_button.connect('clicked', self._on_reset_clicked)
5239

5340
# Set up drawing area
5441
self.progress_circle.set_draw_func(self.draw_timer_arc, None)
5542

5643
# Add CSS for styling
5744
css_provider = Gtk.CssProvider()
58-
css_provider.load_from_data(b"""
59-
.timer-label { font-size: 48px; font-weight: 300; }
45+
css_data = b"""
46+
.timer-label { font-size: 48px; font-weight: 600; }
6047
.button-box { min-width: 300px; }
6148
button.circular { padding: 4px; margin: 2px; border-radius: 9999px; }
6249
button.small { padding: 2px; }
6350
headerbar { padding: 0; min-height: 24px; box-shadow: none; border-bottom: none; }
6451
window { margin: 0; }
65-
""")
52+
53+
/* Add margin to the right side of the headerbar's end button */
54+
headerbar .end button {
55+
margin-right: 12px;
56+
}
57+
58+
/* Make the reset button REALLY smaller */
59+
.small-reset-button {
60+
padding: 0px; /* Reduce padding even more */
61+
min-width: 25px; /* Override min-width */
62+
min-height: 25px; /* Override min-height */
63+
font-size: 0.6em; /* Reduce font size even more */
64+
border-width: 0px; /* Remove border */
65+
margin: 0px; /* Remove margin */
66+
}
67+
"""
68+
css_provider.load_from_data(css_data)
69+
6670
Gtk.StyleContext.add_provider_for_display(
6771
Gdk.Display.get_default(),
6872
css_provider,
@@ -78,10 +82,14 @@ def _on_reset_clicked(self, button):
7882
self.total_seconds = 0
7983
self.elapsed_time = 0
8084
self._update_time_label()
81-
self.reset_button.set_visible(False)
85+
#self.reset_button_revealer.set_reveal_child(False) #Removed
8286
self.minutes_spin.set_sensitive(True)
8387
self.progress_circle.queue_draw()
8488
self._update_start_button_state()
89+
self.timer_paused_once = False
90+
self.reset_revealer.set_reveal_child(False)
91+
self.start_button.set_icon_name("media-playback-start-symbolic")
92+
8593

8694
def _on_start_clicked(self, button):
8795
if not self.timer_running:
@@ -98,11 +106,9 @@ def _on_start_clicked(self, button):
98106
self.remaining_seconds = self.total_seconds
99107
self.start_time = time.time() - self.elapsed_time
100108
self._start_timer()
101-
button.set_icon_name("media-playback-stop-symbolic")
102109
else:
103110
self._stop_timer()
104-
button.set_icon_name("media-playback-start-symbolic")
105-
self.reset_button.set_visible(True)
111+
#self.reset_button_revealer.set_reveal_child(False) #Removed
106112

107113
def draw_timer_arc(self, area, cr, width, height, data):
108114
center_x = width / 2
@@ -135,7 +141,8 @@ def _start_timer(self):
135141
self.timer_running = True
136142
self.timeout_id = GLib.timeout_add(16, self._update_timer) # Update every ~16ms for 60fps
137143
self.minutes_spin.set_sensitive(False)
138-
self.reset_button.set_visible(False)
144+
self.start_button.set_icon_name("media-playback-pause-symbolic") # Set icon to pause
145+
self.reset_revealer.set_reveal_child(False) # Ensure reset button is hidden
139146

140147
def _stop_timer(self):
141148
self.timer_running = False
@@ -145,6 +152,8 @@ def _stop_timer(self):
145152
self.elapsed_time = time.time() - self.start_time # Save the elapsed time
146153
self.minutes_spin.set_sensitive(False) # Disable minutes_spin when paused
147154
self._update_start_button_state()
155+
self.start_button.set_icon_name("media-playback-start-symbolic") # Set icon to start
156+
self.reset_revealer.set_reveal_child(True) # Always reveal reset button on pause
148157

149158
def _update_timer(self):
150159
if self.remaining_seconds > 0:
@@ -157,9 +166,6 @@ def _update_timer(self):
157166
else:
158167
self._timer_finished()
159168
return False
160-
else:
161-
self._timer_finished()
162-
return False
163169

164170
def _update_time_label(self):
165171
if self.remaining_seconds < 0:
@@ -170,10 +176,8 @@ def _update_time_label(self):
170176

171177
def _timer_finished(self):
172178
self.timer_running = False
173-
self.start_button.set_icon_name("media-playback-start-symbolic")
179+
self.start_button.set_icon_name("media-playback-start-symbolic") # Set icon to start
174180
self.minutes_spin.set_sensitive(True)
175181
self._update_start_button_state()
176182
self.elapsed_time = 0 # Reset elapsed time when the timer finishes
177-
178-
def on_close_button_clicked(self, button):
179-
self.close()
183+
self.reset_revealer.set_reveal_child(False) # Ensure reset button is hidden

src/window.ui

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<template class="PytimerWindow" parent="AdwApplicationWindow">
66
<property name="default-width">400</property>
77
<property name="default-height">400</property>
8+
<property name="resizable">false</property>
89
<property name="title" translatable="yes">PyTimer</property>
910
<child>
1011
<object class="AdwToolbarView">
@@ -84,10 +85,6 @@
8485
<child type="bottom">
8586
<object class="AdwHeaderBar" id="header_bar">
8687
<property name="hexpand">true</property>
87-
<property name="title-widget">
88-
<object class="GtkFixed" id="button_box">
89-
</object>
90-
</property>
9188
<child type="start">
9289
<object class="GtkMenuButton">
9390
<property name="valign">center</property>
@@ -101,6 +98,46 @@
10198
</style>
10299
</object>
103100
</child>
101+
<child type="title">
102+
<object class="GtkBox">
103+
<property name="orientation">horizontal</property>
104+
<property name="hexpand">True</property>
105+
<property name="halign">center</property>
106+
<child>
107+
<object class="GtkButton" id="start_button">
108+
<property name="valign">center</property>
109+
<property name="halign">center</property>
110+
<property name="hexpand">False</property>
111+
<property name="margin-start">39</property>
112+
<property name="icon-name">media-playback-start-symbolic</property>
113+
<style>
114+
<class name="circular"/>
115+
<class name="raised"/>
116+
</style>
117+
</object>
118+
</child>
119+
<child>
120+
<object class="GtkRevealer" id="reset_revealer">
121+
<property name="reveal-child">False</property>
122+
<child>
123+
<object class="GtkButton" id="reset_button">
124+
<property name="valign">center</property>
125+
<property name="halign">center</property>
126+
<property name="margin-start">8</property>
127+
<property name="hexpand">False</property>
128+
<property name="icon-name">view-refresh-symbolic</property>
129+
<property name="css-classes">small-reset-button</property>
130+
<style>
131+
<class name="circular"/>
132+
<class name="small"/>
133+
<class name="destructive-action"/>
134+
</style>
135+
</object>
136+
</child>
137+
</object>
138+
</child>
139+
</object>
140+
</child>
104141
</object>
105142
</child>
106143
</object>

0 commit comments

Comments
 (0)