Skip to content

Commit 796cc79

Browse files
committed
Added usage data logging and some charts that provide useful information over time.
1 parent 83557ff commit 796cc79

14 files changed

Lines changed: 1455 additions & 12 deletions

App.axaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
Clicked="OnTrayIconClicked">
1515
<TrayIcon.Menu>
1616
<NativeMenu>
17+
<NativeMenuItem Header="Charts..." Click="OnChartsMenuClicked"/>
18+
<NativeMenuItem Header="Settings..." Click="OnSettingsMenuClicked"/>
19+
<NativeMenuItemSeparator/>
1720
<NativeMenuItem Header="Minimize to tray"
1821
ToggleType="CheckBox"
1922
Click="OnMinimizeToTrayMenuClicked"/>

App.axaml.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,64 @@ private void OnQuitMenuClicked(object? sender, EventArgs e)
8888
}
8989
}
9090

91+
private void OnChartsMenuClicked(object? sender, EventArgs e) => ShowChartsWindow();
92+
93+
private async void OnSettingsMenuClicked(object? sender, EventArgs e) =>
94+
await ShowSettingsWindow();
95+
96+
public void ShowChartsWindow()
97+
{
98+
if (ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop)
99+
{
100+
return;
101+
}
102+
103+
var database = desktop.MainWindow is MainWindow main
104+
? main.Database
105+
: new UsageDatabase();
106+
107+
var window = new ChartsWindow(database);
108+
window.Show();
109+
}
110+
111+
public async System.Threading.Tasks.Task ShowSettingsWindow()
112+
{
113+
if (ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop)
114+
{
115+
return;
116+
}
117+
118+
var dialog = new SettingsWindow(Settings);
119+
var owner = desktop.MainWindow;
120+
if (owner != null && owner.IsVisible)
121+
{
122+
await dialog.ShowDialog(owner);
123+
}
124+
else
125+
{
126+
dialog.Show();
127+
var tcs = new System.Threading.Tasks.TaskCompletionSource();
128+
dialog.Closed += (_, _) => tcs.TrySetResult();
129+
await tcs.Task;
130+
}
131+
132+
if (!dialog.Saved)
133+
{
134+
return;
135+
}
136+
137+
var minimizeMenu = FindMinimizeMenuItem();
138+
if (minimizeMenu != null)
139+
{
140+
minimizeMenu.IsChecked = Settings.MinimizeToTray;
141+
}
142+
143+
if (desktop.MainWindow is MainWindow main)
144+
{
145+
main.OnSettingsChanged();
146+
}
147+
}
148+
91149
private void ShowMainWindow()
92150
{
93151
if (ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop)

ChartsWindow.axaml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<Window xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:scottplot="clr-namespace:ScottPlot.Avalonia;assembly=ScottPlot.Avalonia"
6+
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="700"
7+
x:Class="ClaudeUsageMonitor.ChartsWindow"
8+
Title="Claude Usage Charts"
9+
Icon="avares://ClaudeUsageMonitor/Assets/icon.ico"
10+
Width="1100" Height="700"
11+
Background="#1a1a2e">
12+
13+
<Window.Styles>
14+
<Style Selector="TabItem">
15+
<Setter Property="Foreground" Value="#b0b0c0" />
16+
<Setter Property="FontSize" Value="13" />
17+
</Style>
18+
</Window.Styles>
19+
20+
<Grid RowDefinitions="*,Auto">
21+
<TabControl Grid.Row="0" x:Name="ChartsTabs" Margin="6">
22+
<TabItem Header="Burn Rate Forecast">
23+
<scottplot:AvaPlot x:Name="BurnRatePlot" />
24+
</TabItem>
25+
<TabItem Header="Hour-of-Day">
26+
<scottplot:AvaPlot x:Name="HourOfDayPlot" />
27+
</TabItem>
28+
<TabItem Header="Cycle Overlay">
29+
<scottplot:AvaPlot x:Name="CycleOverlayPlot" />
30+
</TabItem>
31+
<TabItem Header="Sonnet vs Opus">
32+
<scottplot:AvaPlot x:Name="SonnetOpusPlot" />
33+
</TabItem>
34+
<TabItem Header="Reset Waterfall">
35+
<scottplot:AvaPlot x:Name="WaterfallPlot" />
36+
</TabItem>
37+
<TabItem Header="Burst Detector">
38+
<scottplot:AvaPlot x:Name="BurstPlot" />
39+
</TabItem>
40+
<TabItem Header="Extra Credits">
41+
<Grid RowDefinitions="Auto,*">
42+
<StackPanel Grid.Row="0" Margin="20,16,20,8">
43+
<TextBlock x:Name="ExtraCreditsHeader"
44+
Text="Extra Credits"
45+
FontSize="16" FontWeight="Bold"
46+
Foreground="#e0e0f0" />
47+
<TextBlock x:Name="ExtraCreditsAmount"
48+
Foreground="#b0b0c0"
49+
FontSize="13"
50+
Margin="0,4,0,4" />
51+
<ProgressBar x:Name="ExtraCreditsProgressBar"
52+
Height="16"
53+
Minimum="0" Maximum="100"
54+
Background="#22223a"
55+
Foreground="#9b59b6" />
56+
<TextBlock x:Name="ExtraCreditsForecast"
57+
Foreground="#80808a"
58+
FontSize="11"
59+
Margin="0,8,0,0"
60+
TextWrapping="Wrap" />
61+
</StackPanel>
62+
<scottplot:AvaPlot Grid.Row="1" x:Name="ExtraCreditsPlot" />
63+
</Grid>
64+
</TabItem>
65+
</TabControl>
66+
67+
<StackPanel Grid.Row="1"
68+
Orientation="Horizontal"
69+
HorizontalAlignment="Right"
70+
Margin="10,0,10,10"
71+
Spacing="8">
72+
<TextBlock x:Name="StatusText"
73+
Foreground="#80808a"
74+
FontSize="11"
75+
VerticalAlignment="Center" />
76+
<Button Content="Refresh" Click="OnRefreshClicked" Padding="14,6" />
77+
</StackPanel>
78+
</Grid>
79+
</Window>

0 commit comments

Comments
 (0)