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 { }
}
}
}