aboutsummaryrefslogtreecommitdiff
path: root/Flat Bezel/FlatBezelObjectCell.swift
blob: 211f332514c09c7c85938a09c28fcf5d476c582a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//
//  FlatBezelObjectCell.swift
//  Flat Bezel
//
//  Created by Ruben Beltran del Rio on 2/8/23.
//  Copyright © 2023 BRNBW. All rights reserved.
//
/*
import Foundation
import Cocoa

class FlatBezelObjectCell: QSObjectCell {
  let preferredImagePosition: NSControl.ImagePosition = .imageAbove
  
  override func draw(withFrame cellFrame: NSRect, in controlView: NSView!) {
    let isFirstResponder = controlView.window?.firstResponder == controlView && !controlView.isKind(of: NSTableView.self)
    
    let dropTarget = self.isHighlighted && self.highlightsBy.contains(NSCell.StyleMask.changeBackgroundCellMask) && !self.isBezeled
    
    var fillColor: NSColor = self.backgroundColor ?? .textBackgroundColor
    if (isFirstResponder) {
      fillColor = self.highlightColor()
    }
    if (dropTarget) {
      fillColor = NSColor(red: 0.77, green: 0.91, blue: 0.96, alpha: 1)
    }
    
    var strokeColor: NSColor = .clear
    
    fillColor.setFill()
    strokeColor.setStroke()
    
    let roundRect = NSBezierPath()
    roundRect.appendRoundedRect(cellFrame, xRadius: cellRadiusFactor(), yRadius: cellRadiusFactor())
    roundRect.fill()
    
    self.drawInterior(withFrame: self.drawingRect(forBounds: cellFrame), in: controlView)
  }
  
  override func titleRect(forBounds rect: NSRect) -> NSRect {
    super.titleRect(forBounds: rect.offsetBy(dx: 0, dy: -4))
  }
  
  override func drawText(for drawObject: QSObject!, withFrame cellFrame: NSRect, in controlView: NSView!) {
    if self.imagePosition == .imageOnly {
      return;
    }
    
    var abbrString: String? = nil
    if controlView.responds(to: #selector(QSSearchObjectView.matchedString)) {
      abbrString = (controlView as! QSSearchObjectView).matchedString()
    }
    
    var nameString: String? = drawObject.displayName()
    var hitMask: AutoreleasingUnsafeMutablePointer<NSIndexSet?>? = nil
    
    var ranker = drawObject.ranker()
    if let ranker, let abbrString {
      nameString = ranker.matchedString(forAbbreviation: abbrString, hitmask: hitMask, inContext: nil)
    }
    
    var rankedStringIsName = nameString == drawObject.displayName()
    if nameString == nil {
      nameString = drawObject.identifier() ?? "Unknown"
    }
    
    var useAlternateColor = false
    if let controlView = controlView as? NSTableView {
      useAlternateColor = controlView.isRowSelected(controlView.row(at: cellFrame.origin))
    }
    
    var mainColor: NSColor? = textColor()
    if mainColor == nil {
      mainColor = useAlternateColor ? .alternateSelectedControlTextColor : .controlTextColor
    }
    
    var fadedColor = mainColor!.withAlphaComponent(0.50)
    var textDrawRect = titleRect(forBounds: cellFrame)
    
    var titleString = NSMutableAttributedString(string: nameString!)
    titleString.setAttributes(rankedStringIsName ? nameAttributes : detailAttributes, range: NSMakeRange(0, titleString.length))
    
    if abbrString != nil && abbrString!.hasPrefix("QSActionMnemonic") {
      titleString.addAttribute(.foregroundColor, value: rankedStringIsName ? fadedColor : fadedColor.withAlphaComponent(0.8), range: NSMakeRange(0, titleString.length))
    } else {
      var i = 0
      var j = 0
      var hits: [Int] = []
      count = hitMask?.
    }
  }
}


    NSUInteger i = 0;
    NSUInteger j = 0;
    NSUInteger hits[[titleString length]];
    NSUInteger count = [hitMask getIndexes:(NSUInteger *)&hits maxCount:[titleString length] inIndexRange:nil];
    NSDictionary *attributes = @{
      NSForegroundColorAttributeName:                                 rankedStringIsName ? mainColor : fadedColor
    };
    for(i = 0; i<count; i += j) {
      for (j = 1; i+j<count && hits[i+j-1] +1 == hits[i+j]; j++);
      [titleString addAttributes:attributes range:NSMakeRange(hits[i], j)];
    }
  } else {
    [titleString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithDouble:-1.0] range:NSMakeRange(0, [titleString length])];
  }

  if (showDetails) {
    NSString *detailsString = [drawObject details];
    
    NSRange returnRange = [detailsString rangeOfString:@"\n"];
    if (returnRange.location != NSNotFound) {
      detailsString = [detailsString substringToIndex:returnRange.location];
    }

    detailsAttributes = [detailsAttributes mutableCopy];
    [detailsAttributes setValue:[NSColor grayColor] forKey:NSForegroundColorAttributeName];
    
    if (detailsString && detailsString.length && ![detailsString isEqualToString:nameString]) {
      [titleString appendAttributedString:[[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n%@",detailsString] attributes:detailsAttributes] autorelease]];
    }
  }

  NSRect centerRect = rectFromSize([titleString size]);
  centerRect.size.width = NSWidth(textDrawRect);
  centerRect.size.height = MIN(NSHeight(textDrawRect), centerRect.size.height);
  [titleString drawInRect:centerRectInRect(centerRect, textDrawRect)];
}

@end
*/