Upload files to "PTPLogger"

This commit is contained in:
2026-06-18 12:52:27 +10:00
parent abc785cad9
commit 1348f7bd90
2 changed files with 44 additions and 6 deletions
+40 -2
View File
@@ -84,7 +84,7 @@ ANOMALY_THRESHOLD_FREQ = 1_000_000_000 # ppb
# --- Version check --- # --- Version check ---
# Bump this on every build, and keep PTPLogger/VERSION in the repo matching it. # Bump this on every build, and keep PTPLogger/VERSION in the repo matching it.
__version__ = "1.1.3" __version__ = "1.1.4"
VERSION_URL = "https://gitea.apointless.space/bsncubed/RiedelScripts/raw/branch/main/PTPLogger/VERSION" VERSION_URL = "https://gitea.apointless.space/bsncubed/RiedelScripts/raw/branch/main/PTPLogger/VERSION"
DOWNLOAD_PAGE_URL = "https://gitea.apointless.space/bsncubed/RiedelScripts/src/branch/main/PTPLogger" DOWNLOAD_PAGE_URL = "https://gitea.apointless.space/bsncubed/RiedelScripts/src/branch/main/PTPLogger"
@@ -523,6 +523,24 @@ def plot_data(t, rms, freq, delay, max_offset, state_events, master_events, link
ha='center', fontsize=7, color='gray' ha='center', fontsize=7, color='gray'
) )
# Capture the y-limits as they stand right now (either the shared
# cross-interface scale set above, or matplotlib's own auto-fit) so the
# "Reset Scale" button can restore exactly this later, independent of
# whatever the time-axis zoom/pan ends up being.
fig.canvas.draw()
original_ylims = {ax: ax.get_ylim() for ax in all_axes}
def show_absolute_scale():
for ax in all_axes:
ymin, ymax = original_ylims[ax]
ax.set_ylim(*_padded_range(min(ymin, 0), max(ymax, 0)))
fig.canvas.draw_idle()
def reset_scale():
for ax in all_axes:
ax.set_ylim(original_ylims[ax])
fig.canvas.draw_idle()
# Add a "Copy Graph" button to this figure's own window (TkAgg backend) # Add a "Copy Graph" button to this figure's own window (TkAgg backend)
try: try:
host_window = fig.canvas.manager.window host_window = fig.canvas.manager.window
@@ -537,6 +555,9 @@ def plot_data(t, rms, freq, delay, max_offset, state_events, master_events, link
copy_btn = tk.Button(btn_bar, text="Copy Graph", copy_btn = tk.Button(btn_bar, text="Copy Graph",
command=lambda f=fig: copy_figure_to_clipboard(f)) command=lambda f=fig: copy_figure_to_clipboard(f))
copy_btn.pack(side=tk.LEFT, padx=5, pady=2) copy_btn.pack(side=tk.LEFT, padx=5, pady=2)
tk.Button(btn_bar, text="Show Absolute Scale", command=show_absolute_scale).pack(side=tk.LEFT, padx=5, pady=2)
tk.Button(btn_bar, text="Reset Scale", command=reset_scale).pack(side=tk.LEFT, padx=5, pady=2)
except Exception: except Exception:
pass # non-Tk backend or headless — skip silently pass # non-Tk backend or headless — skip silently
@@ -846,9 +867,24 @@ def check_for_updates():
pass pass
def show_about():
about_win = tk.Toplevel(root)
about_win.title("About")
about_win.resizable(False, False)
tk.Label(about_win, text="PTP Log Grapher", font=("", 12, "bold")).pack(padx=30, pady=(15, 2))
tk.Label(about_win, text=f"Version {__version__}", fg="gray").pack(pady=(0, 10))
link = tk.Label(about_win, text="View project on Gitea", fg="#3b6ea5", cursor="hand2")
link.pack(pady=(0, 10))
link.bind("<Button-1>", lambda e: webbrowser.open(DOWNLOAD_PAGE_URL))
tk.Label(about_win, text="Created by Ben Nicholson", fg="gray").pack(padx=30, pady=(0, 15))
# GUI # GUI
root = tk.Tk() root = tk.Tk()
root.title("PTP Log Viewer") root.title("PTP Log Grapher")
root.geometry("900x650") root.geometry("900x650")
root.protocol("WM_DELETE_WINDOW", on_main_window_close) root.protocol("WM_DELETE_WINDOW", on_main_window_close)
@@ -858,6 +894,8 @@ frame.pack(pady=5)
open_button = tk.Button(frame, text="Open Log", command=open_file) open_button = tk.Button(frame, text="Open Log", command=open_file)
open_button.pack(side=tk.LEFT, padx=10) open_button.pack(side=tk.LEFT, padx=10)
tk.Button(frame, text="About", command=show_about).pack(side=tk.LEFT, padx=(0, 10))
detail_var = tk.StringVar(value="Auto") detail_var = tk.StringVar(value="Auto")
tk.OptionMenu( tk.OptionMenu(
+4 -4
View File
@@ -6,8 +6,8 @@ VSVersionInfo(
ffi=FixedFileInfo( ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0. # Set not needed items to zero 0.
filevers=(1, 1, 3, 0), filevers=(1, 1, 4, 0),
prodvers=(1, 1, 3, 0), prodvers=(1, 1, 4, 0),
# Contains a bitmask that specifies the valid bits 'flags' # Contains a bitmask that specifies the valid bits 'flags'
mask=0x3f, mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file. # Contains a bitmask that specifies the Boolean attributes of the file.
@@ -31,12 +31,12 @@ VSVersionInfo(
u'040904B0', u'040904B0',
[StringStruct(u'CompanyName', u'A Pointless Space'), [StringStruct(u'CompanyName', u'A Pointless Space'),
StringStruct(u'FileDescription', u'PTP Log Grapher'), StringStruct(u'FileDescription', u'PTP Log Grapher'),
StringStruct(u'FileVersion', u'1.1.3'), StringStruct(u'FileVersion', u'1.1.4'),
StringStruct(u'InternalName', u'PTPLogGrapher'), StringStruct(u'InternalName', u'PTPLogGrapher'),
StringStruct(u'LegalCopyright', u''), StringStruct(u'LegalCopyright', u''),
StringStruct(u'OriginalFilename', u'PTPLogGrapher.exe'), StringStruct(u'OriginalFilename', u'PTPLogGrapher.exe'),
StringStruct(u'ProductName', u'PTP Log Grapher'), StringStruct(u'ProductName', u'PTP Log Grapher'),
StringStruct(u'ProductVersion', u'1.1.3')]) StringStruct(u'ProductVersion', u'1.1.4')])
]), ]),
VarFileInfo([VarStruct(u'Translation', [1033, 1200])]) VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
] ]