Skip to content

Commit fc9efe9

Browse files
committed
feat(Avalonia): add BuiltIn Uploader View
1 parent 896795f commit fc9efe9

2 files changed

Lines changed: 178 additions & 0 deletions

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<UserControl
2+
x:Class="SnapX.Avalonia.Views.Settings.Views.BuiltInUploaderSettingsView"
3+
x:DataType="viewModels:CoreUploaderVM"
4+
xmlns="https://github.com/avaloniaui"
5+
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
6+
xmlns:imageUploaders="clr-namespace:SnapX.Avalonia.Views.Settings.Views.ImageUploaders"
7+
xmlns:img="clr-namespace:SnapX.Core.Upload.Img;assembly=SnapX.Core"
8+
xmlns:viewModels="clr-namespace:SnapX.Avalonia.ViewModels"
9+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
10+
<Design.DataContext>
11+
<viewModels:CoreUploaderVM />
12+
</Design.DataContext>
13+
<ScrollViewer Padding="20">
14+
<StackPanel Spacing="12">
15+
<StackPanel Margin="0,0,0,10">
16+
<TextBlock Classes="h1" Text="{Binding SelectedUploader.ServiceName}" />
17+
</StackPanel>
18+
<!-- -->
19+
<!-- <controls:SettingsExpander Header="Service Details" IsExpanded="True"> -->
20+
<!-- <controls:SettingsExpander.IconSource> -->
21+
<!-- <controls:SymbolIconSource Symbol="AllApps" /> -->
22+
<!-- </controls:SettingsExpander.IconSource> -->
23+
<!-- <controls:SettingsExpanderItem Content="Service Identifier" Description="Internal unique ID"> -->
24+
<!-- <controls:SettingsExpanderItem.Footer> -->
25+
<!-- <TextBlock Text="{Binding SelectedUploader.ServiceIdentifier}" /> -->
26+
<!-- </controls:SettingsExpanderItem.Footer> -->
27+
<!-- </controls:SettingsExpanderItem> -->
28+
<!-- </controls:SettingsExpander> -->
29+
30+
<Border
31+
Background="Transparent"
32+
MinHeight="100"
33+
x:Name="SettingsContainer" />
34+
</StackPanel>
35+
</ScrollViewer>
36+
</UserControl>
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
2+
using System.ComponentModel;
3+
using Avalonia;
4+
using Avalonia.Controls;
5+
using Avalonia.Layout;
6+
using Avalonia.Media;
7+
using SnapX.Avalonia.ViewModels;
8+
using SnapX.Avalonia.Views.Settings.Views.FileUploaders;
9+
using SnapX.Avalonia.Views.Settings.Views.ImageUploaders;
10+
using SnapX.Avalonia.Views.Settings.Views.TextUploaders;
11+
using SnapX.Core.Upload.File;
12+
using SnapX.Core.Upload.Img;
13+
using SnapX.Core.Upload.Text;
14+
15+
namespace SnapX.Avalonia.Views.Settings.Views;
16+
17+
public partial class BuiltInUploaderSettingsView : UserControl
18+
{
19+
private readonly CoreUploaderVM _vm;
20+
public BuiltInUploaderSettingsView(CoreUploaderVM vm)
21+
{
22+
_vm = vm;
23+
DataContext = _vm;
24+
InitializeComponent();
25+
_vm.PropertyChanged += OnVmPropertyChanged;
26+
27+
}
28+
29+
public BuiltInUploaderSettingsView() : this(new CoreUploaderVM())
30+
{
31+
32+
}
33+
private void OnVmPropertyChanged(object? sender, PropertyChangedEventArgs e)
34+
{
35+
if (e.PropertyName == nameof(CoreUploaderVM.SelectedUploaderInstance))
36+
{
37+
UpdateSettingsView(_vm.SelectedUploaderInstance);
38+
}
39+
}
40+
41+
private void UpdateSettingsView(object? instance)
42+
{
43+
if (instance == null)
44+
{
45+
SettingsContainer.Child = new StackPanel
46+
{
47+
Spacing = 10,
48+
VerticalAlignment = VerticalAlignment.Center,
49+
HorizontalAlignment = HorizontalAlignment.Center,
50+
Children =
51+
{
52+
new TextBlock {
53+
Text = "🖱️",
54+
FontSize = 44,
55+
HorizontalAlignment = HorizontalAlignment.Center,
56+
Margin = new Thickness(0, 0, 0, 10)
57+
},
58+
new TextBlock {
59+
Text = "Ready to Configure",
60+
FontSize = 18,
61+
FontWeight = FontWeight.Bold,
62+
HorizontalAlignment = HorizontalAlignment.Center
63+
},
64+
new TextBlock {
65+
Text = "Select an uploader from the list to get started.",
66+
Foreground = Brushes.Gray,
67+
TextAlignment = TextAlignment.Center,
68+
HorizontalAlignment = HorizontalAlignment.Center
69+
}
70+
}
71+
};
72+
return;
73+
}
74+
75+
Control? newView = instance switch
76+
{
77+
Imgur => new ImgurUploaderSettingsView { DataContext = instance },
78+
ImageShackUploader => new ImageShackUploaderSettingsView { DataContext = instance },
79+
FlickrUploader => new FlickrUploaderSettingsView { DataContext = instance },
80+
GooglePhotos => new PicasaUploaderSettingsView { DataContext = instance },
81+
Pastebin => new PastebinUploaderSettingsView() { DataContext = instance },
82+
Paste_ee => new PasteeUploaderSettingsView() { DataContext = instance },
83+
GitHubGist => new GithubGistUploaderSettingsView() { DataContext = instance },
84+
Hastebin => new HastebinUploaderSettingsView() { DataContext = instance },
85+
OneTimeSecret => new OneTimeSecretUploadSettingsView() { DataContext = instance },
86+
FTP => new FTPSettingsView() { DataContext = instance },
87+
// Add other mappings here:
88+
// AmazonS3 => new S3SettingsView { DataContext = instance },
89+
_ => new StackPanel
90+
{
91+
Spacing = 15,
92+
VerticalAlignment = VerticalAlignment.Center,
93+
HorizontalAlignment = HorizontalAlignment.Center,
94+
Children =
95+
{
96+
new TextBlock {
97+
Text = "🛠️",
98+
FontSize = 48,
99+
HorizontalAlignment = HorizontalAlignment.Center
100+
},
101+
new SelectableTextBlock {
102+
Text = $"{instance.GetType().Name} Settings",
103+
FontSize = 20,
104+
FontWeight = FontWeight.Bold,
105+
HorizontalAlignment = HorizontalAlignment.Center
106+
},
107+
new TextBlock {
108+
Text = "This uploader doesn't have a configuration view yet.",
109+
Foreground = Brushes.Gray,
110+
HorizontalAlignment = HorizontalAlignment.Center
111+
},
112+
new Border {
113+
Background = Brushes.Transparent,
114+
BorderBrush = Brushes.DodgerBlue,
115+
BorderThickness = new Thickness(1),
116+
CornerRadius = new CornerRadius(4),
117+
Padding = new Thickness(10, 5),
118+
Margin = new Thickness(0, 10, 0, 0),
119+
Child = new TextBlock {
120+
Text = "Pull Requests Welcome!",
121+
Foreground = Brushes.DodgerBlue,
122+
HorizontalAlignment = HorizontalAlignment.Center,
123+
FontWeight = FontWeight.SemiBold
124+
}
125+
},
126+
new TextBlock {
127+
Text = "Adding a view is simple: create a UserControl and link it in the BuiltInUploaderSettingsView.",
128+
FontSize = 12,
129+
FontStyle = FontStyle.Italic,
130+
Foreground = Brushes.DimGray,
131+
TextWrapping = TextWrapping.Wrap,
132+
MaxWidth = 300,
133+
TextAlignment = TextAlignment.Center
134+
}
135+
}
136+
}
137+
};
138+
139+
SettingsContainer.Child = newView;
140+
}
141+
}
142+

0 commit comments

Comments
 (0)