diff foosdk/sdk/foobar2000/helpers-mac/NSView+ppsubviews.m @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/foobar2000/helpers-mac/NSView+ppsubviews.m	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,59 @@
+#import "NSView+ppsubviews.h"
+
+#if 0
+@implementation NSView (ppsubviews)
+
+- (NSView*) recurFindSubViewOfClass: (Class) cls identifier: (NSString*) identifier {
+    return NSViewFindSubViewRecursive ( self, cls, identifier );
+}
+
+- (NSView*) findSubViewOfClass: (Class) cls identifier: (NSString*) identifier {
+    return NSViewFindSubView( self, cls, identifier );
+}
+- (NSView *)findSubViewOfClass:(Class)cls {
+    return NSViewFindSubView( self, cls, nil );
+}
+- (NSButton *)findButton {
+    return (NSButton*) [self findSubViewOfClass: [NSButton class]];
+}
+- (NSTextView *)findTextView {
+    return (NSTextView*) [self findSubViewOfClass: [NSTextView class]];
+}
+- (NSTextField *) findTextField {
+    return (NSTextField*) [self findSubViewOfClass: [NSTextField class]];
+}
+- (NSImageView*) findImageView {
+    return (NSImageView*) [self findSubViewOfClass: [NSImageView class]];
+}
+@end
+#endif
+
+__kindof NSView * NSViewFindSubView( NSView * parent, Class cls, NSUserInterfaceItemIdentifier identifier ) {
+    for (__kindof NSView * v in parent.subviews) {
+        if ( (cls == nil || [v isKindOfClass: cls]) && ( identifier == nil || [ v.identifier isEqualToString: identifier ] ) ) {
+            return v;
+        }
+    }
+    return nil;
+}
+
+__kindof NSView * NSViewFindSubViewRecursive( NSView * parent, Class cls, NSUserInterfaceItemIdentifier identifier ) {
+    @autoreleasepool {
+        NSMutableArray<__kindof NSView*> * arrAll = [NSMutableArray arrayWithArray: parent.subviews];
+
+        for ( NSUInteger w = 0; w < arrAll.count; ++ w ) {
+            __kindof NSView * thisView = arrAll[w];
+            
+            if ( (cls == nil || [thisView isKindOfClass: cls]) && ( identifier == nil || [thisView.identifier isEqualToString: identifier] ) ) {
+                return thisView;
+            }
+            [arrAll addObjectsFromArray: thisView.subviews];
+            
+            if ( w >= 200 ) {
+                [arrAll removeObjectsInRange: NSMakeRange(0, w) ];
+                w = 0;
+            }
+        }
+        return nil;
+    }
+}