using System; using System.Drawing; using System.Windows.Forms; using ChuPiao.AutoPrint.Desktop.Properties; using ChuPiao.Common.Utils; namespace ChuPiao.AutoPrint.Desktop.StatusBar { //IProgressMonitor public class SdStatusBar : StatusStrip { ToolStripProgressBar statusProgressBar = new ToolStripProgressBar(); ToolStripStatusLabel jobNamePanel = new ToolStripStatusLabel(); ToolStripStatusLabel txtStatusBarPanel = new ToolStripStatusLabel(); ToolStripStatusLabel cursorStatusBarPanel = new ToolStripStatusLabel(); ToolStripStatusLabel modeStatusBarPanel = new ToolStripStatusLabel(); ToolStripStatusLabel springLabel = new ToolStripStatusLabel(); ToolStripSplitButton stopWarnButton=new ToolStripSplitButton(); public ToolStripStatusLabel CursorStatusBarPanel { get { return cursorStatusBarPanel; } } public ToolStripStatusLabel ModeStatusBarPanel { get { return modeStatusBarPanel; } } public ToolStripStatusLabel JobNamePanel { get { return jobNamePanel; } } public SdStatusBar() { springLabel.Spring = true; cursorStatusBarPanel.AutoSize = false; cursorStatusBarPanel.Width = 150; modeStatusBarPanel.AutoSize = false; modeStatusBarPanel.Width = 25; statusProgressBar.Visible = false; statusProgressBar.Width = 100; stopWarnButton.Image = Resources.Warning; stopWarnButton.ForeColor = Color.Red; stopWarnButton.Text = "ֹͣ����"; stopWarnButton.Visible = false; stopWarnButton.Click += new EventHandler(toolStripSplitButton_Click); Items.AddRange(new ToolStripItem[] { txtStatusBarPanel, springLabel, jobNamePanel, statusProgressBar, cursorStatusBarPanel, modeStatusBarPanel,stopWarnButton }); } void toolStripSplitButton_Click(object sender, EventArgs e) { BeepUtil.Instance().StopCurrent(); stopWarnButton.Visible = false; } public void ShowWarnButton() { if (this.InvokeRequired) { this.BeginInvoke(new MethodInvoker(ShowWarnButton)); } else { stopWarnButton.Visible = true; for (int i = 50; i > 0; i--) { BeepUtil.MessageBeep(0); BeepUtil.MessageBeep(16); BeepUtil.MessageBeep(32); BeepUtil.MessageBeep(48); BeepUtil.MessageBeep(64); } } } public void StopWarnButton() { if (this.InvokeRequired) { this.BeginInvoke(new MethodInvoker(StopWarnButton)); } else { stopWarnButton.Visible = false; } } protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); UpdateText(); } public void ShowErrorMessage(string message) { SetMessage("Error : " + message); } public void ShowErrorMessage(Image image, string message) { SetMessage(image, "Error : " + message); } string currentMessage; public void SetMessage(string message) { SetMessage(message, false); } public void SetMessage(string message, bool highlighted) { if (highlighted) { txtStatusBarPanel.BackColor = SystemColors.Highlight; txtStatusBarPanel.ForeColor = Color.White; } else if (txtStatusBarPanel.BackColor == SystemColors.Highlight) { txtStatusBarPanel.BackColor = SystemColors.Control; txtStatusBarPanel.ForeColor = SystemColors.ControlText; } currentMessage = message; if (this.IsHandleCreated) BeginInvoke(new MethodInvoker(UpdateText)); } void UpdateText() { txtStatusBarPanel.Text = currentMessage; } public void SetMessage(Image image, string message) { SetMessage(message); } // Progress Monitor implementation int totalWork; public void BeginTask(string name, int totalWork, bool allowCancel) { taskName = name; this.totalWork = totalWork; if (this.IsHandleCreated) { this.BeginInvoke(new MethodInvoker(MakeVisible)); } } void MakeVisible() { statusProgressBar.Value = 0; statusProgressBar.Maximum = totalWork; SetTaskName(); jobNamePanel.Visible = true; statusProgressBar.Visible = true; } void MakeInvisible() { // Setting jobNamePanel.Visible = false will also hide the other labels to the right (WinForms Bug?) jobNamePanel.Text = ""; statusProgressBar.Visible = false; } int workDone; public int WorkDone { get { return workDone; } set { if (workDone == value) return; workDone = value; this.BeginInvoke(new MethodInvoker(SetWorkDone)); } } void SetWorkDone() { if (workDone < statusProgressBar.Maximum) { statusProgressBar.Value = workDone; } } public void Done() { taskName = null; if (this.IsHandleCreated) { this.BeginInvoke(new MethodInvoker(MakeInvisible)); } } string taskName; public string TaskName { get { return taskName; } set { if (taskName == value) return; taskName = value; this.BeginInvoke(new MethodInvoker(SetTaskName)); } } void SetTaskName() { jobNamePanel.Text = taskName; } bool showingDialog; public bool ShowingDialog { get { return showingDialog; } set { showingDialog = value; } } public bool IsCancelled { get { return false; } } } }