Skip to content

Commit

Permalink
ENCH:
Browse files Browse the repository at this point in the history
1. Create new task file from predefined templates.
2. Queue multiple tasks, run them sequential one after another.
3. MRU (Most recently used) backup tasks folders to choose from under Backup Tasks tab.
  • Loading branch information
Cinchoo committed Jun 6, 2022
1 parent cb527fd commit 5faf1fe
Show file tree
Hide file tree
Showing 19 changed files with 1,920 additions and 74 deletions.
34 changes: 32 additions & 2 deletions App.config
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@
<setting name="BackupTaskDirectory" serializeAs="String">
<value />
</setting>
<setting name="DateCreated" serializeAs="String">
<setting name="DateCreatedVisibility" serializeAs="String">
<value>True</value>
</setting>
<setting name="DateModified" serializeAs="String">
<setting name="DateModifiedVisibility" serializeAs="String">
<value>True</value>
</setting>
<setting name="SizeColumnToFit" serializeAs="String">
Expand Down Expand Up @@ -83,6 +83,36 @@
<setting name="WatchForChanges" serializeAs="String">
<value>True</value>
</setting>
<setting name="TaskQNameColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQStartTimeColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQQueueTimeColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQueueTabActiveAtOpen" serializeAs="String">
<value>False</value>
</setting>
<setting name="TaskQTaskItems" serializeAs="String">
<value />
</setting>
<setting name="TaskQEndTimeColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQStatusColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQErrorMsgColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="TaskQIdColumnWidth" serializeAs="String">
<value>NaN</value>
</setting>
<setting name="UpdateSettings" serializeAs="String">
<value>True</value>
</setting>
</ChoEazyCopy.Properties.Settings>
</userSettings>
</configuration>
8 changes: 8 additions & 0 deletions App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ public class AppHost : ChoApplicationHost
[STAThread]
public static void Main(string[] args)
{
// Copy user settings from previous application version if necessary
if (Settings.Default.UpdateSettings)
{
Settings.Default.Upgrade();
Settings.Default.Reload();
Settings.Default.UpdateSettings = false;
Settings.Default.Save();
}
ChoApplication.Run(args);
}
public override void OnTrayAppExitMenuClicked(object sender, EventArgs e)
Expand Down
15 changes: 14 additions & 1 deletion ChoEazyCopy.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;_DELAY_RUN_1</DefineConstants>
<DefineConstants>TRACE;DEBUG;_DELAY_RUN_1, _TEST_MODE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
Expand Down Expand Up @@ -168,16 +168,23 @@
<DependentUpon>ChoPropertyGridFolderPicker.xaml</DependentUpon>
</Compile>
<Compile Include="ChoRoboCopyManager.cs" />
<Compile Include="ChoTaskQueueItem.cs" />
<Compile Include="ChoUserPreferences.cs" />
<Compile Include="ChoGridViewColumnVisibilityManager.cs" />
<Compile Include="ChoGridViewSort.cs" />
<Compile Include="ChoSortAdorner.cs" />
<Compile Include="ChoTaskQManager.cs" />
<Compile Include="ChoUtility.cs" />
<Compile Include="ChoObservableCollection.cs" />
<Compile Include="ChoTaskQueueItemLogInfo.cs" />
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="ChoMruComboBox.cs" />
<Compile Include="ChoObservableMruList.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
Expand Down Expand Up @@ -310,6 +317,12 @@
<EmbeddedResource Include="Lib\MahApps.Metro.IconPacks.Core.dll" />
<EmbeddedResource Include="Lib\MahApps.Metro.IconPacks.FontAwesome.dll" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\SyncJob.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\CopyJob.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Expand Down
77 changes: 61 additions & 16 deletions ChoGridViewColumnVisibilityManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,66 @@ namespace ChoEazyCopy
{
public class ChoGridViewColumnVisibilityManager
{
private static Dictionary<GridViewColumn, double> _columns = null;
private static Dictionary<GridView, Dictionary<GridViewColumn, double>> _columns = null;

public static void ResizeAllColumnsToFit()
public static void ResizeAllColumnsToFit(DependencyObject obj)
{
ListView lv = obj as ListView;
if (lv == null) return;

GridView gridview = lv.View as GridView;
if (gridview == null || gridview.Columns == null) return;

var columns = _columns;
if (columns == null)
if (columns == null || !_columns.ContainsKey(gridview))
return;
if (_columns[gridview] == null)
return;

foreach (GridViewColumn gc in columns.Keys.ToArray())
foreach (GridViewColumn gc in _columns[gridview].Keys.ToArray())
{
gc.Width = 0;
gc.Width = Double.NaN;
columns[gc] = gc.Width;
columns[gridview][gc] = gc.Width;
}

}
public static bool Contains(GridViewColumn col)
{
Dictionary<GridViewColumn, double> dict = null;
return Contains(col, out dict);
}

public static bool Contains(GridViewColumn col, out Dictionary<GridViewColumn, double> dict)
{
dict = null;
if (col == null)
return false;
if (_columns == null)
return false;

foreach (var gv in _columns.Keys.ToArray())
{
if (_columns[gv].ContainsKey(col))
{
dict = _columns[gv];
return true;
}
}

return false;
}

public static void SetGridColumnWidth(GridViewColumnHeader colHeader)
{
var col = colHeader.Column;
if (_columns.ContainsKey(col) && (col.Width > 0 || col.Width == double.NaN))
_columns[col] = col.Width;
SetGridColumnWidth(colHeader.Column);
}

public static void SetGridColumnWidth(GridViewColumn col)
{
if (_columns.ContainsKey(col) && col.Width > 0)
_columns[col] = col.Width;
Dictionary<GridViewColumn, double> dict = null;
if (Contains(col, out dict) && (col.Width > 0 || col.Width == double.NaN))
dict[col] = col.Width;
}

static void UpdateListView(ListView lv)
Expand All @@ -44,10 +78,13 @@ static void UpdateListView(ListView lv)
if (gridview == null || gridview.Columns == null) return;

if (_columns == null)
_columns = new Dictionary<GridView, Dictionary<GridViewColumn, double>>();

if (!_columns.ContainsKey(gridview))
{
_columns = new Dictionary<GridViewColumn, double>();
_columns.Add(gridview, new Dictionary<GridViewColumn, double>());
foreach (GridViewColumn gc in gridview.Columns)
_columns.Add(gc, gc.Width);
_columns[gridview].Add(gc, gc.Width);
}

List<GridViewColumn> toRemove = new List<GridViewColumn>();
Expand All @@ -60,8 +97,12 @@ static void UpdateListView(ListView lv)
}
else
{
gc.Width = _columns[gc];
((GridViewColumnHeader)gc.Header).IsHitTestVisible = true;
Dictionary<GridViewColumn, double> dict = null;
if (Contains(gc, out dict))
{
gc.Width = dict[gc];
((GridViewColumnHeader)gc.Header).IsHitTestVisible = true;
}
}
}
}
Expand Down Expand Up @@ -106,8 +147,12 @@ private static void OnIsVisibleChanged(DependencyObject obj, DependencyPropertyC
}
else
{
gc.Width = _columns[gc];
((GridViewColumnHeader)gc.Header).IsHitTestVisible = true;
Dictionary<GridViewColumn, double> dict = null;
if (Contains(gc, out dict))
{
gc.Width = dict[gc];
((GridViewColumnHeader)gc.Header).IsHitTestVisible = true;
}
}
}
}
Expand Down
112 changes: 112 additions & 0 deletions ChoMruComboBox.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace ChoEazyCopy
{
public class ChoMruComboBox : Control
{

#region Dependency Properties

public static readonly DependencyProperty MruSourceProperty =
DependencyProperty.Register("MruSource", typeof(ChoObservableMruList<string>), typeof(ChoMruComboBox));

public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ChoMruComboBox), new PropertyMetadata(OnTextChanged));

#endregion

#region Constructors

static ChoMruComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ChoMruComboBox), new FrameworkPropertyMetadata(typeof(ChoMruComboBox)));
}

public ChoMruComboBox()
{

this.Focusable = false;
this.IsTabStop = false;

}

#endregion

#region Properties

public ChoObservableMruList<string> MruSource
{
get { return (ChoObservableMruList<string>)GetValue(MruSourceProperty); }
set { SetValue(MruSourceProperty, value); }
}

public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}

#endregion

#region Event Handlers

private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{

ChoMruComboBox srcControl = d as ChoMruComboBox;
if (srcControl != null)
{
if (srcControl.MruSource != null)
{
var dir = e.NewValue.ToString();

if (!dir.IsNullOrWhiteSpace() && Directory.Exists(dir))
srcControl.MruSource.Add(dir);
}
}

}
private static void OnTextChanged1(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ChoMruComboBox srcControl = d as ChoMruComboBox;
if (srcControl != null)
{
if (srcControl.MruSource != null)
{
System.Threading.ThreadPool.RegisterWaitForSingleObject(new AutoResetEvent(false),
(state, bTimeout) => srcControl.HandleMruUpdate(e.NewValue.ToString()), "", TimeSpan.FromSeconds(1), true);
}
}
}
private void HandleMruUpdate(string listVal)
{
if (this.Dispatcher.CheckAccess())
{
if (Directory.Exists(listVal))
this.MruSource.Add(listVal);
}
else
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action<string>(HandleMruUpdate), listVal);
}
}
#endregion

}

}
Loading

0 comments on commit 5faf1fe

Please sign in to comment.