Add custom sound theme support
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
using System.Windows.Media;
|
||||
using System;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.ThemeEditor;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
public abstract class StringBlockItem : BlockItemBase, IAudioVisualBlockItem
|
||||
public abstract class StringBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||
{
|
||||
private string _value;
|
||||
private ThemeComponent _themeComponent;
|
||||
|
||||
protected StringBlockItem()
|
||||
{
|
||||
@@ -15,12 +18,36 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
Value = value;
|
||||
}
|
||||
|
||||
public override string OutputText => PrefixText + " \"" + Value + "\"";
|
||||
public override string OutputText => PrefixText + " \"" + Value + "\""
|
||||
+ (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||
|
||||
public override string SummaryText => string.Empty;
|
||||
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||
public override Color SummaryTextColor => Colors.Transparent;
|
||||
|
||||
public ThemeComponent ThemeComponent
|
||||
{
|
||||
get { return _themeComponent; }
|
||||
set
|
||||
{
|
||||
if (_themeComponent == value) { return; }
|
||||
|
||||
if (_themeComponent != null)
|
||||
{
|
||||
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||
}
|
||||
if (value != null)
|
||||
{
|
||||
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||
}
|
||||
|
||||
_themeComponent = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public string Value
|
||||
{
|
||||
get { return _value; }
|
||||
@@ -31,5 +58,15 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||
{
|
||||
Value = ((StringThemeComponent)sender).Value;
|
||||
}
|
||||
|
||||
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||
{
|
||||
ThemeComponent = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||
{
|
||||
public CustomSoundBlockItem()
|
||||
{
|
||||
Value = "";
|
||||
Value = "placeholder.mp3";
|
||||
}
|
||||
|
||||
public CustomSoundBlockItem(string value) : base(value)
|
||||
|
||||
@@ -13,6 +13,8 @@ namespace Filtration.ObjectModel.Enums
|
||||
[Description("Font Size")]
|
||||
FontSize,
|
||||
[Description("Alert Sound")]
|
||||
AlertSound
|
||||
AlertSound,
|
||||
[Description("Custom Sound")]
|
||||
CustomSound
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,10 +37,26 @@
|
||||
<Reference Include="Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Castle.Windsor.3.4.0\lib\net45\Castle.Windsor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CommonServiceLocator, Version=2.0.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\CommonServiceLocator.2.0.2\lib\net45\CommonServiceLocator.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GalaSoft.MvvmLight, Version=5.3.0.19026, Culture=neutral, PublicKeyToken=e7570ab207bcb616, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GalaSoft.MvvmLight.Extras, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=669f0b5e8f868abf, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Extras.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GalaSoft.MvvmLight.Platform, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=5f873c45e98af8a1, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -132,6 +148,7 @@
|
||||
<Compile Include="ReplaceColorsParameterSet.cs" />
|
||||
<Compile Include="Socket.cs" />
|
||||
<Compile Include="SocketGroup.cs" />
|
||||
<Compile Include="ThemeEditor\StringThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\StrIntThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\IntegerThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\Theme.cs" />
|
||||
@@ -141,6 +158,9 @@
|
||||
<Compile Include="WindsorInstallers\CommandsInstaller.cs" />
|
||||
<Compile Include="WindsorInstallers\ModelsInstaller.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
|
||||
namespace Filtration.ObjectModel.ThemeEditor
|
||||
|
||||
82
Filtration.ObjectModel/ThemeEditor/StringThemeComponent.cs
Normal file
82
Filtration.ObjectModel/ThemeEditor/StringThemeComponent.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using GalaSoft.MvvmLight.Command;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Filtration.ObjectModel.ThemeEditor
|
||||
{
|
||||
[Serializable]
|
||||
public class StringThemeComponent : ThemeComponent
|
||||
{
|
||||
private string _value;
|
||||
public static ObservableCollection<string> _customSoundsAvailable;
|
||||
|
||||
public StringThemeComponent(ThemeComponentType componentType, string componentName, string componentValue)
|
||||
{
|
||||
if (componentName == null || componentValue == null)
|
||||
{
|
||||
throw new ArgumentException("Null parameters not allowed in StringThemeComponent constructor");
|
||||
}
|
||||
|
||||
ComponentType = componentType;
|
||||
Value = componentValue;
|
||||
ComponentName = componentName;
|
||||
|
||||
if (_customSoundsAvailable == null || _customSoundsAvailable.Count < 1)
|
||||
{
|
||||
_customSoundsAvailable = new ObservableCollection<string> {
|
||||
"1maybevaluable.mp3", "2currency.mp3", "3uniques.mp3", "4maps.mp3", "5highmaps.mp3",
|
||||
"6veryvaluable.mp3", "7chancing.mp3", "12leveling.mp3", "placeholder.mp3"
|
||||
};
|
||||
}
|
||||
|
||||
if (_customSoundsAvailable.IndexOf(Value) < 0)
|
||||
{
|
||||
_customSoundsAvailable.Add(Value);
|
||||
}
|
||||
|
||||
CustomSoundFileDialogCommand = new RelayCommand(OnCustomSoundFileDialog);
|
||||
}
|
||||
|
||||
public RelayCommand CustomSoundFileDialogCommand { get; set; }
|
||||
|
||||
public ObservableCollection<string> CustomSoundsAvailable => _customSoundsAvailable;
|
||||
|
||||
public string Value
|
||||
{
|
||||
get { return _value; }
|
||||
set
|
||||
{
|
||||
_value = value;
|
||||
OnPropertyChanged();
|
||||
_themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCustomSoundFileDialog()
|
||||
{
|
||||
OpenFileDialog fileDialog = new OpenFileDialog();
|
||||
fileDialog.DefaultExt = ".mp3";
|
||||
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString() + @"\My Games\Path of Exile\";
|
||||
fileDialog.InitialDirectory = poePath;
|
||||
|
||||
Nullable<bool> result = fileDialog.ShowDialog();
|
||||
if (result == true)
|
||||
{
|
||||
var fileName = fileDialog.FileName;
|
||||
if (fileName.StartsWith(poePath))
|
||||
{
|
||||
fileName = fileName.Replace(poePath, "");
|
||||
}
|
||||
|
||||
if (CustomSoundsAvailable.IndexOf(fileName) < 0)
|
||||
{
|
||||
CustomSoundsAvailable.Add(fileName);
|
||||
OnPropertyChanged(nameof(CustomSoundsAvailable));
|
||||
}
|
||||
Value = fileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,19 @@ namespace Filtration.ObjectModel.ThemeEditor
|
||||
return component;
|
||||
}
|
||||
|
||||
public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, string componentValue)
|
||||
{
|
||||
if (ComponentExists(componentType, componentName))
|
||||
{
|
||||
return Items.FirstOrDefault(t => t.ComponentName == componentName && t.ComponentType == componentType);
|
||||
}
|
||||
|
||||
var component = new StringThemeComponent(componentType, componentName, componentValue);
|
||||
Items.Add(component);
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
private bool ComponentExists(ThemeComponentType componentType, string componentName)
|
||||
{
|
||||
var componentCount =
|
||||
|
||||
@@ -2,4 +2,6 @@
|
||||
<packages>
|
||||
<package id="Castle.Core" version="3.3.0" targetFramework="net461" />
|
||||
<package id="Castle.Windsor" version="3.4.0" targetFramework="net461" />
|
||||
<package id="CommonServiceLocator" version="2.0.2" targetFramework="net461" />
|
||||
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user