Skip to content

Commit c0afb49

Browse files
authored
Merge pull request #443 from Flow-Launcher/WebSearchUIImprovement
WebSearch UI Improvement
2 parents a451f78 + 117402d commit c0afb49

File tree

3 files changed

+123
-6
lines changed

3 files changed

+123
-6
lines changed

Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@
1313
<Setter Property="Height" Value="28"/>
1414
<Setter Property="VerticalContentAlignment" Value="Center"/>
1515
</Style>
16+
<DataTemplate x:Key="HeaderTemplateArrowUp">
17+
<DockPanel>
18+
<TextBlock HorizontalAlignment="Center" Text="{Binding}"/>
19+
<Path x:Name="arrow"
20+
StrokeThickness = "1"
21+
Fill = "gray"
22+
Data = "M 5,10 L 15,10 L 10,5 L 5,10"/>
23+
</DockPanel>
24+
</DataTemplate>
25+
<DataTemplate x:Key="HeaderTemplateArrowDown">
26+
<DockPanel>
27+
<TextBlock HorizontalAlignment="Center" Text="{Binding }"/>
28+
<Path x:Name="arrow"
29+
StrokeThickness = "1"
30+
Fill = "gray"
31+
Data = "M 5,5 L 10,10 L 15,5 L 5,5"/>
32+
</DockPanel>
33+
</DataTemplate>
1634
</UserControl.Resources>
1735
<Grid Margin="15 0 0 0">
1836
<Grid.RowDefinitions>
@@ -47,23 +65,40 @@
4765
</StackPanel>
4866
<ListView ItemsSource="{Binding Settings.SearchSources}"
4967
SelectedItem="{Binding Settings.SelectedSearchSource}"
68+
x:Name="SearchSourcesListView"
69+
5070
Grid.Row="3"
5171
Style="{StaticResource {x:Static GridView.GridViewStyleKey}}"
5272
BorderBrush="DarkGray"
53-
BorderThickness="1">
73+
BorderThickness="1"
74+
GridViewColumnHeader.Click="SortByColumn"
75+
MouseDoubleClick="MouseDoubleClickItem">
5476
<ListView.View>
5577
<GridView>
56-
<GridViewColumn Header="{DynamicResource flowlauncher_plugin_websearch_action_keyword}">
78+
<GridViewColumn Header="{DynamicResource flowlauncher_plugin_websearch_title}"
79+
DisplayMemberBinding="{Binding Title}"
80+
Width="130">
5781
<GridViewColumn.CellTemplate>
5882
<DataTemplate>
59-
<TextBlock Text="{Binding ActionKeyword}" />
83+
<TextBlock Text="{Binding Title}"/>
6084
</DataTemplate>
6185
</GridViewColumn.CellTemplate>
6286
</GridViewColumn>
63-
<GridViewColumn Header="{DynamicResource flowlauncher_plugin_websearch_url}" Width="418">
87+
<GridViewColumn Header="{DynamicResource flowlauncher_plugin_websearch_action_keyword}"
88+
DisplayMemberBinding="{Binding ActionKeyword}"
89+
Width="137">
6490
<GridViewColumn.CellTemplate>
6591
<DataTemplate>
66-
<TextBlock Text="{Binding Url}" />
92+
<TextBlock Text="{Binding ActionKeyword}"/>
93+
</DataTemplate>
94+
</GridViewColumn.CellTemplate>
95+
</GridViewColumn>
96+
<GridViewColumn Header="{DynamicResource flowlauncher_plugin_websearch_url}"
97+
DisplayMemberBinding="{Binding Url}"
98+
Width="auto">
99+
<GridViewColumn.CellTemplate>
100+
<DataTemplate>
101+
<TextBlock Text="{Binding Url}"/>
67102
</DataTemplate>
68103
</GridViewColumn.CellTemplate>
69104
</GridViewColumn>

Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.Windows;
33
using System.Windows.Controls;
44
using Flow.Launcher.Core.Plugin;
5+
using System.ComponentModel;
6+
using System.Windows.Data;
57

68
namespace Flow.Launcher.Plugin.WebSearch
79
{
@@ -88,5 +90,85 @@ private void OnBrowserPathTextChanged(object sender, TextChangedEventArgs e)
8890
{
8991
_settings.BrowserPath = browserPathBox.Text;
9092
}
93+
94+
GridViewColumnHeader _lastHeaderClicked = null;
95+
ListSortDirection _lastDirection = ListSortDirection.Ascending;
96+
97+
private void SortByColumn(object sender, RoutedEventArgs e)
98+
{
99+
ListSortDirection direction;
100+
101+
if (e.OriginalSource is not GridViewColumnHeader headerClicked)
102+
{
103+
return;
104+
}
105+
106+
if (headerClicked.Role == GridViewColumnHeaderRole.Padding)
107+
{
108+
return;
109+
}
110+
111+
if (headerClicked != _lastHeaderClicked)
112+
{
113+
direction = ListSortDirection.Ascending;
114+
}
115+
else
116+
{
117+
if (_lastDirection == ListSortDirection.Ascending)
118+
{
119+
direction = ListSortDirection.Descending;
120+
}
121+
else
122+
{
123+
direction = ListSortDirection.Ascending;
124+
}
125+
}
126+
127+
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
128+
var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;
129+
130+
Sort(sortBy, direction);
131+
132+
if (direction == ListSortDirection.Ascending)
133+
{
134+
headerClicked.Column.HeaderTemplate =
135+
Resources["HeaderTemplateArrowUp"] as DataTemplate;
136+
}
137+
else
138+
{
139+
headerClicked.Column.HeaderTemplate =
140+
Resources["HeaderTemplateArrowDown"] as DataTemplate;
141+
}
142+
143+
// Remove arrow from previously sorted header
144+
if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked)
145+
{
146+
_lastHeaderClicked.Column.HeaderTemplate = null;
147+
}
148+
149+
_lastHeaderClicked = headerClicked;
150+
_lastDirection = direction;
151+
}
152+
private void Sort(string sortBy, ListSortDirection direction)
153+
{
154+
ICollectionView dataView = CollectionViewSource.GetDefaultView(SearchSourcesListView.ItemsSource);
155+
dataView.SortDescriptions.Clear();
156+
SortDescription sd = new(sortBy, direction);
157+
dataView.SortDescriptions.Add(sd);
158+
dataView.Refresh();
159+
}
160+
161+
private void MouseDoubleClickItem(object sender, System.Windows.Input.MouseButtonEventArgs e)
162+
{
163+
if (((FrameworkElement)e.OriginalSource).DataContext is SearchSource && _settings.SelectedSearchSource != null)
164+
{
165+
var webSearch = new SearchSourceSettingWindow
166+
(
167+
_settings.SearchSources, _context, _settings.SelectedSearchSource
168+
);
169+
170+
webSearch.ShowDialog();
171+
}
172+
}
91173
}
92174
}

Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"Name": "Web Searches",
2727
"Description": "Provide the web search ability",
2828
"Author": "qianlifeng",
29-
"Version": "1.3.9",
29+
"Version": "1.4.0",
3030
"Language": "csharp",
3131
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
3232
"ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll",

0 commit comments

Comments
 (0)