diff --git a/assets/assets.go b/assets/assets.go index 42f2698..5624ff9 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -14,7 +14,7 @@ import ( // The blank import enables the compiler directive below; no runtime package // initialization from embed is required. // -//go:embed pysentry-icon.png +//go:embed pysentry-icon-big.png var iconBytes []byte func Icon() fyne.Resource { @@ -22,7 +22,7 @@ func Icon() fyne.Resource { // for the window icon and tray icon. The Windows Explorer icon is still added // by the build script through the .ico resource, because Explorer reads PE // resources rather than Fyne runtime state. - return fyne.NewStaticResource("pysentry-icon.png", iconBytes) + return fyne.NewStaticResource("pysentry-icon-big.png", iconBytes) } func IconBytes() []byte { diff --git a/assets/gosentry.ico b/assets/gosentry.ico new file mode 100644 index 0000000..8eb98bc Binary files /dev/null and b/assets/gosentry.ico differ diff --git a/packaging/windows/pysentry.rc b/packaging/windows/pysentry.rc index 24870b0..18ded26 100644 --- a/packaging/windows/pysentry.rc +++ b/packaging/windows/pysentry.rc @@ -1 +1 @@ -IDI_ICON1 ICON "assets/pysentry.ico" +IDI_ICON1 ICON "assets/gosentry.ico" diff --git a/src/gui/app.go b/src/gui/app.go index f125f49..288632e 100644 --- a/src/gui/app.go +++ b/src/gui/app.go @@ -157,12 +157,13 @@ func newMainView(w fyne.Window, started time.Time) fyne.CanvasObject { schedulerPaused := false filteredJobs := filteredJobIndexes(jobs, selectedFolder) title := widget.NewLabelWithStyle(jobs[selected].Name, fyne.TextAlignLeading, fyne.TextStyle{Bold: true}) - folder := widget.NewLabel(jobs[selected].Folder) - schedule := widget.NewLabel(jobs[selected].Schedule) - command := widget.NewLabel(jobs[selected].Command) - lastRun := widget.NewLabel(jobs[selected].LastRun) - nextRun := widget.NewLabel(jobs[selected].NextRun) - state := widget.NewLabel(jobs[selected].LastState) + title.Wrapping = fyne.TextWrapBreak + folder := newJobDetailLabel(jobs[selected].Folder) + schedule := newJobDetailLabel(jobs[selected].Schedule) + command := newJobDetailLabel(jobs[selected].Command) + lastRun := newJobDetailLabel(jobs[selected].LastRun) + nextRun := newJobDetailLabel(jobs[selected].NextRun) + state := newJobDetailLabel(jobs[selected].LastState) schedulerState := widget.NewLabel("Scheduler running") commandOutput := widget.NewTextGrid() commandOutput.SetText(jobs[selected].Output) @@ -569,6 +570,15 @@ func detailRow(label string, value fyne.CanvasObject) fyne.CanvasObject { return container.NewGridWithColumns(2, caption, value) } +func newJobDetailLabel(text string) *widget.Label { + label := widget.NewLabel(text) + // Job names, commands, and paths can be much wider than the details panel. + // Breaking long runs of text keeps Label.MinSize stable when the selection + // changes, so the right panel does not force the whole window to resize. + label.Wrapping = fyne.TextWrapBreak + return label +} + func settingsRow(label string, value fyne.CanvasObject) fyne.CanvasObject { caption := widget.NewLabelWithStyle(label, fyne.TextAlignLeading, fyne.TextStyle{Bold: true}) caption.Wrapping = fyne.TextTruncate