Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sal/config.h>
21 :
22 : #include <cassert>
23 :
24 : #include <comphelper/string.hxx>
25 : #include <vcl/msgbox.hxx>
26 :
27 : #include "reffact.hxx"
28 : #include "document.hxx"
29 : #include "scresid.hxx"
30 : #include "globstr.hrc"
31 : #include "rangenam.hxx"
32 : #include "globalnames.hxx"
33 : #include "dbnamdlg.hxx"
34 : #include <dbdocfun.hxx>
35 :
36 : #define ABS_SREF SCA_VALID \
37 : | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE
38 : #define ABS_DREF ABS_SREF \
39 : | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE
40 : #define ABS_DREF3D ABS_DREF | SCA_TAB_3D
41 :
42 : class DBSaveData;
43 :
44 : static DBSaveData* pSaveObj = NULL;
45 :
46 : #define ERRORBOX(s) ScopedVclPtrInstance<MessageDialog>::Create(this, s)->Execute()
47 :
48 : // class DBSaveData
49 :
50 0 : class DBSaveData
51 : {
52 : public:
53 0 : DBSaveData( Edit& rEd, CheckBox& rHdr, CheckBox& rTot, CheckBox& rSize, CheckBox& rFmt,
54 : CheckBox& rStrip, ScRange& rArea )
55 : : rEdAssign(rEd)
56 : , rBtnHeader(rHdr)
57 : , rBtnTotals(rTot)
58 : , rBtnSize(rSize)
59 : , rBtnFormat(rFmt)
60 : , rBtnStrip(rStrip)
61 : , rCurArea(rArea)
62 : , bHeader(false)
63 : , bTotals(false)
64 : , bSize(false)
65 : , bFormat(false)
66 : , bStrip(false)
67 0 : , bDirty(false)
68 : {
69 0 : }
70 : void Save();
71 : void Restore();
72 :
73 : private:
74 : Edit& rEdAssign;
75 : CheckBox& rBtnHeader;
76 : CheckBox& rBtnTotals;
77 : CheckBox& rBtnSize;
78 : CheckBox& rBtnFormat;
79 : CheckBox& rBtnStrip;
80 : ScRange& rCurArea;
81 : OUString aStr;
82 : ScRange aArea;
83 : bool bHeader:1;
84 : bool bTotals:1;
85 : bool bSize:1;
86 : bool bFormat:1;
87 : bool bStrip:1;
88 : bool bDirty:1;
89 : };
90 :
91 0 : void DBSaveData::Save()
92 : {
93 0 : aArea = rCurArea;
94 0 : aStr = rEdAssign.GetText();
95 0 : bHeader = rBtnHeader.IsChecked();
96 0 : bTotals = rBtnTotals.IsChecked();
97 0 : bSize = rBtnSize.IsChecked();
98 0 : bFormat = rBtnFormat.IsChecked();
99 0 : bStrip = rBtnStrip.IsChecked();
100 0 : bDirty = true;
101 0 : }
102 :
103 0 : void DBSaveData::Restore()
104 : {
105 0 : if ( bDirty )
106 : {
107 0 : rCurArea = aArea;
108 0 : rEdAssign.SetText( aStr );
109 0 : rBtnHeader.Check ( bHeader );
110 0 : rBtnTotals.Check ( bTotals );
111 0 : rBtnSize.Check ( bSize );
112 0 : rBtnFormat.Check ( bFormat );
113 0 : rBtnStrip.Check ( bStrip );
114 0 : bDirty = false;
115 : }
116 0 : }
117 :
118 : // class ScDbNameDlg
119 :
120 0 : ScDbNameDlg::ScDbNameDlg(SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
121 : ScViewData* ptrViewData)
122 : : ScAnyRefDlg(pB, pCW, pParent,
123 : "DefineDatabaseRangeDialog",
124 : "modules/scalc/ui/definedatabaserangedialog.ui")
125 : , pViewData(ptrViewData)
126 0 : , pDoc(ptrViewData->GetDocument())
127 : , bRefInputMode(false)
128 : , aAddrDetails(pDoc->GetAddressConvention(), 0, 0)
129 0 : , aLocalDbCol(*(pDoc->GetDBCollection()))
130 : {
131 0 : get(m_pEdName, "entry");
132 0 : m_pEdName->set_height_request(m_pEdName->GetOptimalSize().Height() + m_pEdName->GetTextHeight() * 8);
133 0 : get(m_pEdAssign, "assign");
134 0 : get(m_pAssignFrame, "RangeFrame");
135 0 : m_pEdAssign->SetReferences(this, m_pAssignFrame->get_label_widget());
136 0 : get(m_pRbAssign, "assignrb");
137 0 : m_pRbAssign->SetReferences(this, m_pEdAssign);
138 0 : get(m_pOptions, "Options");
139 0 : get(m_pBtnHeader, "ContainsColumnLabels");
140 0 : get(m_pBtnTotals, "ContainsTotalsRow");
141 0 : get(m_pBtnDoSize, "InsertOrDeleteCells");
142 0 : get(m_pBtnKeepFmt, "KeepFormatting");
143 0 : get(m_pBtnStripData, "DontSaveImportedData");
144 0 : get(m_pFTSource, "Source");
145 0 : get(m_pFTOperations, "Operations");
146 0 : get(m_pBtnOk, "ok");
147 0 : get(m_pBtnCancel, "cancel");
148 0 : get(m_pBtnAdd, "add");
149 0 : aStrAdd = m_pBtnAdd->GetText();
150 0 : aStrModify = get<vcl::Window>("modify")->GetText();
151 0 : get(m_pBtnRemove, "delete");
152 0 : aStrInvalid = get<vcl::Window>("invalid")->GetText();
153 :
154 0 : m_pFTSource->SetStyle(m_pFTSource->GetStyle() | WB_NOLABEL);
155 0 : m_pFTOperations->SetStyle(m_pFTOperations->GetStyle() | WB_NOLABEL);
156 :
157 : // damit die Strings in der Resource bei den FixedTexten bleiben koennen:
158 0 : aStrSource = m_pFTSource->GetText();
159 0 : aStrOperations = m_pFTOperations->GetText();
160 :
161 0 : pSaveObj = new DBSaveData( *m_pEdAssign, *m_pBtnHeader, *m_pBtnTotals,
162 0 : *m_pBtnDoSize, *m_pBtnKeepFmt, *m_pBtnStripData, theCurArea );
163 0 : Init();
164 0 : }
165 :
166 0 : ScDbNameDlg::~ScDbNameDlg()
167 : {
168 0 : disposeOnce();
169 0 : }
170 :
171 0 : void ScDbNameDlg::dispose()
172 : {
173 0 : DELETEZ( pSaveObj );
174 0 : m_pEdName.clear();
175 0 : m_pAssignFrame.clear();
176 0 : m_pEdAssign.clear();
177 0 : m_pRbAssign.clear();
178 0 : m_pOptions.clear();
179 0 : m_pBtnHeader.clear();
180 0 : m_pBtnTotals.clear();
181 0 : m_pBtnDoSize.clear();
182 0 : m_pBtnKeepFmt.clear();
183 0 : m_pBtnStripData.clear();
184 0 : m_pFTSource.clear();
185 0 : m_pFTOperations.clear();
186 0 : m_pBtnOk.clear();
187 0 : m_pBtnCancel.clear();
188 0 : m_pBtnAdd.clear();
189 0 : m_pBtnRemove.clear();
190 0 : ScAnyRefDlg::dispose();
191 0 : }
192 :
193 0 : void ScDbNameDlg::Init()
194 : {
195 0 : m_pBtnHeader->Check( true ); // Default: with column headers
196 0 : m_pBtnTotals->Check( false ); // Default: without totals row
197 0 : m_pBtnDoSize->Check( true );
198 0 : m_pBtnKeepFmt->Check( true );
199 :
200 0 : m_pBtnOk->SetClickHdl ( LINK( this, ScDbNameDlg, OkBtnHdl ) );
201 0 : m_pBtnCancel->SetClickHdl ( LINK( this, ScDbNameDlg, CancelBtnHdl ) );
202 0 : m_pBtnAdd->SetClickHdl ( LINK( this, ScDbNameDlg, AddBtnHdl ) );
203 0 : m_pBtnRemove->SetClickHdl ( LINK( this, ScDbNameDlg, RemoveBtnHdl ) );
204 0 : m_pEdName->SetModifyHdl ( LINK( this, ScDbNameDlg, NameModifyHdl ) );
205 0 : m_pEdAssign->SetModifyHdl ( LINK( this, ScDbNameDlg, AssModifyHdl ) );
206 0 : UpdateNames();
207 :
208 0 : OUString theAreaStr;
209 :
210 0 : if ( pViewData && pDoc )
211 : {
212 0 : SCCOL nStartCol = 0;
213 0 : SCROW nStartRow = 0;
214 0 : SCTAB nStartTab = 0;
215 0 : SCCOL nEndCol = 0;
216 0 : SCROW nEndRow = 0;
217 0 : SCTAB nEndTab = 0;
218 :
219 0 : ScDBCollection* pDBColl = pDoc->GetDBCollection();
220 0 : ScDBData* pDBData = NULL;
221 :
222 : pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab,
223 0 : nEndCol, nEndRow, nEndTab );
224 :
225 0 : theCurArea = ScRange( ScAddress( nStartCol, nStartRow, nStartTab ),
226 0 : ScAddress( nEndCol, nEndRow, nEndTab ) );
227 :
228 0 : theAreaStr = theCurArea.Format(ABS_DREF3D, pDoc, aAddrDetails);
229 :
230 0 : if ( pDBColl )
231 : {
232 : // Feststellen, ob definierter DB-Bereich markiert wurde:
233 0 : pDBData = pDBColl->GetDBAtCursor( nStartCol, nStartRow, nStartTab, true );
234 0 : if ( pDBData )
235 : {
236 0 : ScAddress& rStart = theCurArea.aStart;
237 0 : ScAddress& rEnd = theCurArea.aEnd;
238 : SCCOL nCol1;
239 : SCCOL nCol2;
240 : SCROW nRow1;
241 : SCROW nRow2;
242 : SCTAB nTab;
243 :
244 0 : pDBData->GetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
245 :
246 0 : if ( (rStart.Tab() == nTab)
247 0 : && (rStart.Col() == nCol1) && (rStart.Row() == nRow1)
248 0 : && (rEnd.Col() == nCol2) && (rEnd.Row() == nRow2 ) )
249 : {
250 0 : OUString aDBName = pDBData->GetName();
251 0 : if ( aDBName != STR_DB_LOCAL_NONAME )
252 0 : m_pEdName->SetText(aDBName);
253 :
254 0 : m_pBtnHeader->Check( pDBData->HasHeader() );
255 0 : m_pBtnTotals->Check( pDBData->HasTotals() );
256 0 : m_pBtnDoSize->Check( pDBData->IsDoSize() );
257 0 : m_pBtnKeepFmt->Check( pDBData->IsKeepFmt() );
258 0 : m_pBtnStripData->Check( pDBData->IsStripData() );
259 0 : SetInfoStrings( pDBData );
260 : }
261 : }
262 : }
263 : }
264 :
265 0 : m_pEdAssign->SetText( theAreaStr );
266 0 : m_pEdName->GrabFocus();
267 0 : bSaved = true;
268 0 : pSaveObj->Save();
269 0 : NameModifyHdl( 0 );
270 0 : }
271 :
272 0 : void ScDbNameDlg::SetInfoStrings( const ScDBData* pDBData )
273 : {
274 0 : OUStringBuffer aBuf;
275 0 : aBuf.append(aStrSource);
276 0 : if (pDBData)
277 : {
278 0 : aBuf.append(' ');
279 0 : aBuf.append(pDBData->GetSourceString());
280 : }
281 0 : m_pFTSource->SetText(aBuf.makeStringAndClear());
282 :
283 0 : aBuf.append(aStrOperations);
284 0 : if (pDBData)
285 : {
286 0 : aBuf.append(' ');
287 0 : aBuf.append(pDBData->GetOperations());
288 : }
289 0 : m_pFTOperations->SetText(aBuf.makeStringAndClear());
290 0 : }
291 :
292 : // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als
293 : // neue Selektion im Referenz-Fenster angezeigt wird.
294 :
295 0 : void ScDbNameDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
296 : {
297 0 : if ( m_pEdAssign->IsEnabled() )
298 : {
299 0 : if ( rRef.aStart != rRef.aEnd )
300 0 : RefInputStart(m_pEdAssign);
301 :
302 0 : theCurArea = rRef;
303 :
304 0 : OUString aRefStr(theCurArea.Format(ABS_DREF3D, pDocP, aAddrDetails));
305 0 : m_pEdAssign->SetRefString( aRefStr );
306 0 : m_pOptions->Enable();
307 0 : m_pBtnAdd->Enable();
308 0 : bSaved = true;
309 0 : pSaveObj->Save();
310 : }
311 0 : }
312 :
313 0 : bool ScDbNameDlg::Close()
314 : {
315 0 : return DoClose( ScDbNameDlgWrapper::GetChildWindowId() );
316 : }
317 :
318 0 : void ScDbNameDlg::SetActive()
319 : {
320 0 : m_pEdAssign->GrabFocus();
321 :
322 : // kein NameModifyHdl, weil sonst Bereiche nicht geaendert werden koennen
323 : // (nach dem Aufziehen der Referenz wuerde der alte Inhalt wieder angezeigt)
324 : // (der ausgewaehlte DB-Name hat sich auch nicht veraendert)
325 :
326 0 : RefInputDone();
327 0 : }
328 :
329 0 : void ScDbNameDlg::UpdateNames()
330 : {
331 : typedef ScDBCollection::NamedDBs DBsType;
332 :
333 0 : const DBsType& rDBs = aLocalDbCol.getNamedDBs();
334 :
335 0 : m_pEdName->SetUpdateMode( false );
336 :
337 0 : m_pEdName->Clear();
338 0 : m_pEdAssign->SetText( EMPTY_OUSTRING );
339 :
340 0 : if (!rDBs.empty())
341 : {
342 0 : DBsType::const_iterator itr = rDBs.begin(), itrEnd = rDBs.end();
343 0 : for (; itr != itrEnd; ++itr)
344 0 : m_pEdName->InsertEntry(itr->GetName());
345 : }
346 : else
347 : {
348 0 : m_pBtnAdd->SetText( aStrAdd );
349 0 : m_pBtnAdd->Disable();
350 0 : m_pBtnRemove->Disable();
351 : }
352 :
353 0 : m_pEdName->SetUpdateMode( true );
354 0 : m_pEdName->Invalidate();
355 0 : }
356 :
357 0 : void ScDbNameDlg::UpdateDBData( const OUString& rStrName )
358 : {
359 :
360 0 : const ScDBData* pData = aLocalDbCol.getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(rStrName));
361 :
362 0 : if ( pData )
363 : {
364 0 : SCCOL nColStart = 0;
365 0 : SCROW nRowStart = 0;
366 0 : SCCOL nColEnd = 0;
367 0 : SCROW nRowEnd = 0;
368 0 : SCTAB nTab = 0;
369 :
370 0 : pData->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
371 0 : theCurArea = ScRange( ScAddress( nColStart, nRowStart, nTab ),
372 0 : ScAddress( nColEnd, nRowEnd, nTab ) );
373 0 : OUString theArea(theCurArea.Format(ABS_DREF3D, pDoc, aAddrDetails));
374 0 : m_pEdAssign->SetText( theArea );
375 0 : m_pBtnAdd->SetText( aStrModify );
376 0 : m_pBtnHeader->Check( pData->HasHeader() );
377 0 : m_pBtnTotals->Check( pData->HasTotals() );
378 0 : m_pBtnDoSize->Check( pData->IsDoSize() );
379 0 : m_pBtnKeepFmt->Check( pData->IsKeepFmt() );
380 0 : m_pBtnStripData->Check( pData->IsStripData() );
381 0 : SetInfoStrings( pData );
382 : }
383 :
384 0 : m_pBtnAdd->SetText( aStrModify );
385 0 : m_pBtnAdd->Enable();
386 0 : m_pBtnRemove->Enable();
387 0 : m_pOptions->Enable();
388 0 : }
389 :
390 0 : bool ScDbNameDlg::IsRefInputMode() const
391 : {
392 0 : return bRefInputMode;
393 : }
394 :
395 : // Handler:
396 :
397 0 : IMPL_LINK_NOARG(ScDbNameDlg, OkBtnHdl)
398 : {
399 0 : AddBtnHdl( 0 );
400 :
401 : // Der View die Aenderungen und die Remove-Liste uebergeben:
402 : // beide werden nur als Referenz uebergeben, so dass an dieser
403 : // Stelle keine Speicherleichen entstehen koennen:
404 0 : if ( pViewData )
405 : {
406 0 : ScDBDocFunc aFunc(*pViewData->GetDocShell());
407 0 : aFunc.ModifyAllDBData(aLocalDbCol, aRemoveList);
408 : }
409 :
410 0 : Close();
411 0 : return 0;
412 : }
413 :
414 0 : IMPL_LINK_NOARG(ScDbNameDlg, CancelBtnHdl)
415 : {
416 0 : Close();
417 0 : return 0;
418 : }
419 :
420 0 : IMPL_LINK_NOARG(ScDbNameDlg, AddBtnHdl)
421 : {
422 0 : OUString aNewName = comphelper::string::strip(m_pEdName->GetText(), ' ');
423 0 : OUString aNewArea = m_pEdAssign->GetText();
424 :
425 0 : if ( !aNewName.isEmpty() && !aNewArea.isEmpty() )
426 : {
427 0 : if ( ScRangeData::IsNameValid( aNewName, pDoc ) && aNewName != STR_DB_LOCAL_NONAME )
428 : {
429 : // weil jetzt editiert werden kann, muss erst geparst werden
430 0 : ScRange aTmpRange;
431 0 : OUString aText = m_pEdAssign->GetText();
432 0 : if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID )
433 : {
434 0 : theCurArea = aTmpRange;
435 0 : ScAddress aStart = theCurArea.aStart;
436 0 : ScAddress aEnd = theCurArea.aEnd;
437 :
438 0 : ScDBData* pOldEntry = aLocalDbCol.getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aNewName));
439 0 : if (pOldEntry)
440 : {
441 : // Bereich veraendern
442 :
443 0 : pOldEntry->MoveTo( aStart.Tab(), aStart.Col(), aStart.Row(),
444 0 : aEnd.Col(), aEnd.Row() );
445 0 : pOldEntry->SetByRow( true );
446 0 : pOldEntry->SetHeader( m_pBtnHeader->IsChecked() );
447 0 : pOldEntry->SetTotals( m_pBtnTotals->IsChecked() );
448 0 : pOldEntry->SetDoSize( m_pBtnDoSize->IsChecked() );
449 0 : pOldEntry->SetKeepFmt( m_pBtnKeepFmt->IsChecked() );
450 0 : pOldEntry->SetStripData( m_pBtnStripData->IsChecked() );
451 : }
452 : else
453 : {
454 : // neuen Bereich einfuegen
455 :
456 0 : ScDBData* pNewEntry = new ScDBData( aNewName, aStart.Tab(),
457 0 : aStart.Col(), aStart.Row(),
458 0 : aEnd.Col(), aEnd.Row(),
459 0 : true, m_pBtnHeader->IsChecked(),
460 0 : m_pBtnTotals->IsChecked() );
461 0 : pNewEntry->SetDoSize( m_pBtnDoSize->IsChecked() );
462 0 : pNewEntry->SetKeepFmt( m_pBtnKeepFmt->IsChecked() );
463 0 : pNewEntry->SetStripData( m_pBtnStripData->IsChecked() );
464 :
465 0 : bool ins = aLocalDbCol.getNamedDBs().insert(pNewEntry);
466 : assert(ins); (void)ins;
467 : }
468 :
469 0 : UpdateNames();
470 :
471 0 : m_pEdName->SetText( EMPTY_OUSTRING );
472 0 : m_pEdName->GrabFocus();
473 0 : m_pBtnAdd->SetText( aStrAdd );
474 0 : m_pBtnAdd->Disable();
475 0 : m_pBtnRemove->Disable();
476 0 : m_pEdAssign->SetText( EMPTY_OUSTRING );
477 0 : m_pBtnHeader->Check( true ); // Default: with column headers
478 0 : m_pBtnTotals->Check( false ); // Default: without totals row
479 0 : m_pBtnDoSize->Check( false );
480 0 : m_pBtnKeepFmt->Check( false );
481 0 : m_pBtnStripData->Check( false );
482 0 : SetInfoStrings( NULL ); // leer
483 0 : theCurArea = ScRange();
484 0 : bSaved = true;
485 0 : pSaveObj->Save();
486 0 : NameModifyHdl( 0 );
487 : }
488 : else
489 : {
490 0 : ERRORBOX( aStrInvalid );
491 0 : m_pEdAssign->SetSelection( Selection( 0, SELECTION_MAX ) );
492 0 : m_pEdAssign->GrabFocus();
493 0 : }
494 : }
495 : else
496 : {
497 0 : ERRORBOX( ScGlobal::GetRscString(STR_INVALIDNAME) );
498 0 : m_pEdName->SetSelection( Selection( 0, SELECTION_MAX ) );
499 0 : m_pEdName->GrabFocus();
500 : }
501 : }
502 0 : return 0;
503 : }
504 :
505 : namespace {
506 :
507 : class FindByName : public ::std::unary_function<ScDBData, bool>
508 : {
509 : const OUString& mrName;
510 : public:
511 0 : FindByName(const OUString& rName) : mrName(rName) {}
512 0 : bool operator() (const ScDBData& r) const
513 : {
514 0 : return r.GetName().equals(mrName);
515 : }
516 : };
517 :
518 : }
519 :
520 0 : IMPL_LINK_NOARG(ScDbNameDlg, RemoveBtnHdl)
521 : {
522 0 : OUString aStrEntry = m_pEdName->GetText();
523 0 : ScDBCollection::NamedDBs& rDBs = aLocalDbCol.getNamedDBs();
524 : ScDBCollection::NamedDBs::iterator itr =
525 0 : ::std::find_if(rDBs.begin(), rDBs.end(), FindByName(aStrEntry));
526 :
527 0 : if (itr != rDBs.end())
528 : {
529 0 : OUString aStrDelMsg = ScGlobal::GetRscString( STR_QUERY_DELENTRY );
530 :
531 0 : OUStringBuffer aBuf;
532 0 : aBuf.append(aStrDelMsg.getToken(0, '#'));
533 0 : aBuf.append(aStrEntry);
534 0 : aBuf.append(aStrDelMsg.getToken(1, '#'));
535 0 : ScopedVclPtrInstance< QueryBox > aBox(this, WinBits(WB_YES_NO|WB_DEF_YES), aBuf.makeStringAndClear());
536 :
537 0 : if (RET_YES == aBox->Execute())
538 : {
539 : SCTAB nTab;
540 : SCCOL nColStart, nColEnd;
541 : SCROW nRowStart, nRowEnd;
542 0 : itr->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
543 : aRemoveList.push_back(
544 : ScRange( ScAddress( nColStart, nRowStart, nTab ),
545 0 : ScAddress( nColEnd, nRowEnd, nTab ) ) );
546 :
547 0 : rDBs.erase(itr);
548 :
549 0 : UpdateNames();
550 :
551 0 : m_pEdName->SetText( EMPTY_OUSTRING );
552 0 : m_pEdName->GrabFocus();
553 0 : m_pBtnAdd->SetText( aStrAdd );
554 0 : m_pBtnAdd->Disable();
555 0 : m_pBtnRemove->Disable();
556 0 : m_pEdAssign->SetText( EMPTY_OUSTRING );
557 0 : theCurArea = ScRange();
558 0 : m_pBtnHeader->Check( true ); // Default: with column headers
559 0 : m_pBtnTotals->Check( false ); // Default: without totals row
560 0 : m_pBtnDoSize->Check( false );
561 0 : m_pBtnKeepFmt->Check( false );
562 0 : m_pBtnStripData->Check( false );
563 0 : SetInfoStrings( NULL ); // leer
564 0 : bSaved=false;
565 0 : pSaveObj->Restore();
566 0 : NameModifyHdl( 0 );
567 0 : }
568 : }
569 0 : return 0;
570 : }
571 :
572 0 : IMPL_LINK_NOARG(ScDbNameDlg, NameModifyHdl)
573 : {
574 0 : OUString theName = m_pEdName->GetText();
575 : bool bNameFound = (COMBOBOX_ENTRY_NOTFOUND
576 0 : != m_pEdName->GetEntryPos( theName ));
577 :
578 0 : if ( theName.isEmpty() )
579 : {
580 0 : if (m_pBtnAdd->GetText() != aStrAdd)
581 0 : m_pBtnAdd->SetText( aStrAdd );
582 0 : m_pBtnAdd->Disable();
583 0 : m_pBtnRemove->Disable();
584 0 : m_pAssignFrame->Disable();
585 0 : m_pOptions->Disable();
586 : //bSaved=sal_False;
587 : //pSaveObj->Restore();
588 : //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
589 : //SFX_APPWINDOW->Disable(sal_False); //! allgemeine Methode im ScAnyRefDlg
590 0 : bRefInputMode = false;
591 : }
592 : else
593 : {
594 0 : if ( bNameFound )
595 : {
596 0 : if (m_pBtnAdd->GetText() != aStrModify)
597 0 : m_pBtnAdd->SetText( aStrModify );
598 :
599 0 : if(!bSaved)
600 : {
601 0 : bSaved = true;
602 0 : pSaveObj->Save();
603 : }
604 0 : UpdateDBData( theName );
605 : }
606 : else
607 : {
608 0 : if (m_pBtnAdd->GetText() != aStrAdd)
609 0 : m_pBtnAdd->SetText( aStrAdd );
610 :
611 0 : bSaved=false;
612 0 : pSaveObj->Restore();
613 :
614 0 : if ( !m_pEdAssign->GetText().isEmpty() )
615 : {
616 0 : m_pBtnAdd->Enable();
617 0 : m_pOptions->Enable();
618 : }
619 : else
620 : {
621 0 : m_pBtnAdd->Disable();
622 0 : m_pOptions->Disable();
623 : }
624 0 : m_pBtnRemove->Disable();
625 : }
626 :
627 0 : m_pAssignFrame->Enable();
628 :
629 : //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
630 : //SFX_APPWINDOW->Enable();
631 0 : bRefInputMode = true;
632 : }
633 0 : return 0;
634 : }
635 :
636 0 : IMPL_LINK_NOARG(ScDbNameDlg, AssModifyHdl)
637 : {
638 : // hier parsen fuer Save() etc.
639 :
640 0 : ScRange aTmpRange;
641 0 : OUString aText = m_pEdAssign->GetText();
642 0 : if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID )
643 0 : theCurArea = aTmpRange;
644 :
645 0 : if (!aText.isEmpty() && !m_pEdName->GetText().isEmpty())
646 : {
647 0 : m_pBtnAdd->Enable();
648 0 : m_pBtnHeader->Enable();
649 0 : m_pBtnTotals->Enable();
650 0 : m_pBtnDoSize->Enable();
651 0 : m_pBtnKeepFmt->Enable();
652 0 : m_pBtnStripData->Enable();
653 0 : m_pFTSource->Enable();
654 0 : m_pFTOperations->Enable();
655 : }
656 : else
657 : {
658 0 : m_pBtnAdd->Disable();
659 0 : m_pBtnHeader->Disable();
660 0 : m_pBtnTotals->Disable();
661 0 : m_pBtnDoSize->Disable();
662 0 : m_pBtnKeepFmt->Disable();
663 0 : m_pBtnStripData->Disable();
664 0 : m_pFTSource->Disable();
665 0 : m_pFTOperations->Disable();
666 : }
667 :
668 0 : return 0;
669 156 : }
670 :
671 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|