Skip to content
This repository was archived by the owner on Nov 27, 2024. It is now read-only.

Commit e56a7b6

Browse files
committed
Shift+Enter support for prompt TextBoxes
1 parent 60e1123 commit e56a7b6

File tree

5 files changed

+105
-23
lines changed

5 files changed

+105
-23
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using System;
2+
using System.Windows;
3+
using System.Windows.Controls;
4+
using System.Windows.Input;
5+
6+
namespace OnnxStack.UI.Behaviors
7+
{
8+
/// <summary>
9+
/// Behaviour to use Shift + Enfer to add a new line to a TextBox allowing IsDefault Commands to be fired on Enter
10+
/// </summary>
11+
public class ShiftEnterBehavior
12+
{
13+
14+
/// <summary>
15+
/// The enable property
16+
/// </summary>
17+
public static readonly DependencyProperty EnableProperty = DependencyProperty.RegisterAttached("Enable", typeof(bool), typeof(ShiftEnterBehavior), new PropertyMetadata(false, OnEnableChanged));
18+
19+
20+
/// <summary>
21+
/// Gets the enable value.
22+
/// </summary>
23+
/// <param name="obj">The object.</param>
24+
public static bool GetEnable(DependencyObject obj)
25+
{
26+
return (bool)obj.GetValue(EnableProperty);
27+
}
28+
29+
/// <summary>
30+
/// Sets the enable valse.
31+
/// </summary>
32+
/// <param name="obj">The object.</param>
33+
/// <param name="value">if set to <c>true</c> [value].</param>
34+
public static void SetEnable(DependencyObject obj, bool value)
35+
{
36+
obj.SetValue(EnableProperty, value);
37+
}
38+
39+
40+
/// <summary>
41+
/// Called when enable changed.
42+
/// </summary>
43+
/// <param name="obj">The object.</param>
44+
/// <param name="e">The <see cref="DependencyPropertyChangedEventArgs"/> instance containing the event data.</param>
45+
private static void OnEnableChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
46+
{
47+
if (obj is TextBox textBox)
48+
{
49+
bool attach = (bool)e.NewValue;
50+
51+
if (attach)
52+
{
53+
textBox.PreviewKeyDown += TextBox_PreviewKeyDown;
54+
}
55+
else
56+
{
57+
textBox.PreviewKeyDown -= TextBox_PreviewKeyDown;
58+
}
59+
}
60+
}
61+
62+
63+
/// <summary>
64+
/// Handles the PreviewKeyDown event of the TextBox control.
65+
/// </summary>
66+
/// <param name="sender">The source of the event.</param>
67+
/// <param name="e">The <see cref="KeyEventArgs"/> instance containing the event data.</param>
68+
private static void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
69+
{
70+
if (e.Key == Key.Enter && Keyboard.Modifiers == ModifierKeys.Shift)
71+
{
72+
if (sender is TextBox textBox)
73+
{
74+
e.Handled = true;
75+
textBox.AppendText(Environment.NewLine);
76+
textBox.CaretIndex = textBox.Text.Length;
77+
}
78+
}
79+
}
80+
}
81+
}

OnnxStack.UI/UserControls/PromptControl.xaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
66
xmlns:local="clr-namespace:OnnxStack.UI.UserControls"
7+
xmlns:behaviors="clr-namespace:OnnxStack.UI.Behaviors"
78
mc:Ignorable="d"
89
d:DesignWidth="500" Name="UI">
910
<UserControl.Resources>
@@ -16,11 +17,11 @@
1617
<StackPanel DockPanel.Dock="Top">
1718
<StackPanel>
1819
<Label>Prompt</Label>
19-
<TextBox Text="{Binding PromptOptions.Prompt, UpdateSourceTrigger=PropertyChanged}" Height="100" TextWrapping="Wrap"/>
20+
<TextBox Text="{Binding PromptOptions.Prompt, UpdateSourceTrigger=PropertyChanged}" behaviors:ShiftEnterBehavior.Enable="True" Height="100" TextWrapping="Wrap"/>
2021
</StackPanel>
2122
<StackPanel>
2223
<Label>Negative Prompt</Label>
23-
<TextBox Text="{Binding PromptOptions.NegativePrompt}" Height="100" TextWrapping="Wrap"/>
24+
<TextBox Text="{Binding PromptOptions.NegativePrompt}" behaviors:ShiftEnterBehavior.Enable="True" Height="100" TextWrapping="Wrap"/>
2425
</StackPanel>
2526
<StackPanel>
2627
<Label>Scheduler</Label>

OnnxStack.UI/Views/ImageInpaint.xaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
Name="UI" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="800" >
99
<Grid DataContext="{Binding ElementName=UI}" >
1010
<Grid.ColumnDefinitions>
11-
<ColumnDefinition Width="340" />
12-
<ColumnDefinition Width="10" />
11+
<ColumnDefinition Width="360" />
12+
<ColumnDefinition Width="4" />
1313
<ColumnDefinition Width="*" />
1414
</Grid.ColumnDefinitions>
1515

1616
<!--Control Panel-->
17-
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3">
17+
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3,3,3,0">
1818
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Height="30">
19-
<Button Content="Cancel" Command="{Binding CancelCommand}" BorderThickness="1,1,0,1"/>
20-
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}"/>
19+
<Button Content="Cancel" Command="{Binding CancelCommand}" Margin="0,0,1,0"/>
20+
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}" IsDefault="True" Margin="1,0,0,0"/>
2121
</UniformGrid>
2222
<DockPanel>
2323
<StackPanel IsEnabled="{Binding IsGenerating, Converter={StaticResource InverseBoolConverter}}">
@@ -38,10 +38,10 @@
3838
</DockPanel>
3939
</DockPanel>
4040

41-
<GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Stretch" />
41+
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Width="4"/>
4242

4343
<!--Content Panel-->
44-
<DockPanel Grid.Column="2" >
44+
<DockPanel Grid.Column="2" Margin="3,0,0,0">
4545

4646
<!--Generate Tab-->
4747
<TabControl SelectedIndex="{Binding SelectedTabIndex}">

OnnxStack.UI/Views/ImageToImage.xaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
Name="UI" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="800" >
99
<Grid DataContext="{Binding ElementName=UI}" >
1010
<Grid.ColumnDefinitions>
11-
<ColumnDefinition Width="340" />
12-
<ColumnDefinition Width="10" />
11+
<ColumnDefinition Width="360" />
12+
<ColumnDefinition Width="4" />
1313
<ColumnDefinition Width="*" />
1414
</Grid.ColumnDefinitions>
1515

1616
<!--Control Panel-->
17-
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3">
17+
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3,3,3,0">
1818
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Height="30">
19-
<Button Content="Cancel" Command="{Binding CancelCommand}" BorderThickness="1,1,0,1"/>
20-
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}"/>
19+
<Button Content="Cancel" Command="{Binding CancelCommand}" Margin="0,0,1,0"/>
20+
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}" IsDefault="True" Margin="1,0,0,0"/>
2121
</UniformGrid>
2222
<DockPanel>
2323
<StackPanel IsEnabled="{Binding IsGenerating, Converter={StaticResource InverseBoolConverter}}">
@@ -38,10 +38,10 @@
3838
</DockPanel>
3939
</DockPanel>
4040

41-
<GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Stretch" />
41+
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Width="4"/>
4242

4343
<!--Content Panel-->
44-
<DockPanel Grid.Column="2" >
44+
<DockPanel Grid.Column="2" Margin="3,0,0,0">
4545

4646
<!--Generate Tab-->
4747
<TabControl SelectedIndex="{Binding SelectedTabIndex}">

OnnxStack.UI/Views/TextToImage.xaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
Name="UI" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="800" >
99
<Grid DataContext="{Binding ElementName=UI}" >
1010
<Grid.ColumnDefinitions>
11-
<ColumnDefinition Width="340" />
12-
<ColumnDefinition Width="10" />
11+
<ColumnDefinition Width="360" />
12+
<ColumnDefinition Width="4" />
1313
<ColumnDefinition Width="*" />
1414
</Grid.ColumnDefinitions>
1515

1616
<!--Control Panel-->
17-
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3">
17+
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3,3,3,0">
1818
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Height="30">
19-
<Button Content="Cancel" Command="{Binding CancelCommand}" BorderThickness="1,1,0,1"/>
20-
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}"/>
19+
<Button Content="Cancel" Command="{Binding CancelCommand}" Margin="0,0,1,0"/>
20+
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}" IsDefault="True" Margin="1,0,0,0"/>
2121
</UniformGrid>
2222
<DockPanel>
2323
<StackPanel IsEnabled="{Binding IsGenerating, Converter={StaticResource InverseBoolConverter}}">
@@ -36,10 +36,10 @@
3636
</DockPanel>
3737
</DockPanel>
3838

39-
<GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Stretch" />
39+
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Width="4" />
4040

4141
<!--Content Panel-->
42-
<DockPanel Grid.Column="2" >
42+
<DockPanel Grid.Column="2" Margin="3,0,0,0">
4343

4444
<!--Generate Tab-->
4545
<TabControl SelectedIndex="{Binding SelectedTabIndex}">

0 commit comments

Comments
 (0)