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 134 135 136 137 138 139 140
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>IRCClient: DDInvocationGrabber.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
</ul>
</div>
<h1>DDInvocationGrabber.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2007-2008 Dave Dribin</span>
<a name="l00003"></a>00003 <span class="comment"> * </span>
<a name="l00004"></a>00004 <span class="comment"> * Permission is hereby granted, free of charge, to any person</span>
<a name="l00005"></a>00005 <span class="comment"> * obtaining a copy of this software and associated documentation</span>
<a name="l00006"></a>00006 <span class="comment"> * files (the "Software"), to deal in the Software without</span>
<a name="l00007"></a>00007 <span class="comment"> * restriction, including without limitation the rights to use, copy,</span>
<a name="l00008"></a>00008 <span class="comment"> * modify, merge, publish, distribute, sublicense, and/or sell copies</span>
<a name="l00009"></a>00009 <span class="comment"> * of the Software, and to permit persons to whom the Software is</span>
<a name="l00010"></a>00010 <span class="comment"> * furnished to do so, subject to the following conditions:</span>
<a name="l00011"></a>00011 <span class="comment"> * </span>
<a name="l00012"></a>00012 <span class="comment"> * The above copyright notice and this permission notice shall be</span>
<a name="l00013"></a>00013 <span class="comment"> * included in all copies or substantial portions of the Software.</span>
<a name="l00014"></a>00014 <span class="comment"> *</span>
<a name="l00015"></a>00015 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span>
<a name="l00016"></a>00016 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
<a name="l00017"></a>00017 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
<a name="l00018"></a>00018 <span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span>
<a name="l00019"></a>00019 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
<a name="l00020"></a>00020 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
<a name="l00021"></a>00021 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
<a name="l00022"></a>00022 <span class="comment"> * SOFTWARE.</span>
<a name="l00023"></a>00023 <span class="comment"> */</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="comment">/*</span>
<a name="l00027"></a>00027 <span class="comment"> * This class is based on CInvocationGrabber:</span>
<a name="l00028"></a>00028 <span class="comment"> *</span>
<a name="l00029"></a>00029 <span class="comment"> * Copyright (c) 2007, Toxic Software</span>
<a name="l00030"></a>00030 <span class="comment"> * All rights reserved.</span>
<a name="l00031"></a>00031 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
<a name="l00032"></a>00032 <span class="comment"> * modification, are permitted provided that the following conditions are</span>
<a name="l00033"></a>00033 <span class="comment"> * met:</span>
<a name="l00034"></a>00034 <span class="comment"> * </span>
<a name="l00035"></a>00035 <span class="comment"> * * Redistributions of source code must retain the above copyright notice,</span>
<a name="l00036"></a>00036 <span class="comment"> * this list of conditions and the following disclaimer.</span>
<a name="l00037"></a>00037 <span class="comment"> * </span>
<a name="l00038"></a>00038 <span class="comment"> * * Redistributions in binary form must reproduce the above copyright</span>
<a name="l00039"></a>00039 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
<a name="l00040"></a>00040 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
<a name="l00041"></a>00041 <span class="comment"> * </span>
<a name="l00042"></a>00042 <span class="comment"> * * Neither the name of the Toxic Software nor the names of its</span>
<a name="l00043"></a>00043 <span class="comment"> * contributors may be used to endorse or promote products derived from</span>
<a name="l00044"></a>00044 <span class="comment"> * this software without specific prior written permission.</span>
<a name="l00045"></a>00045 <span class="comment"> * </span>
<a name="l00046"></a>00046 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND</span>
<a name="l00047"></a>00047 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
<a name="l00048"></a>00048 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span>
<a name="l00049"></a>00049 <span class="comment"> * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE</span>
<a name="l00050"></a>00050 <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span>
<a name="l00051"></a>00051 <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span>
<a name="l00052"></a>00052 <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
<a name="l00053"></a>00053 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span>
<a name="l00054"></a>00054 <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span>
<a name="l00055"></a>00055 <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF</span>
<a name="l00056"></a>00056 <span class="comment"> * THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00057"></a>00057 <span class="comment"> *</span>
<a name="l00058"></a>00058 <span class="comment"> */</span>
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="preprocessor">#import <Foundation/Foundation.h></span>
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="comment">/*</span>
<a name="l00063"></a>00063 <span class="comment"> * @class DDInvocationGrabber</span>
<a name="l00064"></a>00064 <span class="comment"> * @discussion DDInvocationGrabber is a helper object that makes it very easy to construct instances of NSInvocation for later use. The object is inspired by NSUndoManager's prepareWithInvocationTarget method. To use a DDInvocationGrabber object, you set its target to some object, then send it a message as if it were the target object (the DDInvocationGrabber object acts as a proxy), if the target message understands the message the DDInvocationGrabber object stores the message invocation.</span>
<a name="l00065"></a>00065 <span class="comment"> </span>
<a name="l00066"></a>00066 <span class="comment"> DDInvocationGrabber *theGrabber = [DDInvocationGrabber invocationGrabber];</span>
<a name="l00067"></a>00067 <span class="comment"> [theGrabber setTarget:someObject]</span>
<a name="l00068"></a>00068 <span class="comment"> [theGrabber doSomethingWithParameter:someParameter]; // Send messages to 'theGrabber' as if it were 'someObject'</span>
<a name="l00069"></a>00069 <span class="comment"> NSInvocation *theInvocation = [theGrabber invocation];</span>
<a name="l00070"></a>00070 <span class="comment"> </span>
<a name="l00071"></a>00071 <span class="comment"> A slightly more concise version (using the covenience category) follows:</span>
<a name="l00072"></a>00072 <span class="comment"> </span>
<a name="l00073"></a>00073 <span class="comment"> DDInvocationGrabber *theGrabber = [DDInvocationGrabber invocationGrabber];</span>
<a name="l00074"></a>00074 <span class="comment"> [[theGrabber prepareWithInvocationTarget:someObject] doSomethingWithParameter:someParameter];</span>
<a name="l00075"></a>00075 <span class="comment"> NSInvocation *theInvocation = [theGrabber invocation];</span>
<a name="l00076"></a>00076 <span class="comment"> </span>
<a name="l00077"></a>00077 <span class="comment"> */</span>
<a name="l00078"></a>00078 <span class="keyword">@interface </span>DDInvocationGrabber : NSProxy
<a name="l00079"></a>00079 {
<a name="l00080"></a>00080 <span class="keywordtype">id</span> _target;
<a name="l00081"></a>00081 NSInvocation * _invocation;
<a name="l00082"></a>00082 BOOL _forwardInvokesOnMainThread;
<a name="l00083"></a>00083 BOOL _waitUntilDone;
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="comment">/*</span>
<a name="l00087"></a>00087 <span class="comment"> * @method invocationGrabber</span>
<a name="l00088"></a>00088 <span class="comment"> * @abstract Returns a newly allocated, inited, autoreleased DDInvocationGrabber object.</span>
<a name="l00089"></a>00089 <span class="comment"> */</span>
<a name="l00090"></a>00090 + (id)invocationGrabber;
<a name="l00091"></a>00091
<a name="l00092"></a>00092 - (id)target;
<a name="l00093"></a>00093 - (void)setTarget:(<span class="keywordtype">id</span>)inTarget;
<a name="l00094"></a>00094
<a name="l00095"></a>00095 - (NSInvocation *)invocation;
<a name="l00096"></a>00096 - (void)setInvocation:(NSInvocation *)inInvocation;
<a name="l00097"></a>00097
<a name="l00098"></a>00098 - (BOOL)forwardInvokesOnMainThread;
<a name="l00099"></a>00099 - (void)setForwardInvokesOnMainThread:(BOOL)forwardInvokesOnMainThread;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 - (BOOL)waitUntilDone;
<a name="l00102"></a>00102 - (void)setWaitUntilDone:(BOOL)waitUntilDone;
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="keyword">@end</span>
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="keyword">@interface </span>DDInvocationGrabber (DDInvocationGrabber_Conveniences)
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="comment">/*</span>
<a name="l00109"></a>00109 <span class="comment"> * @method prepareWithInvocationTarget:</span>
<a name="l00110"></a>00110 <span class="comment"> * @abstract Sets the target object of the receiver and returns itself. The sender can then send a message to the </span>
<a name="l00111"></a>00111 <span class="comment"> */</span>
<a name="l00112"></a>00112 - (id)prepareWithInvocationTarget:(<span class="keywordtype">id</span>)inTarget;
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="keyword">@end</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:10:37 2009 for IRCClient by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>
|