summaryrefslogtreecommitdiff
path: root/offapi/com/sun/star/form/FormControllerDispatcher.idl
blob: 41cb2e8642dd4e1070d28cd07b1ac06c66af3de8 (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
/*************************************************************************
 *
 *  $RCSfile: FormControllerDispatcher.idl,v $
 *
 *  $Revision: 1.2 $
 *
 *  last change: $Author: hr $ $Date: 2004-04-13 11:10:16 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (the "License"); You may not use this file
 *  except in compliance with the License. You may obtain a copy of the
 *  License at http://www.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/
#ifndef __com_sun_star_form_FormControllerDispatcher_idl__
#define __com_sun_star_form_FormControllerDispatcher_idl__

#ifndef __com_sun_star_frame_XDispatchProvider_idl__
#include <com/sun/star/frame/XDispatchProvider.idl>
#endif

//=============================================================================

module com {  module sun {  module star {  module form {

//=============================================================================

/** specifies a component which can be used to dispatch form controller functionality.

    <p>A form controller dispatcher is an instance which provides access to dispatchers
    (<type scope="com::sun::star::frame">XDispatch</type>) for certain form controller
    functionality.</p>

    <p>The way how access to these dispatchers is provided is not defined. It may either
    be directly via an <type scope="com::sun::star::frame">XDispatchProvider</type> interface,
    or indirectly, e.g. by registering dispatch interceptors (<type scope="com::sun::star::frame">XDispatchProviderInterceptor</type>)
    at another instance which supports this (by exposing the <type scope="com::sun::star::frame">XDispatchProviderInterception</type>
    interface).</p>

    <p>In any scenario, foreign components have a (implicit or explicit) possibility to request a dispatcher
    for a given URL.</p>

    <p>Below, there's a list of URLs which have a defined meaning - if a <type>FormControllerDispatcher</type>
    implementation supports one of them, there must be a guaranteed semantices. However, concrete implementations
    may support an arbitrary sub or super set of these URLs.</p>

    <p>In general, all URLs start with the same prefix, namely <em>.uno:FormController/</em>. To this, a suffix is
    appended which describes the requested functionality.<br/>
    Example: The URL suffix for deleting the current record is <em>deleteRecord</em>, so the complete URL for
    requesting a dispatcher for this functionality is <em>.uno:FormController/deleteRecord</em>.</p>

    <p>Some URLs may require parameters. For this, the sequence of <type scope="com::sun::star::beans">PropertyValue</type>s
    passed to the <member scope="com::sun::star::frame">XDispatch::dispatch</member> call is used - every property value is
    used as one named parameter.</p>

    <p>For all URLs, interested parties can register as status listeners (<type scope="com::sun::star::frame">XStatusListener</type>)
    at the dispatchers, and be notified whenever the functionality associated with the URL becomes enabled or
    disabled.<br/>
    For instance, the URL with the suffix <em>moveToFirst</em> is associated with moving the form to the first
    record, and it will be disabled in case the form is already positioned on the first record.</p>

    <p>Nearly all of the functionality offered by a <type>FormControllerDispatcher</type> can also be
    reached by other means. E.g., moving a form to its first record can be achieved by calling the
    method <member scope="com::sun::star::sdbc">XResultSet::first</member> of the form.<br/>
    However, the advantage of using a <type>FormControllerDispatcher</type> is that it's usually implemented
    by a component which has additional knowledge about the form. For instance, in a document which
    displays a form, there might be a control which contains uncommitted changes, plus a control
    whose changes were already committed to the current record, but <em>not</em> to the database. Simply
    calling <member scope="com::sun::star::sdbc">XResultSet::first</member> on the form would lose
    both the content in the uncommitted control, and the changes in the current record.<br/>
    An <type>FormControllerDispatcher</type> is expected to care for both of these.</p>

    <table style="width:100%;" border="0" cellpadding="2" cellspacing="2"><tbody>

      <tr style="vertical-align: top;">
        <td><b>URL suffix</b></td>
        <td><b>functionality</b></td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>positionForm</em></td>
        <td>positions the form on a record given by absolute number.<br/>
        There's one parameter for this functionality, named <em>Position</em>, which must be a long
        value specifying the absolute position to which the form should be moved</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>RecordCount</em></td>
        <td>This is a passive functionality: It cannot be dispatched, instead, interested parties may
        use the dispatcher to add as <type scope="com::sun::star::frame">XStatusListener</type>, and be
        notified when the record count changes.<br/>
        The status value which is being notified (<member scope="com::sun::star::frame">FeatureStateEvent::State</member>)
        is a string which can be used to display the record count. In particular, if the record count is not yet known
        (<member scope="com::sun::star::sdb">RowSet::IsRowCountFinal</member> is <FALSE/>), this is indicated in the
        string, too.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>moveToFirst</em></td>
        <td>moves the form to the first record</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>moveToPrev</em></td>
        <td>moves the form to the record preceding the current one</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>moveToNext</em></td>
        <td>moves the form to the record after the current one</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>moveToLast</em></td>
        <td>moves the form to the last record</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>moveToNew</em></td>
        <td>moves the form to the virtual "insert row", where new records can be inserted</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>saveRecord</em></td>
        <td>Commits any potentially pending changes in the current control, and saves the current record to
        the database, or inserts a new record if the form is currently positioned on the virtual insertion row.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>undoRecord</em></td>
        <td>reverts the changes done to the current record. Basically, this means refreshing the
        current row from the database, and updating all controls with the new content.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>deleteRecord</em></td>
        <td>deletes the current record, after asking the user for confirmation.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>refreshForm</em></td>
        <td>reloads the complete form. After this, the form is positioned on the first record</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>sortUp</em></td>
        <td>Adds an order clause to the form, to sort it ascending by the the field which the current control is bound to,
        and then reloads the form.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>sortDown</em></td>
        <td>Adds an order clause to the form, to sort it descending by the the field which the current control is bound to,
        and then reloads the form.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>sort</em></td>
        <td>opens an dialog, which allows the user to manipulate the current sorting order of the form. If the dialog
        is closed with OK, the form is reloaded after setting the new sorting order.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>autoFilter</em></td>
        <td>creates, from the current control, a filter for the form. This is, if the current control is bound to
        the field, say, "customer", and contains the value "Furs, Inc.", then a filter "customer = 'Furs, Inc.'"
        is created and set at the form. After this, the form is reloaded.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>filter</em></td>
        <td>opens an dialog, which allows the user to manipulate the current filter of the form. If the dialog
        is closed with OK, the form is reloaded after setting the new filter.</td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>applyFilter</em></td>
        <td><p>Toggles the <member scope="com::sun::star::sdb">RowSet::ApplyFilter</member> property
        of the form.</p>
        <p>Additionally, status listeners will be provided with the current (boolean) state of this property
        in the <member scope="com::sun::star::frame">FeatureStateEvent::State</member> member of the event
        notified by the dispatcher.</p></td>
      </tr>

      <tr style="vertical-align: top;">
        <td><em>removeFilterOrder</em></td>
        <td>completely removes any filter and sorting order from the form, and reloads it.</td>
      </tr>

    </tbody></table>

    @see FormController
 */
service FormControllerDispatcher
{
    //-------------------------------------------------------------------------
    /** allows direct access to the dispatchers provided by the component.
    */
    [optional] interface com::sun::star::frame::XDispatchProvider;
};

//=============================================================================

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif