Skip to content

Commit

Permalink
Merge branch 'pr/n4_distantcam'
Browse files Browse the repository at this point in the history
  • Loading branch information
aeoth committed Jan 5, 2012
2 parents 944ef49 + 818d005 commit 5ffe7a2
Show file tree
Hide file tree
Showing 10 changed files with 303 additions and 39 deletions.
5 changes: 1 addition & 4 deletions MahApps.Metro/Behaviours/BorderlessWindowBehavior.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Interop;

namespace MahApps.Metro.Behaviours
{

/// <summary>
/// http://gallery.expression.microsoft.com/ZuneWindowBehavior/
/// Published: 10/18/2010
Expand Down Expand Up @@ -249,7 +246,7 @@ public bool AutoSizeToContent

protected override void OnAttached()
{
if (AssociatedObject.IsInitialized)
if (HwndSource.FromVisual(AssociatedObject) != null)
AddHwndHook();
else
AssociatedObject.SourceInitialized += AssociatedObject_SourceInitialized;
Expand Down
134 changes: 134 additions & 0 deletions MahApps.Metro/Behaviours/StylizedBehaviors.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
using System.Windows;
using System.Windows.Interactivity;

namespace MahApps.Metro.Behaviours
{
public class StylizedBehaviorCollection : FreezableCollection<Behavior>
{
#region Methods (protected)
protected override Freezable CreateInstanceCore()
{
return new StylizedBehaviorCollection();
}
#endregion
}

public class StylizedBehaviors
{
#region Fields (private)
private static readonly DependencyProperty OriginalBehaviorProperty =
DependencyProperty.RegisterAttached(
@"OriginalBehaviorInternal", typeof(Behavior), typeof(StylizedBehaviors), new UIPropertyMetadata(null));
#endregion

#region Fields (public)
public static readonly DependencyProperty BehaviorsProperty = DependencyProperty.RegisterAttached(
@"Behaviors",
typeof(StylizedBehaviorCollection),
typeof(StylizedBehaviors),
new FrameworkPropertyMetadata(null, OnPropertyChanged));
#endregion

#region Static Methods (public)
public static StylizedBehaviorCollection GetBehaviors(DependencyObject uie)
{
return (StylizedBehaviorCollection)uie.GetValue(BehaviorsProperty);
}

public static void SetBehaviors(DependencyObject uie, StylizedBehaviorCollection value)
{
uie.SetValue(BehaviorsProperty, value);
}
#endregion

#region Static Methods (private)
private static Behavior GetOriginalBehavior(DependencyObject obj)
{
return obj.GetValue(OriginalBehaviorProperty) as Behavior;
}

private static int GetIndexOf(BehaviorCollection itemBehaviors, Behavior behavior)
{
int index = -1;

Behavior orignalBehavior = GetOriginalBehavior(behavior);

for (int i = 0; i < itemBehaviors.Count; i++)
{
Behavior currentBehavior = itemBehaviors[i];

if (currentBehavior == behavior
|| currentBehavior == orignalBehavior)
{
index = i;
break;
}

Behavior currentOrignalBehavior = GetOriginalBehavior(currentBehavior);

if (currentOrignalBehavior == behavior
|| currentOrignalBehavior == orignalBehavior)
{
index = i;
break;
}
}

return index;
}

private static void OnPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
{
var uie = dpo as UIElement;

if (uie == null)
{
return;
}

BehaviorCollection itemBehaviors = Interaction.GetBehaviors(uie);

var newBehaviors = e.NewValue as StylizedBehaviorCollection;
var oldBehaviors = e.OldValue as StylizedBehaviorCollection;

if (newBehaviors == oldBehaviors)
{
return;
}

if (oldBehaviors != null)
{
foreach (var behavior in oldBehaviors)
{
int index = GetIndexOf(itemBehaviors, behavior);

if (index >= 0)
{
itemBehaviors.RemoveAt(index);
}
}
}

if (newBehaviors != null)
{
foreach (var behavior in newBehaviors)
{
int index = GetIndexOf(itemBehaviors, behavior);

if (index < 0)
{
var clone = (Behavior)behavior.Clone();
SetOriginalBehavior(clone, behavior);
itemBehaviors.Add(clone);
}
}
}
}

private static void SetOriginalBehavior(DependencyObject obj, Behavior value)
{
obj.SetValue(OriginalBehaviorProperty, value);
}
#endregion
}
}
26 changes: 26 additions & 0 deletions MahApps.Metro/Controls/MetroWindow.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Windows;
using System.Windows.Input;

namespace MahApps.Metro.Controls
{
[TemplatePart(Name = "PART_TitleBar", Type = typeof(UIElement))]
public class MetroWindow : Window
{
static MetroWindow()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MetroWindow), new FrameworkPropertyMetadata(typeof(MetroWindow)));
}

public override void OnApplyTemplate()
{
base.OnApplyTemplate();
MouseDown += TitleBarMouseDown;
}

private void TitleBarMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.RightButton != MouseButtonState.Pressed && e.MiddleButton != MouseButtonState.Pressed && e.LeftButton == MouseButtonState.Pressed)
DragMove();
}
}
}
48 changes: 48 additions & 0 deletions MahApps.Metro/Converters/MarkupConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;

namespace MahApps.Metro.Converters
{
[MarkupExtensionReturnType(typeof(IValueConverter))]
public abstract class MarkupConverter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}

protected abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
protected abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);

#region IValueConverter Members

object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
return Convert(value, targetType, parameter, culture);
}
catch
{
return DependencyProperty.UnsetValue;
}
}

object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
return ConvertBack(value, targetType, parameter, culture);
}
catch
{
return DependencyProperty.UnsetValue;
}
}

#endregion
}
}
12 changes: 6 additions & 6 deletions MahApps.Metro/Converters/ToUpperConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,33 @@

namespace MahApps.Metro.Converters
{
public class ToUpperConverter : IValueConverter
public class ToUpperConverter : MarkupConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
protected override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
return ((string)value).ToUpper();

return value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
protected override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}

public class ToLowerConverter : IValueConverter
public class ToLowerConverter : MarkupConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
protected override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
return ((string)value).ToLower();

return value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
protected override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
Expand Down
3 changes: 3 additions & 0 deletions MahApps.Metro/MahApps.Metro.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,13 @@
<Compile Include="Accent.cs" />
<Compile Include="Behaviours\BorderlessWindowBehavior.cs" />
<Compile Include="Behaviours\Reload.cs" />
<Compile Include="Behaviours\StylizedBehaviors.cs" />
<Compile Include="Behaviours\TiltBehavior.cs" />
<Compile Include="Controls\AppBarButton.cs" />
<Compile Include="Controls\LayoutInvalidationCatcher.cs" />
<Compile Include="Controls\MetroContentControl.cs" />
<Compile Include="Controls\MetroImage.cs" />
<Compile Include="Controls\MetroWindow.cs" />
<Compile Include="Controls\Panorama.cs" />
<Compile Include="Controls\PanoramaItem.cs" />
<Compile Include="Controls\Planeator.cs" />
Expand All @@ -74,6 +76,7 @@
<Compile Include="Controls\WindowCommands.xaml.cs">
<DependentUpon>WindowCommands.xaml</DependentUpon>
</Compile>
<Compile Include="Converters\MarkupConverter.cs" />
<Compile Include="Converters\ToUpperConverter.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
Expand Down
10 changes: 8 additions & 2 deletions MahApps.Metro/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Markup;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
Expand Down Expand Up @@ -49,5 +50,10 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyVersion("0.3.0.17")]
[assembly: AssemblyFileVersion("0.3.0.17")]

[assembly: XmlnsDefinition("http://metro.mahapps.com/winfx/xaml/shared", "MahApps.Metro.Behaviours")]
[assembly: XmlnsDefinition("http://metro.mahapps.com/winfx/xaml/shared", "MahApps.Metro.Converters")]

[assembly: XmlnsDefinition("http://metro.mahapps.com/winfx/xaml/controls", "MahApps.Metro.Controls")]
Loading

0 comments on commit 5ffe7a2

Please sign in to comment.