Bug 1835241 - Part 6: Use the same parameter names at definition and declaration...
[gecko.git] / widget / cocoa / nsTouchBarInput.mm
blobdc50c64e1bc07b06ee6371825f070507dfdc9668
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "nsTouchBarInput.h"
7 #include "mozilla/MacStringHelpers.h"
8 #include "nsArrayUtils.h"
9 #include "nsCocoaUtils.h"
10 #include "nsTouchBar.h"
11 #include "nsTouchBarInputIcon.h"
13 @implementation TouchBarInput
15 - (nsCOMPtr<nsIURI>)imageURI {
16   return mImageURI;
19 - (void)setImageURI:(nsCOMPtr<nsIURI>)aImageURI {
20   mImageURI = aImageURI;
23 - (RefPtr<nsTouchBarInputIcon>)icon {
24   return mIcon;
27 - (void)setIcon:(RefPtr<nsTouchBarInputIcon>)aIcon {
28   mIcon = aIcon;
31 - (TouchBarInputBaseType)baseType {
32   return mBaseType;
35 - (NSString*)type {
36   return mType;
39 - (void)setType:(NSString*)aType {
40   [aType retain];
41   [mType release];
42   if ([aType hasSuffix:@"button"]) {
43     mBaseType = TouchBarInputBaseType::kButton;
44   } else if ([aType hasSuffix:@"label"]) {
45     mBaseType = TouchBarInputBaseType::kLabel;
46   } else if ([aType hasSuffix:@"mainButton"]) {
47     mBaseType = TouchBarInputBaseType::kMainButton;
48   } else if ([aType hasSuffix:@"popover"]) {
49     mBaseType = TouchBarInputBaseType::kPopover;
50   } else if ([aType hasSuffix:@"scrollView"]) {
51     mBaseType = TouchBarInputBaseType::kScrollView;
52   } else if ([aType hasSuffix:@"scrubber"]) {
53     mBaseType = TouchBarInputBaseType::kScrubber;
54   }
55   mType = aType;
58 - (NSTouchBarItemIdentifier)nativeIdentifier {
59   return [TouchBarInput nativeIdentifierWithType:mType withKey:self.key];
62 - (nsCOMPtr<nsITouchBarInputCallback>)callback {
63   return mCallback;
66 - (void)setCallback:(nsCOMPtr<nsITouchBarInputCallback>)aCallback {
67   mCallback = aCallback;
70 - (NSMutableArray<TouchBarInput*>*)children {
71   return mChildren;
74 - (void)setChildren:(NSMutableArray<TouchBarInput*>*)aChildren {
75   [aChildren retain];
76   for (TouchBarInput* child in mChildren) {
77     [child releaseJSObjects];
78   }
79   [mChildren removeAllObjects];
80   [mChildren release];
81   mChildren = aChildren;
84 - (id)initWithKey:(NSString*)aKey
85             title:(NSString*)aTitle
86          imageURI:(nsCOMPtr<nsIURI>)aImageURI
87              type:(NSString*)aType
88          callback:(nsCOMPtr<nsITouchBarInputCallback>)aCallback
89             color:(uint32_t)aColor
90          disabled:(BOOL)aDisabled
91          children:(nsCOMPtr<nsIArray>)aChildren {
92   if (self = [super init]) {
93     mType = nil;
95     self.key = aKey;
96     self.title = aTitle;
97     self.type = aType;
98     self.disabled = aDisabled;
99     [self setImageURI:aImageURI];
100     [self setCallback:aCallback];
101     if (aColor) {
102       [self setColor:[NSColor colorWithDisplayP3Red:((aColor >> 16) & 0xFF) / 255.0
103                                               green:((aColor >> 8) & 0xFF) / 255.0
104                                                blue:((aColor)&0xFF) / 255.0
105                                               alpha:1.0]];
106     }
107     if (aChildren) {
108       uint32_t itemCount = 0;
109       aChildren->GetLength(&itemCount);
110       NSMutableArray* orderedChildren = [NSMutableArray arrayWithCapacity:itemCount];
111       for (uint32_t i = 0; i < itemCount; ++i) {
112         nsCOMPtr<nsITouchBarInput> child = do_QueryElementAt(aChildren, i);
113         if (!child) {
114           continue;
115         }
116         TouchBarInput* convertedChild = [[TouchBarInput alloc] initWithXPCOM:child];
117         if (convertedChild) {
118           orderedChildren[i] = convertedChild;
119         }
120       }
121       [self setChildren:orderedChildren];
122     }
123   }
125   return self;
128 - (TouchBarInput*)initWithXPCOM:(nsCOMPtr<nsITouchBarInput>)aInput {
129   nsAutoString keyStr;
130   nsresult rv = aInput->GetKey(keyStr);
131   if (NS_FAILED(rv)) {
132     return nil;
133   }
135   nsAutoString titleStr;
136   rv = aInput->GetTitle(titleStr);
137   if (NS_FAILED(rv)) {
138     return nil;
139   }
141   nsCOMPtr<nsIURI> imageURI;
142   rv = aInput->GetImage(getter_AddRefs(imageURI));
143   if (NS_FAILED(rv)) {
144     return nil;
145   }
147   nsAutoString typeStr;
148   rv = aInput->GetType(typeStr);
149   if (NS_FAILED(rv)) {
150     return nil;
151   }
153   nsCOMPtr<nsITouchBarInputCallback> callback;
154   rv = aInput->GetCallback(getter_AddRefs(callback));
155   if (NS_FAILED(rv)) {
156     return nil;
157   }
159   uint32_t colorInt;
160   rv = aInput->GetColor(&colorInt);
161   if (NS_FAILED(rv)) {
162     return nil;
163   }
165   bool disabled = false;
166   rv = aInput->GetDisabled(&disabled);
167   if (NS_FAILED(rv)) {
168     return nil;
169   }
171   nsCOMPtr<nsIArray> children;
172   rv = aInput->GetChildren(getter_AddRefs(children));
173   if (NS_FAILED(rv)) {
174     return nil;
175   }
177   return [self initWithKey:nsCocoaUtils::ToNSString(keyStr)
178                      title:nsCocoaUtils::ToNSString(titleStr)
179                   imageURI:imageURI
180                       type:nsCocoaUtils::ToNSString(typeStr)
181                   callback:callback
182                      color:colorInt
183                   disabled:(BOOL)disabled
184                   children:children];
187 - (void)releaseJSObjects {
188   if (mIcon) {
189     mIcon->Destroy();
190     mIcon = nil;
191   }
192   [self setCallback:nil];
193   [self setImageURI:nil];
194   for (TouchBarInput* child in mChildren) {
195     [child releaseJSObjects];
196   }
199 - (void)dealloc {
200   if (mIcon) {
201     mIcon->Destroy();
202     mIcon = nil;
203   }
204   [mType release];
205   [mChildren removeAllObjects];
206   [mChildren release];
207   [super dealloc];
210 + (NSTouchBarItemIdentifier)nativeIdentifierWithType:(NSString*)aType withKey:(NSString*)aKey {
211   NSTouchBarItemIdentifier identifier;
212   identifier = [kTouchBarBaseIdentifier stringByAppendingPathExtension:aType];
213   if (aKey) {
214     identifier = [identifier stringByAppendingPathExtension:aKey];
215   }
216   return identifier;
219 + (NSTouchBarItemIdentifier)nativeIdentifierWithXPCOM:(nsCOMPtr<nsITouchBarInput>)aInput {
220   nsAutoString keyStr;
221   nsresult rv = aInput->GetKey(keyStr);
222   if (NS_FAILED(rv)) {
223     return nil;
224   }
225   NSString* key = nsCocoaUtils::ToNSString(keyStr);
227   nsAutoString typeStr;
228   rv = aInput->GetType(typeStr);
229   if (NS_FAILED(rv)) {
230     return nil;
231   }
232   NSString* type = nsCocoaUtils::ToNSString(typeStr);
234   return [TouchBarInput nativeIdentifierWithType:type withKey:key];
237 + (NSTouchBarItemIdentifier)shareScrubberIdentifier {
238   return [TouchBarInput nativeIdentifierWithType:@"scrubber" withKey:@"share"];
241 + (NSTouchBarItemIdentifier)searchPopoverIdentifier {
242   return [TouchBarInput nativeIdentifierWithType:@"popover" withKey:@"search-popover"];
245 @end