mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-14 07:02:39 +00:00
Menu items now correclty toggel search flags, not only buttons.
UI is still a bit broken, but functional
This commit is contained in:
@@ -109,12 +109,12 @@
|
|||||||
<endViews>
|
<endViews>
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz">
|
||||||
<rect key="frame" x="766" y="5" width="64" height="19"/>
|
<rect key="frame" x="766" y="5" width="64" height="19"/>
|
||||||
<popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX">
|
<popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" altersStateOfSelectedItem="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" metaFont="systemBold" size="12"/>
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
<menu key="menu" title="OtherViews" autoenablesItems="NO" id="wC4-fF-dLW">
|
<menu key="menu" title="OtherViews" autoenablesItems="NO" id="wC4-fF-dLW">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Item 1" state="on" id="LRm-iZ-XrA"/>
|
<menuItem title="Item 1" id="LRm-iZ-XrA"/>
|
||||||
<menuItem title="Item 2" id="cpr-p6-YAY"/>
|
<menuItem title="Item 2" id="cpr-p6-YAY"/>
|
||||||
<menuItem title="Item 3" id="CFk-71-NYQ"/>
|
<menuItem title="Item 3" id="CFk-71-NYQ"/>
|
||||||
</items>
|
</items>
|
||||||
|
|||||||
@@ -95,9 +95,10 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
|
|||||||
NSArray *titles = @[ NSLocalizedString(@"SEARCH_DUPLICATE_PASSWORDS", "Search option: Find duplicate passwords"), NSLocalizedString(@"SEARCH_EXPIRED_ENTRIES", "Search option: Find expired entries") ];
|
NSArray *titles = @[ NSLocalizedString(@"SEARCH_DUPLICATE_PASSWORDS", "Search option: Find duplicate passwords"), NSLocalizedString(@"SEARCH_EXPIRED_ENTRIES", "Search option: Find expired entries") ];
|
||||||
NSMenu *specialMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"CUSTOM_SEARCH_FILTER_MENU", @"Title for menu for custom search filters")];
|
NSMenu *specialMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"CUSTOM_SEARCH_FILTER_MENU", @"Title for menu for custom search filters")];
|
||||||
[specialMenu addItemWithTitle:NSLocalizedString(@"SELECT_FILTER_WITH_DOTS", "Menu displayed as popup selection for search options") action:NULL keyEquivalent:@""];
|
[specialMenu addItemWithTitle:NSLocalizedString(@"SELECT_FILTER_WITH_DOTS", "Menu displayed as popup selection for search options") action:NULL keyEquivalent:@""];
|
||||||
[specialMenu itemAtIndex:0].enabled = NO;
|
NSMenuItem *selectItem = specialMenu.itemArray.firstObject;
|
||||||
[specialMenu itemAtIndex:0].tag = MPEntrySearchNone;
|
selectItem.enabled = NO;
|
||||||
[specialMenu itemAtIndex:0].action = @selector(toggleSearchFlags:);
|
selectItem.tag = MPEntrySearchNone;
|
||||||
|
selectItem.action = @selector(toggleSearchFlags:);
|
||||||
for(NSInteger iIndex = 0; iIndex < (sizeof(specialTags)/sizeof(NSInteger)); iIndex++) {
|
for(NSInteger iIndex = 0; iIndex < (sizeof(specialTags)/sizeof(NSInteger)); iIndex++) {
|
||||||
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[iIndex] action:@selector(toggleSearchFlags:) keyEquivalent:@""];
|
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:titles[iIndex] action:@selector(toggleSearchFlags:) keyEquivalent:@""];
|
||||||
item.tag = specialTags[iIndex];
|
item.tag = specialTags[iIndex];
|
||||||
@@ -138,13 +139,17 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
|
|||||||
for(NSView *view in views) {
|
for(NSView *view in views) {
|
||||||
if([view isKindOfClass:NSButton.class]) {
|
if([view isKindOfClass:NSButton.class]) {
|
||||||
NSButton *button = (NSButton *)view;
|
NSButton *button = (NSButton *)view;
|
||||||
NSMenuItem *item = [self.specialFilterPopUpButton.menu itemWithTag:button.tag];
|
NSMenu *menu = self.specialFilterPopUpButton.menu;
|
||||||
|
NSMenuItem *item = [menu itemWithTag:button.tag];
|
||||||
if(item) {
|
if(item) {
|
||||||
return; // no duplicates
|
return; // no duplicates
|
||||||
}
|
}
|
||||||
item = [self _menuItemForButton:button];
|
item = [self _menuItemForButton:button];
|
||||||
if(item) {
|
if(item) {
|
||||||
[self.specialFilterPopUpButton.menu addItem:item];
|
if(menu.itemArray.count == 3) {
|
||||||
|
[menu addItem:[NSMenuItem separatorItem]];
|
||||||
|
}
|
||||||
|
[menu addItem:item];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -155,9 +160,13 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
|
|||||||
for(NSView *view in views) {
|
for(NSView *view in views) {
|
||||||
if([view isKindOfClass:NSButton.class]) {
|
if([view isKindOfClass:NSButton.class]) {
|
||||||
NSButton *button = (NSButton *)view;
|
NSButton *button = (NSButton *)view;
|
||||||
NSMenuItem *item = [self.specialFilterPopUpButton.menu itemWithTag:button.tag];
|
NSMenu *menu = self.specialFilterPopUpButton.menu;
|
||||||
|
NSMenuItem *item = [menu itemWithTag:button.tag];
|
||||||
if(item) {
|
if(item) {
|
||||||
[self.specialFilterPopUpButton.menu removeItem:item];
|
[menu removeItem:item];
|
||||||
|
if(menu.itemArray.count == 4) {
|
||||||
|
[menu removeItemAtIndex:3];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,21 +184,25 @@ typedef NS_ENUM(NSUInteger, MPContextTab) {
|
|||||||
self.usernameButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUsernames, currentFlags));
|
self.usernameButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchUsernames, currentFlags));
|
||||||
self.everywhereButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchAllAttributes, currentFlags));
|
self.everywhereButton.state = HNHUIStateForBool(MPIsFlagSetInOptions(MPEntrySearchAllAttributes, currentFlags));
|
||||||
NSInteger selectedTag = MPEntrySearchNone;
|
NSInteger selectedTag = MPEntrySearchNone;
|
||||||
|
NSMutableSet *selectedTags = [[NSMutableSet alloc] init];
|
||||||
for(NSMenuItem *item in self.specialFilterPopUpButton.menu.itemArray) {
|
for(NSMenuItem *item in self.specialFilterPopUpButton.menu.itemArray) {
|
||||||
MPEntrySearchFlags flag = item.tag;
|
MPEntrySearchFlags flag = item.tag;
|
||||||
if(flag == MPEntrySearchNone) {
|
if(flag == MPEntrySearchNone) {
|
||||||
item.state = NSOffState;
|
item.state = NSOffState;
|
||||||
item.enabled = NO;
|
item.enabled = NO;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
BOOL isActive = MPIsFlagSetInOptions(flag, currentFlags);
|
BOOL isActive = MPIsFlagSetInOptions(flag, currentFlags);
|
||||||
if(isActive) {
|
if(isActive) {
|
||||||
selectedTag = flag;
|
[selectedTags addObject:@(flag)];
|
||||||
}
|
selectedTag = flag;
|
||||||
item.state = HNHUIStateForBool(isActive);
|
|
||||||
}
|
}
|
||||||
|
item.state = HNHUIStateForBool(isActive);
|
||||||
|
}
|
||||||
|
if(selectedTags.count == 1) {
|
||||||
|
[self.specialFilterPopUpButton selectItemWithTag:selectedTag];
|
||||||
}
|
}
|
||||||
[self.specialFilterPopUpButton selectItemWithTag:selectedTag];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMenuItem *)_menuItemForButton:(NSButton *)button {
|
- (NSMenuItem *)_menuItemForButton:(NSButton *)button {
|
||||||
|
|||||||
@@ -87,13 +87,24 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
MPEntrySearchFlags toggleFlag = [sender tag];
|
MPEntrySearchFlags toggleFlag = [sender tag];
|
||||||
MPEntrySearchFlags newFlags = MPEntrySearchNone;
|
MPEntrySearchFlags newFlags = MPEntrySearchNone;
|
||||||
BOOL isSingleFlag = toggleFlag & MPEntrySearchSingleFlags;
|
BOOL isSingleFlag = toggleFlag & MPEntrySearchSingleFlags;
|
||||||
NSButton *button = sender;
|
|
||||||
switch(button.state) {
|
NSControlStateValue state;
|
||||||
case NSOffState:
|
if([sender isKindOfClass:NSButton.class]) {
|
||||||
|
state = ((NSButton *)sender).state;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSAssert([sender isKindOfClass:NSMenuItem.class], @"Internal inconsitency. Did expect NSMenuItem expected, but got %@", [sender class]);
|
||||||
|
state = ((NSMenuItem *)sender).state;
|
||||||
|
/* Manually toggle the state since the popupbuttoncell doesn't do it like we want it to */
|
||||||
|
state = state == NSControlStateValueOn ? NSControlStateValueOff : NSControlStateValueOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(state) {
|
||||||
|
case NSControlStateValueOff:
|
||||||
toggleFlag ^= MPEntrySearchAllCombineableFlags;
|
toggleFlag ^= MPEntrySearchAllCombineableFlags;
|
||||||
newFlags = isSingleFlag ? MPEntrySearchNone : (self.searchContext.searchFlags & toggleFlag);
|
newFlags = isSingleFlag ? MPEntrySearchNone : (self.searchContext.searchFlags & toggleFlag);
|
||||||
break;
|
break;
|
||||||
case NSOnState:
|
case NSControlStateValueOn:
|
||||||
if(isSingleFlag ) {
|
if(isSingleFlag ) {
|
||||||
newFlags = toggleFlag; // This has to be either expired or double passwords
|
newFlags = toggleFlag; // This has to be either expired or double passwords
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user