쿼리 편집기 — 목업 치수에 맞춤

앞선 커밋은 배치만 맞고 치수가 전반적으로 작았다. 목업과 나란히 놓고 재서 맞췄다.

창 1180×760 → 1440×960, 바깥 여백 16 → 26, 카드 안 여백 14 → 22, 카드 모서리 10 → 14.
제목 17 → 25, 대상 칩 여백·모서리 확대. 카드 제목 13.5 → 16.
툴바 글자 12.5 → 14, 항목 간격 18 → 32.
편집 글꼴 13.5 → 14.5, 줄번호 홈통 여백 확대.
결과 표 행 높이 30 → 40, 머리글 11.5 → 13, 본문 12 → 13.
치환 변수 열 430 → 500, 검색칸 높이 확대, 갈래 칩 13/여백 14,6/완전 둥글게,
목록 행 설명 12 → 14 · 속성명 10.5 → 12 · + 13 → 17, 행 간격 3 → 6.
하단 버튼 여백 확대.

회귀: 테스트 230/230, 편집 스모크 실패 0, 팝업·정렬·결과표·단축키 점검 16/16,
종이 렌더 P062 바이트 동일.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Msystech
2026-08-13 16:36:36 +09:00
co-authored by Claude Opus 5
parent 568fbdb0dd
commit a4acfe4469
@@ -2,7 +2,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctl="clr-namespace:SheetMe.Designer.Controls" xmlns:ctl="clr-namespace:SheetMe.Designer.Controls"
Title="쿼리 편집" Width="1180" Height="760" MinWidth="880" MinHeight="520" Title="쿼리 편집" Width="1440" Height="960" MinWidth="1060" MinHeight="640"
WindowStartupLocation="CenterOwner" ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ShowInTaskbar="False"
Style="{StaticResource ThemedWindow}"> Style="{StaticResource ThemedWindow}">
<Window.Resources> <Window.Resources>
@@ -11,23 +11,23 @@
<!-- 카드: 두 영역을 눈으로 갈라 준다 --> <!-- 카드: 두 영역을 눈으로 갈라 준다 -->
<Style x:Key="Card" TargetType="Border"> <Style x:Key="Card" TargetType="Border">
<Setter Property="CornerRadius" Value="10"/> <Setter Property="CornerRadius" Value="14"/>
<Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/> <Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/>
<Setter Property="Background" Value="{DynamicResource B.Surface}"/> <Setter Property="Background" Value="{DynamicResource B.Surface}"/>
</Style> </Style>
<Style x:Key="CardTitle" TargetType="TextBlock"> <Style x:Key="CardTitle" TargetType="TextBlock">
<Setter Property="FontSize" Value="13.5"/> <Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="SemiBold"/> <Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Foreground" Value="{DynamicResource B.Ink}"/> <Setter Property="Foreground" Value="{DynamicResource B.Ink}"/>
</Style> </Style>
<!-- 편집기 툴바 — 탭처럼 밑줄이 들어오는 글자 버튼 --> <!-- 편집기 툴바 — 탭처럼 밑줄이 들어오는 글자 버튼 -->
<Style x:Key="ToolBtn" TargetType="Button"> <Style x:Key="ToolBtn" TargetType="Button">
<Setter Property="Padding" Value="4,6"/> <Setter Property="Padding" Value="4,8"/>
<Setter Property="Margin" Value="0,0,18,0"/> <Setter Property="Margin" Value="0,0,32,0"/>
<Setter Property="FontSize" Value="12.5"/> <Setter Property="FontSize" Value="14"/>
<Setter Property="Cursor" Value="Hand"/> <Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="{DynamicResource B.Ink}"/> <Setter Property="Foreground" Value="{DynamicResource B.Ink}"/>
<Setter Property="Template"> <Setter Property="Template">
@@ -65,8 +65,8 @@
<Setter Property="IsReadOnly" Value="True"/> <Setter Property="IsReadOnly" Value="True"/>
<Setter Property="HeadersVisibility" Value="Column"/> <Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="GridLinesVisibility" Value="All"/> <Setter Property="GridLinesVisibility" Value="All"/>
<Setter Property="FontSize" Value="12"/> <Setter Property="FontSize" Value="13"/>
<Setter Property="RowHeight" Value="30"/> <Setter Property="RowHeight" Value="40"/>
<Setter Property="Background" Value="{DynamicResource B.Surface}"/> <Setter Property="Background" Value="{DynamicResource B.Surface}"/>
<Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/> <Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/>
<Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderThickness" Value="1"/>
@@ -78,7 +78,7 @@
<Setter Property="Background" Value="{DynamicResource B.Input}"/> <Setter Property="Background" Value="{DynamicResource B.Input}"/>
<Setter Property="Foreground" Value="{DynamicResource B.Ink}"/> <Setter Property="Foreground" Value="{DynamicResource B.Ink}"/>
<Setter Property="FontWeight" Value="SemiBold"/> <Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="11.5"/> <Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="10,7"/> <Setter Property="Padding" Value="10,7"/>
<Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/> <Setter Property="BorderBrush" Value="{DynamicResource B.InputBorder}"/>
<Setter Property="BorderThickness" Value="0,0,1,1"/> <Setter Property="BorderThickness" Value="0,0,1,1"/>
@@ -100,9 +100,9 @@
<!-- 갈래 칩 --> <!-- 갈래 칩 -->
<Style x:Key="BucketChip" TargetType="ToggleButton"> <Style x:Key="BucketChip" TargetType="ToggleButton">
<Setter Property="FontSize" Value="11.5"/> <Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="10,3"/> <Setter Property="Padding" Value="14,6"/>
<Setter Property="Margin" Value="0,0,6,0"/> <Setter Property="Margin" Value="0,0,8,0"/>
<Setter Property="Cursor" Value="Hand"/> <Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="{DynamicResource B.Ink}"/> <Setter Property="Foreground" Value="{DynamicResource B.Ink}"/>
<Setter Property="Template"> <Setter Property="Template">
@@ -136,16 +136,16 @@
<KeyBinding Key="F5" Command="{Binding TrialCommand}"/> <KeyBinding Key="F5" Command="{Binding TrialCommand}"/>
</Window.InputBindings> </Window.InputBindings>
<DockPanel Margin="16,14,16,14"> <DockPanel Margin="26,20,26,22">
<!-- ── 머리말 ── --> <!-- ── 머리말 ── -->
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,12"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,18">
<TextBlock x:Name="TitleTextBlock" Text="쿼리 편집" FontSize="17" FontWeight="Bold" <TextBlock x:Name="TitleTextBlock" Text="쿼리 편집" FontSize="25" FontWeight="Bold"
Foreground="{DynamicResource B.Ink}" VerticalAlignment="Center"/> Foreground="{DynamicResource B.Ink}" VerticalAlignment="Center"/>
<Border x:Name="TargetChip" CornerRadius="6" Padding="8,2" Margin="10,0,0,0" <Border x:Name="TargetChip" CornerRadius="8" Padding="11,4" Margin="14,2,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource B.Input}" BorderBrush="{DynamicResource B.InputBorder}" Background="{DynamicResource B.Input}" BorderBrush="{DynamicResource B.InputBorder}"
BorderThickness="1"> BorderThickness="1">
<TextBlock x:Name="TargetChipText" FontSize="11.5" FontFamily="D2Coding, 굴림체, Consolas" <TextBlock x:Name="TargetChipText" FontSize="13" FontFamily="D2Coding, 굴림체, Consolas"
Foreground="{DynamicResource B.AccentText}"/> Foreground="{DynamicResource B.AccentText}"/>
</Border> </Border>
</StackPanel> </StackPanel>
@@ -153,16 +153,16 @@
<!-- ── 아래 버튼 줄 ── --> <!-- ── 아래 버튼 줄 ── -->
<DockPanel DockPanel.Dock="Bottom" Margin="0,14,0,0"> <DockPanel DockPanel.Dock="Bottom" Margin="0,14,0,0">
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal"> <StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
<Button x:Name="TrialButton" Padding="16,8" Click="OnTrial" <Button x:Name="TrialButton" Padding="22,11" Click="OnTrial"
ToolTip="DB 에서 실제로 돌려 봅니다 (Ctrl+Enter 또는 F5). 조회만 실행되며 표본 몇 행만 가져옵니다."> ToolTip="DB 에서 실제로 돌려 봅니다 (Ctrl+Enter 또는 F5). 조회만 실행되며 표본 몇 행만 가져옵니다.">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="▶" FontSize="10" VerticalAlignment="Center" Margin="0,0,7,0"/> <TextBlock Text="▶" FontSize="10" VerticalAlignment="Center" Margin="0,0,7,0"/>
<TextBlock Text="검증 실행" VerticalAlignment="Center"/> <TextBlock Text="검증 실행" VerticalAlignment="Center"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Button Content="확인" Padding="30,8" Margin="10,0,0,0" <Button Content="확인" Padding="36,11" Margin="10,0,0,0"
Style="{StaticResource Primary}" Click="OnConfirm" IsDefault="True"/> Style="{StaticResource Primary}" Click="OnConfirm" IsDefault="True"/>
<Button Content="취소" Padding="26,8" Margin="10,0,0,0" IsCancel="True"/> <Button Content="취소" Padding="32,11" Margin="10,0,0,0" IsCancel="True"/>
</StackPanel> </StackPanel>
<TextBlock x:Name="ProblemText" VerticalAlignment="Center" Margin="16,0,0,0" <TextBlock x:Name="ProblemText" VerticalAlignment="Center" Margin="16,0,0,0"
Foreground="{DynamicResource B.Danger}" FontSize="11.5" Foreground="{DynamicResource B.Danger}" FontSize="11.5"
@@ -172,15 +172,15 @@
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition x:Name="SplitterColumn" Width="12"/> <ColumnDefinition x:Name="SplitterColumn" Width="18"/>
<ColumnDefinition x:Name="VariableColumn" Width="430"/> <ColumnDefinition x:Name="VariableColumn" Width="500"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- ══ SQL 편집기 카드 ══ --> <!-- ══ SQL 편집기 카드 ══ -->
<Border Grid.Column="0" Style="{StaticResource Card}"> <Border Grid.Column="0" Style="{StaticResource Card}">
<DockPanel Margin="14,12,14,12"> <DockPanel Margin="22,18,22,18">
<TextBlock DockPanel.Dock="Top" Text="SQL 편집기" Style="{StaticResource CardTitle}" <TextBlock DockPanel.Dock="Top" Text="SQL 편집기" Style="{StaticResource CardTitle}"
Margin="0,0,0,10"/> Margin="0,0,0,14"/>
<!-- 툴바 --> <!-- 툴바 -->
<DockPanel DockPanel.Dock="Top" Margin="0,0,0,10"> <DockPanel DockPanel.Dock="Top" Margin="0,0,0,10">
@@ -243,9 +243,9 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- 줄 번호 — 본문과 세로선으로 가른다(목업의 구분선) --> <!-- 줄 번호 — 본문과 세로선으로 가른다(목업의 구분선) -->
<Border Grid.Column="0" Background="{DynamicResource B.Surface}" Padding="12,10,10,10" <Border Grid.Column="0" Background="{DynamicResource B.Surface}" Padding="16,14,12,14"
BorderThickness="0,0,1,0" BorderBrush="{DynamicResource B.Line}"> BorderThickness="0,0,1,0" BorderBrush="{DynamicResource B.Line}">
<TextBlock x:Name="LineNumbers" FontFamily="D2Coding, 굴림체, Consolas" FontSize="13.5" <TextBlock x:Name="LineNumbers" FontFamily="D2Coding, 굴림체, Consolas" FontSize="14.5"
Foreground="{DynamicResource B.Muted}" TextAlignment="Right" MinWidth="20"/> Foreground="{DynamicResource B.Muted}" TextAlignment="Right" MinWidth="20"/>
</Border> </Border>
<Grid Grid.Column="1"> <Grid Grid.Column="1">
@@ -274,9 +274,9 @@
</Border> </Border>
</Popup> </Popup>
<TextBox x:Name="SqlBox" <TextBox x:Name="SqlBox"
FontFamily="D2Coding, 굴림체, Consolas" FontSize="13.5" FontFamily="D2Coding, 굴림체, Consolas" FontSize="14.5"
AcceptsReturn="True" AcceptsTab="False" AcceptsReturn="True" AcceptsTab="False"
TextWrapping="NoWrap" Padding="12,10" TextWrapping="NoWrap" Padding="14,14"
Background="Transparent" BorderThickness="0" Background="Transparent" BorderThickness="0"
Foreground="Transparent" Foreground="Transparent"
CaretBrush="{DynamicResource B.Ink}" CaretBrush="{DynamicResource B.Ink}"
@@ -295,21 +295,21 @@
<!-- ══ 치환 변수 카드 ══ --> <!-- ══ 치환 변수 카드 ══ -->
<Border x:Name="VariablePane" Grid.Column="2" Style="{StaticResource Card}"> <Border x:Name="VariablePane" Grid.Column="2" Style="{StaticResource Card}">
<DockPanel Margin="14,12,14,12"> <DockPanel Margin="22,18,22,18">
<TextBlock DockPanel.Dock="Top" Text="치환 변수" Style="{StaticResource CardTitle}" <TextBlock DockPanel.Dock="Top" Text="치환 변수" Style="{StaticResource CardTitle}"
Margin="0,0,0,10"/> Margin="0,0,0,14"/>
<!-- 검색: 돋보기를 겹쳐 둔다 — 빈 상자만 있으면 무엇을 하는 칸인지 안 읽힌다 --> <!-- 검색: 돋보기를 겹쳐 둔다 — 빈 상자만 있으면 무엇을 하는 칸인지 안 읽힌다 -->
<Grid DockPanel.Dock="Top" Margin="0,0,0,8"> <Grid DockPanel.Dock="Top" Margin="0,0,0,8">
<TextBox x:Name="VariableSearch" Padding="28,4,8,4" <TextBox x:Name="VariableSearch" Padding="36,9,10,9"
VerticalContentAlignment="Center" TextChanged="OnVariableSearchChanged" VerticalContentAlignment="Center" TextChanged="OnVariableSearchChanged"
AutomationProperties.Name="치환 변수 검색" AutomationProperties.Name="치환 변수 검색"
ToolTip="변수명·설명·초성으로 찾습니다 (예: ㅊㅌㅂㅎ → 차트번호)"/> ToolTip="변수명·설명·초성으로 찾습니다 (예: ㅊㅌㅂㅎ → 차트번호)"/>
<TextBlock Text="🔍" FontSize="11" Margin="9,0,0,0" IsHitTestVisible="False" <TextBlock Text="🔍" FontSize="13" Margin="13,0,0,0" IsHitTestVisible="False"
HorizontalAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center"
Foreground="{DynamicResource B.Muted}"/> Foreground="{DynamicResource B.Muted}"/>
<TextBlock x:Name="SearchPlaceholder" Text="변수명 또는 설명 검색" FontSize="11.5" <TextBlock x:Name="SearchPlaceholder" Text="변수명 또는 설명 검색" FontSize="13"
Margin="30,0,0,0" IsHitTestVisible="False" Margin="38,0,0,0" IsHitTestVisible="False"
HorizontalAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center"
Foreground="{DynamicResource B.Muted}"/> Foreground="{DynamicResource B.Muted}"/>
</Grid> </Grid>
@@ -335,7 +335,7 @@
<!-- 안내 --> <!-- 안내 -->
<ListBox x:Name="VariableList" FontSize="11.5" MouseDoubleClick="OnInsertVariable" <ListBox x:Name="VariableList" FontSize="13" MouseDoubleClick="OnInsertVariable"
KeyDown="OnVariableListKeyDown" KeyDown="OnVariableListKeyDown"
BorderThickness="0" Background="Transparent" BorderThickness="0" Background="Transparent"
HorizontalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"
@@ -343,21 +343,21 @@
AutomationProperties.Name="치환 변수 목록"> AutomationProperties.Name="치환 변수 목록">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<DockPanel Margin="0,3" ToolTip="{Binding Token}"> <DockPanel Margin="0,6" ToolTip="{Binding Token}">
<!-- ⊕ 로 바로 삽입 — 더블클릭을 모르는 사람도 넣을 수 있어야 한다 --> <!-- ⊕ 로 바로 삽입 — 더블클릭을 모르는 사람도 넣을 수 있어야 한다 -->
<Button DockPanel.Dock="Right" Width="22" Height="22" Padding="0" <Button DockPanel.Dock="Right" Width="26" Height="26" Padding="0"
Margin="8,0,0,0" Style="{StaticResource ToolBtn}" Margin="8,0,0,0" Style="{StaticResource ToolBtn}"
Content="" FontSize="13" Content="" FontSize="17"
Foreground="{DynamicResource B.AccentText}" Foreground="{DynamicResource B.AccentText}"
Command="{Binding DataContext.InsertCommand, Command="{Binding DataContext.InsertCommand,
RelativeSource={RelativeSource AncestorType=ListBox}}" RelativeSource={RelativeSource AncestorType=ListBox}}"
CommandParameter="{Binding}" CommandParameter="{Binding}"
ToolTip="커서 위치에 삽입"/> ToolTip="커서 위치에 삽입"/>
<TextBlock DockPanel.Dock="Right" Text="{Binding ShortForm}" <TextBlock DockPanel.Dock="Right" Text="{Binding ShortForm}"
Foreground="{DynamicResource B.Muted}" FontSize="10.5" Foreground="{DynamicResource B.Muted}" FontSize="12"
FontFamily="D2Coding, 굴림체, Consolas" FontFamily="D2Coding, 굴림체, Consolas"
VerticalAlignment="Center" Margin="8,0,0,0"/> VerticalAlignment="Center" Margin="8,0,0,0"/>
<TextBlock Text="{Binding Description}" FontFamily="Segoe UI, 맑은 고딕" FontSize="12" <TextBlock Text="{Binding Description}" FontFamily="Segoe UI, 맑은 고딕" FontSize="14"
TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/> TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/>
</DockPanel> </DockPanel>
</DataTemplate> </DataTemplate>
@@ -377,11 +377,11 @@
<Border DockPanel.Dock="Right" CornerRadius="9" Padding="6,1" <Border DockPanel.Dock="Right" CornerRadius="9" Padding="6,1"
VerticalAlignment="Center" Margin="6,0,0,0" VerticalAlignment="Center" Margin="6,0,0,0"
Background="{DynamicResource B.Input}"> Background="{DynamicResource B.Input}">
<TextBlock Text="{Binding ItemCount}" FontSize="10" <TextBlock Text="{Binding ItemCount}" FontSize="12"
Foreground="{DynamicResource B.Muted}"/> Foreground="{DynamicResource B.Muted}"/>
</Border> </Border>
<TextBlock Text="{Binding Name}" FontWeight="SemiBold" <TextBlock Text="{Binding Name}" FontWeight="SemiBold"
FontFamily="Segoe UI, 맑은 고딕" FontSize="12"/> FontFamily="Segoe UI, 맑은 고딕" FontSize="14"/>
</DockPanel> </DockPanel>
</Expander.Header> </Expander.Header>
<ItemsPresenter Margin="8,2,0,6"/> <ItemsPresenter Margin="8,2,0,6"/>