зеркало из https://github.com/xamarin/mac-samples.git
241 строка
7.5 KiB
C#
241 строка
7.5 KiB
C#
using System;
|
|
using CoreGraphics;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
using ObjCRuntime;
|
|
using Foundation;
|
|
using AppKit;
|
|
|
|
namespace SamplesButtonMadness
|
|
{
|
|
public partial class TestWindowController : AppKit.NSWindowController
|
|
{
|
|
#region members
|
|
|
|
NSPopUpButton codeBasedPopUpDown;
|
|
NSPopUpButton codeBasedPopUpRight;
|
|
|
|
NSButton codeBasedButtonRound;
|
|
NSButton codeBasedButtonSquare;
|
|
|
|
NSSegmentedControl codeBasedSegmentControl;
|
|
|
|
NSLevelIndicator codeBasedIndicator;
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
// Called when created from unmanaged code
|
|
public TestWindowController (IntPtr handle) : base(handle)
|
|
{
|
|
}
|
|
|
|
// Called when created directly from a XIB file
|
|
[Export("initWithCoder:")]
|
|
public TestWindowController (NSCoder coder) : base(coder)
|
|
{
|
|
}
|
|
|
|
// Call to load from the XIB/NIB file
|
|
public TestWindowController () : base("TestWindow")
|
|
{
|
|
}
|
|
#endregion
|
|
|
|
//strongly typed window accessor
|
|
public new TestWindow Window {
|
|
get { return (TestWindow)base.Window; }
|
|
}
|
|
|
|
#region implementation
|
|
|
|
public override void AwakeFromNib ()
|
|
{
|
|
base.AwakeFromNib ();
|
|
|
|
#region first two buttons
|
|
|
|
// add the image menu item back to the first menu item
|
|
NSMenuItem menuItem = new NSMenuItem ("", new Selector (""), "");
|
|
|
|
menuItem.Image = NSImage.ImageNamed ("moof.png");
|
|
buttonMenu.InsertItem (menuItem, 0);
|
|
|
|
nibBasedPopUpDown.Menu = buttonMenu;
|
|
nibBasedPopUpRight.Menu = buttonMenu;
|
|
|
|
// create the pull down button pointing DOWN
|
|
CGRect buttonFrame = placeHolder1.Frame;
|
|
codeBasedPopUpDown = new NSPopUpButton (buttonFrame, true);
|
|
|
|
((NSPopUpButtonCell)codeBasedPopUpDown.Cell).ArrowPosition = NSPopUpArrowPosition.Bottom;
|
|
((NSPopUpButtonCell)codeBasedPopUpDown.Cell).BezelStyle = NSBezelStyle.ThickSquare;
|
|
codeBasedPopUpDown.Menu = buttonMenu;
|
|
popupBox.AddSubview (codeBasedPopUpDown);
|
|
placeHolder1.RemoveFromSuperview ();
|
|
|
|
// create the pull down button pointing RIGHT
|
|
buttonFrame = placeHolder2.Frame;
|
|
codeBasedPopUpRight = new NSPopUpButton (buttonFrame, true);
|
|
|
|
((NSPopUpButtonCell)codeBasedPopUpRight.Cell).ArrowPosition = NSPopUpArrowPosition.Bottom;
|
|
((NSPopUpButtonCell)codeBasedPopUpRight.Cell).PreferredEdge = NSRectEdge.MaxXEdge;
|
|
((NSPopUpButtonCell)codeBasedPopUpRight.Cell).BezelStyle = NSBezelStyle.Circular;
|
|
codeBasedPopUpRight.Menu = buttonMenu;
|
|
((NSPopUpButtonCell)codeBasedPopUpRight.Cell).HighlightsBy = (nint)(int)NSCellStyleMask.ChangeGrayCell;
|
|
popupBox.AddSubview (codeBasedPopUpRight);
|
|
placeHolder2.RemoveFromSuperview ();
|
|
|
|
#endregion
|
|
|
|
#region second two buttons
|
|
|
|
// create the rounded button
|
|
buttonFrame = placeHolder3.Frame;
|
|
// note: this button we want alternate title and image, so we need to call this:
|
|
codeBasedButtonRound = new NSButton (buttonFrame) {
|
|
Title = "NSButton",
|
|
AlternateTitle = "(pressed)",
|
|
Image = NSImage.ImageNamed ("moof.png"),
|
|
AlternateImage = NSImage.ImageNamed ("moof2.png"),
|
|
BezelStyle = NSBezelStyle.RegularSquare,
|
|
ImagePosition = NSCellImagePosition.ImageLeft,
|
|
Font = NSFont.SystemFontOfSize (NSFont.SmallSystemFontSize),
|
|
Sound = NSSound.FromName ("Pop"),
|
|
};
|
|
// Two choices, either use the .NET event system:
|
|
// foo.Activated += delegate {..} or += SomeMethod
|
|
//
|
|
// Or you can use the Target = this Action = new Selector ("buttonAction:")
|
|
// pattern
|
|
codeBasedButtonRound.Activated += delegate {
|
|
buttonAction (null);
|
|
};
|
|
codeBasedButtonRound.SetButtonType (NSButtonType.MomentaryChange);
|
|
codeBasedButtonRound.Cell.Alignment = NSTextAlignment.Left;
|
|
buttonBox.AddSubview (codeBasedButtonRound);
|
|
placeHolder3.RemoveFromSuperview (); // we are done with the place holder, remove it from the window
|
|
|
|
// create the square button
|
|
buttonFrame = placeHolder4.Frame;
|
|
codeBasedButtonSquare = new NSButton (buttonFrame){
|
|
Title = "NSButton",
|
|
BezelStyle = NSBezelStyle.ShadowlessSquare,
|
|
ImagePosition = NSCellImagePosition.ImageLeft,
|
|
Image = NSImage.ImageNamed ("moof.png"),
|
|
Font = NSFont.SystemFontOfSize (NSFont.SmallSystemFontSize),
|
|
Sound = NSSound.FromName ("Pop"),
|
|
};
|
|
codeBasedButtonSquare.Activated += delegate { buttonAction (null); };
|
|
codeBasedButtonSquare.Cell.Alignment = NSTextAlignment.Left;
|
|
buttonBox.AddSubview (codeBasedButtonSquare);
|
|
placeHolder4.RemoveFromSuperview (); // we are done with the place holder, remove it from the window
|
|
|
|
#endregion
|
|
|
|
#region segmented control
|
|
|
|
buttonFrame = placeHolder5.Frame;
|
|
codeBasedSegmentControl = new NSSegmentedControl(buttonFrame) {
|
|
SegmentCount = 3,
|
|
Target = this,
|
|
Action = new Selector("segmentAction:")
|
|
};
|
|
|
|
codeBasedSegmentControl.SetWidth (nibBasedSegControl.GetWidth(0), 0);
|
|
codeBasedSegmentControl.SetWidth (nibBasedSegControl.GetWidth (1), 1);
|
|
codeBasedSegmentControl.SetWidth (nibBasedSegControl.GetWidth (2), 2);
|
|
codeBasedSegmentControl.SetLabel ("One", 0);
|
|
codeBasedSegmentControl.SetLabel ("Two", 1);
|
|
codeBasedSegmentControl.SetLabel ("Three", 2);
|
|
segmentBox.AddSubview (codeBasedSegmentControl);
|
|
placeHolder5.RemoveFromSuperview ();
|
|
|
|
// use a menu to the first segment (applied to both nib-based and code-based)
|
|
codeBasedSegmentControl.SetMenu (buttonMenu, 0);
|
|
nibBasedSegControl.SetMenu (buttonMenu, 0);
|
|
|
|
// add icons to each segment (applied to both nib-based and code-based)
|
|
NSImage segmentIcon1 = NSWorkspace.SharedWorkspace.IconForFileType (HfsTypeCode.ComputerIcon);
|
|
segmentIcon1.Size = new CGSize(16, 16);
|
|
nibBasedSegControl.SetImage (segmentIcon1, 0);
|
|
codeBasedSegmentControl.SetImage (segmentIcon1, 0);
|
|
|
|
NSImage segmentIcon2 = NSWorkspace.SharedWorkspace.IconForFileType (HfsTypeCode.DesktopIcon);
|
|
segmentIcon2.Size = new CGSize (16, 16);
|
|
nibBasedSegControl.SetImage (segmentIcon2, 1);
|
|
codeBasedSegmentControl.SetImage (segmentIcon2, 1);
|
|
|
|
NSImage segmentIcon3 = NSWorkspace.SharedWorkspace.IconForFileType (HfsTypeCode.FinderIcon);
|
|
segmentIcon3.Size = new CGSize (16, 16);
|
|
nibBasedSegControl.SetImage (segmentIcon3, 2);
|
|
codeBasedSegmentControl.SetImage (segmentIcon3, 2);
|
|
|
|
#endregion
|
|
|
|
#region level indicator
|
|
|
|
buttonFrame = placeHolder8.Frame;
|
|
codeBasedIndicator = new NSLevelIndicator(buttonFrame) {
|
|
MaxValue = 10,
|
|
MajorTickMarkCount = 4,
|
|
TickMarkCount = 7,
|
|
WarningValue = 5,
|
|
CriticalValue = 8,
|
|
Action = new Selector("levelAction:")
|
|
};
|
|
codeBasedIndicator.Cell.LevelIndicatorStyle = NSLevelIndicatorStyle.DiscreteCapacity;
|
|
indicatorBox.AddSubview(codeBasedIndicator);
|
|
placeHolder8.RemoveFromSuperview();
|
|
|
|
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region event handlers
|
|
|
|
partial void dropDownAction (NSObject sender)
|
|
{
|
|
Console.WriteLine ("Drop down button clicked");
|
|
}
|
|
|
|
partial void buttonAction (NSObject sender)
|
|
{
|
|
Console.WriteLine ("Button clicked");
|
|
}
|
|
|
|
partial void segmentAction (NSObject sender)
|
|
{
|
|
Console.WriteLine ("Segment button clicked");
|
|
}
|
|
|
|
partial void levelAction (NSObject sender)
|
|
{
|
|
Console.WriteLine ("Level action clicked");
|
|
}
|
|
|
|
partial void unselectAction (NSObject sender)
|
|
{
|
|
nibBasedSegControl.UnselectAllSegments();
|
|
codeBasedSegmentControl.UnselectAllSegments();
|
|
}
|
|
|
|
partial void levelAdjustAction (NSObject sender)
|
|
{
|
|
NSStepper stepper = sender as NSStepper;
|
|
|
|
Console.WriteLine ("Change level: {0}", stepper.IntValue);
|
|
|
|
nibBasedIndicator.IntValue = stepper.IntValue;
|
|
codeBasedIndicator.IntValue = stepper.IntValue;
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
}
|
|
} |