Skip to content

Commit

Permalink
Merge pull request #53 from Planshit/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
noberumotto committed Jun 12, 2020
2 parents 82cb6a5 + 3003bd4 commit 7c3f00d
Show file tree
Hide file tree
Showing 20 changed files with 487 additions and 93 deletions.
6 changes: 4 additions & 2 deletions src/Local/Project1.UI/Controls/Project1UIToast.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ public Project1UIToast()
this.DefaultStyleKey = typeof(Project1UIToast);
alertStoryboard = new Storyboard();
closeStoryboard = new Storyboard();
alertStoryboard.Duration = TimeSpan.FromSeconds(1);
closeStoryboard.Duration = TimeSpan.FromSeconds(1);
//alertStoryboard.Duration = TimeSpan.FromSeconds(1);
//closeStoryboard.Duration = TimeSpan.FromSeconds(1);
closeStoryboard.Completed += CloseStoryboard_Completed;

Left = SystemParameters.PrimaryScreenWidth;
Expand Down Expand Up @@ -215,12 +215,14 @@ private void CreateAnimation()
DoubleAnimation alertDA = new DoubleAnimation();
alertDA.To = SystemParameters.PrimaryScreenWidth - this.ActualWidth;
alertDA.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseIn };
alertDA.Duration = TimeSpan.FromSeconds(.5);
Storyboard.SetTarget(alertDA, this);
Storyboard.SetTargetProperty(alertDA, new PropertyPath(Canvas.LeftProperty));
//关闭动画
DoubleAnimation closeDA = new DoubleAnimation();
closeDA.To = SystemParameters.PrimaryScreenWidth;
closeDA.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut };
closeDA.Duration = TimeSpan.FromSeconds(.5);
Storyboard.SetTarget(closeDA, this);
Storyboard.SetTargetProperty(closeDA, new PropertyPath(Canvas.LeftProperty));

Expand Down
7 changes: 5 additions & 2 deletions src/Local/Project1.UI/Cores/Project1UIColor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,12 @@ public class Project1UIColor
/// </summary>
public static SolidColorBrush ThemeColor { get; set; } = VioletBrush;

public static SolidColorBrush Get(string color)
public static SolidColorBrush Get(string color, double opacity = 1)
{
return new SolidColorBrush((Color)ColorConverter.ConvertFromString(color));
return new SolidColorBrush((Color)ColorConverter.ConvertFromString(color))
{
Opacity = opacity
};
}
public static Color GetMediaColor(string color)
{
Expand Down
169 changes: 169 additions & 0 deletions src/Local/ProjectEye/Core/DataReportImageHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
using Project1.UI.Controls.ChartControl.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace ProjectEye.Core
{
class DataReportImageHelper
{
private List<ChartDataModel> chartData;
private readonly double lastMonthlyWork, monthlyWork;
private readonly string savePath, title;
private Canvas canvas;
private StackPanel panel;
private Window drawWindow;
private Project1.UI.Controls.ChartControl.Chart chart;
public DataReportImageHelper(
string title,
string savePath,
List<ChartDataModel> chartData,
double lastMonthlyWork,
double monthlyWork)
{
this.title = title;
this.savePath = savePath;
this.chartData = chartData;
this.lastMonthlyWork = lastMonthlyWork;
this.monthlyWork = monthlyWork;

chart = new Project1.UI.Controls.ChartControl.Chart();
canvas = new Canvas();
panel = new StackPanel();
panel.Margin = new Thickness(20);
panel.HorizontalAlignment = HorizontalAlignment.Left;
panel.VerticalAlignment = VerticalAlignment.Top;
var border = new Border();
border.BorderThickness = new Thickness(4);
border.Background = Project1.UI.Cores.Project1UIColor.Get("#ffffff");
border.BorderBrush = Project1.UI.Cores.Project1UIColor.Get("#4f6bed");
border.Child = panel;
border.Loaded += (e, c) =>
{
var timer = new DispatcherTimer();
timer.Tick += (e2, c2) =>
{
timer.Stop();
WriteFile((int)border.ActualWidth, (int)border.ActualHeight);
};
timer.Interval = new TimeSpan(1000);
timer.Start();
};
canvas.Children.Add(border);

drawWindow = new Window();
drawWindow.WindowStyle = WindowStyle.None;
drawWindow.ShowActivated = false;
drawWindow.Width = 0;
drawWindow.Height = 0;
drawWindow.Visibility = Visibility.Hidden;
drawWindow.Content = canvas;
}
private void Draw()
{

//绘制头部
DrawHeader();
//绘制月数据
DrawMonthlyChart();

drawWindow.Show();
}

/// <summary>
/// 绘制头部
/// </summary>
private void DrawHeader()
{
//绘制标题
var title = new TextBlock();
title.Text = this.title;
title.FontSize = 20;
title.FontWeight = FontWeights.Bold;
title.Foreground = Brushes.White;
var titleBorder = new Border();
titleBorder.Background = Project1.UI.Cores.Project1UIColor.Get("#4f6bed");
titleBorder.HorizontalAlignment = HorizontalAlignment.Left;
titleBorder.Margin = new Thickness(0, 0, 0, 40);
titleBorder.Padding = new Thickness(10);
titleBorder.Child = title;
panel.Children.Add(titleBorder);
}

/// <summary>
/// 绘制月图表
/// </summary>
private void DrawMonthlyChart()
{
//titleBorder.CornerRadius = new CornerRadius(0, 5, 5, 0);
var containerBorder = new Border();
containerBorder.Background = Project1.UI.Cores.Project1UIColor.Get("#4f6bed", .05);
containerBorder.Padding = new Thickness(10);
containerBorder.CornerRadius = new CornerRadius(2);

//图表标题
var chartTitleText = new TextBlock();
chartTitleText.Text = "工作";
chartTitleText.FontSize = 20;
chartTitleText.FontWeight = FontWeights.Bold;
chartTitleText.Margin = new Thickness(5, 0, 0, 0);
chartTitleText.VerticalAlignment = VerticalAlignment.Center;

var chartTitle = new StackPanel();
chartTitle.Margin = new Thickness(0, 0, 0, 20);
chartTitle.Orientation = Orientation.Horizontal;
chartTitle.Children.Add(new Image()
{
VerticalAlignment = VerticalAlignment.Center,
Width = 20,
Source = Project1.UI.Cores.BitmapImager.Load("pack://application:,,,/ProjectEye;component/Resources/desktop-computer.ico")
});
chartTitle.Children.Add(chartTitleText);
//对比上个月
var compare = new Project1.UI.Controls.CompareView();
compare.DataA = lastMonthlyWork;
compare.DataB = monthlyWork;
compare.Margin = new Thickness(0, 0, 0, 20);
//图表
//var chart = new Project1.UI.Controls.ChartControl.Chart();
chart.Data = chartData;
chart.TickText = "{value} 小时";
chart.IsAnimation = false;
chart.Background = Brushes.Transparent;
chart.ItemColor = Project1.UI.Cores.Project1UIColor.Get("#4f6bed");
chart.Height = 360;
containerBorder.Child = chart;

panel.Children.Add(chartTitle);
panel.Children.Add(compare);
panel.Children.Add(containerBorder);
}
private void WriteFile(int width, int height)
{
RenderTargetBitmap rtp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
rtp.Render(canvas);
JpegBitmapEncoder jpeg = new JpegBitmapEncoder();
jpeg.QualityLevel = 100;
jpeg.Frames.Add(BitmapFrame.Create(rtp));
FileStream fs = new FileStream(savePath, FileMode.Create);
jpeg.Save(fs);
fs.Close();
fs.Dispose();
drawWindow.Close();
}
public void Generate()
{
Draw();
}
}
}
28 changes: 28 additions & 0 deletions src/Local/ProjectEye/Core/Enums/SoundType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjectEye.Core.Enums
{
public enum SoundType
{
/// <summary>
/// 休息结束
/// </summary>
RestOverSound,
/// <summary>
/// 番茄时钟工作开始
/// </summary>
TomatoWorkStartSound,
/// <summary>
/// 番茄时钟工作结束
/// </summary>
TomatoWorkEndSound,
/// <summary>
/// 其他
/// </summary>
Other
}
}
4 changes: 4 additions & 0 deletions src/Local/ProjectEye/Core/Models/Options/BehaviorModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,9 @@ public class BehaviorModel
/// 跳过进程名单
/// </summary>
public ObservableCollection<string> BreakProgressList { get; set; } = new ObservableCollection<string>();
/// <summary>
/// 是否禁用跳过休息(为true时将不允许跳过而是直接进入休息
/// </summary>
public bool IsDisabledSkip { get; set; } = false;
}
}
16 changes: 16 additions & 0 deletions src/Local/ProjectEye/Core/Models/Options/TomatoModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,22 @@ public class TomatoModel
/// 长休息
/// </summary>
public int LongRestMinutes { get; set; } = 30;
/// <summary>
/// 是否开启工作开始提示音
/// </summary>
public bool IsWorkStartSound { get; set; } = true;
/// <summary>
/// 是否开启工作结束提示音
/// </summary>
public bool IsWorkEndSound { get; set; } = true;
/// <summary>
/// 工作开始提示音路径
/// </summary>
public string WorkStartSoundPath { get; set; } = "";
/// <summary>
/// 工作结束提示音路径
/// </summary>
public string WorkEndSoundPath { get; set; } = "";

}
}
2 changes: 2 additions & 0 deletions src/Local/ProjectEye/Core/Service/ConfigService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ private void CheckOptions()
{
CheckOptions(options);
CheckOptions(options.Style);
CheckOptions(options.Tomato);
SaveOldOptions();
}
private void CheckOptions(object obj)
{
Expand Down
11 changes: 7 additions & 4 deletions src/Local/ProjectEye/Core/Service/MainService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -392,10 +392,13 @@ public bool SetWarnTime(int minutes)
/// </summary>
public void ReStart()
{
Debug.WriteLine("重新启动休息计时");
DoStop();
DoStart();
OnReStartTimer?.Invoke(this, 0);
if (!config.options.General.Noreset)
{
Debug.WriteLine("重新启动休息计时");
DoStop();
DoStart();
OnReStartTimer?.Invoke(this, 0);
}
}

#endregion
Expand Down
44 changes: 33 additions & 11 deletions src/Local/ProjectEye/Core/Service/PreAlertService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,20 @@ private void Main_OnReStartTimer(object service, int msg)

private void Config_Changed(object sender, EventArgs e)
{
if (config.options.Style.IsPreAlert != isPreAlert ||
config.options.Style.PreAlertTime != preAlertTime)
var oldOptions = sender as ProjectEye.Core.Models.Options.OptionsModel;
if (config.options.Style.IsPreAlert != oldOptions.Style.IsPreAlert ||
config.options.General.IsTomatoMode != oldOptions.General.IsTomatoMode)
{
//当关于预提醒的配置被修改时,重启休息计时和预提醒
main.ReStart();
InitPreAlert();
if (config.options.Style.IsPreAlert && !config.options.General.IsTomatoMode)
{
//当关于预提醒的配置被修改时,重启休息计时和预提醒
main.ReStart();
InitPreAlert();
}
else
{
preAlertTimer?.Stop();
}
}
}

Expand All @@ -204,11 +212,11 @@ public void InitPreAlert()

isPreAlert = bool.Parse(config.options.Style.IsPreAlert.ToString());
preAlertTime = int.Parse(config.options.Style.PreAlertTime.ToString());
if (preAlertTimer!=null && preAlertTimer.IsEnabled)
if (preAlertTimer != null && preAlertTimer.IsEnabled)
{
preAlertTimer.Stop();
}


if (config.options.Style.IsPreAlert)
{
Expand Down Expand Up @@ -249,11 +257,19 @@ private void preAlertTimer_Tick(object sender, EventArgs e)
}
toast.OnAutoHide += Toast_OnAutoHide;
toast.OnButtonClick += Toast_OnButtonClick;
toast.Alert(toastModel, config.options.Style.PreAlertTime,
new string[] {

//处理禁用时
var btns = new string[] {
"好的",
"跳过本次"
});
};
if (config.options.Behavior.IsDisabledSkip)
{
btns = new string[] {
"好的",
};
}
toast.Alert(toastModel, config.options.Style.PreAlertTime, btns);

//播放通知提示音
if (config.options.Style.IsPreAlertSound)
Expand Down Expand Up @@ -298,9 +314,15 @@ private void Toast_OnButtonClick(string name, Project1UIToast sender)

private void Toast_OnAutoHide(Project1UIToast sender, int type = 0)
{
//没有点击操作自动关闭时
if (!sender.IsButtonClicked)
{
if (config.options.Style.PreAlertAction.Value == "1")
if (config.options.Behavior.IsDisabledSkip)
{
//禁用了跳过休息
SetPreAlertAction(PreAlertAction.Goto);
}
else if (config.options.Style.PreAlertAction.Value == "1")
{
//进入本次休息
SetPreAlertAction(PreAlertAction.Goto);
Expand Down
Loading

0 comments on commit 7c3f00d

Please sign in to comment.