- 일반 설정의 AX Commander 섹션에 성능, 포모도로, 메모, 날씨, 일정, 배터리 위젯 표시 토글을 추가 - 런처 하단의 Ollama, API, MCP 서버 상태 위젯을 완전히 제거하고 남은 위젯만 설정값 기준으로 표시되도록 정리 - 배터리 위젯은 실제 배터리 가용 상태와 사용자 토글을 함께 반영하고 위젯이 모두 꺼지면 하단 바 전체를 숨기도록 조정 - README와 DEVELOPMENT 문서를 2026-04-05 15:16 (KST) 기준으로 갱신하고 dotnet build 검증에서 경고 0 오류 0 확인
This commit is contained in:
@@ -201,6 +201,24 @@ public class LauncherSettings
|
||||
[JsonPropertyName("showLauncherBorder")]
|
||||
public bool ShowLauncherBorder { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetPerf")]
|
||||
public bool ShowWidgetPerf { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetPomo")]
|
||||
public bool ShowWidgetPomo { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetNote")]
|
||||
public bool ShowWidgetNote { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetWeather")]
|
||||
public bool ShowWidgetWeather { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetCalendar")]
|
||||
public bool ShowWidgetCalendar { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("showWidgetBattery")]
|
||||
public bool ShowWidgetBattery { get; set; } = true;
|
||||
|
||||
/// <summary>단축키 헬프 창에서 아이콘 색상을 테마 AccentColor 기준으로 표시. 기본 true(테마색).</summary>
|
||||
[JsonPropertyName("shortcutHelpUseThemeColor")]
|
||||
public bool ShortcutHelpUseThemeColor { get; set; } = true;
|
||||
|
||||
@@ -160,12 +160,19 @@ public class SettingsViewModel : INotifyPropertyChanged
|
||||
private bool _enableRecent;
|
||||
private bool _enableActionMode;
|
||||
private bool _closeOnFocusLost;
|
||||
private bool _rememberPosition;
|
||||
private bool _showPrefixBadge;
|
||||
private bool _enableIconAnimation;
|
||||
private bool _enableRainbowGlow;
|
||||
private bool _enableSelectionGlow;
|
||||
private bool _enableRandomPlaceholder;
|
||||
private bool _showLauncherBorder;
|
||||
private bool _showWidgetPerf;
|
||||
private bool _showWidgetPomo;
|
||||
private bool _showWidgetNote;
|
||||
private bool _showWidgetWeather;
|
||||
private bool _showWidgetCalendar;
|
||||
private bool _showWidgetBattery;
|
||||
private bool _shortcutHelpUseThemeColor;
|
||||
|
||||
// LLM 공통 설정
|
||||
@@ -755,12 +762,54 @@ public class SettingsViewModel : INotifyPropertyChanged
|
||||
set { _closeOnFocusLost = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool RememberPosition
|
||||
{
|
||||
get => _rememberPosition;
|
||||
set { _rememberPosition = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowPrefixBadge
|
||||
{
|
||||
get => _showPrefixBadge;
|
||||
set { _showPrefixBadge = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetPerf
|
||||
{
|
||||
get => _showWidgetPerf;
|
||||
set { _showWidgetPerf = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetPomo
|
||||
{
|
||||
get => _showWidgetPomo;
|
||||
set { _showWidgetPomo = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetNote
|
||||
{
|
||||
get => _showWidgetNote;
|
||||
set { _showWidgetNote = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetWeather
|
||||
{
|
||||
get => _showWidgetWeather;
|
||||
set { _showWidgetWeather = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetCalendar
|
||||
{
|
||||
get => _showWidgetCalendar;
|
||||
set { _showWidgetCalendar = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool ShowWidgetBattery
|
||||
{
|
||||
get => _showWidgetBattery;
|
||||
set { _showWidgetBattery = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public bool EnableIconAnimation
|
||||
{
|
||||
get => _enableIconAnimation;
|
||||
@@ -1030,12 +1079,19 @@ public class SettingsViewModel : INotifyPropertyChanged
|
||||
_enableRecent = s.Launcher.EnableRecent;
|
||||
_enableActionMode = s.Launcher.EnableActionMode;
|
||||
_closeOnFocusLost = s.Launcher.CloseOnFocusLost;
|
||||
_rememberPosition = s.Launcher.RememberPosition;
|
||||
_showPrefixBadge = s.Launcher.ShowPrefixBadge;
|
||||
_enableIconAnimation = s.Launcher.EnableIconAnimation;
|
||||
_enableRainbowGlow = s.Launcher.EnableRainbowGlow;
|
||||
_enableSelectionGlow = s.Launcher.EnableSelectionGlow;
|
||||
_enableRandomPlaceholder = s.Launcher.EnableRandomPlaceholder;
|
||||
_showLauncherBorder = s.Launcher.ShowLauncherBorder;
|
||||
_showWidgetPerf = s.Launcher.ShowWidgetPerf;
|
||||
_showWidgetPomo = s.Launcher.ShowWidgetPomo;
|
||||
_showWidgetNote = s.Launcher.ShowWidgetNote;
|
||||
_showWidgetWeather = s.Launcher.ShowWidgetWeather;
|
||||
_showWidgetCalendar = s.Launcher.ShowWidgetCalendar;
|
||||
_showWidgetBattery = s.Launcher.ShowWidgetBattery;
|
||||
_shortcutHelpUseThemeColor = s.Launcher.ShortcutHelpUseThemeColor;
|
||||
_enableTextAction = s.Launcher.EnableTextAction;
|
||||
// v1.7.1: 파일 대화상자 통합 기본값을 false로 변경 (브라우저 업로드 오작동 방지)
|
||||
@@ -1476,12 +1532,19 @@ public class SettingsViewModel : INotifyPropertyChanged
|
||||
s.Launcher.EnableRecent = _enableRecent;
|
||||
s.Launcher.EnableActionMode = _enableActionMode;
|
||||
s.Launcher.CloseOnFocusLost = _closeOnFocusLost;
|
||||
s.Launcher.RememberPosition = _rememberPosition;
|
||||
s.Launcher.ShowPrefixBadge = _showPrefixBadge;
|
||||
s.Launcher.EnableIconAnimation = _enableIconAnimation;
|
||||
s.Launcher.EnableRainbowGlow = _enableRainbowGlow;
|
||||
s.Launcher.EnableSelectionGlow = _enableSelectionGlow;
|
||||
s.Launcher.EnableRandomPlaceholder = _enableRandomPlaceholder;
|
||||
s.Launcher.ShowLauncherBorder = _showLauncherBorder;
|
||||
s.Launcher.ShowWidgetPerf = _showWidgetPerf;
|
||||
s.Launcher.ShowWidgetPomo = _showWidgetPomo;
|
||||
s.Launcher.ShowWidgetNote = _showWidgetNote;
|
||||
s.Launcher.ShowWidgetWeather = _showWidgetWeather;
|
||||
s.Launcher.ShowWidgetCalendar = _showWidgetCalendar;
|
||||
s.Launcher.ShowWidgetBattery = _showWidgetBattery;
|
||||
s.Launcher.ShortcutHelpUseThemeColor = _shortcutHelpUseThemeColor;
|
||||
s.Launcher.EnableTextAction = _enableTextAction;
|
||||
s.Launcher.EnableFileDialogIntegration = _enableFileDialogIntegration;
|
||||
|
||||
@@ -8,24 +8,17 @@ namespace AxCopilot.Views;
|
||||
public partial class LauncherWindow
|
||||
{
|
||||
private DispatcherTimer? _widgetTimer;
|
||||
private static readonly SolidColorBrush DotOnline = new(Color.FromRgb(0x10, 0xB9, 0x81));
|
||||
private static readonly SolidColorBrush DotOffline = new(Color.FromRgb(0x9E, 0x9E, 0x9E));
|
||||
private int _widgetBatteryTick;
|
||||
private int _widgetWeatherTick;
|
||||
|
||||
internal void StartWidgetUpdates()
|
||||
{
|
||||
var settings = CurrentApp?.SettingsService?.Settings;
|
||||
|
||||
PerformanceMonitorService.Instance.StartPolling();
|
||||
ServerStatusService.Instance.Start(settings);
|
||||
PomodoroService.Instance.StateChanged -= OnPomoStateChanged;
|
||||
PomodoroService.Instance.StateChanged += OnPomoStateChanged;
|
||||
ServerStatusService.Instance.StatusChanged -= OnServerStatusChanged;
|
||||
ServerStatusService.Instance.StatusChanged += OnServerStatusChanged;
|
||||
|
||||
_vm.UpdateWidgets();
|
||||
UpdateServerDots();
|
||||
UpdateWidgetVisibility();
|
||||
UpdateBatteryWidget();
|
||||
_ = RefreshWeatherAsync();
|
||||
|
||||
@@ -38,7 +31,7 @@ public partial class LauncherWindow
|
||||
_widgetTimer.Tick += (_, _) =>
|
||||
{
|
||||
_vm.UpdateWidgets();
|
||||
UpdateServerDots();
|
||||
UpdateWidgetVisibility();
|
||||
if (_vm.Widget_PerfText.Length > 0 && _widgetBatteryTick++ % 30 == 0)
|
||||
UpdateBatteryWidget();
|
||||
if (_widgetWeatherTick++ % 120 == 0)
|
||||
@@ -55,7 +48,6 @@ public partial class LauncherWindow
|
||||
_widgetTimer?.Stop();
|
||||
PerformanceMonitorService.Instance.StopPolling();
|
||||
PomodoroService.Instance.StateChanged -= OnPomoStateChanged;
|
||||
ServerStatusService.Instance.StatusChanged -= OnServerStatusChanged;
|
||||
}
|
||||
|
||||
private void OnPomoStateChanged(object? sender, EventArgs e)
|
||||
@@ -64,23 +56,10 @@ public partial class LauncherWindow
|
||||
{
|
||||
_vm.UpdateWidgets();
|
||||
UpdatePomoWidgetStyle();
|
||||
UpdateWidgetVisibility();
|
||||
});
|
||||
}
|
||||
|
||||
private void OnServerStatusChanged(object? sender, EventArgs e)
|
||||
=> Dispatcher.InvokeAsync(UpdateServerDots);
|
||||
|
||||
private void UpdateServerDots()
|
||||
{
|
||||
var server = ServerStatusService.Instance;
|
||||
if (OllamaStatusDot != null)
|
||||
OllamaStatusDot.Fill = server.OllamaOnline ? DotOnline : DotOffline;
|
||||
if (LlmStatusDot != null)
|
||||
LlmStatusDot.Fill = server.LlmOnline ? DotOnline : DotOffline;
|
||||
if (McpStatusDot != null)
|
||||
McpStatusDot.Fill = server.McpOnline ? DotOnline : DotOffline;
|
||||
}
|
||||
|
||||
private void UpdatePomoWidgetStyle()
|
||||
{
|
||||
if (WgtPomo == null)
|
||||
@@ -92,6 +71,37 @@ public partial class LauncherWindow
|
||||
: new SolidColorBrush(Color.FromArgb(0x0D, 0xF5, 0x9E, 0x0B));
|
||||
}
|
||||
|
||||
private void UpdateWidgetVisibility()
|
||||
{
|
||||
var launcher = CurrentApp?.SettingsService?.Settings?.Launcher;
|
||||
if (launcher == null)
|
||||
return;
|
||||
|
||||
if (WgtPerf != null)
|
||||
WgtPerf.Visibility = launcher.ShowWidgetPerf ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (WgtPomo != null)
|
||||
WgtPomo.Visibility = launcher.ShowWidgetPomo ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (WgtNote != null)
|
||||
WgtNote.Visibility = launcher.ShowWidgetNote ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (WgtWeather != null)
|
||||
WgtWeather.Visibility = launcher.ShowWidgetWeather ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (WgtCal != null)
|
||||
WgtCal.Visibility = launcher.ShowWidgetCalendar ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (WgtBattery != null)
|
||||
WgtBattery.Visibility = launcher.ShowWidgetBattery && _vm.Widget_BatteryVisible ? Visibility.Visible : Visibility.Collapsed;
|
||||
|
||||
var hasAny =
|
||||
launcher.ShowWidgetPerf ||
|
||||
launcher.ShowWidgetPomo ||
|
||||
launcher.ShowWidgetNote ||
|
||||
launcher.ShowWidgetWeather ||
|
||||
launcher.ShowWidgetCalendar ||
|
||||
(launcher.ShowWidgetBattery && _vm.Widget_BatteryVisible);
|
||||
|
||||
if (WidgetBar != null)
|
||||
WidgetBar.Visibility = hasAny ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void WgtPerf_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
_vm.InputText = "info ";
|
||||
@@ -110,14 +120,6 @@ public partial class LauncherWindow
|
||||
InputBox?.Focus();
|
||||
}
|
||||
|
||||
private void WgtServer_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
var settings = CurrentApp?.SettingsService?.Settings;
|
||||
ServerStatusService.Instance.Refresh(settings);
|
||||
_vm.InputText = "port";
|
||||
InputBox?.Focus();
|
||||
}
|
||||
|
||||
private void WgtWeather_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
var internalMode = CurrentApp?.SettingsService?.Settings.InternalModeEnabled ?? true;
|
||||
@@ -153,7 +155,7 @@ public partial class LauncherWindow
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogService.Warn($"달력 열기 실패: {ex.Message}");
|
||||
LogService.Warn($"일정 열기 실패: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -179,6 +181,7 @@ public partial class LauncherWindow
|
||||
if (pct > 1.0f || pct < 0f)
|
||||
{
|
||||
_vm.Widget_BatteryVisible = false;
|
||||
UpdateWidgetVisibility();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -192,11 +195,13 @@ public partial class LauncherWindow
|
||||
: pctInt >= 50 ? "\uEBA3"
|
||||
: pctInt >= 25 ? "\uEBA1"
|
||||
: "\uEBA0";
|
||||
UpdateWidgetVisibility();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogService.Warn($"배터리 위젯 갱신 실패: {ex.Message}");
|
||||
LogService.Warn($"배터리 상태 갱신 실패: {ex.Message}");
|
||||
_vm.Widget_BatteryVisible = false;
|
||||
UpdateWidgetVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,6 +209,10 @@ public partial class LauncherWindow
|
||||
{
|
||||
var internalMode = CurrentApp?.SettingsService?.Settings.InternalModeEnabled ?? true;
|
||||
await WeatherWidgetService.RefreshAsync(internalMode);
|
||||
await Dispatcher.InvokeAsync(() => { _vm.Widget_WeatherText = WeatherWidgetService.CachedText; });
|
||||
await Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
_vm.Widget_WeatherText = WeatherWidgetService.CachedText;
|
||||
UpdateWidgetVisibility();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -793,14 +793,13 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="6"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="6"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border x:Name="WgtPerf" Grid.Column="0"
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0D60A5FA"
|
||||
Cursor="Hand"
|
||||
Visibility="{Binding ShowWidgetPerf, Converter={StaticResource BoolToVisibilityConverter}}"
|
||||
MouseLeftButtonUp="WgtPerf_Click">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text=""
|
||||
@@ -818,6 +817,7 @@
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0DF59E0B"
|
||||
Cursor="Hand"
|
||||
Visibility="{Binding ShowWidgetPomo, Converter={StaticResource BoolToVisibilityConverter}}"
|
||||
MouseLeftButtonUp="WgtPomo_Click">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text=""
|
||||
@@ -836,6 +836,7 @@
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0D8B5CF6"
|
||||
Cursor="Hand"
|
||||
Visibility="{Binding ShowWidgetNote, Converter={StaticResource BoolToVisibilityConverter}}"
|
||||
MouseLeftButtonUp="WgtNote_Click">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text=""
|
||||
@@ -849,39 +850,6 @@
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border x:Name="WgtServer" Grid.Column="6"
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0D10B981"
|
||||
Cursor="Hand"
|
||||
MouseLeftButtonUp="WgtServer_Click">
|
||||
<StackPanel Orientation="Horizontal" x:Name="WgtServerContent">
|
||||
<Ellipse x:Name="OllamaStatusDot"
|
||||
Width="6" Height="6"
|
||||
Fill="#9E9E9E"
|
||||
VerticalAlignment="Center" Margin="0,0,3,0"/>
|
||||
<TextBlock Text="Ollama"
|
||||
FontSize="10"
|
||||
Foreground="{DynamicResource SecondaryText}"
|
||||
VerticalAlignment="Center" Margin="0,0,8,0"/>
|
||||
<Ellipse x:Name="LlmStatusDot"
|
||||
Width="6" Height="6"
|
||||
Fill="#9E9E9E"
|
||||
VerticalAlignment="Center" Margin="0,0,3,0"/>
|
||||
<TextBlock Text="API"
|
||||
FontSize="10"
|
||||
Foreground="{DynamicResource SecondaryText}"
|
||||
VerticalAlignment="Center" Margin="0,0,8,0"/>
|
||||
<Ellipse x:Name="McpStatusDot"
|
||||
Width="6" Height="6"
|
||||
Fill="#9E9E9E"
|
||||
VerticalAlignment="Center" Margin="0,0,3,0"/>
|
||||
<TextBlock x:Name="McpNameText"
|
||||
Text="{Binding Widget_McpName}"
|
||||
FontSize="10"
|
||||
Foreground="{DynamicResource SecondaryText}"
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Margin="0,4,0,0">
|
||||
@@ -897,6 +865,7 @@
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0D3B82F6"
|
||||
Cursor="Hand"
|
||||
Visibility="{Binding ShowWidgetWeather, Converter={StaticResource BoolToVisibilityConverter}}"
|
||||
MouseLeftButtonUp="WgtWeather_Click">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text=""
|
||||
@@ -916,6 +885,7 @@
|
||||
CornerRadius="5" Padding="8,5"
|
||||
Background="#0DEC4899"
|
||||
Cursor="Hand"
|
||||
Visibility="{Binding ShowWidgetCalendar, Converter={StaticResource BoolToVisibilityConverter}}"
|
||||
MouseLeftButtonUp="WgtCal_Click">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text=""
|
||||
@@ -934,7 +904,7 @@
|
||||
Background="#0D10B981"
|
||||
Cursor="Hand"
|
||||
MouseLeftButtonUp="WgtBattery_Click"
|
||||
Visibility="{Binding Widget_BatteryVisible, Converter={StaticResource BoolToVisibilityConverter}}">
|
||||
Visibility="Collapsed">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding Widget_BatteryIcon}"
|
||||
FontFamily="Segoe MDL2 Assets" FontSize="10"
|
||||
|
||||
@@ -121,10 +121,13 @@
|
||||
<Setter Property="HasDropShadow" Value="False"/>
|
||||
<Setter Property="MaxWidth" Value="320"/>
|
||||
<Setter Property="Placement" Value="Bottom"/>
|
||||
<Setter Property="Background" Value="#1F2440"/>
|
||||
<Setter Property="Foreground" Value="White"/>
|
||||
<Setter Property="TextElement.Foreground" Value="White"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ToolTip">
|
||||
<Border Background="{DynamicResource LauncherBackground}" CornerRadius="10" Padding="14,10"
|
||||
<Border Background="{TemplateBinding Background}" CornerRadius="10" Padding="14,10"
|
||||
BorderBrush="{DynamicResource AccentColor}" BorderThickness="1">
|
||||
<ContentPresenter/>
|
||||
</Border>
|
||||
@@ -546,6 +549,7 @@
|
||||
<!-- 탭 컨트롤 (좌측 사이드바) -->
|
||||
<!-- ══════════════════════════════════════════════════════════════════ -->
|
||||
<TabControl x:Name="MainSettingsTab" Grid.Row="0" TabStripPlacement="Left"
|
||||
SelectionChanged="MainSettingsTab_SelectionChanged"
|
||||
Background="Transparent" BorderThickness="0">
|
||||
<TabControl.Template>
|
||||
<ControlTemplate TargetType="TabControl">
|
||||
@@ -656,58 +660,6 @@
|
||||
<ScrollViewer x:Name="GeneralMainPanel" Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel>
|
||||
|
||||
<TextBlock Text="AI 기능" Style="{StaticResource SectionHeader}" Visibility="Collapsed"/>
|
||||
<Border Style="{StaticResource SettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
|
||||
Background="#8B2FC9" Margin="0,0,14,0" VerticalAlignment="Center">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="17"
|
||||
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<StackPanel Grid.Column="1" VerticalAlignment="Center">
|
||||
<TextBlock Text="AX Agent (AI 기능) 활성화" Style="{StaticResource RowLabel}"/>
|
||||
<TextBlock Text="비활성화하면 ! 명령어가 차단되고 AX Agent 설정 메뉴가 숨겨집니다"
|
||||
Style="{StaticResource RowHint}"/>
|
||||
</StackPanel>
|
||||
<CheckBox x:Name="AiEnabledToggle"
|
||||
Grid.Column="2" Style="{StaticResource ToggleSwitch}"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
Checked="AiEnabled_Changed" Unchecked="AiEnabled_Changed"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
<Border Style="{StaticResource SettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="200"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
|
||||
Background="#2563EB" Margin="0,0,14,0" VerticalAlignment="Center">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="17"
|
||||
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<StackPanel Grid.Column="1" VerticalAlignment="Center">
|
||||
<TextBlock Text="운영 모드 (사내/사외)" Style="{StaticResource RowLabel}"/>
|
||||
<TextBlock Text="사내모드는 외부 검색/외부 HTTP 호출/외부 URL 열기를 차단합니다."
|
||||
Style="{StaticResource RowHint}"/>
|
||||
</StackPanel>
|
||||
<ComboBox x:Name="OperationModeCombo"
|
||||
Grid.Column="2"
|
||||
Width="200" Height="34"
|
||||
VerticalAlignment="Center"
|
||||
SelectionChanged="OperationModeCombo_SelectionChanged">
|
||||
<ComboBoxItem Tag="internal" Content="사내모드 (internal)"/>
|
||||
<ComboBoxItem Tag="external" Content="사외모드 (external)"/>
|
||||
</ComboBox>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="단축키" Style="{StaticResource SectionHeader}"/>
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
@@ -1155,6 +1107,20 @@
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem x:Name="AgentShortcutTabItem" Header="AX Agent" Tag="" Style="{StaticResource SideNavItem}">
|
||||
<Grid>
|
||||
<StackPanel VerticalAlignment="Top">
|
||||
<TextBlock Text="AX Agent 내부 설정 바로가기" Style="{StaticResource SectionHeader}" Margin="2,8,0,8"/>
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<StackPanel>
|
||||
<TextBlock Text="AX Agent 채팅창을 열고 내부 설정 오버레이를 바로 표시합니다."
|
||||
Style="{StaticResource RowHint}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<!-- ════════════════════════════════════════════════════════════ -->
|
||||
<!-- 2. 테마 탭 (테마 선택 + 색상 편집 합침) -->
|
||||
<!-- ════════════════════════════════════════════════════════════ -->
|
||||
@@ -3020,6 +2986,19 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="마지막 위치 기억"/>
|
||||
<TextBlock Style="{StaticResource RowHint}"
|
||||
Text="AX Commander를 닫은 위치를 기억하고 다음에 같은 위치에서 엽니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding RememberPosition, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- 액션 모드 -->
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
@@ -3065,6 +3044,74 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<TextBlock Style="{StaticResource SectionHeader}" Text="하단 위젯"/>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="성능 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="CPU, RAM, 저장 공간 요약을 하단 바에 표시합니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetPerf, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="포모도로 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="집중 타이머와 남은 시간을 런처 하단에 표시합니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetPomo, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="메모 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="최근 메모 상태를 하단 바에서 빠르게 확인합니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetNote, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="날씨 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="현재 날씨와 온도를 런처 하단에 표시합니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetWeather, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="일정 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="다가오는 일정 또는 날짜 요약을 하단 바에서 보여줍니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetCalendar, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="배터리 위젯 표시"/>
|
||||
<TextBlock Style="{StaticResource RowHint}" Text="노트북 배터리 잔량과 충전 상태를 하단 바에 표시합니다."/>
|
||||
</StackPanel>
|
||||
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||
IsChecked="{Binding ShowWidgetBattery, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
@@ -3365,7 +3412,7 @@
|
||||
<StackPanel x:Name="AgentCommonOverviewSection">
|
||||
|
||||
<TextBlock Style="{StaticResource SectionHeader}" Text="기본 상태"/>
|
||||
<Border Style="{StaticResource AgentSettingsRow}">
|
||||
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@@ -3384,7 +3431,7 @@
|
||||
Unchecked="AiEnabled_Changed"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
<Border Style="{StaticResource AgentSettingsRow}">
|
||||
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@@ -3409,7 +3456,7 @@
|
||||
</WrapPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
<Border Style="{StaticResource AgentSettingsRow}">
|
||||
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@@ -5669,17 +5716,6 @@
|
||||
<Button Content="불러오기" Style="{StaticResource SecondaryButton}"
|
||||
Click="ImportSettings_Click"
|
||||
FontSize="10" Padding="8,3"/>
|
||||
<Button Style="{StaticResource SecondaryButton}"
|
||||
Click="BtnAgentShortcut_Click"
|
||||
Margin="8,0,0,0"
|
||||
FontSize="10"
|
||||
Padding="10,4">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets"
|
||||
FontSize="11" Margin="0,0,5,0" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="AX Agent 설정" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<!-- 저장 / 취소 -->
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
|
||||
Reference in New Issue
Block a user