Files
rgb-led-strip-controller/src/RgbLedStripController/MainWindow.xaml
T
fristy acc34d9543
CI / build (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / release (push) Canceled after 0s
v0.3.0: CI dotnet 8.0.424 pinned with isolated install
- Pin .NET SDK to 8.0.424 in all CI jobs to avoid floating channel drift

- Install SDK to runner temp via DOTNET_INSTALL_DIR to bypass

  C:\\Program Files\\dotnet overwrite/extract conflicts on Gitea Windows runners

- Simplify release job to dotnet publish + upload-artifact

- Exclude memory-bank/ via .gitignore (internal dev memory stays local)
2026-09-05 00:22:09 +03:00

633 lines
37 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window x:Class="RgbLedStripController.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="RGB Led Strip Controller"
Height="800"
Width="1320"
MinWidth="1040"
MinHeight="700"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<DataTemplate x:Key="EffectOptionTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Padding="8,4"
Background="#18FFFFFF"
CornerRadius="8">
<TextBlock FontSize="11"
FontWeight="SemiBold"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding Code}" />
</Border>
<TextBlock Grid.Column="2"
VerticalAlignment="Center"
FontSize="13"
FontWeight="SemiBold"
Text="{Binding Label}" />
</Grid>
</DataTemplate>
</Window.Resources>
<Border Margin="12"
Padding="24"
Background="#FF0D131B"
BorderBrush="#18FFFFFF"
BorderThickness="1"
CornerRadius="22"
ClipToBounds="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="16" />
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Style="{StaticResource CardBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="30"
Text="RGB Led Strip Controller" />
<TextBlock Margin="0,8,0,0"
FontSize="14"
Foreground="{StaticResource MutedTextBrush}"
Text="Windows 10 için sade, çok fonksiyonlu multi ELK-BLEDOM protokolüne uygun rgb led şerit kontrolcüsü." />
</StackPanel>
<StackPanel Grid.Column="1"
Margin="24,0,0,0"
VerticalAlignment="Center">
<Border HorizontalAlignment="Right"
Padding="12,6"
CornerRadius="12"
Background="{Binding State.StatusBrush}">
<TextBlock FontSize="13"
FontWeight="SemiBold"
Foreground="Black"
Text="{Binding State.ConnectionLabel}" />
</Border>
<TextBlock Margin="0,12,0,0"
HorizontalAlignment="Right"
FontSize="13"
Text="{Binding State.ConnectedSummary}" />
<TextBlock Margin="0,4,0,0"
HorizontalAlignment="Right"
FontSize="13"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding State.TargetSummary}" />
</StackPanel>
</Grid>
</Border>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="18" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource CardBorderStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="14" />
<RowDefinition Height="*" />
<RowDefinition Height="14" />
<RowDefinition Height="Auto" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="22"
Text="Cihazlar" />
<Button Grid.Column="1"
Click="ScanClicked"
IsEnabled="{Binding CanScan}">
<TextBlock FontSize="13" Text="Tara" />
</Button>
</Grid>
<ListBox Grid.Row="2"
ItemsSource="{Binding Devices}"
SelectedItem="{Binding SelectedDevice, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock FontSize="15"
FontWeight="SemiBold"
Text="{Binding DisplayName}" />
<Border Grid.Column="1"
Margin="12,0,0,0"
Padding="8,3"
CornerRadius="8"
Background="#213CC7FF"
VerticalAlignment="Center">
<TextBlock FontSize="11"
FontWeight="SemiBold"
Foreground="{StaticResource AccentBrush}"
Text="{Binding Badge}" />
</Border>
</Grid>
<StackPanel Grid.Row="1" Margin="0,8,0,0">
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding SecondaryLabel}" />
<TextBlock Margin="0,3,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding SignalLabel}" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="4" Style="{StaticResource PanelCardStyle}">
<StackPanel>
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Seçili cihaz" />
<TextBlock Margin="0,8,0,0"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding SelectedDeviceSummaryDisplay}"
TextWrapping="Wrap" />
<TextBlock Margin="0,10,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding LastKnownDeviceCaptionDisplay}"
TextWrapping="Wrap" />
</StackPanel>
</Border>
<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Text="{Binding AliasEditorText, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Column="2"
Click="SaveAliasClicked"
IsEnabled="{Binding CanSaveAlias}">
<TextBlock FontSize="13" Text="Takma adı kaydet" />
</Button>
</Grid>
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Click="ConnectClicked"
IsEnabled="{Binding CanConnect}">
<TextBlock FontSize="14" Text="Bağlan" />
</Button>
<Button Grid.Column="2"
Style="{StaticResource GhostButtonStyle}"
Click="DisconnectAllClicked"
IsEnabled="{Binding CanDisconnectAll}">
<TextBlock FontSize="14" Text="Tümünü kes" />
</Button>
</Grid>
</Grid>
</Border>
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="16" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Style="{StaticResource CardBorderStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="14" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="22"
Text="Bağlı cihazlar" />
<ListBox Grid.Row="2"
ItemsSource="{Binding ConnectedDevices}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="182" />
</Grid.ColumnDefinitions>
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock FontSize="15"
FontWeight="SemiBold"
Text="{Binding DisplayName}" />
<Border Grid.Column="1"
Margin="12,0,0,0"
Padding="8,3"
CornerRadius="8"
Background="{Binding StatusBrush}"
VerticalAlignment="Center">
<TextBlock FontSize="11"
FontWeight="SemiBold"
Foreground="Black"
Text="{Binding StatusLabel}" />
</Border>
</Grid>
<TextBlock Margin="0,8,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding SecondaryLabel}" />
<TextBlock Margin="0,3,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding SignalLabel}" />
<TextBlock Margin="0,8,0,0"
FontSize="13"
Text="{Binding StatusText}"
TextWrapping="Wrap" />
</StackPanel>
<StackPanel Grid.Column="1"
HorizontalAlignment="Right"
VerticalAlignment="Center">
<CheckBox Content="Komuta dahil"
IsChecked="{Binding IsControlTarget, Mode=TwoWay}"
Margin="0,0,0,10"
Style="{StaticResource TargetCheckBoxStyle}" />
<Button Style="{StaticResource DangerGhostButtonStyle}"
Click="DisconnectConnectedClicked"
Tag="{Binding}">
<TextBlock FontSize="13" Text="Bağlantıyı kes" />
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Border>
<Border Grid.Row="2" Style="{StaticResource CardBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="16" />
<ColumnDefinition Width="1.15*" />
<ColumnDefinition Width="16" />
<ColumnDefinition Width="0.95*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource PanelCardStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="20"
Text="Güç ve parlaklık" />
<Button Margin="0,16,0,0"
Click="PowerClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="14" Text="{Binding State.PowerButtonLabel}" />
</Button>
<TextBlock Margin="0,22,0,0"
FontSize="13"
Foreground="{StaticResource MutedTextBrush}"
Text="Parlaklık" />
<DockPanel Margin="0,6,0,0">
<TextBlock DockPanel.Dock="Right"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.BrightnessLabel}" />
</DockPanel>
<Slider x:Name="BrightnessSlider"
Minimum="0"
Maximum="100"
TickFrequency="5"
Value="{Binding State.Brightness}"
IsEnabled="{Binding CanUseBrightnessControl}"
LostMouseCapture="BrightnessCommitLostMouseCapture"
PreviewKeyUp="BrightnessCommitKeyUp"
PreviewMouseLeftButtonUp="BrightnessCommitMouseUp"
ValueChanged="BrightnessChanged" />
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource PanelCardStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="20"
Text="Renk" />
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Border Width="74"
Height="74"
CornerRadius="12"
Background="{Binding State.SelectedBrush}" />
<StackPanel Margin="14,4,0,0"
VerticalAlignment="Center">
<TextBlock FontSize="16"
FontWeight="SemiBold"
Text="{Binding State.SelectedHex}" />
<TextBlock Margin="0,4,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding State.SelectedRgbLabel}" />
</StackPanel>
</StackPanel>
<TextBlock Margin="0,18,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Hızlı renkler" />
<ItemsControl Margin="0,14,0,0"
ItemsSource="{Binding ColorPresets}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="7" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Width="38"
Height="38"
Margin="0,0,10,10"
Background="{Binding Hex}"
Tag="{Binding Hex}"
ToolTip="{Binding ToolTipLabel}"
Click="PresetColorClicked"
Style="{StaticResource SwatchButtonStyle}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Margin="0,4,0,0"
Style="{StaticResource WarmGhostButtonStyle}"
Click="SelectColorClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="14" Text="Renk seçici" />
</Button>
</StackPanel>
</Border>
<Border Grid.Column="4" Style="{StaticResource PanelCardStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}"
FontSize="20"
Text="Mod" />
<TextBlock Margin="0,16,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Aktif mod" />
<TextBlock Margin="0,8,0,0"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.CurrentModeLabel}" />
<UniformGrid Margin="0,14,0,0"
Columns="4">
<Button Margin="0,0,8,0"
Click="SwitchRgbModeClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="13" Text="RGB" />
</Button>
<Button Margin="0,0,8,0"
Click="SwitchEffectModeClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="13" Text="Efekt" />
</Button>
<Button Click="SwitchGrayscaleModeClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="13" Text="Gri ton" />
</Button>
<Button Margin="8,0,0,0"
Click="SwitchTemperatureModeClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="13" Text="Beyaz" />
</Button>
</UniformGrid>
<StackPanel Margin="0,18,0,0"
Visibility="{Binding CanShowEffectControls, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Hazır efekt" />
<ComboBox x:Name="EffectsComboBox"
Margin="0,10,0,0"
Style="{StaticResource EffectComboBoxStyle}"
ItemTemplate="{StaticResource EffectOptionTemplate}"
ItemsSource="{Binding Effects}"
SelectedValuePath="PatternId"
SelectedValue="{Binding State.SelectedEffectId}"
SelectionChanged="EffectChanged"
IsEnabled="{Binding CanUseControls}" />
</StackPanel>
<StackPanel Margin="0,18,0,0"
Visibility="{Binding CanShowEffectSpeed, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Efekt hızı" />
<DockPanel Margin="0,6,0,0">
<TextBlock DockPanel.Dock="Right"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.EffectSpeedLabel}" />
</DockPanel>
<Slider x:Name="EffectSpeedSlider"
Minimum="0"
Maximum="100"
TickFrequency="5"
Value="{Binding State.EffectSpeed}"
IsEnabled="{Binding CanUseControls}"
LostMouseCapture="EffectSpeedCommitLostMouseCapture"
PreviewKeyUp="EffectSpeedCommitKeyUp"
PreviewMouseLeftButtonUp="EffectSpeedCommitMouseUp"
ValueChanged="EffectSpeedChanged" />
</StackPanel>
<StackPanel Margin="0,18,0,0"
Visibility="{Binding CanShowGrayscaleControls, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Gri ton" />
<DockPanel Margin="0,6,0,0">
<TextBlock DockPanel.Dock="Right"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.GrayscaleLabel}" />
</DockPanel>
<Slider x:Name="GrayscaleSlider"
Minimum="0"
Maximum="100"
TickFrequency="5"
Value="{Binding State.GrayscaleLevel}"
IsEnabled="{Binding CanUseControls}"
LostMouseCapture="GrayscaleCommitLostMouseCapture"
PreviewKeyUp="GrayscaleCommitKeyUp"
PreviewMouseLeftButtonUp="GrayscaleCommitMouseUp"
ValueChanged="GrayscaleChanged" />
</StackPanel>
<StackPanel Margin="0,18,0,0"
Visibility="{Binding CanShowTemperatureControls, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Beyaz sıcaklığı" />
<DockPanel Margin="0,6,0,0">
<TextBlock DockPanel.Dock="Right"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.TemperatureLabel}" />
</DockPanel>
<Slider x:Name="TemperatureSlider"
Minimum="0"
Maximum="100"
TickFrequency="5"
Value="{Binding State.TemperatureLevel}"
IsEnabled="{Binding CanUseControls}"
LostMouseCapture="TemperatureCommitLostMouseCapture"
PreviewKeyUp="TemperatureCommitKeyUp"
PreviewMouseLeftButtonUp="TemperatureCommitMouseUp"
ValueChanged="TemperatureChanged" />
<UniformGrid Margin="0,14,0,0"
Columns="3">
<Button Margin="0,0,8,0"
Tag="0"
Click="TemperaturePresetClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="12" Text="Soğuk" />
</Button>
<Button Margin="0,0,8,0"
Tag="50"
Click="TemperaturePresetClicked"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="12" Text="Doğal" />
</Button>
<Button Click="TemperaturePresetClicked"
Tag="100"
IsEnabled="{Binding CanUseControls}">
<TextBlock FontSize="12" Text="Sıcak" />
</Button>
</UniformGrid>
</StackPanel>
<TextBlock Margin="0,20,0,0"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="Durum" />
<TextBlock Margin="0,8,0,0"
FontSize="15"
FontWeight="SemiBold"
Text="{Binding State.StatusText}"
TextWrapping="Wrap" />
</StackPanel>
</Border>
</Grid>
</Border>
</Grid>
</Grid>
<Border Grid.Row="4"
Padding="14,12"
Background="#99111822"
BorderBrush="#18FFFFFF"
BorderThickness="1"
CornerRadius="14">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="16" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="16" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}">
<Run Text="Made by " />
<Hyperlink NavigateUri="https://fristy.net"
RequestNavigate="FooterLinkClicked">
<Run Text="@fristyxd" />
</Hyperlink>
</TextBlock>
<StackPanel Grid.Column="2"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center"
FontSize="12"
FontWeight="SemiBold"
Text="{Binding VersionDisplay}" />
<TextBlock Margin="0,4,0,0"
HorizontalAlignment="Center"
FontSize="12"
Foreground="{StaticResource MutedTextBrush}"
Text="{Binding UpdateStatusText}"
TextWrapping="Wrap" />
</StackPanel>
<Button Grid.Column="4"
Click="CheckForUpdatesClicked"
IsEnabled="{Binding CanCheckForUpdates}">
<TextBlock FontSize="13"
Text="{Binding UpdateButtonLabel}" />
</Button>
</Grid>
</Border>
</Grid>
</Border>
</Window>