From bae7566cde9b9bbcb99ac88eac4b313757a04950 Mon Sep 17 00:00:00 2001 From: Pieter de Bie Date: Fri, 3 Oct 2008 19:07:05 +0200 Subject: [PATCH] HistoryView: Allow tripple-clicking on header to undo sorting --- GitX.xcodeproj/project.pbxproj | 6 ++++++ PBGitHistoryView.xib | 28 +++++++++++++++++++++--- PBUnsortableTableHeader.h | 18 ++++++++++++++++ PBUnsortableTableHeader.m | 39 ++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 PBUnsortableTableHeader.h create mode 100644 PBUnsortableTableHeader.m diff --git a/GitX.xcodeproj/project.pbxproj b/GitX.xcodeproj/project.pbxproj index 9bb6f6f..c5b56ab 100644 --- a/GitX.xcodeproj/project.pbxproj +++ b/GitX.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ F56174570E058893001DCD79 /* PBGitTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F56174560E058893001DCD79 /* PBGitTree.m */; }; F561777D0E05C88E001DCD79 /* DetailView.png in Resources */ = {isa = PBXBuildFile; fileRef = F561777C0E05C88E001DCD79 /* DetailView.png */; }; F561E6CD0E7AFDDF00521636 /* keyboardNavigation.js in Resources */ = {isa = PBXBuildFile; fileRef = F561E6CB0E7AFDD000521636 /* keyboardNavigation.js */; }; + F56244090E9684B0002B6C44 /* PBUnsortableTableHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = F56244080E9684B0002B6C44 /* PBUnsortableTableHeader.m */; }; F56524BB0E02D22D00F03B52 /* NSFileHandleExt.m in Sources */ = {isa = PBXBuildFile; fileRef = F56524B90E02D22D00F03B52 /* NSFileHandleExt.m */; }; F56524F00E02D45200F03B52 /* PBGitCommit.m in Sources */ = {isa = PBXBuildFile; fileRef = F56524EF0E02D45200F03B52 /* PBGitCommit.m */; }; F56526240E03D85900F03B52 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F56526230E03D85900F03B52 /* WebKit.framework */; }; @@ -131,6 +132,8 @@ F56174560E058893001DCD79 /* PBGitTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitTree.m; sourceTree = ""; }; F561777C0E05C88E001DCD79 /* DetailView.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DetailView.png; sourceTree = ""; }; F561E6CB0E7AFDD000521636 /* keyboardNavigation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = keyboardNavigation.js; path = html/keyboardNavigation.js; sourceTree = ""; }; + F56244070E9684B0002B6C44 /* PBUnsortableTableHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBUnsortableTableHeader.h; sourceTree = ""; }; + F56244080E9684B0002B6C44 /* PBUnsortableTableHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBUnsortableTableHeader.m; sourceTree = ""; }; F56524B90E02D22D00F03B52 /* NSFileHandleExt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSFileHandleExt.m; sourceTree = ""; }; F56524BA0E02D22D00F03B52 /* NSFileHandleExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSFileHandleExt.h; sourceTree = ""; }; F56524EE0E02D45200F03B52 /* PBGitCommit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitCommit.h; sourceTree = ""; }; @@ -364,6 +367,8 @@ 91B103CB0E898EC300C84364 /* PBIconAndTextCell.mm */, F5140DC70E8A8EB20091E9F3 /* RoundedRectangle.h */, F5140DC80E8A8EB20091E9F3 /* RoundedRectangle.m */, + F56244070E9684B0002B6C44 /* PBUnsortableTableHeader.h */, + F56244080E9684B0002B6C44 /* PBUnsortableTableHeader.m */, ); name = Aux; sourceTree = ""; @@ -562,6 +567,7 @@ F5E927FC0E883F0700056E75 /* PBWebChangesController.m in Sources */, 91B103CC0E898EC300C84364 /* PBIconAndTextCell.mm in Sources */, F5140DC90E8A8EB20091E9F3 /* RoundedRectangle.m in Sources */, + F56244090E9684B0002B6C44 /* PBUnsortableTableHeader.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/PBGitHistoryView.xib b/PBGitHistoryView.xib index beb5385..e008bb9 100644 --- a/PBGitHistoryView.xib +++ b/PBGitHistoryView.xib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -1754,6 +1754,14 @@ 216 + + + controller + + + + 217 + @@ -2279,6 +2287,7 @@ 29.IBShouldRemoveOnLegacySave 3.IBPluginDependency 3.ImportedFromIB2 + 30.CustomClassName 30.IBShouldRemoveOnLegacySave 31.IBPluginDependency 31.ImportedFromIB2 @@ -2362,6 +2371,7 @@ com.apple.InterfaceBuilder.CocoaPlugin + PBUnsortableTableHeader com.apple.InterfaceBuilder.CocoaPlugin @@ -2385,7 +2395,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{359, 261}, {852, 432}} + {{358, 261}, {852, 432}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2415,7 +2425,7 @@ - 216 + 217 @@ -2536,6 +2546,18 @@ PBQLOutlineView.h + + PBUnsortableTableHeader + NSTableHeaderView + + controller + NSArrayController + + + IBProjectSource + PBUnsortableTableHeader.h + + PBViewController NSViewController diff --git a/PBUnsortableTableHeader.h b/PBUnsortableTableHeader.h new file mode 100644 index 0000000..2881e93 --- /dev/null +++ b/PBUnsortableTableHeader.h @@ -0,0 +1,18 @@ +// +// PBUnsortableTableHeader.h +// GitX +// +// Created by Pieter de Bie on 03-10-08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface PBUnsortableTableHeader : NSTableHeaderView { + IBOutlet NSArrayController *controller; + int clickCount; + int columnIndex; +} + +@end diff --git a/PBUnsortableTableHeader.m b/PBUnsortableTableHeader.m new file mode 100644 index 0000000..9afb8eb --- /dev/null +++ b/PBUnsortableTableHeader.m @@ -0,0 +1,39 @@ +// +// PBUnsortableTableHeader.m +// GitX +// +// Created by Pieter de Bie on 03-10-08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import "PBUnsortableTableHeader.h" + + +@implementation PBUnsortableTableHeader + +- (void)mouseDown:(NSEvent *)theEvent +{ + NSPoint location = [self convertPoint:[[self window] mouseLocationOutsideOfEventStream] fromView:[[self window] contentView]]; + int aColumnIndex = [self columnAtPoint:location]; + + // If the user pressed on another column, reset + if (aColumnIndex != columnIndex) + { + clickCount = 1; + columnIndex = aColumnIndex; + [super mouseDown:theEvent]; + return; + } + + // On the third click, reset the sorting and + // Don't pass on the click + if (++clickCount == 3) + { + clickCount = 0; + controller.sortDescriptors = [NSArray array]; + [controller rearrangeObjects]; + return; + } + [super mouseDown:theEvent]; +} +@end