View | Details | Raw Unified | Return to issue 45563
Collapse All | Expand All

(-)sc/inc/sccommands.h (+1 lines)
Lines 328-332 Link Here
328
#define CMD_FID_TAB_EVENTS                          ".uno:TableEvents"
328
#define CMD_FID_TAB_EVENTS                          ".uno:TableEvents"
329
#define CMD_FID_TAB_MENU_SET_TAB_BG_COLOR           ".uno:SetTabBgColor"
329
#define CMD_FID_TAB_MENU_SET_TAB_BG_COLOR           ".uno:SetTabBgColor"
330
#define CMD_FID_TAB_SET_TAB_BG_COLOR                ".uno:TabBgColor"
330
#define CMD_FID_TAB_SET_TAB_BG_COLOR                ".uno:TabBgColor"
331
#define CMD_SID_INPUT_SUM                           ".uno:AutoSum"
331
332
332
#endif
333
#endif
(-)sc/sdi/tabvwsh.sdi (+2 lines)
Lines 217-222 Link Here
217
    SID_OPT_LOCALE_CHANGED  [ ExecMethod = Execute; ]
217
    SID_OPT_LOCALE_CHANGED  [ ExecMethod = Execute; ]
218
218
219
	SID_READONLY_MODE	[ StateMethod = GetState; ]
219
	SID_READONLY_MODE	[ StateMethod = GetState; ]
220
	
221
	SID_INPUT_SUM		[ ExecMethod = Execute; ]
220
}
222
}
221
223
222
224
(-)sc/sdi/scalc.sdi (+25 lines)
Lines 7822-7824 Link Here
7822
    GroupId = GID_FORMAT;
7822
    GroupId = GID_FORMAT;
7823
]
7823
]
7824
7824
7825
//--------------------------------------------------------------------------
7826
SfxVoidItem AutoSum SID_INPUT_SUM
7827
7828
[
7829
    /* flags: */
7830
    AutoUpdate = FALSE,
7831
    Cachable = Cachable,
7832
    FastCall = FALSE,
7833
    HasCoreId = FALSE,
7834
    HasDialog = FALSE,
7835
    ReadOnlyDoc = FALSE,
7836
    Toggle = FALSE,
7837
    Container = FALSE,
7838
    RecordAbsolute = FALSE,
7839
    RecordPerSet;
7840
    Synchron;
7841
7842
    /* config: */
7843
    AccelConfig = TRUE,
7844
    MenuConfig = TRUE,
7845
    StatusBarConfig = FALSE,
7846
    ToolBoxConfig = FALSE,
7847
    GroupId = GID_EDIT;
7848
]
7849
(-)sc/source/ui/inc/inputwin.hxx (-1 lines)
Lines 192-198 Link Here
192
	virtual void	SetText( const String& rString );
192
	virtual void	SetText( const String& rString );
193
	virtual String	GetText() const;
193
	virtual String	GetText() const;
194
194
195
    sal_Bool        UseSubTotal( ScRangeList* pRangeList ) const;
196
195
197
private:
196
private:
198
	ScPosWnd		aWndPos;
197
	ScPosWnd		aWndPos;
(-)sc/source/ui/inc/tabvwsh.hxx (+2 lines)
Lines 422-427 Link Here
422
422
423
    bool    ExecuteRetypePassDlg(ScPasswordHash eDesiredHash);
423
    bool    ExecuteRetypePassDlg(ScPasswordHash eDesiredHash);
424
424
425
	void 	InputAutoSum( bool bFromInputWindow = false );
426
	
425
    using ScTabView::ShowCursor;
427
    using ScTabView::ShowCursor;
426
};
428
};
427
429
(-)sc/source/ui/view/tabvwshg.cxx (+196 lines)
Lines 48-53 Link Here
48
#include "drawview.hxx"
48
#include "drawview.hxx"
49
#include "globstr.hrc"
49
#include "globstr.hrc"
50
#include <avmedia/mediawindow.hxx>
50
#include <avmedia/mediawindow.hxx>
51
#include "scmod.hxx"
52
#include "dbcolect.hxx"
53
#include "inputhdl.hxx"
54
#include <editeng/editview.hxx>
55
#include "inputwin.hxx"
51
56
52
//------------------------------------------------------------------------
57
//------------------------------------------------------------------------
53
58
Lines 131-136 Link Here
131
	pDrView->InsertObjectSafe( pObj, *pDrView->GetSdrPageView() );
136
	pDrView->InsertObjectSafe( pObj, *pDrView->GetSdrPageView() );
132
}
137
}
133
138
139
//------------------------------------------------------------------------
134
140
141
sal_Bool lcl_UseSubTotal(ScTabViewShell* pViewSh, ScRangeList* pRangeList)
142
{
143
    sal_Bool bSubTotal(sal_False);
144
    
145
    ScDocument* pDoc = pViewSh->GetViewData()->GetDocument();
146
    sal_Int32 nRangeCount (pRangeList->Count());
147
    sal_Int32 nRangeIndex (0);
148
    while (!bSubTotal && nRangeIndex < nRangeCount)
149
    {
150
        const ScRange* pRange = pRangeList->GetObject( nRangeIndex );
151
        if( pRange )
152
        {
153
            SCTAB nTabEnd(pRange->aEnd.Tab());
154
            SCTAB nTab(pRange->aStart.Tab());
155
            while (!bSubTotal && nTab <= nTabEnd)
156
            {
157
                SCROW nRowEnd(pRange->aEnd.Row());
158
                SCROW nRow(pRange->aStart.Row());
159
                while (!bSubTotal && nRow <= nRowEnd)
160
                {
161
                    if (pDoc->RowFiltered(nRow, nTab))
162
                        bSubTotal = sal_True;
163
                    else
164
                        ++nRow;
165
                }
166
                ++nTab;
167
            }
168
        }
169
        ++nRangeIndex;
170
    }
135
171
172
    ScDBCollection* pDBCollection = pDoc->GetDBCollection();
173
    sal_uInt16 nDBCount (pDBCollection->GetCount());
174
    sal_uInt16 nDBIndex (0);
175
    while (!bSubTotal && nDBIndex < nDBCount)
176
    {
177
        ScDBData* pDB = (*pDBCollection)[nDBIndex];
178
        if (pDB && pDB->HasAutoFilter())
179
        {
180
            nRangeIndex = 0;
181
            while (!bSubTotal && nRangeIndex < nRangeCount)
182
            {
183
                const ScRange* pRange = pRangeList->GetObject( nRangeIndex );
184
                if( pRange )
185
                {
186
                    ScRange aDBArea;
187
                    pDB->GetArea(aDBArea);
188
                    if (aDBArea.Intersects(*pRange))
189
                        bSubTotal = sal_True;
190
                }
191
                ++nRangeIndex;
192
            }
193
        }
194
        ++nDBIndex;
195
    }
196
    
197
    return bSubTotal;
198
}
136
199
200
//----------------------------------------------------------------------------
201
202
void ScTabViewShell::InputAutoSum( bool bFromInputWindow )
203
{
204
    const ScMarkData& rMark = GetViewData()->GetMarkData();
205
    if ( rMark.IsMarked() || rMark.IsMultiMarked() )
206
    {
207
        ScRangeList aMarkRangeList;
208
        rMark.FillRangeListWithMarks( &aMarkRangeList, sal_False );
209
        ScDocument* pDoc = GetViewData()->GetDocument();
210
        
211
        // check if one of the marked ranges is empty
212
        bool bEmpty = false;
213
        const sal_uLong nCount = aMarkRangeList.Count();
214
        for ( sal_uLong i = 0; i < nCount; ++i )
215
        {
216
            const ScRange aRange( *aMarkRangeList.GetObject( i ) );
217
            if ( pDoc->IsBlockEmpty( aRange.aStart.Tab(),
218
                aRange.aStart.Col(), aRange.aStart.Row(),
219
                aRange.aEnd.Col(), aRange.aEnd.Row() ) )
220
            {
221
                bEmpty = true;
222
                break;
223
            }
224
        }
225
        
226
        if ( bEmpty )
227
        {
228
            ScRangeList aRangeList;
229
            const sal_Bool bDataFound = GetAutoSumArea( aRangeList );
230
            if ( bDataFound )
231
            {
232
                const sal_Bool bSubTotal( lcl_UseSubTotal( this, &aRangeList ) );
233
                EnterAutoSum( aRangeList, bSubTotal );  // Block mit Summen fuellen
234
            }
235
        }
236
        else
237
        {
238
            const sal_Bool bSubTotal( lcl_UseSubTotal( this, &aMarkRangeList ) );
239
            for ( sal_uLong i = 0; i < nCount; ++i )
240
            {
241
                const ScRange aRange( *aMarkRangeList.GetObject( i ) );
242
                const bool bSetCursor = ( i == nCount - 1 ? true : false );
243
                const bool bContinue = ( i != 0  ? true : false );
244
                if ( !AutoSum( aRange, bSubTotal, bSetCursor, bContinue ) )
245
                {
246
                    MarkRange( aRange, sal_False, sal_False );
247
                    SetCursor( aRange.aEnd.Col(), aRange.aEnd.Row() );
248
                    ScInputHandler* pHdl = GetInputHandler();
249
                    if ( pHdl )
250
                    {
251
                        const ScRangeList aRangeList;
252
                        const String aFormula = GetAutoSumFormula( aRangeList, bSubTotal );
253
                        ScInputWindow *pInputWin = pHdl->GetInputWindow();
254
                        if ( pInputWin )
255
                            pInputWin->SetFuncString( aFormula );
256
                        else if ( !bFromInputWindow )
257
                        {
258
                            ScModule* pScMod = SC_MOD();
259
                            if( !pScMod->IsEditMode() )
260
                            {
261
                                pScMod->SetInputMode( SC_INPUT_TABLE );
262
                                pHdl->ClearText();
263
                            }
264
                            pHdl->InsertFunction( aFormula, sal_False );
265
                            pHdl->InputSetSelection( 
266
                                    aFormula.Search('(') + (bSubTotal ? 3 : 1), 
267
                                    aFormula.Len() -1 );
268
                            pHdl->DataChanged();
269
                        }
270
                    }
271
                    break;
272
                }
273
            }
274
        }
275
    }
276
    else
277
    {
278
        ScRangeList aRangeList;
279
        const sal_Bool bDataFound = GetAutoSumArea( aRangeList );
280
        const sal_Bool bSubTotal( lcl_UseSubTotal( this, &aRangeList ) );
281
        const String aFormula = GetAutoSumFormula( aRangeList, bSubTotal );
282
        ScModule* pScMod = SC_MOD();
283
        ScInputHandler* pHdl = GetInputHandler();
284
        
285
        if ( pHdl )
286
        {
287
            ScInputWindow *pInputWin = pHdl->GetInputWindow();
288
            
289
            if ( pInputWin )
290
            {
291
                pInputWin->SetFuncString( aFormula );
292
                
293
                if ( pScMod->IsEditMode() )
294
                {
295
                    pHdl->InitRangeFinder( aFormula );
296
            
297
                    //! SetSelection am InputHandler ???
298
                    //! bSelIsRef setzen ???
299
                    const xub_StrLen nOpen = aFormula.Search('(');
300
                    const xub_StrLen nLen = aFormula.Len();
301
                    if ( nOpen != STRING_NOTFOUND && nLen > nOpen )
302
                    {
303
                        sal_uInt8 nAdd(1);
304
                        if (bSubTotal)
305
                            nAdd = 3;
306
                        ESelection aSel(0,nOpen+nAdd,0,nLen-1);
307
                        EditView* pTableView = pHdl->GetTableView();
308
                        if (pTableView)
309
                            pTableView->SetSelection(aSel);
310
                        EditView* pTopView = pHdl->GetTopView();
311
                        if (pTopView)
312
                            pTopView->SetSelection(aSel);
313
                    }
314
                }
315
            }
316
            else
317
            {
318
                if( !pScMod->IsEditMode() )
319
                {
320
                    pScMod->SetInputMode( SC_INPUT_TABLE );
321
                    pHdl->ClearText();
322
                }
323
                
324
                pHdl->InsertFunction( aFormula, sal_False );
325
                pHdl->InputSetSelection( 
326
                        aFormula.Search('(') + (bSubTotal ? 3 : 1), 
327
                        aFormula.Len() -1 );
328
                pHdl->DataChanged();
329
            }
330
        }
331
    }
332
}
(-)sc/source/ui/view/tabvwsh3.cxx (+5 lines)
Lines 1219-1224 Link Here
1219
				rReq.Done();
1219
				rReq.Done();
1220
			}
1220
			}
1221
            break;
1221
            break;
1222
        
1223
        case SID_INPUT_SUM :
1224
            InputAutoSum();
1225
            rReq.Done();
1226
            break;
1222
1227
1223
		default:
1228
		default:
1224
			DBG_ERROR("Unbekannter Slot bei ScTabViewShell::Execute");
1229
			DBG_ERROR("Unbekannter Slot bei ScTabViewShell::Execute");
(-)sc/source/ui/app/inputwin.cxx (-148 / +1 lines)
Lines 264-330 Link Here
264
	}
264
	}
265
}
265
}
266
266
267
sal_Bool ScInputWindow::UseSubTotal(ScRangeList* pRangeList) const
268
{
269
    sal_Bool bSubTotal(sal_False);
270
    ScTabViewShell* pViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
271
    if ( pViewSh )
272
    {
273
        ScDocument* pDoc = pViewSh->GetViewData()->GetDocument();
274
        sal_Int32 nRangeCount (pRangeList->Count());
275
        sal_Int32 nRangeIndex (0);
276
        while (!bSubTotal && nRangeIndex < nRangeCount)
277
        {
278
            const ScRange* pRange = pRangeList->GetObject( nRangeIndex );
279
            if( pRange )
280
            {
281
                SCTAB nTabEnd(pRange->aEnd.Tab());
282
                SCTAB nTab(pRange->aStart.Tab());
283
                while (!bSubTotal && nTab <= nTabEnd)
284
                {
285
                    SCROW nRowEnd(pRange->aEnd.Row());
286
                    SCROW nRow(pRange->aStart.Row());
287
                    while (!bSubTotal && nRow <= nRowEnd)
288
                    {
289
                        if (pDoc->RowFiltered(nRow, nTab))
290
                            bSubTotal = sal_True;
291
                        else
292
                            ++nRow;
293
                    }
294
                    ++nTab;
295
                }
296
            }
297
            ++nRangeIndex;
298
        }
299
300
        ScDBCollection* pDBCollection = pDoc->GetDBCollection();
301
        sal_uInt16 nDBCount (pDBCollection->GetCount());
302
        sal_uInt16 nDBIndex (0);
303
        while (!bSubTotal && nDBIndex < nDBCount)
304
        {
305
            ScDBData* pDB = (*pDBCollection)[nDBIndex];
306
            if (pDB && pDB->HasAutoFilter())
307
            {
308
                nRangeIndex = 0;
309
                while (!bSubTotal && nRangeIndex < nRangeCount)
310
                {
311
                    const ScRange* pRange = pRangeList->GetObject( nRangeIndex );
312
                    if( pRange )
313
                    {
314
                        ScRange aDBArea;
315
                        pDB->GetArea(aDBArea);
316
                        if (aDBArea.Intersects(*pRange))
317
                            bSubTotal = sal_True;
318
                    }
319
                    ++nRangeIndex;
320
                }
321
            }
322
            ++nDBIndex;
323
        }
324
    }
325
    return bSubTotal;
326
}
327
328
void __EXPORT ScInputWindow::Select()
267
void __EXPORT ScInputWindow::Select()
329
{
268
{
330
	ScModule* pScMod = SC_MOD();
269
	ScModule* pScMod = SC_MOD();
Lines 364-456 Link Here
364
				ScTabViewShell* pViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
303
				ScTabViewShell* pViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
365
				if ( pViewSh )
304
				if ( pViewSh )
366
				{
305
				{
367
					const ScMarkData& rMark = pViewSh->GetViewData()->GetMarkData();
306
                    pViewSh->InputAutoSum( true );
368
					if ( rMark.IsMarked() || rMark.IsMultiMarked() )
369
					{
370
                        ScRangeList aMarkRangeList;
371
                        rMark.FillRangeListWithMarks( &aMarkRangeList, sal_False );
372
                        ScDocument* pDoc = pViewSh->GetViewData()->GetDocument();
373
374
                        // check if one of the marked ranges is empty
375
                        bool bEmpty = false;
376
                        const sal_uLong nCount = aMarkRangeList.Count();
377
                        for ( sal_uLong i = 0; i < nCount; ++i )
378
                        {
379
                            const ScRange aRange( *aMarkRangeList.GetObject( i ) );
380
                            if ( pDoc->IsBlockEmpty( aRange.aStart.Tab(),
381
                                    aRange.aStart.Col(), aRange.aStart.Row(),
382
                                    aRange.aEnd.Col(), aRange.aEnd.Row() ) )
383
                            {
384
                                bEmpty = true;
385
                                break;
386
                            }
387
                        }
388
389
                        if ( bEmpty )
390
                        {
391
                            ScRangeList aRangeList;
392
					        const sal_Bool bDataFound = pViewSh->GetAutoSumArea( aRangeList );
393
                            if ( bDataFound )
394
                            {
395
                                const sal_Bool bSubTotal( UseSubTotal( &aRangeList ) );
396
                                pViewSh->EnterAutoSum( aRangeList, bSubTotal );	// Block mit Summen fuellen
397
                            }
398
                        }
399
                        else
400
                        {
401
                            const sal_Bool bSubTotal( UseSubTotal( &aMarkRangeList ) );
402
                            for ( sal_uLong i = 0; i < nCount; ++i )
403
                            {
404
                                const ScRange aRange( *aMarkRangeList.GetObject( i ) );
405
                                const bool bSetCursor = ( i == nCount - 1 ? true : false );
406
                                const bool bContinue = ( i != 0  ? true : false );
407
                                if ( !pViewSh->AutoSum( aRange, bSubTotal, bSetCursor, bContinue ) )
408
                                {
409
                                    pViewSh->MarkRange( aRange, sal_False, sal_False );
410
                                    pViewSh->SetCursor( aRange.aEnd.Col(), aRange.aEnd.Row() );
411
                                    const ScRangeList aRangeList;
412
                                    const String aFormula = pViewSh->GetAutoSumFormula( aRangeList, bSubTotal );
413
                                    SetFuncString( aFormula );
414
                                    break;
415
                                }
416
                            }
417
                        }
418
					}
419
					else									// nur in Eingabezeile einfuegen
420
					{
421
                        ScRangeList aRangeList;
422
					    const sal_Bool bDataFound = pViewSh->GetAutoSumArea( aRangeList );
423
                        const sal_Bool bSubTotal( UseSubTotal( &aRangeList ) );
424
                        const String aFormula = pViewSh->GetAutoSumFormula( aRangeList, bSubTotal );
425
						SetFuncString( aFormula );
426
427
                        if ( bDataFound && pScMod->IsEditMode() )
428
						{
429
							ScInputHandler* pHdl = pScMod->GetInputHdl( pViewSh );
430
							if ( pHdl )
431
							{
432
								pHdl->InitRangeFinder( aFormula );
433
434
								//!	SetSelection am InputHandler ???
435
								//!	bSelIsRef setzen ???
436
								const xub_StrLen nOpen = aFormula.Search('(');
437
								const xub_StrLen nLen = aFormula.Len();
438
								if ( nOpen != STRING_NOTFOUND && nLen > nOpen )
439
								{
440
                                    sal_uInt8 nAdd(1);
441
                                    if (bSubTotal)
442
                                        nAdd = 3;
443
									ESelection aSel(0,nOpen+nAdd,0,nLen-1);
444
									EditView* pTableView = pHdl->GetTableView();
445
									if (pTableView)
446
										pTableView->SetSelection(aSel);
447
									EditView* pTopView = pHdl->GetTopView();
448
									if (pTopView)
449
										pTopView->SetSelection(aSel);
450
								}
451
							}
452
						}
453
					}
454
				}
307
				}
455
			}
308
			}
456
			break;
309
			break;
(-)officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu (-8 lines)
Lines 2021-2034 Link Here
2021
					<value xml:lang="en-US">Go to Previous Index Mark</value>
2021
					<value xml:lang="en-US">Go to Previous Index Mark</value>
2022
				</prop>
2022
				</prop>
2023
			</node>
2023
			</node>
2024
			<node oor:name=".uno:AutoSum" oor:op="replace">
2025
				<prop oor:name="Label" oor:type="xs:string">
2026
					<value xml:lang="en-US">Sum</value>
2027
				</prop>
2028
				<prop oor:name="Properties" oor:type="xs:int">
2029
					<value>1</value>
2030
				</prop>
2031
			</node>
2032
			<node oor:name=".uno:GotoNextTableFormula" oor:op="replace">
2024
			<node oor:name=".uno:GotoNextTableFormula" oor:op="replace">
2033
				<prop oor:name="Label" oor:type="xs:string">
2025
				<prop oor:name="Label" oor:type="xs:string">
2034
					<value xml:lang="en-US">Go to next table formula</value>
2026
					<value xml:lang="en-US">Go to next table formula</value>
(-)officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu (-9 lines)
Lines 2050-2064 Link Here
2050
          <value>1</value>
2050
          <value>1</value>
2051
        </prop>
2051
        </prop>
2052
      </node>
2052
      </node>
2053
      <node oor:name=".uno:AutoSum" oor:op="replace">
2054
        <prop oor:name="Label" oor:type="xs:string">
2055
          <value xml:lang="de">Summe</value>
2056
          <value xml:lang="en-US">Sum</value>
2057
        </prop>
2058
        <prop oor:name="Properties" oor:type="xs:int">
2059
          <value>1</value>
2060
        </prop>
2061
      </node>
2062
      <node oor:name=".uno:TableSort" oor:op="replace">
2053
      <node oor:name=".uno:TableSort" oor:op="replace">
2063
        <prop oor:name="Label" oor:type="xs:string">
2054
        <prop oor:name="Label" oor:type="xs:string">
2064
          <value xml:lang="de">Sorti~eren...</value>
2055
          <value xml:lang="de">Sorti~eren...</value>
(-)officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu (+8 lines)
Lines 5461-5466 Link Here
5461
                    <value xml:lang="en-US">E-mail as ~OpenDocument Format...</value>
5461
                    <value xml:lang="en-US">E-mail as ~OpenDocument Format...</value>
5462
                </prop>
5462
                </prop>
5463
            </node>
5463
            </node>
5464
            <node oor:name=".uno:AutoSum" oor:op="replace">
5465
				<prop oor:name="Label" oor:type="xs:string">
5466
					<value xml:lang="en-US">Sum</value>
5467
				</prop>
5468
				<prop oor:name="Properties" oor:type="xs:int">
5469
					<value>1</value>
5470
				</prop>
5471
			</node>
5464
        </node>
5472
        </node>
5465
    </node>
5473
    </node>
5466
</oor:component-data>
5474
</oor:component-data>
(-)officecfg/registry/data/org/openoffice/Office/Accelerators.xcu (+5 lines)
Lines 865-870 Link Here
865
        <value xml:lang="en-US">.uno:InsertAnnotation</value>
865
        <value xml:lang="en-US">.uno:InsertAnnotation</value>
866
      </prop>
866
      </prop>
867
    </node>
867
    </node>
868
    <node oor:name="EQUAL_MOD2" oor:op="replace">
869
      <prop oor:name="Command"><value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
870
        <value xml:lang="en-US">.uno:AutoSum</value>
871
      </prop>
872
    </node>
868
   </node>
873
   </node>
869
   <node oor:name="com.sun.star.chart2.ChartDocument" oor:op="replace">
874
   <node oor:name="com.sun.star.chart2.ChartDocument" oor:op="replace">
870
    <node oor:name="9_SHIFT_MOD1_MOD2" oor:op="replace">
875
    <node oor:name="9_SHIFT_MOD1_MOD2" oor:op="replace">
(-)helpcontent2/source/text/scalc/02/06030000.xhp (-1 / +2 lines)
Lines 57-63 Link Here
57
         </table>
57
         </table>
58
58
59
      </section>
59
      </section>
60
      <paragraph xml-lang="en-US" id="par_id3156444" role="paragraph" l10n="U" oldref="16">$[officename] automatically suggests a cell range, provided that the spreadsheet contains data. If the cell range already contains a sum function, you can combine it with the new one to yield the total sum of the range. If the range contains filters, the Subtotal function is inserted instead of the Sum function.</paragraph>
60
      <bookmark xml-lang="en-US" branch="hid/.uno:AutoSum" id="bm_id3151390" localize="false"/>
61
      <paragraph xml-lang="en-US" id="par_id3156444" role="paragraph" l10n="U" oldref="16"><ahelp hid=".">$[officename] automatically suggests a cell range, provided that the spreadsheet contains data. If the cell range already contains a sum function, you can combine it with the new one to yield the total sum of the range. If the range contains filters, the Subtotal function is inserted instead of the Sum function.</ahelp></paragraph>
61
      <paragraph xml-lang="en-US" id="par_id3153189" role="paragraph" l10n="U" oldref="3">Click the <emph>Accept</emph> icon (green check mark) to use the formula displayed in the input line.</paragraph>
62
      <paragraph xml-lang="en-US" id="par_id3153189" role="paragraph" l10n="U" oldref="3">Click the <emph>Accept</emph> icon (green check mark) to use the formula displayed in the input line.</paragraph>
62
   </body>
63
   </body>
63
</helpdocument>
64
</helpdocument>
(-)cui/source/customize/acccfg.cxx (-1 / +40 lines)
Lines 246-251 Link Here
246
	KEY_SUBTRACT  | KEY_MOD1 ,
246
	KEY_SUBTRACT  | KEY_MOD1 ,
247
	KEY_MULTIPLY  | KEY_MOD1 ,
247
	KEY_MULTIPLY  | KEY_MOD1 ,
248
	KEY_DIVIDE    | KEY_MOD1 ,
248
	KEY_DIVIDE    | KEY_MOD1 ,
249
	KEY_POINT     | KEY_MOD1 ,
250
	KEY_COMMA     | KEY_MOD1 ,
251
	KEY_EQUAL     | KEY_MOD1 ,
249
252
250
	KEY_0         | KEY_SHIFT | KEY_MOD1,
253
	KEY_0         | KEY_SHIFT | KEY_MOD1,
251
	KEY_1         | KEY_SHIFT | KEY_MOD1,
254
	KEY_1         | KEY_SHIFT | KEY_MOD1,
Lines 311-316 Link Here
311
	KEY_INSERT    | KEY_SHIFT | KEY_MOD1,
314
	KEY_INSERT    | KEY_SHIFT | KEY_MOD1,
312
	KEY_DELETE    | KEY_SHIFT | KEY_MOD1,
315
	KEY_DELETE    | KEY_SHIFT | KEY_MOD1,
313
316
317
	KEY_ADD       | KEY_SHIFT | KEY_MOD1,
318
	KEY_SUBTRACT  | KEY_SHIFT | KEY_MOD1,
319
	KEY_MULTIPLY  | KEY_SHIFT | KEY_MOD1,
320
	KEY_DIVIDE    | KEY_SHIFT | KEY_MOD1,
321
	KEY_POINT     | KEY_SHIFT | KEY_MOD1,
322
	KEY_COMMA     | KEY_SHIFT | KEY_MOD1,
323
	KEY_EQUAL     | KEY_SHIFT | KEY_MOD1,
324
314
	KEY_0         | KEY_MOD2 ,
325
	KEY_0         | KEY_MOD2 ,
315
	KEY_1         | KEY_MOD2 ,
326
	KEY_1         | KEY_MOD2 ,
316
	KEY_2         | KEY_MOD2 ,
327
	KEY_2         | KEY_MOD2 ,
Lines 375-380 Link Here
375
	KEY_INSERT    | KEY_MOD2 ,
386
	KEY_INSERT    | KEY_MOD2 ,
376
	KEY_DELETE    | KEY_MOD2 ,
387
	KEY_DELETE    | KEY_MOD2 ,
377
388
389
	KEY_ADD       | KEY_MOD2 ,
390
	KEY_SUBTRACT  | KEY_MOD2 ,
391
	KEY_DIVIDE    | KEY_MOD2 ,
392
	KEY_POINT     | KEY_MOD2 ,
393
	KEY_COMMA     | KEY_MOD2 ,
394
	KEY_EQUAL     | KEY_MOD2 ,
395
378
	KEY_0         | KEY_SHIFT | KEY_MOD2,
396
	KEY_0         | KEY_SHIFT | KEY_MOD2,
379
	KEY_1         | KEY_SHIFT | KEY_MOD2,
397
	KEY_1         | KEY_SHIFT | KEY_MOD2,
380
	KEY_2         | KEY_SHIFT | KEY_MOD2,
398
	KEY_2         | KEY_SHIFT | KEY_MOD2,
Lines 439-444 Link Here
439
	KEY_INSERT    | KEY_SHIFT | KEY_MOD2,
457
	KEY_INSERT    | KEY_SHIFT | KEY_MOD2,
440
	KEY_DELETE    | KEY_SHIFT | KEY_MOD2,
458
	KEY_DELETE    | KEY_SHIFT | KEY_MOD2,
441
459
460
	KEY_ADD       | KEY_SHIFT | KEY_MOD2,
461
	KEY_SUBTRACT  | KEY_SHIFT | KEY_MOD2,
462
	KEY_MULTIPLY  | KEY_SHIFT | KEY_MOD2,
463
	KEY_DIVIDE    | KEY_SHIFT | KEY_MOD2,
464
	KEY_COMMA     | KEY_SHIFT | KEY_MOD2,
465
	KEY_EQUAL     | KEY_SHIFT | KEY_MOD2,
466
442
	KEY_0         | KEY_MOD1 | KEY_MOD2 ,
467
	KEY_0         | KEY_MOD1 | KEY_MOD2 ,
443
	KEY_1         | KEY_MOD1 | KEY_MOD2 ,
468
	KEY_1         | KEY_MOD1 | KEY_MOD2 ,
444
	KEY_2         | KEY_MOD1 | KEY_MOD2 ,
469
	KEY_2         | KEY_MOD1 | KEY_MOD2 ,
Lines 503-508 Link Here
503
	KEY_INSERT    | KEY_MOD1 | KEY_MOD2 ,
528
	KEY_INSERT    | KEY_MOD1 | KEY_MOD2 ,
504
	KEY_DELETE    | KEY_MOD1 | KEY_MOD2 ,
529
	KEY_DELETE    | KEY_MOD1 | KEY_MOD2 ,
505
530
531
	KEY_ADD       | KEY_MOD1 | KEY_MOD2 ,
532
	KEY_SUBTRACT  | KEY_MOD1 | KEY_MOD2 ,
533
	KEY_DIVIDE    | KEY_MOD1 | KEY_MOD2 ,
534
	KEY_POINT     | KEY_MOD1 | KEY_MOD2 ,
535
	KEY_COMMA     | KEY_MOD1 | KEY_MOD2 ,
536
	KEY_EQUAL     | KEY_MOD1 | KEY_MOD2 ,
537
506
	KEY_0         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
538
	KEY_0         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
507
	KEY_1         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
539
	KEY_1         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
508
	KEY_2         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
540
	KEY_2         | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
Lines 565-571 Link Here
565
	KEY_SPACE     | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
597
	KEY_SPACE     | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
566
	KEY_BACKSPACE | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
598
	KEY_BACKSPACE | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
567
	KEY_INSERT    | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
599
	KEY_INSERT    | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
568
	KEY_DELETE    | KEY_SHIFT | KEY_MOD1 | KEY_MOD2
600
	KEY_DELETE    | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
601
602
	KEY_ADD       | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
603
	KEY_SUBTRACT  | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
604
	KEY_DIVIDE    | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
605
	KEY_POINT     | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
606
	KEY_COMMA     | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
607
	KEY_EQUAL     | KEY_SHIFT | KEY_MOD1 | KEY_MOD2,
569
};
608
};
570
609
571
static sal_uInt16 KEYCODE_ARRAY_SIZE = (sizeof(KEYCODE_ARRAY) / sizeof(KEYCODE_ARRAY[0]));
610
static sal_uInt16 KEYCODE_ARRAY_SIZE = (sizeof(KEYCODE_ARRAY) / sizeof(KEYCODE_ARRAY[0]));

Return to issue 45563