Skip to content

Commit 8418d6a

Browse files
committed
omg bind to the IsSelected
1 parent 0bb13f9 commit 8418d6a

File tree

4 files changed

+106
-5
lines changed

4 files changed

+106
-5
lines changed

src/cascadia/TerminalApp/TasksPaneContent.cpp

+12-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "TasksPaneContent.h"
66
#include "PaneArgs.h"
77
#include "TasksPaneContent.g.cpp"
8+
#include "TaskViewModel.g.cpp"
89

910
using namespace winrt::Windows::Foundation;
1011
using namespace winrt::Microsoft::Terminal::Settings;
@@ -53,13 +54,21 @@ namespace winrt::TerminalApp::implementation
5354
}
5455
void TasksPaneContent::UpdateSettings(const CascadiaSettings& settings)
5556
{
56-
_treeView().RootNodes().Clear();
57+
// _treeView().RootNodes().Clear();
5758
const auto tasks = settings.GlobalSettings().ActionMap().FilterToSendInput(L""); // IVector<Model::Command>
59+
// for (const auto& t : tasks)
60+
// {
61+
// const auto& treeNode = _buildTreeViewNode(t);
62+
// _treeView().RootNodes().Append(treeNode);
63+
// }
64+
65+
auto itemSource = winrt::single_threaded_observable_vector<TerminalApp::TaskViewModel>();
5866
for (const auto& t : tasks)
5967
{
60-
const auto& treeNode = _buildTreeViewNode(t);
61-
_treeView().RootNodes().Append(treeNode);
68+
// const auto& treeNode = _buildTreeViewNode(t);
69+
itemSource.Append(winrt::make<TaskViewModel>(t));
6270
}
71+
_treeView().ItemsSource(itemSource);
6372
}
6473

6574
winrt::Windows::UI::Xaml::FrameworkElement TasksPaneContent::GetRoot()

src/cascadia/TerminalApp/TasksPaneContent.h

+35
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#pragma once
55
#include "TasksPaneContent.g.h"
6+
#include "TaskViewModel.g.h"
67

78
namespace winrt::TerminalApp::implementation
89
{
@@ -40,9 +41,43 @@ namespace winrt::TerminalApp::implementation
4041
// winrt::Windows::UI::Xaml::Controls::Grid _root{ nullptr };
4142
// winrt::Microsoft::UI::Xaml::Controls::TreeView _treeView{ nullptr };
4243
};
44+
45+
struct TaskViewModel : TaskViewModelT<TaskViewModel>
46+
{
47+
TaskViewModel(const winrt::Microsoft::Terminal::Settings::Model::Command& command) :
48+
_command{ command }
49+
{
50+
_children = winrt::single_threaded_observable_vector<TerminalApp::TaskViewModel>();
51+
if (_command.HasNestedCommands())
52+
{
53+
for (const auto& [_, child] : _command.NestedCommands())
54+
{
55+
auto vm{ winrt::make<TaskViewModel>(child) };
56+
_children.Append(vm);
57+
}
58+
}
59+
}
60+
winrt::hstring Name() { return _command.Name(); }
61+
winrt::hstring IconPath() { return _command.IconPath(); }
62+
winrt::hstring Input()
63+
{
64+
if (const auto& sendInput{ _command.ActionAndArgs().Args().try_as<winrt::Microsoft::Terminal::Settings::Model::SendInputArgs>() })
65+
{
66+
return sendInput.Input();
67+
}
68+
return L"";
69+
};
70+
winrt::Windows::Foundation::Collections::IObservableVector<TerminalApp::TaskViewModel> Children() { return _children; }
71+
winrt::Microsoft::Terminal::Settings::Model::Command Command() { return _command; }
72+
73+
private:
74+
winrt::Microsoft::Terminal::Settings::Model::Command _command{ nullptr };
75+
winrt::Windows::Foundation::Collections::IObservableVector<TerminalApp::TaskViewModel> _children{};
76+
};
4377
}
4478

4579
namespace winrt::TerminalApp::factory_implementation
4680
{
4781
BASIC_FACTORY(TasksPaneContent);
82+
BASIC_FACTORY(TaskViewModel);
4883
}

src/cascadia/TerminalApp/TasksPaneContent.xaml

+48-2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,59 @@
3030
AutomationProperties.Name="{x:Bind Item.Name, Mode=OneWay}"
3131
FontSize="12" />
3232
</DataTemplate>
33+
<DataTemplate x:Key="TaskItemTemplate"
34+
x:DataType="local:TaskViewModel">
35+
<mux:TreeViewItem x:Name="asdf"
36+
ItemsSource="{x:Bind Children}">
37+
<Grid>
38+
<Grid.RowDefinitions>
39+
<RowDefinition Height="*" />
40+
<RowDefinition Height="*" />
41+
</Grid.RowDefinitions>
42+
<Grid.ColumnDefinitions>
43+
<ColumnDefinition Width="Auto" />
44+
<ColumnDefinition Width="*" />
45+
</Grid.ColumnDefinitions>
46+
<ContentPresenter Grid.Column="0">
47+
<IconSourceElement Width="16"
48+
Height="16"
49+
IconSource="{x:Bind IconPath, Converter={StaticResource IconSourceConverter}}"
50+
Visibility="Collapsed" />
51+
</ContentPresenter>
52+
<!-- <Ellipse x:Name="Ellipse"
53+
Grid.RowSpan="2"
54+
Width ="32"
55+
Height="32"
56+
Margin="6"
57+
VerticalAlignment="Center"
58+
HorizontalAlignment="Center"
59+
Fill="{ThemeResource SystemControlBackgroundBaseMediumBrush}"/>-->
60+
<TextBlock Grid.Column="1"
61+
Margin="12,6,0,0"
62+
x:Phase="1"
63+
Style="{ThemeResource BaseTextBlockStyle}"
64+
Text="{x:Bind Name, Mode=OneWay}" />
65+
<TextBlock Grid.Row="1"
66+
Grid.Column="1"
67+
Margin="12,0,0,6"
68+
x:Phase="2"
69+
MaxLines="1"
70+
Style="{ThemeResource BodyTextBlockStyle}"
71+
Text="{x:Bind Input}"
72+
Visibility="{Binding ElementName=asdf, Path=IsSelected}" />
73+
</Grid>
74+
</mux:TreeViewItem>
75+
</DataTemplate>
3376
</ResourceDictionary>
3477
</UserControl.Resources>
3578

36-
<StackPanel Orientation="Horizontal">
79+
<StackPanel Orientation="Vertical">
3780
<TextBlock x:Name="_title"
81+
Margin="9"
82+
FontSize="24"
3883
Text="Tasks" />
39-
<mux:TreeView x:Name="_treeView" />
84+
<mux:TreeView x:Name="_treeView"
85+
ItemTemplate="{StaticResource TaskItemTemplate}" />
4086
</StackPanel>
4187

4288
</UserControl>

src/cascadia/TerminalApp/TerminalPaneContent.idl

+11
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ namespace TerminalApp
2828
SettingsPaneContent(Microsoft.Terminal.Settings.Model.CascadiaSettings settings);
2929
}
3030

31+
[default_interface] runtimeclass TaskViewModel
32+
{
33+
TaskViewModel(Microsoft.Terminal.Settings.Model.Command command);
34+
String Name{ get; };
35+
String IconPath{ get; };
36+
String Input{ get; };
37+
Microsoft.Terminal.Settings.Model.Command Command{ get; };
38+
Windows.Foundation.Collections.IObservableVector<TaskViewModel> Children { get; };
39+
40+
}
41+
3142
[default_interface] runtimeclass TasksPaneContent : Windows.UI.Xaml.Controls.UserControl, IPaneContent
3243
{
3344
TasksPaneContent();

0 commit comments

Comments
 (0)