'添加自定义图标大小','待办任务可使用CRON表达式自定义提醒频率'

This commit is contained in:
liufei
2021-09-11 15:32:30 +08:00
parent c231587543
commit 274541303a
19 changed files with 562 additions and 142 deletions

View File

@@ -121,7 +121,7 @@
</hc:SideMenu>
</hc:Card>
<hc:ScrollViewer Grid.Row="0" Grid.Column="1">
<hc:Card x:Name="RightCard" Height="448">
<hc:Card x:Name="RightCard" Height="480">
</hc:Card>
</hc:ScrollViewer>

View File

@@ -4,10 +4,11 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:cvt="clr-namespace:GeekDesk.Converts"
xmlns:local="clr-namespace:GeekDesk"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Height="670"
Height="700"
Width="450"
Title="TaskInfo"
WindowStyle="None"
@@ -15,7 +16,7 @@
Background="Transparent" ShowInTaskbar="False"
>
<Window.Resources>
<cvt:TodoTaskExecConvert x:Key="TodoTaskExecConvert"/>
</Window.Resources>
<Border CornerRadius="3" BorderThickness="2" BorderBrush="Black" Margin="0,0,0,313.323" MouseDown="DragMove">
<Border.Background>
@@ -23,48 +24,72 @@
</Border.Background>
<Border.Resources>
<Style x:Key="LeftTB" TargetType="TextBlock" BasedOn="{StaticResource TextBlockBaseStyle}">
<Setter Property="Width" Value="65"/>
<Setter Property="Width" Value="67"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="FontSize" Value="14"/>
</Style>
</Border.Resources>
<Grid Margin="0,0,0,8">
<hc:SimplePanel Margin="20" HorizontalAlignment="Center">
<StackPanel Margin="20" HorizontalAlignment="Center">
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<WrapPanel>
<WrapPanel VerticalAlignment="Center">
<TextBlock Text="待办任务:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" />
</WrapPanel>
<TextBox x:Name="Title" Width="290" FontSize="14" />
<TextBox x:Name="Title" Width="290" Text="{Binding Title, Mode=OneWay}" FontSize="14" />
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,48.997,0,-48.997">
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="待办详情:" Style="{StaticResource LeftTB}"/>
<TextBox x:Name="Msg" TextWrapping="Wrap"
Margin="5,0,0,0"
Text="{Binding Msg, Mode=OneWay}"
AcceptsReturn="True"
VerticalScrollBarVisibility="Visible"
Height="100" MaxHeight="150" MinHeight="100" Width="290" MinWidth="290"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,167.622,0,-167.622">
<TextBlock Text="待办时间*:" Style="{StaticResource LeftTB}"/>
<hc:DateTimePicker x:Name="ExeTime" ErrorStr="test" Width="200"/>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="运行方式:" Style="{StaticResource LeftTB}"/>
<RadioButton Margin="10,0,0,0" Checked="ExecType_Checked" Tag="1" Background="{DynamicResource SecondaryRegionBrush}"
Style="{StaticResource RadioButtonIcon}" Content="指定时间"
IsChecked="{Binding ExecType, Mode=OneWay, Converter={StaticResource TodoTaskExecConvert}, ConverterParameter=1}"/>
<RadioButton Margin="10,0,0,0" Checked="ExecType_Checked" Background="{DynamicResource SecondaryRegionBrush}" Tag="2"
Style="{StaticResource RadioButtonIcon}" Content="CRON表达式"
IsChecked="{Binding ExecType, Mode=OneWay, Converter={StaticResource TodoTaskExecConvert}, ConverterParameter=2}"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,228,0,-228">
<hc:UniformSpacingPanel x:Name="SetTimePanel" Visibility="Visible" Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="指定时间:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" Margin="-10,0,0,0"/>
<hc:DateTimePicker x:Name="ExeTime" Text="{Binding ExeTime, Mode=OneWay}" ErrorStr="Error!" Width="200" Margin="-5.2,0,0,0"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel x:Name="CronPanel" Visibility="Collapsed" Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<WrapPanel VerticalAlignment="Center">
<TextBlock Text="CRON:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" />
</WrapPanel>
<TextBox x:Name="Cron" Width="290" Text="{Binding Cron, Mode=OneWay}" FontSize="14" />
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="完成时间:" Style="{StaticResource LeftTB}"/>
<TextBlock x:Name="DoneTime" Width="200"/>
<TextBlock x:Name="DoneTime" Text="{Binding DoneTime, Mode=OneWay}" Width="200"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,273.333,0,-93.333" Grid.ColumnSpan="4">
<hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<Button Content="保存" Background="#5BC0DE"
Foreground="White" Margin="320,6,-208,-10"
Click="Save_Button_Click"/>
</hc:UniformSpacingPanel>
</hc:SimplePanel>
</StackPanel>
<Button Panel.ZIndex="2" Width="22" Height="22" Click="Close_Button_Click" Style="{StaticResource ButtonIcon}" Foreground="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" hc:IconElement.Geometry="{StaticResource ErrorGeometry}" Padding="0" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0"/>
<StackPanel hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,0"/>
</Grid>

View File

@@ -1,6 +1,8 @@
using GeekDesk.Util;
using GeekDesk.Constant;
using GeekDesk.Util;
using GeekDesk.ViewModel;
using HandyControl.Controls;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -29,23 +31,28 @@ namespace GeekDesk.Control.Windows
private AppData appData = MainWindow.appData;
private ToDoInfo info;
//private ToDoInfo info;
private ToDoInfoWindow()
{
InitializeComponent();
ExeTime.SelectedDateTime = DateTime.Now.AddMinutes(10);
this.Topmost = true;
ExeTime.SelectedDateTime = DateTime.Now.AddMinutes(10);
SetTimePanel.Visibility = Visibility.Visible;
this.DataContext = new ToDoInfo();
}
private ToDoInfoWindow(ToDoInfo info)
{
InitializeComponent();
this.Topmost = true;
Title.Text = info.Title;
Msg.Text = info.Msg;
ExeTime.Text = info.ExeTime;
DoneTime.Text = info.DoneTime;
this.info = info;
this.DataContext = info;
SetTimePanel.Visibility = Visibility.Visible;
//Title.Text = info.Title;
//Msg.Text = info.Msg;
//ExeTime.Text = info.ExeTime;
//DoneTime.Text = info.DoneTime;
//this.info = info;
}
@@ -79,41 +86,70 @@ namespace GeekDesk.Control.Windows
/// <param name="e"></param>
private void Save_Button_Click(object sender, RoutedEventArgs e)
{
DateTime dt;
if (Title.Text.Trim() == "" || ExeTime.Text.Trim() == "")
string execTime;
TodoTaskExecType execType;
if (Title.Text.Trim() == "")
{
Growl.Warning("任务标题 和 待办时间不能为空!");
Growl.Warning("任务标题不能为空!");
return;
} else
{
try
if (SetTimePanel.Visibility == Visibility.Visible)
{
dt = Convert.ToDateTime(ExeTime.Text);
} catch (Exception)
{
Growl.Warning("请输入正确的时间!");
return;
execType = TodoTaskExecType.SET_TIME;
if (ExeTime.Text.Trim() == "")
{
Growl.Warning("执行时间不能为空!");
return;
}
try
{
dt = Convert.ToDateTime(ExeTime.Text);
}
catch (Exception)
{
Growl.Warning("请输入正确的时间!");
return;
}
execTime = ExeTime.Text;
} else {
execType = TodoTaskExecType.CRON;
if (Cron.Text.Trim() == "")
{
Growl.Warning("Cron表达式不能为空!");
return;
}
try
{
bool isValid = CronExpression.IsValidExpression(Cron.Text);
if (!isValid) throw new Exception();
} catch (Exception)
{
Growl.Warning("请输入正确的Cron表达式!");
return;
}
CronExpression exp = new CronExpression(Cron.Text);
DateTime dd = DateTime.Now;
DateTimeOffset ddo = DateTime.SpecifyKind(dd, DateTimeKind.Local);
ddo = (DateTimeOffset)exp.GetNextValidTimeAfter(ddo);
execTime = ddo.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss");
}
}
if (windowType == NEW_TODO)
dt = Convert.ToDateTime(execTime);
ToDoInfo info = new ToDoInfo
{
info = new ToDoInfo
{
Title = Title.Text,
Msg = Msg.Text,
ExeTime = ExeTime.Text
};
appData.ToDoList.Add(info);
} else
Title = Title.Text,
Msg = Msg.Text,
ExeTime = execTime,
ExecType = execType,
Cron = Cron.Text
};
if (windowType != NEW_TODO)
{
appData.HiToDoList.Remove(info);
info.Title = Title.Text;
info.Msg = Msg.Text;
info.ExeTime = ExeTime.Text;
info.DoneTime = null;
appData.ToDoList.Add(info);
}
appData.HiToDoList.Remove(this.DataContext as ToDoInfo);
}
appData.ToDoList.Add(info);
DateTime dtNow = DateTime.Now;
TimeSpan ts = dt.Subtract(dtNow);
@@ -184,5 +220,21 @@ namespace GeekDesk.Control.Windows
windowType = DETAIL_TODO;
window2.Show();
}
private void ExecType_Checked(object sender, RoutedEventArgs e)
{
TodoTaskExecType tag = (TodoTaskExecType)Convert.ToInt32((sender as RadioButton).Tag.ToString());
switch (tag)
{
case TodoTaskExecType.SET_TIME:
SetTimePanel.Visibility = Visibility.Visible;
CronPanel.Visibility = Visibility.Collapsed;
break;
default:
CronPanel.Visibility = Visibility.Visible;
SetTimePanel.Visibility = Visibility.Collapsed;
break;
}
}
}
}