Partition most WinForms and non-SDK classes into appropriate projects

Tried this a couple times previously and failed due to difficulty getting it to compile, but now enough things have been rewritten that the extra work is minimal.
This commit is contained in:
Ben Olden-Cooligan 2022-06-18 17:25:19 -07:00
parent 9eef3e6982
commit 2f2211e1fc
1820 changed files with 597 additions and 486 deletions

View File

@ -4,7 +4,7 @@ namespace NAPS2.EtoForms;
public interface IFormBase
{
FormStateController FormStateController { get; }
IFormStateController FormStateController { get; }
// TODO: Make these constructor injected, Eto requires things to be defined in the constructor so property injection is error-prone
IFormFactory FormFactory { get; set; }

View File

@ -0,0 +1,8 @@
namespace NAPS2.EtoForms;
public interface IFormStateController
{
bool SaveFormState { get; set; }
bool RestoreFormState { get; set; }
string FormName { get; }
}

View File

@ -13,7 +13,7 @@ public class AutoSaver
private readonly ErrorOutput _errorOutput;
private readonly DialogHelper _dialogHelper;
private readonly OperationProgress _operationProgress;
private readonly ISaveNotify? _notify;
private readonly ISaveNotify _notify;
private readonly PdfExporter _pdfExporter;
private readonly OverwritePrompt _overwritePrompt;
private readonly ScopedConfig _config;
@ -114,7 +114,7 @@ public class AutoSaver
}
}
// TODO: Shouldn't this give duplicate notifications?
if (_notify != null && scans.Count > 1 && ok)
if (scans.Count > 1 && ok)
{
// Can't just do images.Count because that includes patch codes
int imageCount = scans.SelectMany(x => x).Count();
@ -159,7 +159,7 @@ public class AutoSaver
bool success = await op.Success;
if (success && doNotify)
{
_notify?.PdfSaved(subPath);
_notify.PdfSaved(subPath);
}
return (success, subPath);
}
@ -173,7 +173,7 @@ public class AutoSaver
bool success = await op.Success;
if (success && doNotify)
{
_notify?.ImagesSaved(images.Count, op.FirstFileSaved);
_notify.ImagesSaved(images.Count, op.FirstFileSaved);
}
return (success, subPath);
}

View File

@ -6,13 +6,15 @@ namespace NAPS2.ImportExport.Email.Mapi;
public class MapiEmailProvider : IEmailProvider
{
private readonly IWorkerFactory _workerFactory;
private readonly IMapiWrapper _mapiWrapper;
private readonly MapiDispatcher _mapiDispatcher;
private readonly IConfigProvider<EmailSetup> _emailSetupProvider;
private readonly ErrorOutput _errorOutput;
public MapiEmailProvider(IWorkerFactory workerFactory, IMapiWrapper mapiWrapper, ErrorOutput errorOutput)
public MapiEmailProvider(IWorkerFactory workerFactory, MapiDispatcher mapiDispatcher, IConfigProvider<EmailSetup> emailSetupProvider, ErrorOutput errorOutput)
{
_workerFactory = workerFactory;
_mapiWrapper = mapiWrapper;
_mapiDispatcher = mapiDispatcher;
_emailSetupProvider = emailSetupProvider;
_errorOutput = errorOutput;
}
@ -29,17 +31,8 @@ public class MapiEmailProvider : IEmailProvider
{
return Task.Run(async () =>
{
MapiSendMailReturnCode returnCode;
if (UseWorker && !_mapiWrapper.CanLoadClient)
{
using var worker = _workerFactory.Create();
returnCode = await worker.Service.SendMapiEmail(message);
}
else
{
returnCode = await _mapiWrapper.SendEmail(message);
}
var clientName = _emailSetupProvider.Get(c => c.SystemProviderName);
MapiSendMailReturnCode returnCode = await _mapiDispatcher.SendEmail(clientName, message);
// Process the result
if (returnCode == MapiSendMailReturnCode.UserAbort)

View File

@ -10,7 +10,8 @@ public class SavePdfOperation : OperationBase
private readonly OverwritePrompt _overwritePrompt;
private readonly IEmailProviderFactory? _emailProviderFactory;
public SavePdfOperation(PdfExporter pdfExporter, OverwritePrompt overwritePrompt, IEmailProviderFactory? emailProviderFactory = null)
public SavePdfOperation(PdfExporter pdfExporter, OverwritePrompt overwritePrompt,
IEmailProviderFactory? emailProviderFactory = null)
{
_pdfExporter = pdfExporter;
_overwritePrompt = overwritePrompt;
@ -20,12 +21,14 @@ public class SavePdfOperation : OperationBase
AllowBackground = true;
}
public bool Start(string fileName, Placeholders placeholders, ICollection<ProcessedImage> images, IConfigProvider<PdfSettings> pdfSettings, OcrParams ocrParams)
public bool Start(string fileName, Placeholders placeholders, ICollection<ProcessedImage> images,
IConfigProvider<PdfSettings> pdfSettings, OcrParams ocrParams)
{
return Start(fileName, placeholders, images, pdfSettings, ocrParams, false, null);
}
public bool Start(string fileName, Placeholders placeholders, ICollection<ProcessedImage> images, IConfigProvider<PdfSettings> pdfSettings, OcrParams ocrParams, bool email, EmailMessage? emailMessage)
public bool Start(string fileName, Placeholders placeholders, ICollection<ProcessedImage> images,
IConfigProvider<PdfSettings> pdfSettings, OcrParams ocrParams, bool email, EmailMessage? emailMessage)
{
ProgressTitle = email ? MiscResources.EmailPdfProgress : MiscResources.SavePdfProgress;
var subFileName = placeholders.Substitute(fileName);
@ -53,7 +56,10 @@ public class SavePdfOperation : OperationBase
bool result = false;
try
{
result = await _pdfExporter.Export(subFileName, images, pdfSettings, ocrParams, OnProgress, CancelToken);
// TODO: I forget this actually won't work, as we need to access the metadata/encryption subpart.
result = await _pdfExporter.Export(subFileName, images,
new PdfExportParams(pdfSettings.Get(c => c.Metadata), pdfSettings.Get(c => c.Encryption),
pdfSettings.Get(c => c.Compat)), ocrParams, OnProgress, CancelToken);
}
catch (UnauthorizedAccessException ex)
{

View File

@ -36,7 +36,6 @@ public class CommonModule : NinjectModule
// Scan
Bind<IScanPerformer>().To<ScanPerformer>();
Bind<IBatchScanPerformer>().To<BatchScanPerformer>();
Bind<ILocalPostProcessor>().To<LocalPostProcessor>();
Bind<IRemotePostProcessor>().To<RemotePostProcessor>();
Bind<IScanBridgeFactory>().To<ScanBridgeFactory>();
@ -59,8 +58,6 @@ public class CommonModule : NinjectModule
// Misc
Bind<IFormFactory>().To<NinjectFormFactory>();
Bind<NotificationManager>().ToSelf().InSingletonScope();
Bind<ISaveNotify>().ToMethod(ctx => ctx.Kernel.Get<NotificationManager>());
Bind<IOperationFactory>().To<NinjectOperationFactory>();
Bind<ILogger>().To<NLogLogger>().InSingletonScope();
Bind<UiImageList>().ToSelf().InSingletonScope();

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>NAPS2</RootNamespace>
<Title>NAPS2 (Not Another PDF Scanner 2)</Title>
@ -10,7 +11,7 @@
</PropertyGroup>
<Import Project="..\NAPS2.Setup\CommonTargets.targets" />
<Import Project="..\NAPS2.Setup\SdkUsers.targets" />
<Import Project="..\NAPS2.Setup\LibUsers.targets" />
<ItemGroup>
<ProjectReference Include="..\NAPS2.Sdk\NAPS2.Sdk.csproj" />
@ -19,4 +20,10 @@
<PackageReference Include="NLog" Version="4.5.8" />
</ItemGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>NAPS2.Lib.Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>

View File

@ -291,10 +291,12 @@ internal class ScanPerformer : IScanPerformer
return new ScanDevice(wiaDevice.Id(), wiaDevice.Name());
}
// Other drivers do not, so use a generic dialog
var deviceForm = _formFactory.Create<FSelectDevice>();
deviceForm.DeviceList = await new ScanController(_scanningContext).GetDeviceList(options);
deviceForm.ShowDialog(new Win32Window(options.DialogParent));
return deviceForm.SelectedDevice;
// TODO: Figure out whether the console should allow UI, and then fix this appropriately.
// // Other drivers do not, so use a generic dialog
// var deviceForm = _formFactory.Create<FSelectDevice>();
// deviceForm.DeviceList = await new ScanController(_scanningContext).GetDeviceList(options);
// deviceForm.ShowDialog(new Win32Window(options.DialogParent));
// return deviceForm.SelectedDevice;
return null;
}
}

View File

@ -0,0 +1,12 @@
namespace NAPS2.Util;
public class SaveNotifyStub : ISaveNotify
{
public void PdfSaved(string path)
{
}
public void ImagesSaved(int imageCount, string path)
{
}
}

View File

@ -17,5 +17,6 @@ public class ConsoleModule : NinjectModule
Bind<IComponentInstallPrompt>().To<ConsoleComponentInstallPrompt>();
Bind<DialogHelper>().To<WinFormsDialogHelper>(); // TODO: We don't really want this, but it is an explicit option, so it's okay for now...
Bind<ConsoleOutput>().ToSelf().WithConstructorArgument("writer", Console.Out);
Bind<ISaveNotify>().To<SaveNotifyStub>();
}
}

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>NAPS2</RootNamespace>
<Title>NAPS2 (Not Another PDF Scanner 2)</Title>
@ -10,10 +11,12 @@
</PropertyGroup>
<Import Project="..\NAPS2.Setup\CommonTargets.targets" />
<Import Project="..\NAPS2.Setup\SdkUsers.targets" />
<Import Project="..\NAPS2.Setup\LibUsers.targets" />
<ItemGroup>
<ProjectReference Include="..\NAPS2.Lib.Common\NAPS2.Lib.Common.csproj" />
<!-- TODO: Do we want to remove this reference? -->
<ProjectReference Include="..\NAPS2.Lib.WinForms\NAPS2.Lib.WinForms.csproj" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>

View File

@ -1,7 +1,8 @@
using NAPS2.Serialization;
using NAPS2.Sdk.Tests;
using NAPS2.Serialization;
using Xunit;
namespace NAPS2.Sdk.Tests.Config;
namespace NAPS2.Lib.Tests.Config;
public class CommonConfigTests : ContextualTexts
{

View File

@ -1,7 +1,7 @@
using NAPS2.Scan;
using Xunit;
namespace NAPS2.Sdk.Tests.Config;
namespace NAPS2.Lib.Tests.Config;
public class ConfigCopierTests
{

View File

@ -1,6 +1,7 @@
using Xunit;
using NAPS2.Sdk.Tests;
using Xunit;
namespace NAPS2.Sdk.Tests.Config;
namespace NAPS2.Lib.Tests.Config;
public class ConfigScopeTests : ContextualTexts
{

View File

@ -1,8 +1,9 @@
using NAPS2.Scan;
using NAPS2.Sdk.Tests;
using NAPS2.Serialization;
using Xunit;
namespace NAPS2.Sdk.Tests.Config;
namespace NAPS2.Lib.Tests.Config;
public class ProfileSerializerTests : ContextualTexts
{

View File

@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace NAPS2.Sdk.Tests.Config {
namespace NAPS2.Lib.Tests.Config {
using System;
@ -39,7 +39,7 @@ namespace NAPS2.Sdk.Tests.Config {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NAPS2.Sdk.Tests.Config.ProfileSerializerTestsData", typeof(ProfileSerializerTestsData).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NAPS2.Lib.Tests.Config.ProfileSerializerTestsData", typeof(ProfileSerializerTestsData).Assembly);
resourceMan = temp;
}
return resourceMan;

View File

@ -7,7 +7,7 @@
<Import Project="..\NAPS2.Setup\CommonTargets.targets" />
<Import Project="..\NAPS2.Setup\NativeLibs.targets" />
<Import Project="..\NAPS2.Setup\SdkUsers.targets" />
<Import Project="..\NAPS2.Setup\LibUsers.targets" />
<ItemGroup>
<Reference Include="System.Windows.Forms" />

View File

@ -9,6 +9,8 @@ namespace NAPS2.Sdk.Tests.WinForms;
public class BatchFormTests : ContextualTexts
{
private readonly IProfileManager _profileManager = new StubProfileManager();
[Fact]
public void LoadUserConfig()
{
@ -26,12 +28,12 @@ public class BatchFormTests : ContextualTexts
ProfileDisplayName = "test_name"
}
});
ProfileManager.Mutate(new ListMutation<ScanProfile>.Append(new ScanProfile
_profileManager.Mutate(new ListMutation<ScanProfile>.Append(new ScanProfile
{
DisplayName = "bad_name",
IsDefault = true
}), ListSelection.Empty<ScanProfile>());
ProfileManager.Mutate(new ListMutation<ScanProfile>.Append(new ScanProfile
_profileManager.Mutate(new ListMutation<ScanProfile>.Append(new ScanProfile
{
DisplayName = "test_name"
}), ListSelection.Empty<ScanProfile>());
@ -61,7 +63,7 @@ public class BatchFormTests : ContextualTexts
DialogHelper = new Mock<DialogHelper>(),
Config = ScopedConfig.Stub()
};
ctx.Form = new FBatchScan(ctx.Performer.Object, ctx.ErrorOutput.Object, ctx.DialogHelper.Object, ProfileManager)
ctx.Form = new FBatchScan(ctx.Performer.Object, ctx.ErrorOutput.Object, ctx.DialogHelper.Object, _profileManager)
{
Config = ctx.Config
};

View File

@ -11,7 +11,7 @@ public abstract class EtoDialogBase : Dialog, IFormBase
FormStateController = new FormStateController(this, scopedConfig);
}
public FormStateController FormStateController { get; }
public IFormStateController FormStateController { get; }
public IFormFactory FormFactory { get; set; }

View File

@ -11,7 +11,7 @@ public abstract class EtoFormBase : Form, IFormBase
FormStateController = new FormStateController(this, scopedConfig);
}
public FormStateController FormStateController { get; }
public IFormStateController FormStateController { get; }
public IFormFactory FormFactory { get; set; }

View File

@ -2,7 +2,7 @@ using Eto.Forms;
namespace NAPS2.EtoForms;
public class FormStateController
public class FormStateController : IFormStateController
{
private readonly Window _window;
private readonly ScopedConfig _config;

View File

@ -2,7 +2,9 @@
using NAPS2.EtoForms;
using NAPS2.EtoForms.WinForms;
using NAPS2.ImportExport.Pdf;
using NAPS2.Scan.Batch;
using NAPS2.WinForms;
using Ninject;
using Ninject.Modules;
namespace NAPS2.Modules;
@ -11,6 +13,7 @@ public class WinFormsModule : NinjectModule
{
public override void Load()
{
Bind<IBatchScanPerformer>().To<BatchScanPerformer>();
Bind<IPdfPasswordProvider>().To<WinFormsPdfPasswordProvider>();
Bind<ErrorOutput>().To<MessageBoxErrorOutput>();
Bind<OverwritePrompt>().To<WinFormsOverwritePrompt>();
@ -18,5 +21,7 @@ public class WinFormsModule : NinjectModule
Bind<IComponentInstallPrompt>().To<WinFormsComponentInstallPrompt>();
Bind<DialogHelper>().To<WinFormsDialogHelper>();
Bind<IEtoPlatform>().To<WinFormsEtoPlatform>();
Bind<NotificationManager>().ToSelf().InSingletonScope();
Bind<ISaveNotify>().ToMethod(ctx => ctx.Kernel.Get<NotificationManager>());
}
}

View File

@ -10,11 +10,364 @@
</PropertyGroup>
<Import Project="..\NAPS2.Setup\CommonTargets.targets" />
<Import Project="..\NAPS2.Setup\SdkUsers.targets" />
<Import Project="..\NAPS2.Setup\LibUsers.targets" />
<ItemGroup>
<Reference Include="NTwain, Version=3.0.0.0, Culture=neutral, PublicKeyToken=f9f7e0c5169536c8, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\NAPS2.Setup\lib\NTwain.dll</HintPath>
</Reference>
<ProjectReference Include="..\NAPS2.Lib.Common\NAPS2.Lib.Common.csproj" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>NAPS2.Lib.Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="Lang\Resources\SettingsResources.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="Lang\Resources\SettingsResources.*.resx">
<DependentUpon>SettingsResources.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Remove="Lang\Resources\MiscResources.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="Lang\Resources\MiscResources.*.resx">
<DependentUpon>MiscResources.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\EmailProviderWidget.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\EmailProviderWidget.*.resx">
<DependentUpon>EmailProviderWidget.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\EmailProviderWidget.resx">
<DependentUpon>EmailProviderWidget.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FAdvancedScanSettings.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FAdvancedScanSettings.*.resx">
<DependentUpon>FAdvancedScanSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FAdvancedScanSettings.resx">
<DependentUpon>FAdvancedScanSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FAuthorize.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FAuthorize.*.resx">
<DependentUpon>FAuthorize.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FAuthorize.resx">
<DependentUpon>FAuthorize.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FAutoSaveSettings.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FAutoSaveSettings.*.resx">
<DependentUpon>FAutoSaveSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FAutoSaveSettings.resx">
<DependentUpon>FAutoSaveSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FBatchPrompt.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FBatchPrompt.*.resx">
<DependentUpon>FBatchPrompt.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FBatchPrompt.resx">
<DependentUpon>FBatchPrompt.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FBatchScan.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FBatchScan.*.resx">
<DependentUpon>FBatchScan.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FBatchScan.resx">
<DependentUpon>FBatchScan.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FBlackWhite.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FBlackWhite.*.resx">
<DependentUpon>FBlackWhite.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FBlackWhite.resx">
<DependentUpon>FBlackWhite.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FBrightnessContrast.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FBrightnessContrast.*.resx">
<DependentUpon>FBrightnessContrast.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FBrightnessContrast.resx">
<DependentUpon>FBrightnessContrast.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FCrop.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FCrop.*.resx">
<DependentUpon>FCrop.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FCrop.resx">
<DependentUpon>FCrop.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FDesktop.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FDesktop.*.resx">
<DependentUpon>FDesktop.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FDesktop.resx">
<DependentUpon>FDesktop.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FDownloadProgress.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FDownloadProgress.*.resx">
<DependentUpon>FDownloadProgress.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FDownloadProgress.resx">
<DependentUpon>FDownloadProgress.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FEditProfile.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FEditProfile.*.resx">
<DependentUpon>FEditProfile.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FEditProfile.resx">
<DependentUpon>FEditProfile.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FEmailProvider.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FEmailProvider.*.resx">
<DependentUpon>FEmailProvider.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FEmailProvider.resx">
<DependentUpon>FEmailProvider.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FEmailSettings.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FEmailSettings.*.resx">
<DependentUpon>FEmailSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FEmailSettings.resx">
<DependentUpon>FEmailSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FError.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FError.*.resx">
<DependentUpon>FError.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FError.resx">
<DependentUpon>FError.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FHueSaturation.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FHueSaturation.*.resx">
<DependentUpon>FHueSaturation.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FHueSaturation.resx">
<DependentUpon>FHueSaturation.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FImageSettings.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FImageSettings.*.resx">
<DependentUpon>FImageSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FImageSettings.resx">
<DependentUpon>FImageSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FOcrLanguageDownload.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FOcrLanguageDownload.*.resx">
<DependentUpon>FOcrLanguageDownload.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FOcrLanguageDownload.resx">
<DependentUpon>FOcrLanguageDownload.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FOcrSetup.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FOcrSetup.*.resx">
<DependentUpon>FOcrSetup.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FOcrSetup.resx">
<DependentUpon>FOcrSetup.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FPageSize.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FPageSize.*.resx">
<DependentUpon>FPageSize.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FPageSize.resx">
<DependentUpon>FPageSize.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FPdfPassword.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FPdfPassword.*.resx">
<DependentUpon>FPdfPassword.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FPdfPassword.resx">
<DependentUpon>FPdfPassword.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FPdfSettings.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FPdfSettings.*.resx">
<DependentUpon>FPdfSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FPdfSettings.resx">
<DependentUpon>FPdfSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FPlaceholders.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FPlaceholders.*.resx">
<DependentUpon>FPlaceholders.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FPlaceholders.resx">
<DependentUpon>FPlaceholders.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FProfiles.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FProfiles.*.resx">
<DependentUpon>FProfiles.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FProgress.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FProgress.*.resx">
<DependentUpon>FProgress.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FProgress.resx">
<DependentUpon>FProgress.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FProxyConfig.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FProxyConfig.*.resx">
<DependentUpon>FProxyConfig.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FProxyConfig.resx">
<DependentUpon>FProxyConfig.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FRecover.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FRecover.*.resx">
<DependentUpon>FRecover.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FRecover.resx">
<DependentUpon>FRecover.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FRotate.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FRotate.*.resx">
<DependentUpon>FRotate.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FRotate.resx">
<DependentUpon>FRotate.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FScanProgress.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FScanProgress.*.resx">
<DependentUpon>FScanProgress.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FScanProgress.resx">
<DependentUpon>FScanProgress.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FSelectDevice.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FSelectDevice.*.resx">
<DependentUpon>FSelectDevice.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FSelectDevice.resx">
<DependentUpon>FSelectDevice.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FSharpen.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FSharpen.*.resx">
<DependentUpon>FSharpen.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FSharpen.resx">
<DependentUpon>FSharpen.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FTwainGui.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FTwainGui.*.resx">
<DependentUpon>FTwainGui.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FTwainGui.resx">
<DependentUpon>FTwainGui.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\FViewer.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\FViewer.*.resx">
<DependentUpon>FViewer.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\FViewer.resx">
<DependentUpon>FViewer.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\NotifyWidget.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\NotifyWidget.*.resx">
<DependentUpon>NotifyWidget.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\NotifyWidget.resx">
<DependentUpon>NotifyWidget.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\ThumbnailList.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\ThumbnailList.*.resx">
<DependentUpon>ThumbnailList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\ThumbnailList.resx">
<DependentUpon>ThumbnailList.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\TiffViewer.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\TiffViewer.*.resx">
<DependentUpon>TiffViewer.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\TiffViewer.resx">
<DependentUpon>TiffViewer.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Remove="WinForms\TiffViewerCtl.*.resx" Condition="'$(Configuration)' == 'Debug'" />
<EmbeddedResource Update="WinForms\TiffViewerCtl.*.resx">
<DependentUpon>TiffViewerCtl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="WinForms\TiffViewerCtl.resx">
<DependentUpon>TiffViewerCtl.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More