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