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