Skip to content

Commit 42ea8ac

Browse files
committed
Cleanup
1 parent 37b3c60 commit 42ea8ac

12 files changed

Lines changed: 144 additions & 65 deletions

File tree

BatchImageProcessor/App.config

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
32
<configuration>
43
<startup>
5-
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
4+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
65
</startup>
7-
</configuration>
6+
</configuration>

BatchImageProcessor/BatchImageProcessor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<AppDesignerFolder>Properties</AppDesignerFolder>
1111
<RootNamespace>BatchImageProcessor</RootNamespace>
1212
<AssemblyName>BatchImageProcessor</AssemblyName>
13-
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
13+
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
1414
<FileAlignment>512</FileAlignment>
1515
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
1616
<WarningLevel>4</WarningLevel>

BatchImageProcessor/MainWindow.cs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public MainWindow()
5050

5151
private IntPtr _hwnd;
5252
private HwndSource _hsource;
53+
5354
private void Window_Loaded(object sender, RoutedEventArgs e)
5455
{
5556
var args = Env.GetCommandLineArgs();
@@ -118,7 +119,7 @@ private void ExtendFrameIntoClientArea(int left, int right, int top, int bottom)
118119

119120
private void FallbackPaint()
120121
{
121-
Background = ContentRectangle.Fill;// Brushes.White;
122+
Background = ContentRectangle.Fill; // Brushes.White;
122123
}
123124

124125
private bool IsOnExtendedFrame(int lParam)
@@ -177,7 +178,7 @@ private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref b
177178
Filter = Properties.Resources.MainWindow__fileBrowser_Filter,
178179
Multiselect = true,
179180
InitialDirectory = Env.GetFolderPath(Env.SpecialFolder.MyPictures)
180-
181+
181182
};
182183

183184
private readonly FolderBrowserDialog _folderBrowser = new FolderBrowserDialog
@@ -273,7 +274,7 @@ private void CheckInvBtn_Click(object sender, RoutedEventArgs e)
273274
private void Grid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
274275
{
275276
var files = new List<FileInfo>();
276-
FileWrapper wrapper;
277+
FileWrapper wrapper = null;
277278
if (sender is Grid)
278279
{
279280
files.AddRange(from File file in ThumbnailView.SelectedItems select new FileInfo(file.Path));
@@ -282,9 +283,14 @@ private void Grid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
282283
else
283284
{
284285
var frameworkElement = e.Source as FrameworkElement;
285-
var f = frameworkElement?.DataContext as File;
286-
if (f != null) files.Add(new FileInfo(f.Path));
287-
wrapper = TreeView.SelectedItem as FileWrapper;
286+
var f = frameworkElement?.DataContext as FileWrapper;
287+
if (f != null)
288+
{
289+
files.Add(new FileInfo(f.Path));
290+
wrapper = f;
291+
}
292+
else if (TreeView.SelectedValue is FileWrapper)
293+
wrapper = TreeView.SelectedValue as FileWrapper;
288294
}
289295

290296
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
@@ -414,7 +420,7 @@ private void importFolderBtn_Click(object sender, RoutedEventArgs e)
414420
f.Name = string.Format(s, i);
415421
}
416422

417-
parent?.Files.Add(f);
423+
parent?.Files.Insert(0,f);
418424
}
419425

420426
private void RemoveFolderMenuItem_Click(object sender, RoutedEventArgs e)
@@ -470,7 +476,7 @@ private void addFolderBtn_Click(object sender, RoutedEventArgs e)
470476
f.Name = string.Format(s, i);
471477
}
472478

473-
parent?.Files.Add(f);
479+
parent?.Files.Insert(0,f);
474480
}
475481

476482
private void importImageBtn_Click(object sender, RoutedEventArgs e)
@@ -551,7 +557,7 @@ private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e
551557
RotateSettings.Visibility =
552558
ResizeSettings.Visibility =
553559
CropSettings.Visibility =
554-
WatermarkSettings.Visibility =
560+
WatermarkSettings.Visibility =
555561
ColorSettings.Visibility =
556562
OutputSettings.Visibility = Visibility.Collapsed;
557563
if (SettingsPresenter == null) return;
@@ -691,6 +697,19 @@ private void StopBtn_Click(object sender, RoutedEventArgs e)
691697
Engine.Cancel = true;
692698
}
693699

700+
private void RemoveItemBtn_Click(object sender, RoutedEventArgs e)
701+
{
702+
// ReSharper disable once CanBeReplacedWithTryCastAndCheckForNull
703+
if (TreeView.SelectedValue is FileWrapper)
704+
VModel.RemoveFile((FileWrapper)TreeView.SelectedValue);
705+
else
706+
VModel.RemoveFolder((Folder)TreeView.SelectedValue);
707+
}
694708

709+
private void MenuItem_Click(object sender, RoutedEventArgs e)
710+
{
711+
var m = (ContextMenu) Resources["ImageCtxMenu"];
712+
VModel.RemoveFile((FileWrapper)m.DataContext);
713+
}
695714
}
696715
}

BatchImageProcessor/MainWindow.xaml

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,15 @@
125125
<!-- ReSharper disable Xaml.BindingWithContextNotResolved -->
126126
<!-- ReSharper disable once Xaml.RedundantResource -->
127127
<ContextMenu x:Key="ImageCtxMenu">
128+
<MenuItem Header="Override Output Format">
129+
<MenuItem Header="Default Output Format" IsChecked="{Binding FormatOverride, ConverterParameter=Default, Converter={StaticResource EnumConv}}"/>
130+
<Separator/>
131+
<MenuItem Header="JPEG (*.jpg)" IsChecked="{Binding FormatOverride, ConverterParameter=Jpg, Converter={StaticResource EnumConv}}" IsCheckable="True"/>
132+
<MenuItem Header="Portable Network Graphics (*.png)" IsChecked="{Binding FormatOverride, ConverterParameter=Png, Converter={StaticResource EnumConv}}" IsCheckable="True"/>
133+
<MenuItem Header="Bitmap (*.bmp)" IsChecked="{Binding FormatOverride, ConverterParameter=Bmp, Converter={StaticResource EnumConv}}" IsCheckable="True"/>
134+
<MenuItem Header="Graphics Interchange Format (*.gif)" IsChecked="{Binding FormatOverride, ConverterParameter=Gif, Converter={StaticResource EnumConv}}" IsCheckable="True"/>
135+
<MenuItem Header="Tagged Image File Format (*.tiff)" IsChecked="{Binding FormatOverride, ConverterParameter=Tiff, Converter={StaticResource EnumConv}}" IsCheckable="True"/>
136+
</MenuItem>
128137
<MenuItem Header="{x:Static properties:Resources.RotationMenu_Header}">
129138
<MenuItem.Icon>
130139
<Image Stretch="None" StretchDirection="DownOnly" Source="Images/image-rotate.png" />
@@ -193,6 +202,12 @@
193202
<Image Stretch="None" StretchDirection="DownOnly" Source="Images/color-adjustment.png" />
194203
</MenuItem.Icon>
195204
</MenuItem>
205+
<Separator/>
206+
<MenuItem Header="Remove Image" Click="MenuItem_Click">
207+
<MenuItem.Icon>
208+
<Image Stretch="None" StretchDirection="DownOnly" Source="Images/cross.png"/>
209+
</MenuItem.Icon>
210+
</MenuItem>
196211
</ContextMenu>
197212
</Window.Resources>
198213

@@ -254,7 +269,7 @@
254269
</Line>-->
255270
<!-- ReSharper disable once Xaml.BindingWithContextNotResolved -->
256271
<Button x:Name="RemoveItemBtn" ToolTip="{x:Static properties:Resources.RemoveItemBtn_ToolTip}" Cursor="Hand"
257-
IsEnabled="{Binding SelectedItem.Removable, ElementName=TreeView}">
272+
IsEnabled="{Binding SelectedItem.Removable, ElementName=TreeView}" Click="RemoveItemBtn_Click">
258273
<Image Width="18" Height="18" Source="Images/cross.png" Stretch="None" />
259274
</Button>
260275
</StackPanel>
@@ -264,8 +279,7 @@
264279
<!--<Label x:Name="FolderLabel" Grid.Row="0" Grid.Column="0" Content="{x:Static properties:Resources.FoldersLabel_Text}" HorizontalAlignment="Center" Visibility="Collapsed"/>-->
265280

266281
<!-- Treeview File Explorer -->
267-
<TreeView x:Name="TreeView" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Folders}" BorderThickness="0"
268-
VirtualizingPanel.IsVirtualizing="True">
282+
<TreeView x:Name="TreeView" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Folders}" BorderThickness="0">
269283
<TreeView.Resources>
270284
<HierarchicalDataTemplate DataType="{x:Type viewmodel:Folder}" ItemsSource="{Binding Files}">
271285
<StackPanel Orientation="Horizontal" Cursor="Hand">
@@ -436,10 +450,10 @@
436450
<!-- Grid Splitter -->
437451

438452
<!-- Item View -->
439-
<ListView Grid.Row="1" Grid.Column="1" x:Name="ThumbnailView"
440-
ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
441-
ItemsSource="{Binding Source={StaticResource FileFilterCollection}}" Margin="3,0,0,0">
442-
<ListView.ItemTemplate>
453+
<ListView Grid.Row="1" Grid.Column="1" x:Name="ThumbnailView" Margin="3,0,0,0"
454+
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
455+
ItemsSource="{Binding Source={StaticResource FileFilterCollection}}">
456+
<ListView.Resources>
443457
<DataTemplate DataType="{x:Type viewmodel:FileWrapper}">
444458
<Grid VerticalAlignment="Center" Margin="0,3,3,0" MouseRightButtonUp="Grid_MouseRightButtonUp">
445459
<Grid.ToolTip>
@@ -503,7 +517,7 @@
503517
MaxHeight="40" TextAlignment="Center" Opacity="{Binding Selected, Converter={StaticResource BoolOpacConv}}" />
504518
</Grid>
505519
</DataTemplate>
506-
</ListView.ItemTemplate>
520+
</ListView.Resources>
507521
</ListView>
508522

509523
<Border Grid.Row="0" Grid.Column="2" HorizontalAlignment="Left" Margin="0,5" Opacity="0.7" BorderThickness="1,1,0,0" BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}">

BatchImageProcessor/Model/IoObject.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ namespace BatchImageProcessor.Model
77
public abstract class IoObject : INotifyPropertyChanged, IDisposable
88
{
99
private readonly FileSystemWatcher _watcher;
10-
private string _name;
1110
private string _path;
1211

1312
protected IoObject(string path)
@@ -40,20 +39,19 @@ public string Path
4039
set
4140
{
4241
_path = value;
43-
_name = GetName(_path);
4442
PropChanged("Name");
4543
PropChanged("Path");
4644
}
4745
}
4846

49-
public string Name => _name ?? (_name = GetName(Path));
47+
//public string Name => _name ?? (_name = GetName(Path));
5048
public bool IsFile { get; set; }
5149
public abstract WeakThumbnail Thumbnail { get; protected set; }
5250

5351
public void Dispose()
5452
{
5553
_watcher.Dispose();
56-
GC.SuppressFinalize(this);
54+
//GC.SuppressFinalize(this);
5755
}
5856

5957
public event PropertyChangedEventHandler PropertyChanged;
@@ -69,15 +67,7 @@ private void watcher_Renamed(object sender, RenamedEventArgs e)
6967
_watcher.Filter = e.Name;
7068
}
7169

72-
public static string GetName(string path)
73-
{
74-
if (Directory.Exists(path) &&
75-
(System.IO.File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
76-
return System.IO.Path.GetFileName(path);
77-
if (System.IO.File.Exists(path))
78-
return System.IO.Path.GetFileNameWithoutExtension(path);
79-
throw new FileNotFoundException(string.Format(@"File/folder at ""{0}"" does not exist.", path));
80-
}
70+
8171

8272
public void PropChanged(string propertyName)
8373
{

BatchImageProcessor/Model/WeakThumbnail.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.IO;
33
using System.Runtime.Caching;
44
using System.Threading;
5+
using System.Windows;
6+
using System.Windows.Interop;
57
using System.Windows.Media.Imaging;
68
using Microsoft.WindowsAPICodePack.Shell;
79

@@ -48,9 +50,20 @@ private static BitmapSource GetThumb(string path)
4850
throw new NotSupportedException("Platform does not support ShellObjects.");
4951

5052
var sFile = ShellObject.FromParsingName(path);
51-
return sFile.Thumbnail.BitmapSource;
53+
var bitmapSource = sFile.Thumbnail.BitmapSource;
54+
55+
if (bitmapSource == null)
56+
{
57+
var b = sFile.Thumbnail.ExtraLargeIcon.ToBitmap();
58+
var hbmp = b.GetHbitmap();
59+
bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(hbmp, IntPtr.Zero, Int32Rect.Empty,
60+
BitmapSizeOptions.FromEmptyOptions());
61+
}
62+
63+
sFile.Dispose();
64+
return bitmapSource;
5265
}
53-
catch
66+
catch(Exception)
5467
{
5568
return null;
5669
}

BatchImageProcessor/ViewModel/FileWrapper.cs

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using BatchImageProcessor.Model;
1+
using System.IO;
2+
using BatchImageProcessor.Model;
3+
using File = BatchImageProcessor.Model.File;
24

35
namespace BatchImageProcessor.ViewModel
46
{
@@ -10,11 +12,15 @@ public class FileWrapper : File, IFolderable
1012
private bool _overrideColor;
1113
private Rotation _rotOverride = Rotation.Default;
1214
private bool _selected = true;
15+
private Format _formatOverride;
16+
private double _jpegQualityOverride;
17+
private string _name;
1318

14-
public FileWrapper(string path)
19+
public FileWrapper(string path)
1520
: base(path)
1621
{
1722
Thumbnail.SourceUpdated += Thumbnail_SourceUpdated;
23+
_name = GetName(path);
1824
}
1925

2026
public bool Selected
@@ -38,7 +44,19 @@ public Rotation RotationOverride
3844
}
3945
}
4046

41-
public bool OverrideResize
47+
public Format FormatOverride
48+
{
49+
get { return _formatOverride; }
50+
set { _formatOverride = value; PropChanged("FormatOverride");}
51+
}
52+
53+
public double JpegQualityOverride
54+
{
55+
get { return _jpegQualityOverride; }
56+
set { _jpegQualityOverride = value; PropChanged("JpegQualityOverride");}
57+
}
58+
59+
public bool OverrideResize
4260
{
4361
get { return _overrideResize; }
4462
set
@@ -86,5 +104,21 @@ private void Thumbnail_SourceUpdated()
86104
{
87105
PropChanged("Thumbnail");
88106
}
89-
}
107+
108+
public string Name
109+
{
110+
get { return _name; }
111+
set { _name = value; PropChanged("Name"); }
112+
}
113+
114+
public static string GetName(string path)
115+
{
116+
if (Directory.Exists(path) &&
117+
(System.IO.File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
118+
return System.IO.Path.GetFileName(path);
119+
if (System.IO.File.Exists(path))
120+
return System.IO.Path.GetFileNameWithoutExtension(path);
121+
throw new FileNotFoundException(string.Format(@"File/folder at ""{0}"" does not exist.", path));
122+
}
123+
}
90124
}

0 commit comments

Comments
 (0)