private void Window_Loaded_1(object sender, RoutedEventArgs e) { m_hwnd = new WindowInteropHelper(this).Handle; Int32 windowStyle = GetWindowLongPtr(m_hwnd, GWL_STYLE); SetWindowLongPtr(m_hwnd, GWL_STYLE, windowStyle & ~WS_MAXIMIZEBOX); m_bIsSupportTaskbarManager = true; this.TaskbarItemInfo.ThumbnailClipMargin = new Thickness(0, 0, 0, 0); try { DateTime restoreStart = DateTime.Parse(TomatoTimerWPF.TimerSettings.Default.TimerRestoreDateTime); m_TimeDateStart = restoreStart; m_TimeDatePauseStart = restoreStart; //m_TimeDateStart = DateTime.Now; //m_TimeDatePauseStart = DateTime.Now; m_mode = (TimerMode)TomatoTimerWPF.TimerSettings.Default.TimerRestoreMode; } catch (Exception) { m_TimeDateStart = DateTime.Now; m_TimeDatePauseStart = DateTime.Now; } m_pageButtons = new Page_Buttons(this); m_pageSettings = new Page_Settings(this); m_pageSoundSettings = new Page_SoundSettings(this); btnAlwaysOnTop.IsChecked = TomatoTimerWPF.TimerSettings.Default.AlwaysOnTop; if (btnAlwaysOnTop.IsChecked == true) { this.ToggleAlwaysOnTop(); } spWindowControlStackPanel.Margin = new Thickness(0, -this.Height, 0, 0); m_sbAniOut.Begin(spWindowControlStackPanel); this.ucContent.Children.Add(m_pageButtons); UpdateUI(); m_timer = new System.Windows.Forms.Timer(); m_timer.Interval = 1000; m_timer.Tick += new EventHandler(Timer_Tick); m_timer.Start(); }
private void Storyboard_Completed(object sender, EventArgs e) { if (pages.Count != 0) { UserControl page = pages.Pop(); Page_Buttons pageButtons = page as Page_Buttons; if (pageButtons != null) { UpdateUI(); btnAlwaysOnTop.Visibility = Visibility.Visible; } else { btnAlwaysOnTop.Visibility = Visibility.Collapsed; } ucContent.Children.Clear(); ucContent.Children.Add(page); m_sbAniIn.Begin(page); } }
public void UpdateUI() { TimeSpan pauseSpan = m_TimeSpanPause; if (m_bIsPause) { pauseSpan += DateTime.Now - m_TimeDatePauseStart; } TimeSpan timerSpan, modeSpan; if (m_mode == TimerMode.MODE_WORK) { modeSpan = TimeSpan.FromMinutes(TomatoTimerWPF.TimerSettings.Default.Work_Time) + 800.Milliseconds(); } else if (m_mode == TimerMode.MODE_RELAX) { modeSpan = TimeSpan.FromMinutes(TomatoTimerWPF.TimerSettings.Default.Relax_Time) + 800.Milliseconds(); } else if (m_mode == TimerMode.MODE_RELAX_LONG) { modeSpan = TimeSpan.FromMinutes(TomatoTimerWPF.TimerSettings.Default.Relax_Time_Long) + 800.Milliseconds(); } else { modeSpan = 1.Seconds(); } if (m_bIsPause) { timerSpan = modeSpan - m_TimeSpan; } else { timerSpan = modeSpan - (DateTime.Now - m_TimeDateStart); } if (!m_bIsOverTime && timerSpan.IsNegativeOrZero()) { SetWindowFlash(true); if (m_mode == TimerMode.MODE_WORK) { m_pageSoundSettings.playSound(Page_SoundSettings.SoundType.WorkDone); } else { m_pageSoundSettings.playSound(Page_SoundSettings.SoundType.RestTimeOut); } } m_bIsOverTime = timerSpan.IsNegativeOrZero(); double progressValue = 100.0 - ((timerSpan.TotalMilliseconds * 100.0 / modeSpan.TotalMilliseconds)); if (progressValue < 0.0) { progressValue = 0.0; } else if (progressValue > 100.0) { progressValue = 100.0; } Page_Buttons pageButtons = m_pageButtons;//pageTransitionControl.CurrentPage as Page_Buttons; if (pageButtons != null) { if (m_mode == TimerMode.MODE_WORK) { pageButtons.btnWork.Visibility = false.ToVisibility(); pageButtons.btnWork.IsEnabled = false; pageButtons.btnRelax.Visibility = true.ToVisibility(); pageButtons.btnRelax.IsEnabled = true; if (m_bIsPause) { pageButtons.btnPause.Visibility = false.ToVisibility(); pageButtons.btnPause.IsEnabled = false; pageButtons.btnPlay.Visibility = true.ToVisibility(); pageButtons.btnPlay.IsEnabled = true; pageButtons.labelTime.Opacity = 0.5; } else { pageButtons.btnPause.Visibility = (!m_bIsPause).ToVisibility(); pageButtons.btnPause.IsEnabled = (!m_bIsPause); pageButtons.btnPlay.Visibility = false.ToVisibility(); pageButtons.btnPlay.IsEnabled = false; pageButtons.labelTime.Opacity = 1; } } else { pageButtons.btnWork.Visibility = true.ToVisibility(); pageButtons.btnWork.IsEnabled = true; pageButtons.btnRelax.Visibility = false.ToVisibility(); pageButtons.btnRelax.IsEnabled = false; pageButtons.btnPause.Visibility = false.ToVisibility(); pageButtons.btnPause.IsEnabled = false; pageButtons.btnPlay.Visibility = false.ToVisibility(); pageButtons.btnPlay.IsEnabled = false; pageButtons.labelTime.Opacity = 1; } String info, time; if (m_TimeDateStart.Day != DateTime.Now.Day || m_TimeDateStart.Month != DateTime.Now.Month) { info = m_TimeDateStart.ToString("MM/dd H:mm"); } else { info = "Start @ " + m_TimeDateStart.ToString("H:mm"); } if (!pauseSpan.IsNegativeOrZero()) { if (pauseSpan.Hours != 0 || pauseSpan.Days != 0) { info += "\r\nPause: {0}:{1:00}:{2:00}".ToFormat(Math.Abs(pauseSpan.Hours + pauseSpan.Days * 24), Math.Abs(pauseSpan.Minutes), Math.Abs(pauseSpan.Seconds)); } else { info += "\r\nPause: {0}:{1:00}".ToFormat(Math.Abs(pauseSpan.Minutes), Math.Abs(pauseSpan.Seconds)); } } pageButtons.labelInfo.Content = info; TextBlock timeText = new TextBlock(); if (m_mode == TimerMode.MODE_WORK) { time = "Work "; //timeText.Inlines.Add(new Bold(new Run("W"))); timeText.Inlines.Add("Work "); } else if (m_mode == TimerMode.MODE_RELAX || m_mode == TimerMode.MODE_RELAX_LONG) { time = "Rest "; //timeText.Inlines.Add(new Bold(new Run("R"))); timeText.Inlines.Add("Rest "); } else { time = ""; } if (timerSpan.Hours != 0 || timerSpan.Days != 0) { if ((timerSpan.Seconds & 0x1) == 0) { time += "{0}:{1:00} {2:00}".ToFormat(Math.Abs(timerSpan.Hours + timerSpan.Days * 24), Math.Abs(timerSpan.Minutes), Math.Abs(timerSpan.Seconds)); } else { time += "{0}:{1:00}:{2:00}".ToFormat(Math.Abs(timerSpan.Hours + timerSpan.Days * 24), Math.Abs(timerSpan.Minutes), Math.Abs(timerSpan.Seconds)); } timeText.Inlines.Add("{0}:{1:00}".ToFormat(Math.Abs(timerSpan.Hours + timerSpan.Days * 24), Math.Abs(timerSpan.Minutes))); //Run minText = new Run("{0:00}".ToFormat(Math.Abs(timerSpan.Minutes))); //minText.FontFamily = new System.Windows.Media.FontFamily("/TomatoTimerWPF;component/Resource/#Roboto"); //minText.FontWeight = FontWeights.Black; //timeText.Inlines.Add(new Bold(minText)); timeText.Inlines.Add((timerSpan.Seconds & 0x1) == 0 ? ":" : " "); timeText.Inlines.Add("{0:00}".ToFormat(Math.Abs(timerSpan.Seconds))); } else { if ((timerSpan.Seconds & 0x1) == 0) { time += "{0} {1:00}".ToFormat(Math.Abs(timerSpan.Minutes), Math.Abs(timerSpan.Seconds)); } else { time += "{0}:{1:00}".ToFormat(Math.Abs(timerSpan.Minutes), Math.Abs(timerSpan.Seconds)); } Run minText = new Run("{0}".ToFormat(Math.Abs(timerSpan.Minutes))); minText.FontFamily = new System.Windows.Media.FontFamily("/TomatoTimerWPF;component/Resource/#Roboto"); minText.FontWeight = FontWeights.Black; timeText.Inlines.Add(new Bold(minText)); timeText.Inlines.Add((timerSpan.Seconds & 0x1) == 0?":":" "); timeText.Inlines.Add("{0:00}".ToFormat(Math.Abs(timerSpan.Seconds))); } if (pageButtons.labelTimeWhite.Visibility == Visibility.Visible) { pageButtons.labelTimeWhite.Content = time; pageButtons.labelTime.Content = time; } else { pageButtons.labelTime.Content = timeText; } if (pageButtons.GetIsMouseDown()) { if (pageButtons.btnRelax.IsPressed) { progressValue = pageButtons.GetLongMouseDownPercentage(); pageButtons.labelTime_small.Content = progressValue >= 100 ? "Long rest" : time; } else if (pageButtons.btnReset.IsPressed && m_mode == TimerMode.MODE_WORK) { progressValue = pageButtons.GetLongMouseDownPercentage(); pageButtons.labelTime_small.Content = progressValue >= 100 ? "Skip GCal" : time; } else { pageButtons.labelTime_small.Content = time; } } else { pageButtons.labelTime_small.Content = time; } if (m_bIsPause) { pageButtons.pbarTimer.Foreground = System.Windows.Media.Brushes.Green; pageButtons.pbarTimer.IsIndeterminate = true; pageButtons.pbarTimer.Value = progressValue; pageButtons.labelTimeWhite.Opacity = 0; } else if (m_bIsOverTime) { pageButtons.pbarTimer.Foreground = System.Windows.Media.Brushes.Red; pageButtons.pbarTimer.IsIndeterminate = false; pageButtons.pbarTimer.Value = 100; pageButtons.labelTimeWhite.Opacity = 1; } else { if (progressValue > 80) { pageButtons.pbarTimer.Foreground = System.Windows.Media.Brushes.Yellow; pageButtons.labelTimeWhite.Opacity = 0; } else { pageButtons.pbarTimer.Foreground = System.Windows.Media.Brushes.Green; pageButtons.labelTimeWhite.Opacity = 1; } pageButtons.pbarTimer.IsIndeterminate = false; pageButtons.pbarTimer.Value = progressValue; } } int tMin = timerSpan.Hours * 24 + timerSpan.Minutes; if (m_bIsSupportTaskbarManager) { if (m_OverlayIconLastMin != (tMin == 0 ? timerSpan.Seconds : tMin) + (timerSpan.IsNegativeOrZero() ? 1 : 0) + (m_bIsPause ? 3 : 1)) { Bitmap bmp = new Bitmap(16, 16); using (Graphics g = Graphics.FromImage(bmp)) { g.FillRectangle(System.Drawing.Brushes.Black, 0, 0, 16, 16); if (m_bIsPause) { g.FillRectangle(System.Drawing.Brushes.Gray, 1, 1, 14, 14); } else if (timerSpan.IsNegativeOrZero()) { g.FillRectangle(System.Drawing.Brushes.DarkRed, 1, 1, 14, 14); } else if (m_mode == TimerMode.MODE_WORK) { g.FillRectangle(System.Drawing.Brushes.BlueViolet, 1, 1, 14, 14); } else { g.FillRectangle(System.Drawing.Brushes.MediumSeaGreen, 1, 1, 14, 14); } if (timerSpan.Hours != 0 || timerSpan.Days != 0) { if (Math.Abs(timerSpan.Hours + timerSpan.Days * 24) <= 99) { g.DrawString("{0:00}".ToFormat(Math.Abs(timerSpan.Hours + timerSpan.Days * 24)), new Font("Arial", 6), new SolidBrush(System.Drawing.Color.White), 2, -1); g.DrawString("{0:00}".ToFormat(Math.Abs(timerSpan.Minutes)), new Font("Arial", 6), new SolidBrush(System.Drawing.Color.White), 2, 6); } else { g.DrawString("99", new Font("Impact", 6), new SolidBrush(System.Drawing.Color.White), 2, -1); g.DrawString("59", new Font("Impact", 6), new SolidBrush(System.Drawing.Color.White), 2, 6); } } else if (tMin == 0 && !timerSpan.IsNegativeOrZero() && !m_bIsPause) { g.DrawString("{0:00}".ToFormat(Math.Abs(timerSpan.Seconds)), new Font("Courier New", 9), new SolidBrush(timerSpan.Seconds % 2 == 0 ? System.Drawing.Color.White : System.Drawing.Color.Black), -1, 0); } else { g.DrawString("{0:00}".ToFormat(Math.Abs(timerSpan.Minutes)), new Font("Courier New", 9), new SolidBrush(System.Drawing.Color.White), -1, 0); } IntPtr hBitmap = bmp.GetHbitmap(); this.TaskbarItemInfo.Overlay = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height)); DeleteObject(hBitmap); } m_OverlayIconLastMin = (tMin == 0 ? timerSpan.Seconds : tMin) + (timerSpan.IsNegativeOrZero() ? 1 : 0) + (m_bIsPause ? 3 : 1); } if (m_bIsPause) { this.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Indeterminate; if (this.TaskbarItemInfo.ProgressValue != 1) { this.TaskbarItemInfo.ProgressValue = 1; } } else if (m_bIsOverTime) { if (m_mode == TimerMode.MODE_WORK) { this.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Paused; } else { this.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Error; } if (this.TaskbarItemInfo.ProgressValue != 1) { this.TaskbarItemInfo.ProgressValue = 1; } } else { if (progressValue > 80) { this.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Paused; } else { this.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal; } this.TaskbarItemInfo.ProgressValue = progressValue / 100; } if (m_mode == TimerMode.MODE_WORK) { ThumbButtonGoToWork.Visibility = Visibility.Collapsed; ThumbButtonTakeABreak.Visibility = Visibility.Visible; ThumbButtonPause.Visibility = !m_bIsPause ? Visibility.Visible : Visibility.Collapsed; ThumbButtonPlay.Visibility = m_bIsPause ? Visibility.Visible : Visibility.Collapsed; } else { ThumbButtonGoToWork.Visibility = Visibility.Visible; ThumbButtonTakeABreak.Visibility = Visibility.Collapsed; ThumbButtonPause.Visibility = Visibility.Collapsed; ThumbButtonPlay.Visibility = Visibility.Collapsed; } } }