@ -7,7 +7,7 @@
@@ -7,7 +7,7 @@
using System ;
using System.Windows ;
using System.Windows.Controls ;
using System.Windows.Input ;
using ICSharpCode.WpfDesign.Designer.Controls ;
using ICSharpCode.WpfDesign.Extensions ;
using ICSharpCode.WpfDesign.Adorners ;
@ -18,112 +18,129 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
@@ -18,112 +18,129 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
/// Extends the Quick operation menu for the designer.
/// </summary>
[ExtensionFor(typeof (FrameworkElement))]
class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
{
private QuickOperationMenu _ menu ;
protected override void OnInitialized ( )
{
base . OnInitialized ( ) ;
_ menu = new QuickOperationMenu ( ) ;
_ menu . Loaded + = OnMenuLoaded ;
var placement = new RelativePlacement ( HorizontalAlignment . Right , VerticalAlignment . Top ) { XOffset = 7 } ;
this . AddAdorners ( placement , _ menu ) ;
}
class QuickOperationMenuExtension : PrimarySelectionAdornerProvider
{
private QuickOperationMenu _ menu ;
private KeyBinding _ keyBinding ;
protected override void OnInitialized ( )
{
base . OnInitialized ( ) ;
_ menu = new QuickOperationMenu ( ) ;
_ menu . Loaded + = OnMenuLoaded ;
var placement = new RelativePlacement ( HorizontalAlignment . Right , VerticalAlignment . Top ) { XOffset = 7 , YOffset = 3.5 } ;
this . AddAdorners ( placement , _ menu ) ;
var kbs = this . ExtendedItem . Services . GetService ( typeof ( IKeyBindingService ) ) as IKeyBindingService ;
var command = new DesignCommand ( delegate
{
_ menu . MainHeader . IsSubmenuOpen = true ;
_ menu . MainHeader . Focus ( ) ;
} , delegate
{
return true ;
} ) ;
_ keyBinding = new KeyBinding ( command , Key . Enter , ModifierKeys . Alt ) ;
if ( kbs ! = null )
kbs . RegisterBinding ( _ keyBinding ) ;
}
private void OnMenuLoaded ( object sender , EventArgs e )
{
_ menu . MainHeader . Click + = MainHeaderClick ;
int menuItemsAdded = 0 ;
var view = this . ExtendedItem . View ;
private void OnMenuLoaded ( object sender , EventArgs e )
{
_ menu . MainHeader . Click + = MainHeaderClick ;
int menuItemsAdded = 0 ;
var view = this . ExtendedItem . View ;
if ( view ! = null ) {
string setValue ;
if ( view is StackPanel ) {
var ch = new MenuItem ( ) { Header = "Change Orientation" } ;
_ menu . AddSubMenuInTheHeader ( ch ) ;
setValue = this . ExtendedItem . Properties [ StackPanel . OrientationProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( ch , Enum . GetValues ( typeof ( Orientation ) ) , Orientation . Vertical . ToString ( ) , setValue ) ;
_ menu . MainHeader . Items . Add ( new Separator ( ) ) ;
menuItemsAdded + + ;
}
if ( this . ExtendedItem . Parent ! = null & & this . ExtendedItem . Parent . View is DockPanel ) {
var sda = new MenuItem ( ) { Header = "Set Dock to" } ;
_ menu . AddSubMenuInTheHeader ( sda ) ;
setValue = this . ExtendedItem . Properties . GetAttachedProperty ( DockPanel . DockProperty ) . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( sda , Enum . GetValues ( typeof ( Dock ) ) , Dock . Left . ToString ( ) , setValue ) ;
_ menu . MainHeader . Items . Add ( new Separator ( ) ) ;
menuItemsAdded + + ;
}
if ( view ! = null ) {
string setValue ;
if ( view is StackPanel ) {
var ch = new MenuItem ( ) { Header = "Change Orientation" } ;
_ menu . AddSubMenuInTheHeader ( ch ) ;
setValue = this . ExtendedItem . Properties [ StackPanel . OrientationProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( ch , Enum . GetValues ( typeof ( Orientation ) ) , Orientation . Vertical . ToString ( ) , setValue ) ;
_ menu . MainHeader . Items . Add ( new Separator ( ) ) ;
menuItemsAdded + + ;
}
if ( this . ExtendedItem . Parent ! = null & & this . ExtendedItem . Parent . View is DockPanel ) {
var sda = new MenuItem ( ) { Header = "Set Dock to" } ;
_ menu . AddSubMenuInTheHeader ( sda ) ;
setValue = this . ExtendedItem . Properties . GetAttachedProperty ( DockPanel . DockProperty ) . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( sda , Enum . GetValues ( typeof ( Dock ) ) , Dock . Left . ToString ( ) , setValue ) ;
_ menu . MainHeader . Items . Add ( new Separator ( ) ) ;
menuItemsAdded + + ;
}
var ha = new MenuItem ( ) { Header = "Horizontal Alignment" } ;
_ menu . AddSubMenuInTheHeader ( ha ) ;
setValue = this . ExtendedItem . Properties [ FrameworkElement . HorizontalAlignmentProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( ha , Enum . GetValues ( typeof ( HorizontalAlignment ) ) , HorizontalAlignment . Stretch . ToString ( ) , setValue ) ;
menuItemsAdded + + ;
var ha = new MenuItem ( ) { Header = "Horizontal Alignment" } ;
_ menu . AddSubMenuInTheHeader ( ha ) ;
setValue = this . ExtendedItem . Properties [ FrameworkElement . HorizontalAlignmentProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( ha , Enum . GetValues ( typeof ( HorizontalAlignment ) ) , HorizontalAlignment . Stretch . ToString ( ) , setValue ) ;
menuItemsAdded + + ;
var va = new MenuItem ( ) { Header = "Vertical Alignment" } ;
_ menu . AddSubMenuInTheHeader ( va ) ;
setValue = this . ExtendedItem . Properties [ FrameworkElement . VerticalAlignmentProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( va , Enum . GetValues ( typeof ( VerticalAlignment ) ) , VerticalAlignment . Stretch . ToString ( ) , setValue ) ;
menuItemsAdded + + ;
}
var va = new MenuItem ( ) { Header = "Vertical Alignment" } ;
_ menu . AddSubMenuInTheHeader ( va ) ;
setValue = this . ExtendedItem . Properties [ FrameworkElement . VerticalAlignmentProperty ] . ValueOnInstance . ToString ( ) ;
_ menu . AddSubMenuCheckable ( va , Enum . GetValues ( typeof ( VerticalAlignment ) ) , VerticalAlignment . Stretch . ToString ( ) , setValue ) ;
menuItemsAdded + + ;
}
if ( menuItemsAdded = = 0 ) {
OnRemove ( ) ;
}
}
if ( menuItemsAdded = = 0 ) {
OnRemove ( ) ;
}
}
private void MainHeaderClick ( object sender , RoutedEventArgs e )
{
var clickedOn = e . Source as MenuItem ;
if ( clickedOn ! = null ) {
var parent = clickedOn . Parent as MenuItem ;
if ( parent ! = null ) {
if ( ( string ) parent . Header = = "Change Orientation" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var orientation = Enum . Parse ( typeof ( Orientation ) , value ) ;
if ( orientation ! = null )
this . ExtendedItem . Properties [ StackPanel . OrientationProperty ] . SetValue ( orientation ) ;
}
}
if ( ( string ) parent . Header = = "Set Dock to" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var dock = Enum . Parse ( typeof ( Dock ) , value ) ;
if ( dock ! = null )
this . ExtendedItem . Properties . GetAttachedProperty ( DockPanel . DockProperty ) . SetValue ( dock ) ;
}
}
private void MainHeaderClick ( object sender , RoutedEventArgs e )
{
var clickedOn = e . Source as MenuItem ;
if ( clickedOn ! = null ) {
var parent = clickedOn . Parent as MenuItem ;
if ( parent ! = null ) {
if ( ( string ) parent . Header = = "Change Orientation" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var orientation = Enum . Parse ( typeof ( Orientation ) , value ) ;
if ( orientation ! = null )
this . ExtendedItem . Properties [ StackPanel . OrientationProperty ] . SetValue ( orientation ) ;
}
}
if ( ( string ) parent . Header = = "Set Dock to" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var dock = Enum . Parse ( typeof ( Dock ) , value ) ;
if ( dock ! = null )
this . ExtendedItem . Properties . GetAttachedProperty ( DockPanel . DockProperty ) . SetValue ( dock ) ;
}
}
if ( ( string ) parent . Header = = "Horizontal Alignment" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var ha = Enum . Parse ( typeof ( HorizontalAlignment ) , value ) ;
if ( ha ! = null )
this . ExtendedItem . Properties [ FrameworkElement . HorizontalAlignmentProperty ] . SetValue ( ha ) ;
}
}
if ( ( string ) parent . Header = = "Horizontal Alignment" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var ha = Enum . Parse ( typeof ( HorizontalAlignment ) , value ) ;
if ( ha ! = null )
this . ExtendedItem . Properties [ FrameworkElement . HorizontalAlignmentProperty ] . SetValue ( ha ) ;
}
}
if ( ( string ) parent . Header = = "Vertical Alignment" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var va = Enum . Parse ( typeof ( VerticalAlignment ) , value ) ;
if ( va ! = null )
this . ExtendedItem . Properties [ FrameworkElement . VerticalAlignmentProperty ] . SetValue ( va ) ;
}
}
}
}
}
if ( ( string ) parent . Header = = "Vertical Alignment" ) {
var value = _ menu . UncheckChildrenAndSelectClicked ( parent , clickedOn ) ;
if ( value ! = null ) {
var va = Enum . Parse ( typeof ( VerticalAlignment ) , value ) ;
if ( va ! = null )
this . ExtendedItem . Properties [ FrameworkElement . VerticalAlignmentProperty ] . SetValue ( va ) ;
}
}
}
}
}
protected override void OnRemove ( )
{
base . OnRemove ( ) ;
_ menu . Loaded - = OnMenuLoaded ;
}
}
protected override void OnRemove ( )
{
base . OnRemove ( ) ;
_ menu . Loaded - = OnMenuLoaded ;
var kbs = this . ExtendedItem . Services . GetService ( typeof ( IKeyBindingService ) ) as IKeyBindingService ;
if ( kbs ! = null )
kbs . DeregisterBinding ( _ keyBinding ) ;
}
}
}