using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DevComponents.DotNetBar; using POSV.Entity; using POSV.Language; using POSV.MessageEvent; using POSV.Tabs; using POSV.Component; using System.Threading; namespace POSV { public partial class TableTemplate : AbstractForm { /// /// 计时器 /// private System.Timers.Timer timer; /// /// 主控菜单 /// private MainControlBox _mainControlBox = null; /// /// 桌台界面 /// private TableMenuItem _tableMenuItem = null; /// /// 点餐界面 /// private DishMenuItem _dishMenuItem = null; /// /// 参数界面 /// private SettingMenuItem _settingMenuItem = null; public TableTemplate() { InitializeComponent(); //初始化主控菜单 this._mainControlBox = this.InitializeControlBox(); this._mainControlBox.Dock = DockStyle.Top; //默认加载桌台界面,必须优先初始化 this._tableMenuItem = new TableMenuItem(); this._tableMenuItem.Dock = DockStyle.Fill; this._tableMenuItem.Visible = true; //点菜界面通知事件 MsgEvent.Receive(Constant.TABLE_ORDER_DISHS_NOTIFY , this.TableOrderDishsEventNotify); this.tabControl.SelectedTabChanging += OnTabControlSelectedTabChanging; this.tabControl.SelectedTabChanged += OnTabControlSelectedTabChanged; //默认选择桌台界面 this.tabControl.SelectedTab = null; this.tabControl.SelectedTab = tabTable; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; this.Text = LangUtils.Instance.GetString("Application.Title"); Task.Factory.StartNew(() => { this.Invoke(new Action(() => { this._dishMenuItem = new DishMenuItem(); this._dishMenuItem.Dock = DockStyle.Fill; this._dishMenuItem.Visible = false; })); }).ContinueWith(task => { this.Invoke(new Action(() => { this._settingMenuItem = new SettingMenuItem(); this._settingMenuItem.Dock = DockStyle.Fill; this._settingMenuItem.Visible = true; })); }).ContinueWith(task => { this.Invoke(new Action(() => { })); }).ContinueWith(task => { this.Invoke(new Action(() => { //定时器 this.timer = new System.Timers.Timer(60000);//定时周期2秒 this.timer.Elapsed += TimerElapsed;//到60秒了做的事件 this.timer.AutoReset = true; //是否不断重复定时器操作 this.timer.Start(); })); }); } #region 头部按钮事件 protected override void OnControlBoxIconClick(object sender, EventArgs e) { bool isGo = true; if (isGo) { MsgEvent.Send(Constant.TABLE_ORDER_DISHS_NOTIFY, null); } } protected override void OnControlBoxMinimizedClick(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } protected override void OnControlBoxCloseClick(object sender, EventArgs e) { this.Close(); } #endregion /// /// 点单界面切换通知事件 /// /// /// protected void TableOrderDishsEventNotify(object sender , MsgEventArgs args) { this.Invoke(new Action(() => { //通过桌台选择进入,视为桌台模式 if (args.Data is Table) { //当前选择的桌台 var table = args.Data as Table; //点菜界面提供[返回]桌台按钮功能 this._mainControlBox.IconBox = true; //当前选中的Tab var tabItem = this.tabControl.SelectedTab; //当前选中Tab对应的容器 var tabPanel = this.tabControl.SelectedPanel; //是否有可用的容器 if (tabPanel.Controls.ContainsKey(tabItem.Description)) { //加载业务控件的容器 var container = tabPanel.Controls[tabItem.Description] as DoubleBufferPanelX; //将点菜控件压入 if (!container.Controls.Contains(this._dishMenuItem)) { container.Controls.Add(this._dishMenuItem); } } //隐藏桌台控件 this._tableMenuItem.Visible = false; //显示点菜控件 this._dishMenuItem.Visible = true; this._dishMenuItem.Dock = DockStyle.Fill; } else { //关闭返回按钮 this._mainControlBox.IconBox = false; //隐藏点菜控件 this._dishMenuItem.Visible = false; //显示桌台控件 this._tableMenuItem.Visible = true; this._tableMenuItem.Dock = DockStyle.Fill; } })); } private SuperTabControlPanel SelectedPanel(bool mainControlBox = true) { var tabItem = this.tabControl.SelectedTab; var tabPanel = this.tabControl.SelectedPanel; //添加操作区容器 if (!tabPanel.Controls.ContainsKey(tabItem.Description)) { var container = new DoubleBufferPanelX(); container.Name = tabItem.Description; container.Text = "加载中,请稍候..."; container.Dock = DockStyle.Fill; tabPanel.Controls.Add(container); } //显示主控菜单 if (mainControlBox) { if (!tabPanel.Controls.Contains(this._mainControlBox)) { tabPanel.Controls.Add(this._mainControlBox); } } return tabPanel; } private void OnTabControlSelectedTabChanged(object sender , DevComponents.DotNetBar.SuperTabStripSelectedTabChangedEventArgs e) { var item = e.NewValue as SuperTabItem; var tab = TabCollection.LOGO; Enum.TryParse(item.Tag == null ? "LOGO" : item.Tag.ToString(), out tab); var tabPanel = this.SelectedPanel(); switch (tab) { case TabCollection.桌台: { //是否有可用的容器 if (tabPanel.Controls.ContainsKey(item.Description)) { var container = tabPanel.Controls[item.Description] as DoubleBufferPanelX; //将桌台呈现出来 if (!container.Controls.Contains(this._tableMenuItem)) { container.Controls.Add(this._tableMenuItem); } } } break; case TabCollection.快餐: { //var container = new DoubleBufferPanelX(); //container.Dock = DockStyle.Fill; //superTabControlPanel5.Controls.Add(container); //superTabControlPanel5.Controls.Add(this.mainControlBox); } break; case TabCollection.设置: { //是否有可用的容器 if (tabPanel.Controls.ContainsKey(item.Description)) { var container = tabPanel.Controls[item.Description] as DoubleBufferPanelX; //将设置界面呈现出来 if (!container.Controls.Contains(this._settingMenuItem)) { container.Controls.Add(this._settingMenuItem); } } } break; default: { //是否有可用的容器 if (tabPanel.Controls.ContainsKey(item.Description)) { var container = tabPanel.Controls[item.Description] as DoubleBufferPanelX; LOGGER.Info(container.Name + ""); } } break; } } private void OnTabControlSelectedTabChanging(object sender , DevComponents.DotNetBar.SuperTabStripSelectedTabChangingEventArgs e) { var item = sender as SuperTabItem; //var tab = TabCollection.LOGO; //Enum.TryParse(item.Tag == null ? "LOGO" : item.Tag.ToString() , out tab); //switch (tab) //{ // case TabCollection.LOGO: // { // e.Cancel = true; // } // break; // default: // { // e.Cancel = false; // } // break; //} } void TimerElapsed(object sender , System.Timers.ElapsedEventArgs e) { Task.Factory.StartNew(() => { this.Invoke(new Action(() => { //刷新桌台界面 this._tableMenuItem.RefreshUi(); })); }); } } public enum TabCollection { LOGO = -1, 桌台 = 0, 快餐 = 1, 外卖 = 2, 预订 = 3, 会员 = 4, 清单 = 5, 报表 = 6, 更多 = 7, 设置 = 8 } }