using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Reflection; using HotelPms.Share.Windows.Component; using System.Windows.Forms; using HotelPms.Share.Util; namespace HotelPms.Share.Windows.Util { public enum ChangeEditingModeResult : int { Error = 0, //失敗 Inputting, //入力登録中状態 Editting, //編集中状態 ReLoad, //最新情報をロードした Other, //その他 } /// /// 編集フォームのモード /// public enum UpdateFormMode : int { Normal = 0, //閲覧中、修正可能 Edit, //閲覧から修正中 New, //新規 Inputting, //新規登録中 ReadOnly, //閲覧モード、修正不可 } public class ValueChangeListener :IDisposable { private static Dictionary ResourceImage = new Dictionary(); //Control private UpdateFormMode curUpdateMode = UpdateFormMode.New; private Control btnEditStatus = null; public event CTextBoxArray.TBArrayEventHandler BeforeChangeToEditingMode = null; private bool m_IsAntLabel = false; private System.Windows.Forms.Timer timer1 = null; public UpdateFormMode CurUpdateMode { get { return curUpdateMode; } set { curUpdateMode = value; } } public ValueChangeListener(Control btnEditStatus) { m_IsAntLabel = (btnEditStatus is AntLabel); if (!m_IsAntLabel) { timer1 = new System.Windows.Forms.Timer(); timer1.Interval = 500; timer1.Tick += new EventHandler(timer1_Tick); } this.btnEditStatus = btnEditStatus; } private Bitmap GetResourceImage(string fileName) { Bitmap bmp = null; if (!ResourceImage.TryGetValue(fileName, out bmp)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HotelPms.Share.Windows.Properties.Resources", Assembly.GetExecutingAssembly()); object obj = temp.GetObject(fileName); bmp = ((System.Drawing.Bitmap)(obj)); ResourceImage.Add(fileName, bmp); } return bmp; } private void timer1_Tick(object sender, EventArgs e) { Button obj = btnEditStatus as Button; if (CConvert.ToBool(obj.Tag) == true) { if (curUpdateMode == UpdateFormMode.Edit) { obj.Image = GetResourceImage("henshu_w"); } else { obj.Image = GetResourceImage("toroku_w"); } obj.Tag = false; } else { if (curUpdateMode == UpdateFormMode.Edit) { obj.Image = GetResourceImage("henshu_b"); } else { obj.Image = GetResourceImage("toroku_b"); } obj.Tag = true; } } /// [編集中(点滅)][登録中][登録中(点滅)][閲覧中]の更新 /// public void SetEditStatusStyle() { if (m_IsAntLabel) { AntLabel label = btnEditStatus as AntLabel; label.AnimationEnabled = false; switch (curUpdateMode) { case UpdateFormMode.Edit: label.Text = "編集中"; label.Tag = true; label.EndBackColor = Color.FromArgb(192, 64, 0); label.BackColor = Color.PapayaWhip; label.AnimationEnabled = true; break; case UpdateFormMode.New: label.Text = "登録中"; label.EndBackColor = Color.FromArgb(64, 0, 64); label.BackColor = Color.PapayaWhip; break; case UpdateFormMode.Inputting: label.Text = "登録中"; label.EndBackColor = Color.FromArgb(0, 64, 0); label.BackColor = Color.PapayaWhip; label.Tag = true; label.AnimationEnabled = true; break; default: label.Text = "閲覧中"; label.EndBackColor = Color.FromArgb(0, 0, 64); label.BackColor = Color.PapayaWhip; break; } } else { Button obj = btnEditStatus as Button; timer1.Enabled = false; switch (curUpdateMode) { case UpdateFormMode.Edit: obj.Image = GetResourceImage("henshu_b"); obj.Tag = true; timer1.Enabled = true; break; case UpdateFormMode.New: obj.Image = GetResourceImage("toroku_w"); break; case UpdateFormMode.Inputting: obj.Image = GetResourceImage("toroku_b"); obj.Tag = true; timer1.Enabled = true; break; default: obj.Image = GetResourceImage("etsuranchu"); break; } } } /// /// 閲覧モードから編集中に変った時(Overwrite) /// /// public ChangeEditingModeResult ChangeEditingBefore() { if (BeforeChangeToEditingMode != null) { CTextBoxArrayBaseEventArgs e = new CTextBoxArrayBaseEventArgs(); e.ChangeEditingModeResult = (int)ChangeEditingModeResult.Other; BeforeChangeToEditingMode(this, 0, e); return (ChangeEditingModeResult)e.ChangeEditingModeResult; } return ChangeEditingModeResult.Other; } /// /// 画面の編集モードの更新 /// /// public ChangeEditingModeResult SetUpdateFormMode(UpdateFormMode mode) { if (curUpdateMode == UpdateFormMode.Normal && mode == UpdateFormMode.Edit) { ChangeEditingModeResult ret = ChangeEditingBefore(); if (ret.Equals(ChangeEditingModeResult.ReLoad) || ret.Equals(ChangeEditingModeResult.Error)) { return ret; } } curUpdateMode = mode; SetEditStatusStyle(); //表示更新 switch (mode) { case UpdateFormMode.Edit: return ChangeEditingModeResult.Editting; case UpdateFormMode.Inputting: return ChangeEditingModeResult.Inputting; default: break; } return ChangeEditingModeResult.Other; } /// /// 編集中もしくは登録中モードへ /// /// public ChangeEditingModeResult ChangeToEditingMode() { if (curUpdateMode == UpdateFormMode.ReadOnly) { return ChangeEditingModeResult.Error; } ChangeEditingModeResult ret = ChangeEditingModeResult.Other; if (curUpdateMode == UpdateFormMode.Normal) { ret = SetUpdateFormMode(UpdateFormMode.Edit); } else if (curUpdateMode == UpdateFormMode.New) { ret = SetUpdateFormMode(UpdateFormMode.Inputting); } return ret; } public void Dispose() { try { } catch { } } } }