From 2b1134625d45d3624f0febd265d37fe84120d237 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 6 Aug 2015 23:10:50 -0400 Subject: [PATCH] Converted window.m. --- redo/osxaltest/window.swift | 98 +++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 redo/osxaltest/window.swift diff --git a/redo/osxaltest/window.swift b/redo/osxaltest/window.swift new file mode 100644 index 00000000..8d12c1c7 --- /dev/null +++ b/redo/osxaltest/window.swift @@ -0,0 +1,98 @@ +// 1 august 2015 +import Cocoa + +// auto layout helpers +func tIsAmbiguous(view: NSView, indent: Int) { + var s = string(indent, ' ') + println("\(s) \(view.className) \(view.hasAmbiguousLayout)") + if view.hasAmbiguousLayout { + view.window.visualizeConstraints(view.superview.constraints) + } + for subview in view.subviews { + tIsAmbiguous(subview, indent + 1) + } +} + +class tWindow : tControl { + private var w: NSWindow; + private var c: tControl; + private var margined: Bool; + + init() { + self.w = NSWindow( + contentRect: NSMakeRect(0, 0, 320, 240), + styleMask: (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask), + backing: NSBackingStoreBuffered, + defer: true) + self.w.title = "Auto Layout Test" + } + + public func tSetControl(c: tControl) { + self.c = c + self.c.tSetParent(self, view: self.w.contentView) + self.tRelayout() + } + + public func tSetMargined(m: Bool) { + self.margined = m + self.tRelayout() + } + + public func tShow() { + self.w.cascadeTopLeftFromPoint(NSMakePoint(20, 20)) + self.w.makeKeyAndOrderFront(self) + tIsAmbiguous(self.w.contentView, 0) + } + + public func tRelayout() { + if self.c == nil { + return + } + + var contentView = self.w.contentView + contentView.removeConstraints(contentView.constraints) + + var p = tAutoLayoutParams() + self.c.tFillAutoLayout(p) + + var views = [ + "view": p.view, + ] + var margin = "" + if self.margined { + margin = "-" + } + + // TODO always append margins even if not attached? + // or if not attached, append ->=0- as well? + var constraint = "H:" + if p.attachLeft { + constraint += "|" + margin + } + constraint += "[view]" + if p.attachRight { + constraint += margin + "|" + } + var constraints = NSLayoutConstraint( + visualFormat:constraint, + options:0, + metrics:nil, + views:views) + contentView.addConstraints(constraints) + + constraint = "V:" + if p.attachTop { + constraint += "|" + margin + } + constraint += "[view]" + if p.attachBottom { + constraint += margin + "|" + } + constraints = NSLayoutConstraint( + visualFormat:constraint, + options:0, + metrics:nil, + views:views) + contentView.addConstraints(constraints) + } +}