Refactoring directory path for UI resource

This commit is contained in:
bao-qian
2016-01-07 04:47:28 +00:00
parent c8a932b6b3
commit 8504d01688
7 changed files with 37 additions and 65 deletions

View File

@@ -0,0 +1,15 @@
using System.IO;
using System.Windows;
using Wox.Infrastructure;
namespace Wox.Core.UI
{
public abstract class Resource
{
public string DirectoryName { get; protected set; }
protected string DirectoryPath => Path.Combine(WoxDirectroy.Executable, DirectoryName);
public abstract ResourceDictionary GetResourceDictionary();
}
}

View File

@@ -25,18 +25,12 @@ namespace Wox.Core.UI
}
}
public static void UpdateResource(Theme.Theme t)
public static void UpdateResource<T>(T t) where T : Resource
{
RemoveResource(Theme.Theme.DirectoryName);
RemoveResource(t.DirectoryName);
Application.Current.Resources.MergedDictionaries.Add(t.GetResourceDictionary());
}
public static void UpdateResources(Internationalization i)
{
RemoveResource(Internationalization.DirectoryName);
Application.Current.Resources.MergedDictionaries.Add(i.GetResourceDictionary());
}
internal static void UpdatePluginLanguages()
{
RemoveResource(PluginManager.DirectoryName);

View File

@@ -14,14 +14,14 @@ using Wox.Infrastructure.Logger;
namespace Wox.Core.Theme
{
public class Theme : IUIResource
public class Theme : Resource
{
public const string DirectoryName = "Themes";
private static List<string> themeDirectories = new List<string>();
static Theme()
public Theme()
{
themeDirectories.Add(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), DirectoryName));
DirectoryName = "Themes";
themeDirectories.Add(DirectoryPath);
MakesureThemeDirectoriesExist();
}
@@ -67,7 +67,7 @@ namespace Wox.Core.Theme
}
}
public ResourceDictionary GetResourceDictionary()
public override ResourceDictionary GetResourceDictionary()
{
var dict = new ResourceDictionary
{

View File

@@ -1,12 +0,0 @@
using System.Windows;
namespace Wox.Core.UI
{
/// <summary>
/// Object implement this interface will have the ability to has its own UI styles
/// </summary>
public interface IUIResource
{
ResourceDictionary GetResourceDictionary();
}
}

View File

@@ -66,13 +66,12 @@
<Compile Include="Updater\WoxUpdateSource.cs" />
<Compile Include="UserSettings\HttpProxy.cs" />
<Compile Include="i18n\AvailableLanguages.cs" />
<Compile Include="i18n\IInternationalization.cs" />
<Compile Include="i18n\Internationalization.cs" />
<Compile Include="i18n\InternationalizationManager.cs" />
<Compile Include="i18n\Language.cs" />
<Compile Include="Theme\ThemeManager.cs" />
<Compile Include="UI\IUIResource.cs" />
<Compile Include="UI\ResourceMerger.cs" />
<Compile Include="Resource\Resource.cs" />
<Compile Include="Resource\ResourceMerger.cs" />
<Compile Include="Plugin\PluginInstaller.cs" />
<Compile Include="Plugin\JsonRPCPlugin.cs" />
<Compile Include="Plugin\JsonRPCPluginLoader.cs" />

View File

@@ -1,24 +0,0 @@
using System.Collections.Generic;
namespace Wox.Core.i18n
{
interface IInternationalization
{
List<Language> LoadAvailableLanguages();
string GetTranslation(string key);
/// <summary>
/// Get language file for current user selected language
/// if couldn't find the current selected language file, it will first try to load en.xaml
/// if en.xaml couldn't find, return empty string
/// </summary>
/// <param name="folder"></param>
/// <returns></returns>
string GetLanguageFile(string folder);
void ChangeLanguage(Language language);
void ChangeLanguage(string languageCode);
}
}

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Windows;
using Wox.Core.UI;
using Wox.Core.UserSettings;
@@ -12,23 +11,21 @@ using Wox.Plugin;
namespace Wox.Core.i18n
{
public class Internationalization : IInternationalization, IUIResource
public class Internationalization : Resource
{
public const string DirectoryName = "Languages";
private static readonly string DefaultDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), DirectoryName);
static Internationalization()
public Internationalization()
{
DirectoryName = "Languages";
MakesureThemeDirectoriesExist();
}
private static void MakesureThemeDirectoriesExist()
private void MakesureThemeDirectoriesExist()
{
if (!Directory.Exists(DefaultDirectory))
if (!Directory.Exists(DirectoryPath))
{
try
{
Directory.CreateDirectory(DefaultDirectory);
Directory.CreateDirectory(DirectoryPath);
}
catch (Exception e)
{
@@ -70,14 +67,16 @@ namespace Wox.Core.i18n
UserSettingStorage.Instance.Language = language.LanguageCode;
UserSettingStorage.Instance.Save();
ResourceMerger.UpdateResources(this);
ResourceMerger.UpdateResource(this);
}
public ResourceDictionary GetResourceDictionary()
public override ResourceDictionary GetResourceDictionary()
{
return new ResourceDictionary
{
Source = new Uri(GetLanguageFile(DefaultDirectory), UriKind.Absolute)
Source = new Uri(GetLanguageFile(DirectoryPath), UriKind.Absolute)
};
}
@@ -124,7 +123,7 @@ namespace Wox.Core.i18n
private string GetLanguagePath(Language language)
{
string path = Path.Combine(DefaultDirectory, language.LanguageCode + ".xaml");
string path = Path.Combine(DirectoryPath, language.LanguageCode + ".xaml");
if (File.Exists(path))
{
return path;
@@ -156,4 +155,5 @@ namespace Wox.Core.i18n
}
}
}