| 1 |
using System; |
| 2 |
using System.Collections.Generic; |
| 3 |
using System.Text; |
| 4 |
using System.IO; |
| 5 |
using System.Xml; |
| 6 |
using System.Windows.Forms; |
| 7 |
|
| 8 |
namespace RipSync.Managers |
| 9 |
{ |
| 10 |
/// <summary> |
| 11 |
/// アプリケーション全体の情報を保持するクラス。 |
| 12 |
/// </summary> |
| 13 |
public class ApplicationManager |
| 14 |
{ |
| 15 |
static private ApplicationManager instance = null; |
| 16 |
|
| 17 |
private string filename = null; |
| 18 |
//private bool isChanged = false; |
| 19 |
|
| 20 |
//各ウインドウ・コントロール |
| 21 |
//private Forms.MainForm mainForm = null; |
| 22 |
//private Forms.EditControl editControl = null; |
| 23 |
//private Forms.EditControlForm editControlForm = null; |
| 24 |
//private Forms.ObjectsControl objectsControl = null; |
| 25 |
//private Forms.ObjectsControlForm objectsControlForm = null; |
| 26 |
//private Forms.ViewControl viewControl = null; |
| 27 |
|
| 28 |
//マネージャー |
| 29 |
//private TimeTableManager timeTableManager = null; |
| 30 |
//private DrawObjectManager drawObjectManager = null; |
| 31 |
//private SoundManager soundManager = null; |
| 32 |
//private TimeLineManager timeLineManager = null; |
| 33 |
//private CanvasManager canvasManager = null; |
| 34 |
//private PreviewManager previewManager = null; |
| 35 |
|
| 36 |
//コンフィグ |
| 37 |
private Configuration config = new Configuration(); |
| 38 |
|
| 39 |
/// <summary> |
| 40 |
/// 唯一のインスタンスを得る。 |
| 41 |
/// </summary> |
| 42 |
/// <returns></returns> |
| 43 |
static public ApplicationManager GetInstance() |
| 44 |
{ |
| 45 |
if (instance == null) |
| 46 |
{ |
| 47 |
instance = new ApplicationManager(); |
| 48 |
} |
| 49 |
return instance; |
| 50 |
} |
| 51 |
|
| 52 |
/// <summary> |
| 53 |
/// プライベートコンストラクタ。 |
| 54 |
/// </summary> |
| 55 |
private ApplicationManager() |
| 56 |
{ |
| 57 |
} |
| 58 |
|
| 59 |
/// <summary> |
| 60 |
/// 実行する。 |
| 61 |
/// </summary> |
| 62 |
//public void Run() |
| 63 |
//{ |
| 64 |
// System.Windows.Forms.Application.Run(MainForm); |
| 65 |
//} |
| 66 |
|
| 67 |
/// <summary> |
| 68 |
/// 表示をリフレッシュする。 |
| 69 |
/// </summary> |
| 70 |
//public void Refresh() |
| 71 |
//{ |
| 72 |
// ObjectsControl.Refresh(); |
| 73 |
// EditControl.Refresh(); |
| 74 |
// PreviewManager.RefreshParameter(); |
| 75 |
// PreviewManager.RefreshDraw(); |
| 76 |
//} |
| 77 |
|
| 78 |
#region アプリケーションコンフィグ |
| 79 |
|
| 80 |
/// <summary> |
| 81 |
/// デフォルトのコンフィグファイル名を取得する。 |
| 82 |
/// </summary> |
| 83 |
/// <returns></returns> |
| 84 |
static public string GetDefaultConfigFileName() |
| 85 |
{ |
| 86 |
string spath = System.Windows.Forms.Application.StartupPath; |
| 87 |
string cpath = Path.Combine(spath, "Configurations"); |
| 88 |
|
| 89 |
if (!Directory.Exists(cpath)) |
| 90 |
{ |
| 91 |
Directory.CreateDirectory(cpath); |
| 92 |
} |
| 93 |
|
| 94 |
return Path.Combine(cpath, "global.config"); |
| 95 |
} |
| 96 |
|
| 97 |
/// <summary> |
| 98 |
/// コンフィグを保存する。 |
| 99 |
/// </summary> |
| 100 |
/// <returns></returns> |
| 101 |
public bool SaveConfig() |
| 102 |
{ |
| 103 |
return SaveConfig(GetDefaultConfigFileName()); |
| 104 |
} |
| 105 |
|
| 106 |
/// <summary> |
| 107 |
/// コンフィグを保存する。 |
| 108 |
/// </summary> |
| 109 |
/// <param name="_filename"></param> |
| 110 |
/// <returns></returns> |
| 111 |
public bool SaveConfig(string _filename) |
| 112 |
{ |
| 113 |
using (System.IO.TextWriter writer = new System.IO.StreamWriter(_filename)) |
| 114 |
{ |
| 115 |
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Configuration)); |
| 116 |
serializer.Serialize(writer, config); |
| 117 |
} |
| 118 |
|
| 119 |
return true; |
| 120 |
} |
| 121 |
|
| 122 |
/// <summary> |
| 123 |
/// コンフィグを読み込む。 |
| 124 |
/// </summary> |
| 125 |
/// <returns></returns> |
| 126 |
public bool LoadConfig() |
| 127 |
{ |
| 128 |
string fn = GetDefaultConfigFileName(); |
| 129 |
if (File.Exists(fn)) |
| 130 |
{ |
| 131 |
return LoadConfig(fn); |
| 132 |
} |
| 133 |
else |
| 134 |
{ |
| 135 |
config = new Configuration(); |
| 136 |
return true; |
| 137 |
} |
| 138 |
} |
| 139 |
|
| 140 |
/// <summary> |
| 141 |
/// コンフィグを読み込む。 |
| 142 |
/// </summary> |
| 143 |
/// <param name="_filename"></param> |
| 144 |
/// <returns></returns> |
| 145 |
public bool LoadConfig(string _filename) |
| 146 |
{ |
| 147 |
using (System.IO.TextReader reader = new System.IO.StreamReader(_filename)) |
| 148 |
{ |
| 149 |
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Configuration)); |
| 150 |
config = (Configuration)serializer.Deserialize(reader); |
| 151 |
} |
| 152 |
return true; |
| 153 |
} |
| 154 |
|
| 155 |
/// <summary> |
| 156 |
/// コンフィグを取得する。 |
| 157 |
/// </summary> |
| 158 |
public Configuration Configuration |
| 159 |
{ |
| 160 |
get |
| 161 |
{ |
| 162 |
return config; |
| 163 |
} |
| 164 |
} |
| 165 |
|
| 166 |
#endregion |
| 167 |
|
| 168 |
//以下未使用のため全部コメント |
| 169 |
//#region ドキュメント管理 |
| 170 |
|
| 171 |
///// <summary> |
| 172 |
///// 設定をクリアするか確認する。 |
| 173 |
///// </summary> |
| 174 |
///// <returns></returns> |
| 175 |
//public bool ClearCheck() |
| 176 |
//{ |
| 177 |
// if (isChanged) |
| 178 |
// { |
| 179 |
// DialogResult dr = MessageBox.Show("設定が変更されています\n設定を保存しますか?", "質問", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); |
| 180 |
// if (dr == DialogResult.No) return true; |
| 181 |
// else if (dr == DialogResult.Cancel) return false; |
| 182 |
// else |
| 183 |
// { |
| 184 |
// if (filename == null || filename == "") |
| 185 |
// { |
| 186 |
// SaveFileDialog sfd = new SaveFileDialog(); |
| 187 |
// sfd.Filter = "RSPファイル(*rsp)|*.rsp|すべてのファイル(*.*)|*.*"; |
| 188 |
|
| 189 |
// if (sfd.ShowDialog() != DialogResult.OK) return false; |
| 190 |
|
| 191 |
// filename = sfd.FileName; |
| 192 |
// } |
| 193 |
|
| 194 |
// return Save(filename); |
| 195 |
// } |
| 196 |
// } |
| 197 |
|
| 198 |
// return true; |
| 199 |
//} |
| 200 |
|
| 201 |
///// <summary> |
| 202 |
///// 新規作成する。 |
| 203 |
///// </summary> |
| 204 |
///// <returns></returns> |
| 205 |
//public bool New() |
| 206 |
//{ |
| 207 |
// if (ClearCheck()) |
| 208 |
// { |
| 209 |
// filename = null; |
| 210 |
// DrawObjectManager.Clear(); |
| 211 |
// SoundManager.SetSoundFile(null); |
| 212 |
// TimeTableManager.Clear(); |
| 213 |
// TimeLineManager.TimeLine.Clear(); |
| 214 |
// CanvasManager.Clear(); |
| 215 |
// PreviewManager.Clear(); |
| 216 |
// Refresh(); |
| 217 |
|
| 218 |
// IsChanged = false; |
| 219 |
// } |
| 220 |
// return true; |
| 221 |
//} |
| 222 |
|
| 223 |
///// <summary> |
| 224 |
///// 設定を保存する。 |
| 225 |
///// </summary> |
| 226 |
///// <param name="_filename"></param> |
| 227 |
///// <returns></returns> |
| 228 |
//public bool Save(string _filename) |
| 229 |
//{ |
| 230 |
// Logger.GetInstance().Write(LogLevel.Info, "AppManager", "設定を保存します。"); |
| 231 |
// filename = _filename; |
| 232 |
|
| 233 |
// try |
| 234 |
// { |
| 235 |
// XmlDocument doc = new XmlDocument(); |
| 236 |
// XmlElement elm = doc.CreateElement("Settings"); |
| 237 |
// doc.AppendChild(elm); |
| 238 |
|
| 239 |
// XmlElement elm2; |
| 240 |
|
| 241 |
// elm2 = doc.CreateElement("View"); |
| 242 |
// elm.AppendChild(elm2); |
| 243 |
// PreviewManager.Save(doc, elm2); |
| 244 |
|
| 245 |
// elm2 = doc.CreateElement("Canvas"); |
| 246 |
// elm.AppendChild(elm2); |
| 247 |
// CanvasManager.Save(doc, elm2); |
| 248 |
|
| 249 |
// elm2 = doc.CreateElement("Sound"); |
| 250 |
// elm.AppendChild(elm2); |
| 251 |
// SoundManager.Save(doc, elm2); |
| 252 |
|
| 253 |
// elm2 = doc.CreateElement("TimeTable"); |
| 254 |
// elm.AppendChild(elm2); |
| 255 |
// TimeTableManager.Save(doc, elm2); |
| 256 |
|
| 257 |
// elm2 = doc.CreateElement("DrawObject"); |
| 258 |
// elm.AppendChild(elm2); |
| 259 |
// DrawObjectManager.Save(doc, elm2); |
| 260 |
|
| 261 |
// elm2 = doc.CreateElement("TimeLine"); |
| 262 |
// elm.AppendChild(elm2); |
| 263 |
// TimeLineManager.Save(doc, elm2); |
| 264 |
|
| 265 |
// doc.Save(_filename); |
| 266 |
// IsChanged = false; |
| 267 |
// return true; |
| 268 |
// } |
| 269 |
// catch (Exception e) |
| 270 |
// { |
| 271 |
// Logger.GetInstance().ErrorWrite("AppManager", e); |
| 272 |
// MessageBox.Show("保存に失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); |
| 273 |
// return false; |
| 274 |
// } |
| 275 |
//} |
| 276 |
|
| 277 |
///// <summary> |
| 278 |
///// 設定を読み込む。 |
| 279 |
///// </summary> |
| 280 |
///// <param name="_filename"></param> |
| 281 |
///// <returns></returns> |
| 282 |
//public bool Load(string _filename) |
| 283 |
//{ |
| 284 |
// if (!ClearCheck()) return false; |
| 285 |
|
| 286 |
// Logger.GetInstance().Write(LogLevel.Info, "AppManager", "設定を読み込みます。"); |
| 287 |
// filename = _filename; |
| 288 |
|
| 289 |
// try |
| 290 |
// { |
| 291 |
// XmlDocument doc = new XmlDocument(); |
| 292 |
// doc.Load(_filename); |
| 293 |
|
| 294 |
// if (!doc.HasChildNodes) |
| 295 |
// { |
| 296 |
// throw new Exception("ファイル形式が不正です。"); |
| 297 |
// } |
| 298 |
// XmlElement relm = null; |
| 299 |
// foreach (XmlNode node in doc.ChildNodes) |
| 300 |
// { |
| 301 |
// if (node is XmlElement) |
| 302 |
// { |
| 303 |
// relm = (XmlElement)doc.ChildNodes[0]; |
| 304 |
// break; |
| 305 |
// } |
| 306 |
// } |
| 307 |
// if (relm == null) |
| 308 |
// { |
| 309 |
// throw new Exception("ファイル形式が不正です。"); |
| 310 |
// } |
| 311 |
|
| 312 |
// foreach (XmlNode elm in relm.ChildNodes) |
| 313 |
// { |
| 314 |
// if (elm is XmlComment) continue; |
| 315 |
|
| 316 |
// switch (elm.Name) |
| 317 |
// { |
| 318 |
// case "View": |
| 319 |
// PreviewManager.Load(doc, (XmlElement)elm); |
| 320 |
// break; |
| 321 |
// case "Canvas": |
| 322 |
// CanvasManager.Load(doc, (XmlElement)elm); |
| 323 |
// break; |
| 324 |
// case "Sound": |
| 325 |
// SoundManager.Load(doc, (XmlElement)elm); |
| 326 |
// break; |
| 327 |
// case "TimeTable": |
| 328 |
// TimeTableManager.Load(doc, (XmlElement)elm); |
| 329 |
// break; |
| 330 |
// case "DrawObject": |
| 331 |
// DrawObjectManager.Load(doc, (XmlElement)elm); |
| 332 |
// break; |
| 333 |
// case "TimeLine": |
| 334 |
// TimeLineManager.Load(doc, (XmlElement)elm); |
| 335 |
// break; |
| 336 |
// } |
| 337 |
// } |
| 338 |
|
| 339 |
// isChanged = false; |
| 340 |
// return true; |
| 341 |
// } |
| 342 |
// catch (Exception e) |
| 343 |
// { |
| 344 |
// Logger.GetInstance().ErrorWrite("AppManager", e); |
| 345 |
// MessageBox.Show("読み込みに失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); |
| 346 |
// return false; |
| 347 |
// } |
| 348 |
//} |
| 349 |
|
| 350 |
///// <summary> |
| 351 |
///// 絶対パスに変換する。 |
| 352 |
///// </summary> |
| 353 |
///// <returns></returns> |
| 354 |
//public string ToFullPath(string _path) |
| 355 |
//{ |
| 356 |
// if (_path == null || _path == "") return _path; |
| 357 |
|
| 358 |
// try |
| 359 |
// { |
| 360 |
// string s = System.Web.HttpUtility.UrlDecode(_path); |
| 361 |
|
| 362 |
// Uri uri = new Uri(s, UriKind.Relative); |
| 363 |
// if (!uri.IsAbsoluteUri) |
| 364 |
// { |
| 365 |
// Uri uri2 = new Uri(filename); |
| 366 |
// uri = new Uri(uri2, uri); |
| 367 |
// } |
| 368 |
|
| 369 |
// return uri.LocalPath; |
| 370 |
// } |
| 371 |
// catch (UriFormatException) |
| 372 |
// { |
| 373 |
// return _path; |
| 374 |
// } |
| 375 |
//} |
| 376 |
|
| 377 |
///// <summary> |
| 378 |
///// 相対パスに変換する。 |
| 379 |
///// </summary> |
| 380 |
///// <param name="_path"></param> |
| 381 |
///// <returns></returns> |
| 382 |
//public string ToRelativePath(string _path) |
| 383 |
//{ |
| 384 |
// if (_path == null || _path == "") return _path; |
| 385 |
|
| 386 |
// try |
| 387 |
// { |
| 388 |
// Uri uri = new Uri(_path); |
| 389 |
// Uri uri2 = new Uri(filename); |
| 390 |
// string path = uri2.MakeRelativeUri(uri).ToString(); |
| 391 |
|
| 392 |
// if (path.Contains("../")) |
| 393 |
// { |
| 394 |
// return _path; |
| 395 |
// } |
| 396 |
// else |
| 397 |
// { |
| 398 |
// return path; |
| 399 |
// } |
| 400 |
// } |
| 401 |
// catch (UriFormatException) |
| 402 |
// { |
| 403 |
// return _path; |
| 404 |
// } |
| 405 |
//} |
| 406 |
|
| 407 |
|
| 408 |
///// <summary> |
| 409 |
///// ファイル名を取得する。 |
| 410 |
///// </summary> |
| 411 |
//public string FileName |
| 412 |
//{ |
| 413 |
// get |
| 414 |
// { |
| 415 |
// return filename; |
| 416 |
// } |
| 417 |
//} |
| 418 |
|
| 419 |
///// <summary> |
| 420 |
///// 変更されたか取得・設定する。 |
| 421 |
///// </summary> |
| 422 |
//public bool IsChanged |
| 423 |
//{ |
| 424 |
// get |
| 425 |
// { |
| 426 |
// return isChanged; |
| 427 |
// } |
| 428 |
// set |
| 429 |
// { |
| 430 |
// isChanged = value; |
| 431 |
// } |
| 432 |
//} |
| 433 |
|
| 434 |
//#endregion |
| 435 |
|
| 436 |
//#region 各種コントロール |
| 437 |
|
| 438 |
///// <summary> |
| 439 |
///// メインフォームを取得する。 |
| 440 |
///// </summary> |
| 441 |
//internal Forms.MainForm MainForm |
| 442 |
//{ |
| 443 |
// get |
| 444 |
// { |
| 445 |
// if (mainForm == null || mainForm.IsDisposed) |
| 446 |
// { |
| 447 |
// mainForm = new Forms.MainForm(); |
| 448 |
// } |
| 449 |
// return mainForm; |
| 450 |
// } |
| 451 |
//} |
| 452 |
|
| 453 |
///// <summary> |
| 454 |
///// 編集コントロールを取得する。 |
| 455 |
///// </summary> |
| 456 |
//internal Forms.EditControl EditControl |
| 457 |
//{ |
| 458 |
// get |
| 459 |
// { |
| 460 |
// if (editControl == null || editControl.IsDisposed) |
| 461 |
// { |
| 462 |
// editControl = new Forms.EditControl(); |
| 463 |
// } |
| 464 |
// return editControl; |
| 465 |
// } |
| 466 |
//} |
| 467 |
|
| 468 |
///// <summary> |
| 469 |
///// 編集コントロールフォームを取得する。 |
| 470 |
///// </summary> |
| 471 |
//internal Forms.EditControlForm EditControlForm |
| 472 |
//{ |
| 473 |
// get |
| 474 |
// { |
| 475 |
// if (editControlForm == null || editControlForm.IsDisposed) |
| 476 |
// { |
| 477 |
// editControlForm = new RipSync.Forms.EditControlForm(); |
| 478 |
// } |
| 479 |
// return editControlForm; |
| 480 |
// } |
| 481 |
//} |
| 482 |
|
| 483 |
///// <summary> |
| 484 |
///// オブジェクトコントロールを取得する。 |
| 485 |
///// </summary> |
| 486 |
//internal Forms.ObjectsControl ObjectsControl |
| 487 |
//{ |
| 488 |
// get |
| 489 |
// { |
| 490 |
// if (objectsControl == null || objectsControl.IsDisposed) |
| 491 |
// { |
| 492 |
// objectsControl = new Forms.ObjectsControl(); |
| 493 |
// } |
| 494 |
// return objectsControl; |
| 495 |
// } |
| 496 |
//} |
| 497 |
|
| 498 |
///// <summary> |
| 499 |
///// オブジェクトコントロールフォームを取得する。 |
| 500 |
///// </summary> |
| 501 |
//internal Forms.ObjectsControlForm ObjectsControlForm |
| 502 |
//{ |
| 503 |
// get |
| 504 |
// { |
| 505 |
// if (objectsControlForm == null || objectsControlForm.IsDisposed) |
| 506 |
// { |
| 507 |
// objectsControlForm = new RipSync.Forms.ObjectsControlForm(); |
| 508 |
// } |
| 509 |
// return objectsControlForm; |
| 510 |
// } |
| 511 |
//} |
| 512 |
|
| 513 |
///// <summary> |
| 514 |
///// ビューコントロールを取得する。 |
| 515 |
///// </summary> |
| 516 |
//internal Forms.ViewControl ViewControl |
| 517 |
//{ |
| 518 |
// get |
| 519 |
// { |
| 520 |
// if (viewControl == null || viewControl.IsDisposed) |
| 521 |
// { |
| 522 |
// viewControl = new Forms.ViewControl(); |
| 523 |
// } |
| 524 |
// return viewControl; |
| 525 |
// } |
| 526 |
//} |
| 527 |
|
| 528 |
///// <summary> |
| 529 |
///// タイムテーブルマネージャーを取得する。 |
| 530 |
///// </summary> |
| 531 |
//public TimeTableManager TimeTableManager |
| 532 |
//{ |
| 533 |
// get |
| 534 |
// { |
| 535 |
// if (timeTableManager == null) |
| 536 |
// { |
| 537 |
// timeTableManager = new TimeTableManager(); |
| 538 |
// } |
| 539 |
// return timeTableManager; |
| 540 |
// } |
| 541 |
//} |
| 542 |
|
| 543 |
///// <summary> |
| 544 |
///// 描画オブジェクトマネージャーを取得する。 |
| 545 |
///// </summary> |
| 546 |
//public DrawObjectManager DrawObjectManager |
| 547 |
//{ |
| 548 |
// get |
| 549 |
// { |
| 550 |
// if (drawObjectManager == null) |
| 551 |
// { |
| 552 |
// drawObjectManager = new DrawObjectManager(); |
| 553 |
// } |
| 554 |
// return drawObjectManager; |
| 555 |
// } |
| 556 |
//} |
| 557 |
|
| 558 |
///// <summary> |
| 559 |
///// サウンドマネージャーを取得する。 |
| 560 |
///// </summary> |
| 561 |
//public SoundManager SoundManager |
| 562 |
//{ |
| 563 |
// get |
| 564 |
// { |
| 565 |
// if (soundManager == null) |
| 566 |
// { |
| 567 |
// soundManager = new SoundManager(); |
| 568 |
// } |
| 569 |
// return soundManager; |
| 570 |
// } |
| 571 |
//} |
| 572 |
|
| 573 |
///// <summary> |
| 574 |
///// タイムラインマネージャーを取得する。 |
| 575 |
///// </summary> |
| 576 |
//public TimeLineManager TimeLineManager |
| 577 |
//{ |
| 578 |
// get |
| 579 |
// { |
| 580 |
// if (timeLineManager == null) |
| 581 |
// { |
| 582 |
// timeLineManager = new TimeLineManager(); |
| 583 |
// } |
| 584 |
// return timeLineManager; |
| 585 |
// } |
| 586 |
//} |
| 587 |
|
| 588 |
///// <summary> |
| 589 |
///// キャンバスマネージャーを取得する。 |
| 590 |
///// </summary> |
| 591 |
//public CanvasManager CanvasManager |
| 592 |
//{ |
| 593 |
// get |
| 594 |
// { |
| 595 |
// if (canvasManager == null) |
| 596 |
// { |
| 597 |
// canvasManager = new CanvasManager(); |
| 598 |
// } |
| 599 |
// return canvasManager; |
| 600 |
// } |
| 601 |
//} |
| 602 |
|
| 603 |
///// <summary> |
| 604 |
///// プレビューマネージャを取得する。 |
| 605 |
///// </summary> |
| 606 |
//public PreviewManager PreviewManager |
| 607 |
//{ |
| 608 |
// get |
| 609 |
// { |
| 610 |
// if (previewManager == null) |
| 611 |
// { |
| 612 |
// previewManager = new PreviewManager(); |
| 613 |
// } |
| 614 |
// return previewManager; |
| 615 |
// } |
| 616 |
//} |
| 617 |
|
| 618 |
//#endregion |
| 619 |
|
| 620 |
} |
| 621 |
} |