Changeset 5872


Ignore:
Timestamp:
May 21, 2008, 3:23:26 PM (14 years ago)
Author:
livings124
Message:

move quick look into its own class, making it a singleton object to allow expanded functionality

Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Transmission.xcodeproj/project.pbxproj

    r5870 r5872  
    215215                A2DF576C0DE468C6000795D5 /* JSON_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = A2DF576A0DE468C6000795D5 /* JSON_parser.c */; };
    216216                A2DF576D0DE468C6000795D5 /* JSON_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = A2DF576B0DE468C6000795D5 /* JSON_parser.h */; };
     217                A2DF57740DE46A6A000795D5 /* QuickLookController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2DF57730DE46A6A000795D5 /* QuickLookController.m */; };
    217218                A2E23AC60CB5E1930002BB25 /* InfoTabButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E23AC40CB5E1930002BB25 /* InfoTabButtonCell.m */; };
    218219                A2E9AA760C249AF400085DCF /* Create.png in Resources */ = {isa = PBXBuildFile; fileRef = A2E9AA750C249AF400085DCF /* Create.png */; };
     
    683684                A2DF576A0DE468C6000795D5 /* JSON_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = JSON_parser.c; path = libtransmission/JSON_parser.c; sourceTree = "<group>"; };
    684685                A2DF576B0DE468C6000795D5 /* JSON_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSON_parser.h; path = libtransmission/JSON_parser.h; sourceTree = "<group>"; };
     686                A2DF57720DE46A6A000795D5 /* QuickLookController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuickLookController.h; path = macosx/QuickLookController.h; sourceTree = "<group>"; };
     687                A2DF57730DE46A6A000795D5 /* QuickLookController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = QuickLookController.m; path = macosx/QuickLookController.m; sourceTree = "<group>"; };
    685688                A2E23AC30CB5E1930002BB25 /* InfoTabButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = InfoTabButtonCell.h; path = macosx/InfoTabButtonCell.h; sourceTree = "<group>"; };
    686689                A2E23AC40CB5E1930002BB25 /* InfoTabButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = InfoTabButtonCell.m; path = macosx/InfoTabButtonCell.m; sourceTree = "<group>"; };
     
    953956                                A2D307A30D9EC6870051FD27 /* BlocklistDownloader.m */,
    954957                                A2DF567C0DE323D3000795D5 /* QuickLook.h */,
     958                                A2DF57720DE46A6A000795D5 /* QuickLookController.h */,
     959                                A2DF57730DE46A6A000795D5 /* QuickLookController.m */,
    955960                        );
    956961                        name = Sources;
     
    19941999                                A2FB701C0D95CAEA0001F331 /* GroupsController.m in Sources */,
    19952000                                A2D307A40D9EC6870051FD27 /* BlocklistDownloader.m in Sources */,
     2001                                A2DF57740DE46A6A000795D5 /* QuickLookController.m in Sources */,
    19962002                        );
    19972003                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/macosx/Controller.m

    r5858 r5872  
    3131#import "CreatorWindowController.h"
    3232#import "StatsWindowController.h"
     33#import "QuickLookController.h"
    3334#import "GroupsWindowController.h"
    3435#import "GroupsController.h"
     
    230231       
    231232        fBadger = [[Badger alloc] initWithLib: fLib];
     233        [QuickLookController quickLookControllerInitializeWithController: self infoController: fInfoController];
    232234       
    233235        fSoundPlaying = NO;
  • trunk/macosx/English.lproj/InfoWindow.xib

    r5864 r5872  
    4646                                                        <reference key="NSNextResponder" ref="429007171"/>
    4747                                                        <int key="NSvFlags">266</int>
    48                                                         <string key="NSFrame">{{47, 47}, {259, 17}}</string>
     48                                                        <string key="NSFrame">{{47, 47}, {296, 17}}</string>
    4949                                                        <reference key="NSSuperview" ref="429007171"/>
    5050                                                        <bool key="NSEnabled">YES</bool>
     
    401401                                                        </object>
    402402                                                        <bool key="NSEditable">YES</bool>
    403                                                 </object>
    404                                                 <object class="NSButton" id="624970840">
    405                                                         <reference key="NSNextResponder" ref="429007171"/>
    406                                                         <int key="NSvFlags">265</int>
    407                                                         <string key="NSFrame">{{311, 38}, {29, 17}}</string>
    408                                                         <reference key="NSSuperview" ref="429007171"/>
    409                                                         <bool key="NSEnabled">YES</bool>
    410                                                         <object class="NSButtonCell" key="NSCell" id="269704195">
    411                                                                 <int key="NSCellFlags">-2080244224</int>
    412                                                                 <int key="NSCellFlags2">134348800</int>
    413                                                                 <string key="NSContents"/>
    414                                                                 <reference key="NSSupport" ref="26"/>
    415                                                                 <reference key="NSControlView" ref="624970840"/>
    416                                                                 <int key="NSButtonFlags">-2030288641</int>
    417                                                                 <int key="NSButtonFlags2">164</int>
    418                                                                 <object class="NSCustomResource" key="NSNormalImage">
    419                                                                         <string key="NSClassName">NSImage</string>
    420                                                                         <string key="NSResourceName">NSQuickLookTemplate</string>
    421                                                                 </object>
    422                                                                 <string key="NSAlternateContents"/>
    423                                                                 <string key="NSKeyEquivalent"/>
    424                                                                 <int key="NSPeriodicDelay">400</int>
    425                                                                 <int key="NSPeriodicInterval">75</int>
    426                                                         </object>
    427403                                                </object>
    428404                                        </object>
     
    56775653                                        <int key="connectionID">1749</int>
    56785654                                </object>
    5679                                 <object class="IBConnectionRecord">
    5680                                         <object class="IBActionConnection" key="connection">
    5681                                                 <string key="label">toggleQuickLook:</string>
    5682                                                 <reference key="source" ref="1016287627"/>
    5683                                                 <reference key="destination" ref="624970840"/>
    5684                                         </object>
    5685                                         <int key="connectionID">1752</int>
    5686                                 </object>
    56875655                        </object>
    56885656                        <object class="IBMutableOrderedSet" key="objectRecords">
     
    57355703                                                        <reference ref="80002672"/>
    57365704                                                        <reference ref="843033231"/>
    5737                                                         <reference ref="624970840"/>
    57385705                                                </object>
    57395706                                                <reference key="parent" ref="571546118"/>
     
    79277894                                                <reference key="object" ref="927236344"/>
    79287895                                                <reference key="parent" ref="876850876"/>
    7929                                         </object>
    7930                                         <object class="IBObjectRecord">
    7931                                                 <int key="objectID">1750</int>
    7932                                                 <reference key="object" ref="624970840"/>
    7933                                                 <object class="NSMutableArray" key="children">
    7934                                                         <bool key="EncodedWithXMLCoder">YES</bool>
    7935                                                         <reference ref="269704195"/>
    7936                                                 </object>
    7937                                                 <reference key="parent" ref="429007171"/>
    7938                                         </object>
    7939                                         <object class="IBObjectRecord">
    7940                                                 <int key="objectID">1751</int>
    7941                                                 <reference key="object" ref="269704195"/>
    7942                                                 <reference key="parent" ref="624970840"/>
    79437896                                        </object>
    79447897                                </object>
     
    82238176                                        <string>1748.IBPluginDependency</string>
    82248177                                        <string>1748.ImportedFromIB2</string>
    8225                                         <string>1750.IBPluginDependency</string>
    8226                                         <string>1751.IBPluginDependency</string>
    82278178                                        <string>28.IBPluginDependency</string>
    82288179                                        <string>28.ImportedFromIB2</string>
     
    86068557                                        <reference ref="9"/>
    86078558                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
    8608                                         <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
    8609                                         <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
    86108559                                        <reference ref="9"/>
    86118560                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
     
    88298778                                                        <string>setSpeedMode:</string>
    88308779                                                        <string>setTab:</string>
    8831                                                         <string>toggleQuickLook:</string>
    88328780                                                </object>
    88338781                                                <object class="NSMutableArray" key="dict.values">
    88348782                                                        <bool key="EncodedWithXMLCoder">YES</bool>
    8835                                                         <string>id</string>
    88368783                                                        <string>id</string>
    88378784                                                        <string>id</string>
  • trunk/macosx/FileOutlineController.m

    r5864 r5872  
    2727#import "FileOutlineView.h"
    2828#import "FilePriorityCell.h"
     29#import "QuickLookController.h"
    2930#import "NSApplicationAdditions.h"
    3031
     
    7879- (void) outlineViewSelectionDidChange: (NSNotification *) notification
    7980{
    80     [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQuickLook" object: self];
     81    [[QuickLookController quickLook] updateQuickLook];
    8182}
    8283
  • trunk/macosx/FileOutlineView.m

    r5865 r5872  
    2424
    2525#import "FileOutlineView.h"
    26 #import "InfoWindowController.h"
    2726#import "FileNameCell.h"
    2827#import "FilePriorityCell.h"
    2928#import "Torrent.h"
     29#import "QuickLookController.h"
    3030#import "CTGradient.h"
    3131
     
    8989    unichar firstChar = [[event charactersIgnoringModifiers] characterAtIndex: 0];
    9090    if (firstChar == ' ')
    91         [(InfoWindowController *)[[self window] windowController] toggleQuickLook: nil];
     91        [[QuickLookController quickLook] toggleQuickLook];
    9292    else if (firstChar == NSRightArrowFunctionKey)
    93         [(InfoWindowController *)[[self window] windowController] quickLookPressRight];
     93        [[QuickLookController quickLook] pressRight];
    9494    else if (firstChar == NSLeftArrowFunctionKey)
    95         [(InfoWindowController *)[[self window] windowController] quickLookPressLeft];
     95        [[QuickLookController quickLook] pressLeft];
    9696    else;
    9797   
  • trunk/macosx/InfoWindowController.h

    r5864 r5872  
    6767                        * fUploadLimitLabel, * fDownloadLimitLabel;
    6868   
    69     BOOL fQuickLookAvailable;
    70    
    7169    NSString * fInitialString;
    7270}
     
    8179- (void) setPreviousTab;
    8280
    83 - (int) visibleRowWithURL: (NSURL*) url;
    84 - (BOOL) quickLookSelectItems;
    85 - (void) toggleQuickLook: (id) sender;
    86 - (void) updateQuickLook;
    87 
    88 - (void) quickLookPressLeft;
    89 - (void) quickLookPressRight;
     81- (BOOL) shouldQuickLookFileView;
     82- (NSArray *) quickLookURLs;
     83- (NSRect) quickLookFrameWithURL: (NSURL*) url;
    9084
    9185- (void) setPiecesView: (id) sender;
  • trunk/macosx/InfoWindowController.m

    r5867 r5872  
    2525#import "InfoWindowController.h"
    2626#import "InfoTabButtonCell.h"
     27#import "QuickLookController.h"
    2728#import "NSApplicationAdditions.h"
    2829#import "NSStringAdditions.h"
    29 
    30 #import "QuickLook.h"
    31 #define QLPreviewPanel NSClassFromString(@"QLPreviewPanel")
    3230
    3331#define TAB_INFO_IDENT @"Info"
     
    142140    [revealOff release];
    143141   
    144     //load the QuickLook framework and set the delegate, no point on trying this on Tiger
    145     //animation types: 0 = none; 1 = fade; 2 = zoom
    146     fQuickLookAvailable = [[NSBundle bundleWithPath: @"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load];
    147     if (fQuickLookAvailable)
    148         [[[QLPreviewPanel sharedPreviewPanel] windowController] setDelegate: self];
    149    
    150142    //initially sort peer table by IP
    151143    if ([[fPeerTable sortDescriptors] count] == 0)
     
    173165    [nc addObserver: self selector: @selector(updateInfoStats) name: @"UpdateStats" object: nil];
    174166    [nc addObserver: self selector: @selector(updateOptions) name: @"UpdateOptions" object: nil];
    175     [nc addObserver: self selector: @selector(updateQuickLook) name: @"UpdateQuickLook" object: nil];
    176167}
    177168
     
    443434    [fTrackerTable reloadData];
    444435    [fPeerTable reloadData];
    445    
    446     [self updateQuickLook];
    447436}
    448437
     
    603592}
    604593
    605 - (void) windowWillClose: (NSNotification *) notification
    606 {
    607     if (fQuickLookAvailable)
    608         [[QLPreviewPanel sharedPreviewPanel] closeWithEffect: 0];
    609 }
    610 
    611594- (void) setTab: (id) sender
    612595{
     
    638621                break;
    639622            case TAB_FILES_TAG:
    640                 [self updateQuickLook];
     623                [[QuickLookController quickLook] updateQuickLook];
    641624               
    642625                oldResizeSaveKey = @"InspectorContentHeightFiles";
     
    738721   
    739722    if (fCurrentTabTag == TAB_FILES_TAG)
    740         [self updateQuickLook];
     723        [[QuickLookController quickLook] updateQuickLook];
    741724}
    742725
     
    908891}
    909892
    910 // This is the QuickLook delegate method
    911 // It should return the frame for the item represented by the URL
    912 // If an empty frame is returned then the panel will fade in/out instead
    913 - (NSRect) previewPanel: (NSPanel *) panel frameForURL: (NSURL *) url
    914 {
    915     if (fCurrentTabTag == TAB_FILES_TAG && [[fFileController outlineView] numberOfSelectedRows] > 0)
    916     {
    917         int row = [self visibleRowWithURL: url];
    918         if (row != -1)
     893- (BOOL) shouldQuickLookFileView
     894{
     895    return [[self window] isVisible] && fCurrentTabTag == TAB_FILES_TAG && [[fFileController outlineView] numberOfSelectedRows] > 0;
     896}
     897
     898- (NSArray *) quickLookURLs
     899{
     900    FileOutlineView * fileOutlineView = [fFileController outlineView];
     901    Torrent * torrent = [fTorrents objectAtIndex: 0];
     902    NSString * folder = [torrent downloadFolder];
     903    NSIndexSet * indexes = [fileOutlineView selectedRowIndexes];
     904    NSMutableArray * urlArray = [NSMutableArray arrayWithCapacity: [indexes count]];
     905
     906    int i;
     907    for (i = [indexes firstIndex]; i != NSNotFound; i = [indexes indexGreaterThanIndex: i])
     908    {
     909        NSDictionary * item = [fileOutlineView itemAtRow: i];
     910        if ([[item objectForKey: @"IsFolder"] boolValue]
     911            || [torrent fileProgress: [[item objectForKey: @"Indexes"] firstIndex]] == 1.0)
     912            [urlArray addObject: [NSURL fileURLWithPath: [folder stringByAppendingPathComponent: [item objectForKey: @"Path"]]]];
     913    }
     914   
     915    return urlArray;
     916}
     917
     918- (NSRect) quickLookFrameWithURL: (NSURL *) url
     919{
     920    FileOutlineView * fileOutlineView = [fFileController outlineView];
     921   
     922    NSString * fullPath = [url path];
     923    NSString * folder = [[fTorrents objectAtIndex: 0] downloadFolder];
     924    NSRange visibleRows = [fileOutlineView rowsInRect: [fileOutlineView bounds]];
     925   
     926    int row;
     927    for (row = visibleRows.location; row <= row + visibleRows.length; row++)
     928    {
     929        id rowItem = [fileOutlineView itemAtRow: row];
     930        if ([[folder stringByAppendingPathComponent: [rowItem objectForKey: @"Path"]] isEqualToString: fullPath])
    919931        {
    920             FileOutlineView * fileOutlineView = [fFileController outlineView];
    921            
    922932            NSRect frame = [fileOutlineView rectOfRow: row];
    923933            frame.origin = [fileOutlineView convertPoint: frame.origin toView: nil];
     
    926936            return frame;
    927937        }
    928         else
    929             return NSZeroRect;
    930     }
    931     else
    932     {
    933         NSRect frame = [fImageView frame];
    934         frame.origin = [[self window] convertBaseToScreen: frame.origin];
    935         return frame;
    936     }
    937 }
    938 
    939 #warning needed?
    940 - (int) visibleRowWithURL: (NSURL *) url
    941 {
    942     FileOutlineView * fileOutlineView = [fFileController outlineView];
    943    
    944     NSString * fullPath = [url path];
    945     NSString * folder = [[fTorrents objectAtIndex: 0] downloadFolder];
    946     NSRange visibleRows = [fileOutlineView rowsInRect: [fileOutlineView bounds]];
    947    
    948     int row;
    949     for (row = visibleRows.location; row <= row + visibleRows.length; row++)
    950     {
    951         id rowItem = [fileOutlineView itemAtRow: row];
    952         if ([[folder stringByAppendingPathComponent: [rowItem objectForKey: @"Path"]] isEqualToString: fullPath])
    953             return row;
    954     }
    955     return -1;
    956 }
    957 
    958 - (BOOL) quickLookSelectItems
    959 {
    960     if (!fQuickLookAvailable)
    961         return NO;
    962    
    963     NSMutableArray * urlArray = nil;
    964    
    965     FileOutlineView * fileOutlineView = [fFileController outlineView];
    966     if (fCurrentTabTag == TAB_FILES_TAG && [fileOutlineView numberOfSelectedRows] > 0)
    967     {
    968         Torrent * torrent = [fTorrents objectAtIndex: 0];
    969         NSString * folder = [torrent downloadFolder];
    970         NSIndexSet * indexes = [fileOutlineView selectedRowIndexes];
    971         urlArray = [NSMutableArray arrayWithCapacity: [indexes count]];
    972 
    973         int i;
    974         for (i = [indexes firstIndex]; i != NSNotFound; i = [indexes indexGreaterThanIndex: i])
    975         {
    976             NSDictionary * item = [fileOutlineView itemAtRow: i];
    977             if ([[item objectForKey: @"IsFolder"] boolValue]
    978                 || [torrent fileProgress: [[item objectForKey: @"Indexes"] firstIndex]] == 1.0)
    979                 [urlArray addObject: [NSURL fileURLWithPath: [folder stringByAppendingPathComponent: [item objectForKey: @"Path"]]]];
    980         }
    981     }
    982     else
    983     {
    984         if ([fTorrents count] > 0)
    985         {
    986             urlArray = [NSMutableArray arrayWithCapacity: [fTorrents count]];
    987             NSEnumerator * enumerator = [fTorrents objectEnumerator];
    988             Torrent * torrent;
    989             while ((torrent = [enumerator nextObject]))
    990             {
    991                 if ([torrent folder] || [torrent progress] == 1.0)
    992                     [urlArray addObject: [NSURL fileURLWithPath: [torrent dataLocation]]];
    993             }
    994         }
    995     }
    996    
    997     if (urlArray && [urlArray count] > 0)
    998     {
    999         [[QLPreviewPanel sharedPreviewPanel] setURLs: urlArray currentIndex: 0 preservingDisplayState: YES];
    1000         return YES;
    1001     }
    1002     else
    1003         return NO;
    1004 }
    1005 
    1006 - (void) toggleQuickLook: (id) sender
    1007 {
    1008     if (!fQuickLookAvailable)
    1009         return;
    1010    
    1011     if ([[QLPreviewPanel sharedPreviewPanel] isOpen])
    1012         [[QLPreviewPanel sharedPreviewPanel] closeWithEffect: 2];
    1013     else
    1014     {
    1015         if ([self quickLookSelectItems])
    1016         {
    1017             [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFrontWithEffect: 2];
    1018             // Restore the focus to our window to demo the selection changing, scrolling (left/right)
    1019             // and closing (space) functionality
    1020             [[self window] makeKeyWindow];
    1021         }
    1022     }
    1023 }
    1024 
    1025 - (void) updateQuickLook
    1026 {
    1027     if (!fQuickLookAvailable || ![[QLPreviewPanel sharedPreviewPanel] isOpen])
    1028         return;
    1029    
    1030     //if the user changes the selection while the panel is open then update the current items
    1031     if (![self quickLookSelectItems])
    1032         [[QLPreviewPanel sharedPreviewPanel] closeWithEffect: 1];
    1033 }
    1034 
    1035 - (void) quickLookPressLeft
    1036 {
    1037     if (fQuickLookAvailable && [[QLPreviewPanel sharedPreviewPanel] isOpen])
    1038         [[QLPreviewPanel sharedPreviewPanel] selectPreviousItem];
    1039 }
    1040 
    1041 - (void) quickLookPressRight
    1042 {
    1043     if (fQuickLookAvailable && [[QLPreviewPanel sharedPreviewPanel] isOpen])
    1044         [[QLPreviewPanel sharedPreviewPanel] selectNextItem];
    1045 }
    1046 
    1047 - (void) keyDown: (NSEvent *) event
    1048 {
    1049     unichar firstChar = [[event charactersIgnoringModifiers] characterAtIndex: 0];
    1050     if (firstChar == ' ')
    1051         [self toggleQuickLook: nil];
    1052     else if (firstChar == NSRightArrowFunctionKey)
    1053         [self quickLookPressRight];
    1054     else if (firstChar == NSLeftArrowFunctionKey)
    1055         [self quickLookPressLeft];
    1056     else
    1057         [super keyDown: event]; 
     938    }
     939   
     940    return NSZeroRect;
    1058941}
    1059942
Note: See TracChangeset for help on using the changeset viewer.