public void TestDefaultSetting() { var setting = new UserSetting(false); Assert.IsTrue(setting.Load(), "Load from registry"); setting.PostProcess = Parameter.PostProcesses.None; ExecConvert(setting, ""); }
/* ----------------------------------------------------------------- */ /// /// ExecConvert /// /// <summary> /// 変換処理を実行します。このメソッドは、CubePDF メイン画面が表示 /// されない設定の場合に実行されます。 /// </summary> /// /* ----------------------------------------------------------------- */ private static void ExecConvert(UserSetting setting) { var converter = new Converter(); converter.Run(setting); foreach (var message in converter.Messages) Trace.WriteLine(message.ToString()); if (setting.DeleteOnClose && IoEx.File.Exists(setting.InputPath)) { IoEx.File.Delete(setting.InputPath); } }
/* ----------------------------------------------------------------- */ /// /// CheckUpdate /// /// <summary> /// アップデートの確認が必要であるかどうかを判断し、必要であれば /// 確認用のプログラムを実行します。 /// </summary> /// /* ----------------------------------------------------------------- */ private static void CheckUpdate(UserSetting setting) { try { if (!setting.CheckUpdate || string.IsNullOrEmpty(setting.InstallPath) || DateTime.Now <= setting.LastCheckUpdate.AddDays(1)) return; var path = IoEx.Path.Combine(setting.InstallPath, "cubepdf-checker.exe"); Process.Start(path); } catch (Exception err) { CubePdf.Message.Trace(err.ToString()); } }
/* ----------------------------------------------------------------- */ /// /// MainForm (constructor) /// /// <summary> /// 引数に指定されたユーザ設定を用いて、オブジェクトを初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ public MainForm(UserSetting setting) { InitializeComponent(); InitializeComboAppearance(); this._setting = setting; this.UpgradeSetting(_setting); this.LoadSetting(_setting); var edition = (IntPtr.Size == 4) ? "x86" : "x64"; this.Text = String.Format("CubePDF {0} ({1})", _setting.Version, edition); }
/* ----------------------------------------------------------------- */ /// /// MainForm (constructor) /// /// <summary> /// 引数に指定されたユーザ設定を用いて、オブジェクトを初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ public MainForm(UserSetting setting) { InitializeComponent(); InitializeComboBox(); InitializePasswordTextBox(); _setting = setting; UpgradeSetting(_setting); LoadSetting(_setting); var name = Properties.Resources.ProductName; var version = _setting.Version; var edition = (IntPtr.Size == 4) ? "x86" : "x64"; Text = string.Format("{0} {1} ({2})", name, version, edition); }
static void Main(string[] args) { var exec = System.Reflection.Assembly.GetEntryAssembly(); var dir = System.IO.Path.GetDirectoryName(exec.Location); var setting = new UserSetting(false); SetupLog(dir + @"\cubepdf.log"); Trace.WriteLine(String.Format("{0} [INFO] CubePDF version {1} ({2})", DateTime.Now.ToString(), setting.Version, ((IntPtr.Size == 4) ? "x86" : "x64"))); Trace.WriteLine(String.Format("{0} [INFO] Arguments", DateTime.Now.ToString())); foreach (var s in args) Trace.WriteLine("\t" + s); SetupUserSetting(setting, args); CheckUpdate(setting); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm(setting)); Trace.Close(); }
/* ----------------------------------------------------------------- */ /// /// AssertRun /// /// <summary> /// Converter クラスの実行をチェックします。 /// </summary> /// /* ----------------------------------------------------------------- */ private void AssertRun(UserSetting setting, string suffix) { var basename = IoEx.Path.GetFileNameWithoutExtension(setting.InputPath); var extension = Parameter.GetExtension((Parameter.FileTypes)setting.FileType); setting.LibPath = IoEx.Path.Combine(_root, "Ghostscript"); setting.OutputPath = IoEx.Path.Combine(_results, basename + suffix + extension); if (setting.ExistedFile == Parameter.ExistedFiles.Overwrite) IoEx.File.Delete(setting.OutputPath); var converter = new Converter(); converter.Run(setting); var error = GetErrorMessage(converter); Assert.IsTrue(string.IsNullOrEmpty(error), string.Format("{0}:{1}", setting.InputPath, error)); if (!IoEx.File.Exists(setting.OutputPath)) { var dest = String.Format("{0}\\{1}-001{2}", IoEx.Path.GetDirectoryName(setting.OutputPath), IoEx.Path.GetFileNameWithoutExtension(setting.OutputPath), IoEx.Path.GetExtension(setting.OutputPath) ); Assert.IsTrue(IoEx.File.Exists(dest), setting.OutputPath); } else if (setting.FileType == Parameter.FileTypes.PDF) AssertPdf(setting); }
public void TestSaveNotFoundPath() { using (var saver = new UserSettingSaver()) { var test = new UserSetting(false); Assert.IsTrue(test.Load(), "Load from registry"); string not_found = @"C:\404_notfound\foo\bar\bas\foo.txt"; test.OutputPath = not_found; test.InputPath = not_found; Assert.IsTrue(test.Save(), "Save to registry"); Assert.IsTrue(test.Load(), "Load from registry (second)"); Assert.AreEqual(not_found, test.OutputPath, "LastAccess"); Assert.AreEqual(not_found, test.InputPath, "LastInputAccess"); } }
public void TestSaveEmptyString() { using (var saver = new UserSettingSaver()) { string dummy = "dummy"; var test = new UserSetting(false); test.InputPath = dummy; test.OutputPath = dummy; test.UserProgram = dummy; test.UserArguments = dummy; Assert.IsTrue(test.Save(), "Save from registry"); Assert.IsTrue(test.Load(), "Load from registry"); Assert.AreEqual(dummy, test.OutputPath, "LastAccess"); Assert.AreEqual(dummy, test.InputPath, "LastInputAccess"); Assert.AreEqual(dummy, test.UserProgram, "UserProgram"); Assert.AreEqual(dummy, test.UserArguments, "UserArguments"); string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); test.InputPath = string.Empty; test.OutputPath = string.Empty; test.UserProgram = string.Empty; test.UserArguments = string.Empty; Assert.IsTrue(test.Save(), "Save from registry (second)"); Assert.IsTrue(test.Load(), "Load from registry (second)"); Assert.AreEqual(desktop, test.OutputPath, "LastAccess"); // empty ではない Assert.AreEqual(desktop, test.InputPath, "LastInputAccess"); // empty ではない Assert.AreEqual(string.Empty, test.UserProgram, "UserProgram"); Assert.AreEqual(string.Empty, test.UserArguments, "UserArguments"); } }
public void TestRegisterUpdateChecker() { using (var saver = new UserSettingSaver()) { var test = new UserSetting(false); Assert.IsTrue(test.Load(), "Load from registry"); test.CheckUpdate = true; Assert.IsTrue(test.Save(), "Save to registry (CheckUpdate = true)"); { var subkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", false); Assert.IsTrue(subkey != null, @"HKCU\Software\Microsoft\Windows\CurrentVersion\Run"); Assert.IsTrue(subkey.GetValue("cubepdf-checker") != null); } test.CheckUpdate = false; Assert.IsTrue(test.Save(), "Save to registry (CheckUpdate = false)"); { var subkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", false); Assert.IsTrue(subkey != null, @"HKCU\Software\Microsoft\Windows\CurrentVersion\Run"); Assert.IsTrue(subkey.GetValue("cubepdf-checker") == null); } } }
/* ----------------------------------------------------------------- */ /// /// IsExecutable /// /// <summary> /// ポストプロセスが実行可能かどうかをチェックすします。 /// </summary> /// /// <remarks> /// 判別方法は、以下の通りです。 /// /// 1. Open が指定された場合は関連付けられているかどうか。 /// 2. UserProgram が指定された場合は指定されたプログラムが存在して /// いるかどうか。 /// </remarks> /// /* ----------------------------------------------------------------- */ private bool IsExecutable(UserSetting setting) { if (setting.PostProcess == Parameter.PostProcesses.Open) { string ext = Parameter.Extension(setting.FileType); if (!CubePdf.Utility.IsAssociate(ext)) { // NOTE: 関連付けされていない場合は、単純にスキップする(エラーメッセージを表示しない)。 _messages.Add(new Message(Message.Levels.Debug, String.Format(Properties.Resources.FileNotRelated, ext))); return false; } } else if (setting.PostProcess == Parameter.PostProcesses.UserProgram && setting.UserProgram.Length > 0) { if (!File.Exists(setting.UserProgram)) { _messages.Add(new Message(Message.Levels.Error, String.Format(Properties.Resources.ProgramNotFound, setting.UserProgram))); return false; } } return true; }
/* ----------------------------------------------------------------- */ /// /// UpgradeSetting /// /// <summary> /// 古いバージョンからの移行した場合、レジストリの整合性を取るため /// にアップグレードを行います。 /// </summary> /// /* ----------------------------------------------------------------- */ private void UpgradeSetting(UserSetting setting) { string v1 = @"Software\CubePDF"; if (Microsoft.Win32.Registry.CurrentUser.OpenSubKey(v1, false) != null) { setting.UpgradeFromV1(v1); Microsoft.Win32.Registry.CurrentUser.DeleteSubKey(v1, false); } }
/* ----------------------------------------------------------------- */ /// /// RunConverter /// /// <summary> /// Ghostscript に必要な設定を行った後、変換処理を実行します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void RunConverter(UserSetting setting) { var gs = Configure(setting, setting.InputPath, setting.OutputPath); gs.Run(); AddMessage("CubePdf.Converter.RunConverter: success"); }
/* ----------------------------------------------------------------- */ /// /// RecoverIf /// /// <summary> /// 結合オプションなどの関係で退避させたファイルが存在する状況で /// エラーが発生した場合、退避させたファイルを復帰させます。 /// </summary> /// /* ----------------------------------------------------------------- */ private void RecoverIf(UserSetting setting) { if (string.IsNullOrEmpty(_escaped) || !IoEx.File.Exists(_escaped)) return; CubePdf.Misc.File.Move(_escaped, setting.OutputPath, true); AddMessage(string.Format("Recover: {0} -> {1}", _escaped, setting.OutputPath)); }
/* ----------------------------------------------------------------- */ /// /// FileExists /// /// <summary> /// ユーザ設定で指定されたファイルが存在するかどうか判別します。 /// </summary> /// /// <remarks> /// いくつかのファイルタイプでは、example-001.ext と言ったファイル名を /// 生成する事があるので、そのケースもチェックします。 /// </remarks> /// /* ----------------------------------------------------------------- */ private bool FileExists(UserSetting setting) { if (IoEx.File.Exists(setting.OutputPath)) return true; else if (setting.FileType == Parameter.FileTypes.EPS || setting.FileType == Parameter.FileTypes.BMP || setting.FileType == Parameter.FileTypes.JPEG || setting.FileType == Parameter.FileTypes.PNG || setting.FileType == Parameter.FileTypes.TIFF) { var dir = IoEx.Path.GetDirectoryName(setting.OutputPath); var basename = IoEx.Path.GetFileNameWithoutExtension(setting.OutputPath); var ext = IoEx.Path.GetExtension(setting.OutputPath); if (IoEx.File.Exists(IoEx.Path.Combine(dir, basename + "-001" + ext))) return true; } return false; }
/* ----------------------------------------------------------------- */ /// /// EscapeIf /// /// <summary> /// 結合オプションなどの関係で既に存在する同名ファイルを退避させます。 /// </summary> /// /// <remarks> /// リネームの場合は、退避させる代わりに UserSetting.OutputPath /// プロパティの値を変更します。 /// </remarks> /// /* ----------------------------------------------------------------- */ private void EscapeIf(UserSetting setting) { if (!FileExists(setting)) return; var is_merge = setting.ExistedFile == Parameter.ExistedFiles.MergeTail || setting.ExistedFile == Parameter.ExistedFiles.MergeHead; if (setting.ExistedFile == Parameter.ExistedFiles.Rename) { var directory = IoEx.Path.GetDirectoryName(setting.OutputPath); var basename = IoEx.Path.GetFileNameWithoutExtension(setting.OutputPath); var extension = IoEx.Path.GetExtension(setting.OutputPath); for (var i = 2; i < 10000; ++i) { var old = IoEx.Path.GetFileName(setting.OutputPath); var filename = string.Format("{0}({1}){2}", basename, i, extension); setting.OutputPath = IoEx.Path.Combine(directory, filename); AddMessage(string.Format("Rename: {0} -> {1}", old, filename)); if (!FileExists(setting)) break; } } else if (setting.FileType == Parameter.FileTypes.PDF && is_merge) { _escaped = IoEx.Path.Combine(Path.WorkingDirectory, IoEx.Path.GetRandomFileName()); IoEx.File.Copy(setting.OutputPath, _escaped, true); AddMessage(string.Format("Escape: {0} -> {1}", setting.OutputPath, _escaped)); } }
/* ----------------------------------------------------------------- */ /// /// SaveSetting /// /// <summary> /// 各種 GUI コンポーネントの情報を UserSetting に反映します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void SaveSetting(UserSetting setting) { string path = this.OutputPathTextBox.Text; setting.OutputPath = (path.Length == 0 || Directory.Exists(path)) ? path : Path.GetDirectoryName(path); path = this.InputPathTextBox.Text; setting.InputPath = (path.Length == 0 || Directory.Exists(path)) ? path : Path.GetDirectoryName(path); setting.UserProgram = this.UserProgramTextBox.Text; // コンボボックスのインデックス関連 setting.FileType = Translator.IndexToFileType(this.FileTypeCombBox.SelectedIndex); setting.PDFVersion = Translator.IndexToPDFVersion(this.PDFVersionComboBox.SelectedIndex); setting.Resolution = Translator.IndexToResolution(this.ResolutionComboBox.SelectedIndex); setting.ExistedFile = Translator.IndexToExistedFile(this.ExistedFileComboBox.SelectedIndex); setting.PostProcess = Translator.IndexToPostProcess(_postproc.SelectedIndex); setting.DownSampling = Translator.IndexToDownSampling(this.DownSamplingComboBox.SelectedIndex); // チェックボックスのフラグ関連 setting.PageRotation = this.PageLotationCheckBox.Checked; setting.EmbedFont = this.EmbedFontCheckBox.Checked; setting.Grayscale = this.GrayscaleCheckBox.Checked; setting.ImageFilter = this.ImageFilterCheckBox.Checked ? Parameter.ImageFilters.DCTEncode : Parameter.ImageFilters.FlateEncode; setting.WebOptimize = this.WebOptimizeCheckBox.Checked; setting.CheckUpdate = this.UpdateCheckBox.Checked; // 文書プロパティ setting.Document.Title = this.DocTitleTextBox.Text; setting.Document.Author = this.DocAuthorTextBox.Text; setting.Document.Subtitle = this.DocSubtitleTextBox.Text; setting.Document.Keyword = this.DocKeywordTextBox.Text; // パスワード if (this.OwnerPasswordCheckBox.Checked) { setting.Permission.Password = String.Copy(this.OwnerPasswordTextBox.Text); setting.Permission.AllowPrint = this.AllowPrintCheckBox.Checked; setting.Permission.AllowCopy = this.AllowCopyCheckBox.Checked; setting.Permission.AllowFormInput = this.AllowFormInputCheckBox.Checked; setting.Permission.AllowModify = this.AllowModifyCheckBox.Checked; if (this.RequiredUserPasswordCheckBox.Checked) { setting.Password = String.Copy(this.UserPasswordCheckBox.Checked ? this.UserPasswordTextBox.Text : this.OwnerPasswordTextBox.Text); } } // ログ出力 _messages.Add(new Message(Message.Levels.Debug, "CubePdf.MainForm.SaveSetting")); _messages.Add(new Message(Message.Levels.Debug, setting.ToString())); }
/* ----------------------------------------------------------------- */ /// /// RunEditor /// /// <summary> /// Ghostscript で変換したファイルに対して、必要な後処理を実行します。 /// </summary> /// /// <remarks> /// 現在、PDF ファイル以外への後処理は存在しません。 /// </remarks> /// /* ----------------------------------------------------------------- */ private void RunEditor(UserSetting setting) { if (setting.FileType != Parameter.FileTypes.PDF) return; var editor = new Editor(); editor.Version = setting.PDFVersion; editor.Document = setting.Document; editor.Permission = setting.Permission; editor.UserPassword = setting.Password; // 結合順序を考慮してファイルを追加する。 var head = setting.ExistedFile == Parameter.ExistedFiles.MergeHead && !string.IsNullOrEmpty(_escaped); var tail = setting.ExistedFile == Parameter.ExistedFiles.MergeTail && !string.IsNullOrEmpty(_escaped); if (tail) editor.Files.Add(_escaped); editor.Files.Add(setting.OutputPath); if (head) editor.Files.Add(_escaped); var tmp = IoEx.Path.Combine(Path.WorkingDirectory, IoEx.Path.GetRandomFileName()); editor.Run(tmp); AddMessage(string.Format("CubePdf.PageBinder.Save: {0}", tmp)); if (setting.WebOptimize) { var src = tmp; tmp = IoEx.Path.Combine(Path.WorkingDirectory, IoEx.Path.GetRandomFileName()); RunWebOptimize(setting, src, tmp); } if (IoEx.File.Exists(tmp)) CubePdf.Misc.File.Copy(tmp, setting.OutputPath, true); AddMessage("CubePdf.Converter.RunEditor: success"); }
/* ----------------------------------------------------------------- */ /// /// Run /// /// <summary> /// 引数にしていされているユーザ設定に従って、プロセスを実行します。 /// </summary> /// /* ----------------------------------------------------------------- */ public bool Run(UserSetting setting) { if (setting.PostProcess == Parameter.PostProcesses.None) return true; try { string path = setting.OutputPath; if (!File.Exists(path)) { var filename = Path.GetFileNameWithoutExtension(path) + "-001" + Path.GetExtension(path); path = Path.Combine(Path.GetDirectoryName(path), filename); } if (!File.Exists(path)) return true; // 何らかの問題で変換に失敗しているので、スキップする。 if (!IsExecutable(setting)) return false; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); System.Diagnostics.Process proc = new System.Diagnostics.Process(); if (setting.PostProcess == Parameter.PostProcesses.Open) { psi.FileName = path; } else { psi.FileName = setting.UserProgram; if (setting.UserArguments.Length > 0) { string replaced = "\"" + path + "\""; psi.Arguments = setting.UserArguments.Replace("%%FILE%%", replaced); } } psi.CreateNoWindow = false; psi.UseShellExecute = true; psi.LoadUserProfile = false; psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; proc.StartInfo = psi; proc.Start(); } catch (Exception err) { _messages.Add(new Message(Message.Levels.Error, err)); _messages.Add(new Message(Message.Levels.Debug, err)); return false; } return true; }
/* ----------------------------------------------------------------- */ /// /// RunPostProcess /// /// <summary> /// ポストプロセスを実行します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void RunPostProcess(UserSetting setting) { var process = new PostProcess(_messages); process.Verb = setting.PostProcess; process.FileName = setting.OutputPath; process.UserName = setting.UserName; process.UserProgram = setting.UserProgram; process.UserArguments = setting.UserArguments; process.EmergencyMode = setting.EmergencyMode; process.Run(); AddMessage("CubePdf.Converter.RunPostProcess: success"); }
public void TestLoadValue() { try { var load_from_constructor = new UserSetting(true); load_from_constructor = null; var load_from_method = new UserSetting(false); Assert.IsTrue(load_from_method.Load(), "Load from registry"); load_from_method = null; } catch (Exception err) { Assert.Fail(err.ToString()); } }
/* ----------------------------------------------------------------- */ /// /// RunWebOptimize /// /// <summary> /// Ghostscript を利用して Web 最適化します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void RunWebOptimize(UserSetting setting, string src, string dest) { var gs = Configure(setting, src, dest); gs.AddOption("FastWebView"); gs.Run(); AddMessage("CubePdf.Converter.RunWebOptimize: success"); }
public void TestSaveDefaultValue() { using (var saver = new UserSettingSaver()) { var default_value = new UserSetting(false); Assert.IsTrue(default_value.Save(), "Save to registry"); string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var test = new UserSetting(false); Assert.IsTrue(test.Load(), "Load from registry"); // 各種デフォルト値のテスト Assert.AreEqual(desktop, test.OutputPath, "LastAccess"); Assert.AreEqual(desktop, test.InputPath, "LastInputAccess"); Assert.AreEqual("", test.UserProgram, "UserProgram"); Assert.AreEqual("%%FILE%%", test.UserArguments, "UserArguments"); Assert.AreEqual(Parameter.FileTypes.PDF, test.FileType, "FileType"); Assert.AreEqual(Parameter.PdfVersions.Ver1_7, test.PDFVersion, "PDFVersion"); Assert.AreEqual(Parameter.Resolutions.Resolution300, test.Resolution, "Resolution"); Assert.AreEqual(Parameter.Orientations.Auto, test.Orientation, "Orientation"); Assert.AreEqual(Parameter.ExistedFiles.Overwrite, test.ExistedFile, "ExistedFile"); Assert.AreEqual(Parameter.PostProcesses.Open, test.PostProcess, "PostProcess"); Assert.AreEqual(Parameter.ImageFilters.FlateEncode, test.ImageFilter, "ImageFilter"); Assert.AreEqual(Parameter.SaveSettings.None, test.SaveSetting, "SaveSetting"); Assert.IsTrue(test.EmbedFont, "EmbedFont"); // フォントの埋め込み Assert.IsFalse(test.Grayscale, "Grayscale"); // グレースケール Assert.IsFalse(test.WebOptimize, "WebOptimize"); // Web 表示用に最適化 Assert.IsTrue(test.CheckUpdate, "CheckUpdate"); // 起動時にアップデートを確認する Assert.IsFalse(test.AdvancedMode, "AdvancedMode"); // ポストプロセスでユーザ―プログラムを選択可能にする Assert.IsFalse(test.SelectInputFile, "SelectInputFile"); // 入力ファイル欄を表示 Assert.IsFalse(test.DeleteOnClose, "DeleteOnClose"); // 終了時に入力ファイルを消去(レジストリには項目なし) Assert.IsTrue(test.Visible, "Visible"); } }
/* ----------------------------------------------------------------- */ /// /// Sweep /// /// <summary> /// 不要なファイルやディレクトリを削除します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void Sweep(UserSetting setting) { try { var work = Path.WorkingDirectory; if (IoEx.Directory.Exists(work)) { IoEx.Directory.Delete(work, true); AddMessage(string.Format("DeleteWorkingDirectory: {0}", work)); } if (setting.DeleteOnClose && IoEx.File.Exists(setting.InputPath)) { IoEx.File.Delete(setting.InputPath); AddMessage(string.Format("DeleteOnClose: {0}", setting.InputPath)); } } catch (Exception err) { AddMessage(err, true); } }
public void TestSaveInvalidValue() { using (var saver = new UserSettingSaver()) { try { var subkey = Registry.CurrentUser.OpenSubKey(@"Software\CubeSoft\CubePDF\v2", true); Assert.IsTrue(subkey != null, @"HKCU\Software\CubeSoft\CubePDF\v2"); // コンボボックスの値 // NOTE: ImageFilter のみ GUI 上はチェックボックスである。 // また、SaveSetting の値は、1.0.0RC4 以降、GUI 上では使用されていない。 subkey.SetValue("FileType", 256); subkey.SetValue("PDFVersion", 1024); subkey.SetValue("Resolution", 5012); subkey.SetValue("Orientation", 12345); subkey.SetValue("ExistedFile", 8252); subkey.SetValue("PostProcess", 2958739); subkey.SetValue("DownSampling", 493798); subkey.SetValue("ImageFilter", 943724); subkey.SetValue("SaveSetting", 24); // チェックボックスの値(正常な値は、0 or 1) subkey.SetValue("EmbedFont", 5); subkey.SetValue("Grayscale", 8); subkey.SetValue("WebOptimize", 12); subkey.SetValue("CheckUpdate", 32); subkey.SetValue("AdvancedMode", 42); subkey.SetValue("SelectInputFile", 128); } catch (Exception err) { Assert.Fail(err.ToString()); } var test = new UserSetting(false); Assert.IsTrue(test.Load(), "Load from registry"); Assert.AreEqual(Parameter.FileTypes.PDF, test.FileType, "FileType"); Assert.AreEqual(Parameter.PdfVersions.Ver1_7, test.PDFVersion, "PDFVersion"); Assert.AreEqual(Parameter.Resolutions.Resolution300, test.Resolution, "Resolution"); Assert.AreEqual(Parameter.Orientations.Auto, test.Orientation, "Orientation"); Assert.AreEqual(Parameter.ExistedFiles.Overwrite, test.ExistedFile, "ExistedFile"); Assert.AreEqual(Parameter.PostProcesses.Open, test.PostProcess, "PostProcess"); Assert.AreEqual(Parameter.ImageFilters.FlateEncode, test.ImageFilter, "ImageFilter"); Assert.AreEqual(Parameter.SaveSettings.None, test.SaveSetting, "SaveSetting"); Assert.IsTrue(test.EmbedFont, "EmbedFont"); Assert.IsTrue(test.Grayscale, "Grayscale"); Assert.IsTrue(test.WebOptimize, "WebOptimize"); Assert.IsTrue(test.CheckUpdate, "CheckUpdate"); Assert.IsTrue(test.AdvancedMode, "AdvancedMode"); Assert.IsTrue(test.SelectInputFile, "SelectInputFile"); } }
/* ----------------------------------------------------------------- */ /// /// UserSettingSaver (constructor) /// /// <summary> /// 既定の値でオブジェクトを初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ public UserSettingSaver() { _setting = new UserSetting(true); }
public void TestDeleteStringValue() { using (var saver = new UserSettingSaver()) { // 値をレジストリ操作で無理やり消す。 try { var subkey = Registry.CurrentUser.OpenSubKey(@"Software\CubeSoft\CubePDF\v2", true); Assert.IsTrue(subkey != null, @"HKCU\Software\CubeSoft\CubePDF\v2"); subkey.DeleteValue("LastAccess", false); subkey.DeleteValue("LastInputAccess", false); subkey.DeleteValue("UserProgram", false); subkey.DeleteValue("UserArguments", false); } catch (Exception err) { Assert.Fail(err.ToString()); } string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var test = new UserSetting(false); Assert.IsTrue(test.Load(), "Load from registry (second)"); Assert.AreEqual(desktop, test.OutputPath, "LastAccess"); Assert.AreEqual(desktop, test.InputPath, "LastInputAccess"); Assert.AreEqual(string.Empty, test.UserProgram, "UserProgram"); Assert.AreEqual("%%FILE%%", test.UserArguments, "UserArguments"); } }
/* ----------------------------------------------------------------- */ /// /// Dispose /// /// <summary> /// 終了時に必要な処理を実行します。オブジェクトの初期化時に /// 保存しておいた UserSetting オブジェクトに関わるレジストリの値を /// 復元します。 /// </summary> /// /* ----------------------------------------------------------------- */ protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { if (_setting != null) { _setting.Save(); _setting = null; } } } _disposed = true; }
/* ----------------------------------------------------------------- */ /// /// CreateSetting /// /// <summary> /// テスト用に各プロパティを初期化した UserSetting オブジェクトを /// 生成します。 /// </summary> /// /// <remarks> /// 変更する必要のあるプロパティは InitSetting() 実行後に変更する /// 事とします。 /// </remarks> /// /* ----------------------------------------------------------------- */ private UserSetting CreateSetting() { var setting = new UserSetting(false); setting.InputPath = IoEx.Path.Combine(_examples, "example.ps"); setting.FileType = Parameter.FileTypes.PDF; setting.PDFVersion = Parameter.PdfVersions.Ver1_7; setting.Resolution = Parameter.Resolutions.Resolution300; setting.Orientation = Parameter.Orientations.Auto; setting.ExistedFile = Parameter.ExistedFiles.Overwrite; setting.PostProcess = Parameter.PostProcesses.None; setting.DownSampling = Parameter.DownSamplings.None; setting.ImageFilter = Parameter.ImageFilters.FlateEncode; setting.EmbedFont = true; setting.Grayscale = false; setting.WebOptimize = false; return setting; }
/* ----------------------------------------------------------------- */ /// /// LoadSetting /// /// <summary> /// UserSetting の情報を各種 GUI コンポーネントに反映します。 /// </summary> /// /// <remarks> /// TODO: 仮想プリンタ経由の場合は InputPath にその値を設定する。 /// </remarks> /// /* ----------------------------------------------------------------- */ private void LoadSetting(UserSetting setting) { this.UserProgramTextBox.Text = setting.UserProgram; this.OutputPathTextBox.Text = setting.OutputPath; this.InputPathTextBox.Text = setting.InputPath; this.ConvertButton.Enabled = !string.IsNullOrEmpty(InputPathTextBox.Text); // コンボボックスのインデックス関連 this.FileTypeCombBox.SelectedIndex = Translator.FileTypeToIndex(setting.FileType); this.PDFVersionComboBox.SelectedIndex = Translator.PDFVersionToIndex(setting.PDFVersion); this.ResolutionComboBox.SelectedIndex = Translator.ResolutionToIndex(setting.Resolution); this.ExistedFileComboBox.SelectedIndex = Translator.ExistedFileToIndex(setting.ExistedFile); this.DownSamplingComboBox.SelectedIndex = Translator.DownSamplingToIndex(setting.DownSampling); // チェックボックスのフラグ関連 this.PageLotationCheckBox.Checked = setting.PageRotation; this.EmbedFontCheckBox.Checked = setting.EmbedFont; this.GrayscaleCheckBox.Checked = setting.Grayscale; this.ImageFilterCheckBox.Checked = (setting.ImageFilter == Parameter.ImageFilters.DCTEncode) ? true : false; this.WebOptimizeCheckBox.Checked = setting.WebOptimize; this.UpdateCheckBox.Checked = setting.CheckUpdate; // ポストプロセス関連 _postproc = setting.AdvancedMode ? this.PostProcessComboBox : this.PostProcessLiteComboBox; _postproc.SelectedIndex = Math.Min(Translator.PostProcessToIndex(setting.PostProcess), Math.Max(_postproc.Items.Count - 1, 0)); this.PostProcessPanel.Enabled = setting.AdvancedMode; this.PostProcessPanel.Visible = setting.AdvancedMode; this.PostProcessLabel.Visible = setting.AdvancedMode; this.PostProcessLiteComboBox.Enabled = !setting.AdvancedMode; this.PostProcessLiteComboBox.Visible = !setting.AdvancedMode; this.PostProcessLiteLabel.Visible = !setting.AdvancedMode; // 入力パスを選択可能にするかどうか this.InputPathLabel.Visible = setting.SelectInputFile; this.InputPathPanel.Visible = setting.SelectInputFile; this.InputPathPanel.Enabled = setting.SelectInputFile && setting.InputPath.Length == 0; // ログ出力 _messages.Add(new Message(Message.Levels.Debug, "CubePdf.MainForm.LoadSetting")); _messages.Add(new Message(Message.Levels.Debug, setting.ToString())); }