Skip to content

Commit 3edd459

Browse files
committed
[SmartScript] Added header
1 parent ee8e28c commit 3edd459

File tree

14 files changed

+108
-17
lines changed

14 files changed

+108
-17
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Globalization;
3+
using Avalonia.Data.Converters;
4+
using Avalonia.Media;
5+
6+
namespace WDE.Common.Avalonia.Converters;
7+
8+
public class BoolToBrushConverter : IValueConverter
9+
{
10+
public IBrush WhenTrue { get; set; } = Brushes.White;
11+
public IBrush WhenFalse { get; set; } = Brushes.White;
12+
13+
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
14+
{
15+
if (value is bool b)
16+
return b ? WhenTrue : WhenFalse;
17+
return null;
18+
}
19+
20+
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
21+
{
22+
throw new NotImplementedException();
23+
}
24+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using System.Globalization;
3+
using Avalonia.Data.Converters;
4+
using Avalonia.Media;
5+
6+
namespace WDE.Common.Avalonia.Converters;
7+
8+
public class ColorAwareBoolToBrushConverter : IValueConverter
9+
{
10+
public IBrush WhenTrueDark { get; set; } = Brushes.White;
11+
public IBrush WhenFalseDark { get; set; } = Brushes.White;
12+
public IBrush WhenTrueLight { get; set; } = Brushes.Black;
13+
public IBrush WhenFalseLight { get; set; } = Brushes.Black;
14+
15+
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
16+
{
17+
if (value is bool b)
18+
return AvaloniaStyles.SystemTheme.EffectiveThemeIsDark ? (b ? WhenTrueDark : WhenFalseDark) : (b ? WhenTrueLight : WhenFalseLight);
19+
return null;
20+
}
21+
22+
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
23+
{
24+
throw new NotImplementedException();
25+
}
26+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Avalonia.Media;
2+
3+
namespace WDE.Common.Avalonia.Utils;
4+
5+
public class ThemeAwareSolidBrush : ISolidColorBrush
6+
{
7+
public Color DarkColor { get; set; }
8+
public Color LightColor { get; set; }
9+
public double Opacity { get; set; } = 1;
10+
11+
public Color Color => AvaloniaStyles.SystemTheme.EffectiveThemeIsDark ? DarkColor : LightColor;
12+
}

WDE.SmartScriptEditor.Avalonia/Editor/UserControls/SmartScriptView.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
xmlns:views="clr-namespace:WDE.SmartScriptEditor.Avalonia.Editor.Views"
1212
x:DataType="viewModels1:SmartScriptEditorViewModel"
1313
mc:Ignorable="d" x:Name="Rooot"
14-
Background="{DynamicResource SmartScripts.Background}"
1514
d:DesignHeight="300" d:DesignWidth="300">
1615
<UserControl.Resources>
1716
<system:Boolean x:Key="FalseValue">False</system:Boolean>

WDE.SmartScriptEditor.Avalonia/Editor/Views/SmartScriptEditorView.axaml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
<UserControl x:Class="WDE.SmartScriptEditor.Avalonia.Editor.Views.SmartScriptEditorView"
22
xmlns="https://github.com/avaloniaui"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4-
xmlns:userControls="clr-namespace:WDE.SmartScriptEditor.Editor.UserControls"
5-
xmlns:utils="clr-namespace:WDE.Common.Utils;assembly=WDE.Common"
6-
xmlns:system="clr-namespace:System;assembly=System.Runtime"
4+
Background="{DynamicResource SmartScripts.Background}"
75
xmlns:userControls1="clr-namespace:WDE.SmartScriptEditor.Avalonia.Editor.UserControls"
86
x:DataType="viewModels:SmartScriptEditorViewModel"
97
xmlns:controls="clr-namespace:AvaloniaStyles.Controls;assembly=AvaloniaStyles"
108
xmlns:viewModels="clr-namespace:WDE.SmartScriptEditor.Editor.ViewModels;assembly=WDE.SmartScriptEditor"
11-
xmlns:editor="clr-namespace:WDE.SmartScriptEditor.Editor;assembly=WDE.SmartScriptEditor">
9+
xmlns:editor="clr-namespace:WDE.SmartScriptEditor.Editor;assembly=WDE.SmartScriptEditor"
10+
PointerPressed="DeselectAll"
11+
xmlns:utils="clr-namespace:WDE.Common.Avalonia.Utils;assembly=WDE.Common.Avalonia">
1212
<Panel>
13-
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
14-
<userControls1:SmartScriptView Focusable="True" Name="SmartScriptView"/>
15-
</ScrollViewer>
13+
<DockPanel>
14+
<ContentPresenter Content="{CompiledBinding HeaderViewModel}"
15+
DockPanel.Dock="Top"
16+
IsVisible="{CompiledBinding HeaderViewModel, Converter={x:Static NullConverter.IsNotNull}}"
17+
ContentTemplate="{x:Static utils:ViewDataTemplate.Template}" />
18+
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
19+
<userControls1:SmartScriptView Focusable="True" Name="SmartScriptView"/>
20+
</ScrollViewer>
21+
</DockPanel>
1622

1723
<Slider Minimum="0.5" Maximum="1"
1824
HorizontalAlignment="Right"

WDE.SmartScriptEditor.Avalonia/Editor/Views/SmartScriptEditorView.axaml.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Avalonia.Controls;
2+
using Avalonia.Input;
23
using Avalonia.Markup.Xaml;
4+
using WDE.SmartScriptEditor.Editor.ViewModels;
35

46
namespace WDE.SmartScriptEditor.Avalonia.Editor.Views
57
{
@@ -16,5 +18,16 @@ private void InitializeComponent()
1618
{
1719
AvaloniaXamlLoader.Load(this);
1820
}
21+
22+
private void DeselectAll(object? sender, PointerPressedEventArgs e)
23+
{
24+
if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed &&
25+
e.ClickCount == 1 &&
26+
DataContext is SmartScriptEditorViewModel vm)
27+
{
28+
vm.DeselectAll.Execute();
29+
e.Handled = true;
30+
}
31+
}
1932
}
2033
}

WDE.SmartScriptEditor/Editor/ISmartEditorExtension.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public interface ISmartEditorExtension
1515
{
1616
Task BeforeLoad(SmartScriptEditorViewModel editorViewModel, ISmartScriptSolutionItem item) => Task.CompletedTask;
1717
IReadOnlyList<SmartExtensionCommand>? Commands => null;
18+
ISmartHeaderViewModel? CreateHeader(SmartScriptEditorViewModel editorViewModel, ISmartScriptSolutionItem item) => null;
1819
}
1920

2021
public class SmartExtensionNotification : ObservableBase

WDE.SmartScriptEditor/Editor/ViewModels/Editing/EditableParameterViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public IList<object>? Items
7171
{
7272
if (Parameter is not MultiParameterValueHolder<long> p)
7373
return null;
74-
return HasItems
74+
return HasItems && p.Items != null
7575
? p.Items!.Select(pair => (object)new ParameterOption(pair.Key, pair.Value.Name)).ToList()
7676
: null;
7777
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace WDE.SmartScriptEditor.Editor.ViewModels;
2+
3+
public interface ISmartHeaderViewModel
4+
{
5+
6+
}

WDE.SmartScriptEditor/Editor/ViewModels/SmartScriptEditorViewModel.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public partial class SmartScriptEditorViewModel : ObservableBase, ISolutionItemD
7575
private SmartScript script;
7676

7777
public SmartTeachingTips TeachingTips { get; private set; }
78+
79+
public ISmartHeaderViewModel? HeaderViewModel { get; private set; }
7880

7981
public ImageUri? Icon { get; }
8082

@@ -192,7 +194,7 @@ public SmartScriptEditorViewModel(ISmartScriptSolutionItem item,
192194
}
193195
});
194196

195-
ExtensionCommands = editorExtension?.Commands?.ToList() ?? new List<SmartExtensionCommand>();
197+
ExtensionCommands = editorExtension.Commands?.ToList() ?? new List<SmartExtensionCommand>();
196198

197199
CloseCommand = new AsyncCommand(async () =>
198200
{
@@ -1327,6 +1329,8 @@ long GetNextLinkId()
13271329
}));
13281330

13291331
SetSolutionItem(item);
1332+
// after Script is ready
1333+
HeaderViewModel = editorExtension.CreateHeader(this, item);
13301334
}
13311335

13321336
public Task<IQuery> GenerateQuery()
@@ -2041,7 +2045,7 @@ private ParametersEditViewModel ActionEditViewModel(IReadOnlyList<SmartAction> o
20412045
var editingMultipleSourceConditions = anyHasSourceConditions && actionsToEdit.Count > 1;
20422046
var editingMultipleTargetConditions = anyHasTargetConditions && actionsToEdit.Count > 1;
20432047

2044-
var sourceConditions = new ReactiveProperty<string>(editingMultipleSourceConditions ? "Conditions (warning: multiple actions)" : $"Conditions ({actionsToEdit[0].Source.Conditions?.Count ?? 0})");
2048+
var sourceConditions = new ReactiveProperty<string>(editingMultipleSourceConditions ? "Conditions (warning: multiple actions)" : $"Conditions ({actionsToEdit[0].Source.Conditions?.Count(c => c.ConditionType >= 0) ?? 0})");
20452049
editableGroup.Add(new EditableActionData("Conditions", "Source", async () =>
20462050
{
20472051
var newConditions = await conditionEditService.EditConditions(30, actionsToEdit[0].Source.Conditions);
@@ -2051,11 +2055,11 @@ private ParametersEditViewModel ActionEditViewModel(IReadOnlyList<SmartAction> o
20512055
modifiedSourceConditions = true;
20522056
foreach (var action in actionsToEdit)
20532057
action.Source.Conditions = conditions.ToList();
2054-
sourceConditions.Value = $"Conditions ({actionsToEdit[0].Source.Conditions?.Count ?? 0})";
2058+
sourceConditions.Value = $"Conditions ({actionsToEdit[0].Source.Conditions?.Count(c => c.ConditionType >= 0) ?? 0})";
20552059
}
20562060
}, sourceConditions));
20572061

2058-
var targetConditions = new ReactiveProperty<string>(editingMultipleTargetConditions ? "Conditions (warning: multiple actions)" : $"Conditions ({actionsToEdit[0].Target.Conditions?.Count ?? 0})");
2062+
var targetConditions = new ReactiveProperty<string>(editingMultipleTargetConditions ? "Conditions (warning: multiple actions)" : $"Conditions ({actionsToEdit[0].Target.Conditions?.Count(c => c.ConditionType >= 0) ?? 0})");
20592063
editableGroup.Add(new EditableActionData("Conditions", "Target", async () =>
20602064
{
20612065
var newConditions = await conditionEditService.EditConditions(30, actionsToEdit[0].Target.Conditions);
@@ -2065,7 +2069,7 @@ private ParametersEditViewModel ActionEditViewModel(IReadOnlyList<SmartAction> o
20652069
modifiedTargetConditions = true;
20662070
foreach (var action in actionsToEdit)
20672071
action.Target.Conditions = conditions.ToList();
2068-
targetConditions.Value = $"Conditions ({actionsToEdit[0].Target.Conditions?.Count ?? 0})";
2072+
targetConditions.Value = $"Conditions ({actionsToEdit[0].Target.Conditions?.Count(c => c.ConditionType >= 0) ?? 0})";
20692073
}
20702074
}, targetConditions, canPickTarget.Not()));
20712075
}
@@ -2221,7 +2225,7 @@ private Task<bool> EditSelectedConditionsCommand()
22212225
private void EditSelectedEventsCommand()
22222226
{
22232227
if (SelectedItem != null)
2224-
EditEventCommand(Events.Where(ev => ev.IsSelected).ToList()).ListenErrors();
2228+
EditEventCommand(Events.Where(ev => ev.IsEvent && ev.IsSelected).ToList()).ListenErrors();
22252229
}
22262230

22272231
private class ScriptBulkEdit : IBulkEditSource
@@ -2277,7 +2281,7 @@ private ParametersEditViewModel EventEditViewModel(IReadOnlyList<SmartEvent> ori
22772281
var anyHasConditions = eventsToEdit.Any(e => e.Conditions.Count > 0);
22782282
var editingMultipleConditions = anyHasConditions && eventsToEdit.Count > 1;
22792283

2280-
var sourceConditions = new ReactiveProperty<string>(editingMultipleConditions ? "Conditions (warning: multiple events)" : $"Conditions ({eventsToEdit[0].Conditions?.Count ?? 0})");
2284+
var sourceConditions = new ReactiveProperty<string>(editingMultipleConditions ? "Conditions (warning: multiple events)" : $"Conditions ({eventsToEdit[0].Conditions?.Count(c => c.Id >= 0) ?? 0})");
22812285
editableGroup.Add(new EditableActionData("Conditions", "General", async () =>
22822286
{
22832287
var oldConditions = smartScriptExporter.ToDatabaseCompatibleConditions(script, eventsToEdit[0]);
@@ -2293,7 +2297,7 @@ private ParametersEditViewModel EventEditViewModel(IReadOnlyList<SmartEvent> ori
22932297
foreach (var c in smartConditions)
22942298
@event.Conditions.Add(c.Copy());
22952299
}
2296-
sourceConditions.Value = $"Conditions ({eventsToEdit[0].Conditions?.Count ?? 0})";
2300+
sourceConditions.Value = $"Conditions ({eventsToEdit[0].Conditions?.Count(c => c.Id >= 0) ?? 0})";
22972301
}
22982302
}, sourceConditions));
22992303

939 Bytes
Loading
1.45 KB
Loading
1.45 KB
Loading
2.48 KB
Loading

0 commit comments

Comments
 (0)