1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_scui.hxx" 26 27 #undef SC_DLLIMPLEMENTATION 28 29 30 31 //------------------------------------------------------------------ 32 33 #include <vcl/msgbox.hxx> 34 35 #include "global.hxx" 36 #include "document.hxx" 37 #include "tabvwsh.hxx" 38 #include "viewdata.hxx" 39 #include "uiitems.hxx" 40 #include "userlist.hxx" 41 #include "rangeutl.hxx" 42 #include "crdlg.hxx" 43 #include "scresid.hxx" 44 #include "sc.hrc" // -> Slot-IDs 45 #include "optdlg.hrc" 46 #include "globstr.hrc" 47 48 #define _TPUSRLST_CXX 49 #include "tpusrlst.hxx" 50 #undef _TPUSRLST_CXX 51 52 //CHINA001 #include "scui_def.hxx" //CHINA001 53 //CHINA001 #include "scresid.hxx" //add by CHINA001 54 //CHINA001 #include "miscdlgs.hrc" //add by CHINA001 55 //CHINA001 56 //CHINA001 #include "scabstdlg.hxx" //CHINA001 57 // STATIC DATA ----------------------------------------------------------- 58 59 #define CR (sal_Unicode)13 60 #define LF (sal_Unicode)10 61 62 static sal_uInt16 pUserListsRanges[] = 63 { 64 SID_SCUSERLISTS, 65 SID_SCUSERLISTS, 66 0 67 }; 68 69 static const sal_Unicode cDelimiter = ','; 70 71 72 //======================================================================== 73 // Benutzerdefinierte Listen: 74 75 76 ScTpUserLists::ScTpUserLists( Window* pParent, 77 const SfxItemSet& rCoreAttrs ) 78 79 : SfxTabPage ( pParent, 80 ScResId( RID_SCPAGE_USERLISTS ), 81 rCoreAttrs ), 82 aFtLists ( this, ScResId( FT_LISTS ) ), 83 aLbLists ( this, ScResId( LB_LISTS ) ), 84 aFtEntries ( this, ScResId( FT_ENTRIES ) ), 85 aEdEntries ( this, ScResId( ED_ENTRIES ) ), 86 aFtCopyFrom ( this, ScResId( FT_COPYFROM ) ), 87 aEdCopyFrom ( this, ScResId( ED_COPYFROM ) ), 88 aBtnNew ( this, ScResId( BTN_NEW ) ), 89 aBtnAdd ( this, ScResId( BTN_ADD ) ), 90 aBtnRemove ( this, ScResId( BTN_REMOVE ) ), 91 aBtnCopy ( this, ScResId( BTN_COPY ) ), 92 aStrQueryRemove ( ScResId( STR_QUERYREMOVE ) ), 93 aStrNew ( aBtnNew.GetText() ), 94 aStrCancel ( ScResId( STR_DISMISS ) ), 95 aStrAdd ( ScResId( SCSTR_ADD ) ), 96 aStrModify ( ScResId( SCSTR_MODIFY ) ), 97 aStrCopyList ( ScResId( STR_COPYLIST ) ), 98 aStrCopyFrom ( ScResId( STR_COPYFROM ) ), 99 aStrCopyErr ( ScResId( STR_COPYERR ) ), 100 // 101 nWhichUserLists ( GetWhich( SID_SCUSERLISTS ) ), 102 pUserLists ( NULL ), 103 pDoc ( NULL ), 104 pViewData ( NULL ), 105 pRangeUtil ( new ScRangeUtil ), 106 bModifyMode ( sal_False ), 107 bCancelMode ( sal_False ), 108 bCopyDone ( sal_False ), 109 nCancelPos ( 0 ) 110 { 111 SetExchangeSupport(); 112 Init(); 113 FreeResource(); 114 } 115 116 // ----------------------------------------------------------------------- 117 118 __EXPORT ScTpUserLists::~ScTpUserLists() 119 { 120 delete pUserLists; 121 delete pRangeUtil; 122 } 123 124 // ----------------------------------------------------------------------- 125 126 void ScTpUserLists::Init() 127 { 128 SfxViewShell* pSh = SfxViewShell::Current(); 129 ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, pSh); 130 131 aLbLists.SetSelectHdl ( LINK( this, ScTpUserLists, LbSelectHdl ) ); 132 aBtnNew.SetClickHdl ( LINK( this, ScTpUserLists, BtnClickHdl ) ); 133 aBtnNew.SetClickHdl ( LINK( this, ScTpUserLists, BtnClickHdl ) ); 134 aBtnAdd.SetClickHdl ( LINK( this, ScTpUserLists, BtnClickHdl ) ); 135 aBtnRemove.SetClickHdl ( LINK( this, ScTpUserLists, BtnClickHdl ) ); 136 aEdEntries.SetModifyHdl ( LINK( this, ScTpUserLists, EdEntriesModHdl ) ); 137 138 139 if ( pViewSh ) 140 { 141 SCTAB nStartTab = 0; 142 SCTAB nEndTab = 0; 143 SCCOL nStartCol = 0; 144 SCROW nStartRow = 0; 145 SCCOL nEndCol = 0; 146 SCROW nEndRow = 0; 147 148 pViewData = pViewSh->GetViewData(); 149 pDoc = pViewData->GetDocument(); 150 151 pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab, 152 nEndCol, nEndRow, nEndTab ); 153 154 PutInOrder( nStartCol, nEndCol ); 155 PutInOrder( nStartRow, nEndRow ); 156 PutInOrder( nStartTab, nEndTab ); 157 158 ScRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab 159 ).Format( aStrSelectedArea, SCR_ABS_3D, pDoc ); 160 161 aBtnCopy.SetClickHdl ( LINK( this, ScTpUserLists, BtnClickHdl ) ); 162 aBtnCopy.Enable(); 163 } 164 else 165 { 166 aBtnCopy.Disable(); 167 aFtCopyFrom.Disable(); 168 aEdCopyFrom.Disable(); 169 } 170 171 // aLbLists.GrabFocus(); 172 } 173 174 // ----------------------------------------------------------------------- 175 176 sal_uInt16* __EXPORT ScTpUserLists::GetRanges() 177 { 178 return pUserListsRanges; 179 } 180 181 // ----------------------------------------------------------------------- 182 183 SfxTabPage* __EXPORT ScTpUserLists::Create( Window* pParent, const SfxItemSet& rAttrSet ) 184 { 185 return ( new ScTpUserLists( pParent, rAttrSet ) ); 186 } 187 188 // ----------------------------------------------------------------------- 189 190 void __EXPORT ScTpUserLists::Reset( const SfxItemSet& rCoreAttrs ) 191 { 192 const ScUserListItem& rUserListItem = (const ScUserListItem&) 193 rCoreAttrs.Get( nWhichUserLists ); 194 const ScUserList* pCoreList = rUserListItem.GetUserList(); 195 196 DBG_ASSERT( pCoreList, "UserList not found :-/" ); 197 198 if ( pCoreList ) 199 { 200 if ( !pUserLists ) 201 pUserLists = new ScUserList( *pCoreList ); 202 else 203 *pUserLists = *pCoreList; 204 205 if ( UpdateUserListBox() > 0 ) 206 { 207 aLbLists.SelectEntryPos( 0 ); 208 UpdateEntries( 0 ); 209 } 210 } 211 else if ( !pUserLists ) 212 pUserLists = new ScUserList; 213 214 aEdCopyFrom.SetText( aStrSelectedArea ); 215 216 if ( aLbLists.GetEntryCount() == 0 ) 217 { 218 aFtLists .Disable(); 219 aLbLists .Disable(); 220 aFtEntries .Disable(); 221 aEdEntries .Disable(); 222 aBtnRemove .Disable(); 223 } 224 225 aBtnNew.SetText( aStrNew ); 226 aBtnAdd.SetText( aStrAdd ); 227 aBtnAdd.Disable(); 228 229 if ( !bCopyDone && pViewData ) 230 { 231 aFtCopyFrom .Enable(); 232 aEdCopyFrom .Enable(); 233 aBtnCopy .Enable(); 234 } 235 236 // aLbLists.GrabFocus(); 237 } 238 239 // ----------------------------------------------------------------------- 240 241 sal_Bool __EXPORT ScTpUserLists::FillItemSet( SfxItemSet& rCoreAttrs ) 242 { 243 // Modifikationen noch nicht uebernommen? 244 // -> Click auf Add-Button simulieren 245 246 if ( bModifyMode || bCancelMode ) 247 BtnClickHdl( &aBtnAdd ); 248 249 const ScUserListItem& rUserListItem = (const ScUserListItem&) 250 GetItemSet().Get( nWhichUserLists ); 251 252 ScUserList* pCoreList = rUserListItem.GetUserList(); 253 sal_Bool bDataModified = sal_False; 254 255 if ( (pUserLists == NULL) && (pCoreList == NULL) ) 256 { 257 bDataModified = sal_False; 258 } 259 else if ( pUserLists != NULL ) 260 { 261 if ( pCoreList != NULL ) 262 bDataModified = (*pUserLists != *pCoreList); 263 else 264 bDataModified = sal_True; 265 } 266 267 if ( bDataModified ) 268 { 269 ScUserListItem aULItem( nWhichUserLists ); 270 271 if ( pUserLists ) 272 aULItem.SetUserList( *pUserLists ); 273 274 rCoreAttrs.Put( aULItem ); 275 } 276 277 return bDataModified; 278 } 279 280 // ----------------------------------------------------------------------- 281 282 int __EXPORT ScTpUserLists::DeactivatePage( SfxItemSet* pSetP ) 283 { 284 if ( pSetP ) 285 FillItemSet( *pSetP ); 286 287 return LEAVE_PAGE; 288 } 289 290 // ----------------------------------------------------------------------- 291 292 sal_uInt16 ScTpUserLists::UpdateUserListBox() 293 { 294 aLbLists.Clear(); 295 296 if ( !pUserLists ) return 0; 297 298 //---------------------------------------------------------- 299 300 sal_uInt16 nCount = pUserLists->GetCount(); 301 String aEntry; 302 303 if ( nCount > 0 ) 304 { 305 for ( sal_uInt16 i=0; i<nCount; i++ ) 306 { 307 aEntry = (*pUserLists)[i]->GetString(); 308 DBG_ASSERT( aEntry.Len() > 0, "Empty UserList-entry :-/" ); 309 aLbLists.InsertEntry( aEntry ); 310 } 311 } 312 313 return nCount; 314 } 315 316 // ----------------------------------------------------------------------- 317 318 void ScTpUserLists::UpdateEntries( sal_uInt16 nList ) 319 { 320 if ( !pUserLists ) return; 321 322 //---------------------------------------------------------- 323 324 if ( nList < pUserLists->GetCount() ) 325 { 326 ScUserListData* pList = (*pUserLists)[nList]; 327 sal_uInt16 nSubCount = pList->GetSubCount(); 328 String aEntryListStr; 329 330 for ( sal_uInt16 i=0; i<nSubCount; i++ ) 331 { 332 if ( i!=0 ) 333 aEntryListStr += CR; 334 aEntryListStr += pList->GetSubStr( i ); 335 } 336 337 aEntryListStr.ConvertLineEnd(); 338 aEdEntries.SetText( aEntryListStr ); 339 } 340 else 341 { 342 DBG_ERROR( "Invalid ListIndex :-/" ); 343 } 344 } 345 346 // ----------------------------------------------------------------------- 347 348 void ScTpUserLists::MakeListStr( String& rListStr ) 349 { 350 String aInputStr(rListStr); 351 String aStr; 352 353 xub_StrLen nLen = aStr.Len(); 354 xub_StrLen c = 0; 355 356 aInputStr.ConvertLineEnd( LINEEND_LF ); 357 //aStr.EraseAllChars( ' ' ); 358 359 xub_StrLen nToken=rListStr.GetTokenCount(LF); 360 361 for(xub_StrLen i=0;i<nToken;i++) 362 { 363 String aString=rListStr.GetToken(i,LF); 364 aString.EraseLeadingChars(' '); 365 aString.EraseTrailingChars(' '); 366 aStr+=aString; 367 aStr+=cDelimiter; 368 } 369 370 /* 371 // '\n' durch cDelimiter ersetzen: 372 for ( c=0; 373 (c < nLen) && (nFound != STRING_NOTFOUND); 374 c++ ) 375 { 376 nFound = aStr.Search( LF, nFound ); 377 if ( nFound != STRING_NOTFOUND ) 378 aStr[nFound] = cDelimiter; 379 } 380 */ 381 382 aStr.EraseLeadingChars( cDelimiter ); 383 aStr.EraseTrailingChars( cDelimiter ); 384 nLen = aStr.Len(); 385 386 rListStr.Erase(); 387 388 // Alle Doppelten cDelimiter entfernen: 389 c=0; 390 while ( c < nLen ) 391 { 392 rListStr += aStr.GetChar(c); 393 c++; 394 395 if ( aStr.GetChar(c) == cDelimiter ) 396 { 397 rListStr += aStr.GetChar(c); 398 399 while ( (aStr.GetChar(c) == cDelimiter) && (c < nLen) ) 400 c++; 401 } 402 } 403 404 } 405 406 // ----------------------------------------------------------------------- 407 408 void ScTpUserLists::AddNewList( const String& rEntriesStr ) 409 { 410 String theEntriesStr( rEntriesStr ); 411 412 if ( !pUserLists ) 413 pUserLists = new ScUserList; 414 415 MakeListStr( theEntriesStr ); 416 417 if ( !pUserLists->Insert( new ScUserListData( theEntriesStr ) ) ) 418 { 419 DBG_ERROR( "Entry could not be inserted :-/" ); 420 } 421 } 422 423 // ----------------------------------------------------------------------- 424 425 void ScTpUserLists::CopyListFromArea( const ScRefAddress& rStartPos, 426 const ScRefAddress& rEndPos ) 427 { 428 if ( bCopyDone ) return; 429 430 //---------------------------------------------------------- 431 432 SCTAB nTab = rStartPos.Tab(); 433 SCCOL nStartCol = rStartPos.Col(); 434 SCROW nStartRow = rStartPos.Row(); 435 SCCOL nEndCol = rEndPos.Col(); 436 SCROW nEndRow = rEndPos.Row(); 437 sal_uInt16 nCellDir = SCRET_COLS; 438 sal_Bool bValueIgnored = sal_False; 439 440 if ( (nStartCol != nEndCol) && (nStartRow != nEndRow) ) 441 { 442 nCellDir = ScColOrRowDlg( this, aStrCopyList, aStrCopyFrom ).Execute(); 443 //CHINA001 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 444 //CHINA001 DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 445 //CHINA001 446 //CHINA001 VclAbstractDialog* pDlg = pFact->CreateScColOrRowDlg( this, aStrCopyList, aStrCopyFrom,ResId(RID_SCDLG_COLORROW) ); 447 //CHINA001 DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 448 //CHINA001 nCellDir = pDlg->Execute(); 449 //CHINA001 delete pDlg; //CHINA001 450 } 451 else if ( nStartCol != nEndCol ) 452 nCellDir = SCRET_ROWS; 453 else 454 nCellDir = SCRET_COLS; 455 456 if ( nCellDir != RET_CANCEL ) 457 { 458 String aStrList; 459 String aStrField; 460 461 if ( nCellDir == SCRET_COLS ) 462 { 463 for ( SCCOL col=nStartCol; col<=nEndCol; col++ ) 464 { 465 for ( SCROW row=nStartRow; row<=nEndRow; row++ ) 466 { 467 if ( pDoc->HasStringData( col, row, nTab ) ) 468 { 469 pDoc->GetString( col, row, nTab, aStrField ); 470 471 if ( aStrField.Len() > 0 ) 472 { 473 aStrList += aStrField; 474 aStrList += '\n'; 475 } 476 } 477 else 478 bValueIgnored = sal_True; 479 } 480 if ( aStrList.Len() > 0 ) 481 AddNewList( aStrList ); 482 aStrList.Erase(); 483 } 484 } 485 else 486 { 487 for ( SCROW row=nStartRow; row<=nEndRow; row++ ) 488 { 489 for ( SCCOL col=nStartCol; col<=nEndCol; col++ ) 490 { 491 if ( pDoc->HasStringData( col, row, nTab ) ) 492 { 493 pDoc->GetString( col, row, nTab, aStrField ); 494 495 if ( aStrField.Len() > 0 ) 496 { 497 aStrList += aStrField; 498 aStrList += '\n'; 499 } 500 } 501 else 502 bValueIgnored = sal_True; 503 } 504 if ( aStrList.Len() > 0 ) 505 AddNewList( aStrList ); 506 aStrList.Erase(); 507 } 508 } 509 510 if ( bValueIgnored ) 511 { 512 InfoBox( this, aStrCopyErr ).Execute(); 513 } 514 } 515 516 //---------------------------------------------------------- 517 518 bCopyDone = sal_True; 519 520 } 521 522 // ----------------------------------------------------------------------- 523 524 void ScTpUserLists::ModifyList( sal_uInt16 nSelList, 525 const String& rEntriesStr ) 526 { 527 if ( !pUserLists ) return; 528 529 //---------------------------------------------------------- 530 531 String theEntriesStr( rEntriesStr ); 532 533 MakeListStr( theEntriesStr ); 534 535 (*pUserLists)[nSelList]->SetString( theEntriesStr ); 536 } 537 538 // ----------------------------------------------------------------------- 539 540 void ScTpUserLists::RemoveList( sal_uInt16 nList ) 541 { 542 if ( pUserLists ) pUserLists->AtFree( nList ); 543 } 544 545 //----------------------------------------------------------------------- 546 // Handler: 547 //--------- 548 549 IMPL_LINK( ScTpUserLists, LbSelectHdl, ListBox*, pLb ) 550 { 551 if ( pLb == &aLbLists ) 552 { 553 sal_uInt16 nSelPos = aLbLists.GetSelectEntryPos(); 554 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 555 { 556 if ( !aFtEntries.IsEnabled() ) aFtEntries.Enable(); 557 if ( !aEdEntries.IsEnabled() ) aEdEntries.Enable(); 558 if ( !aBtnRemove.IsEnabled() ) aBtnRemove.Enable(); 559 if ( aBtnAdd.IsEnabled() ) aBtnAdd.Disable(); 560 561 UpdateEntries( nSelPos ); 562 } 563 } 564 565 return 0; 566 } 567 568 // ----------------------------------------------------------------------- 569 570 IMPL_LINK( ScTpUserLists, BtnClickHdl, PushButton*, pBtn ) 571 { 572 if ( pBtn == &aBtnNew ) 573 { 574 if ( !bCancelMode ) 575 { 576 nCancelPos = ( aLbLists.GetEntryCount() > 0 ) 577 ? aLbLists.GetSelectEntryPos() 578 : 0; 579 aLbLists.SetNoSelection(); 580 aFtLists.Disable(); 581 aLbLists.Disable(); 582 aFtEntries.Enable(); 583 aEdEntries.Enable(); 584 aEdEntries.SetText( EMPTY_STRING ); 585 aEdEntries.GrabFocus(); 586 aBtnAdd.Disable(); 587 aBtnRemove.Disable(); 588 //----------------------------- 589 if ( aBtnCopy.IsEnabled() ) 590 { 591 aBtnCopy.Disable(); 592 aFtCopyFrom.Disable(); 593 aEdCopyFrom.Disable(); 594 } 595 aBtnNew.SetText( aStrCancel ); 596 bCancelMode = sal_True; 597 } 598 else // if ( bCancelMode ) 599 { 600 if ( aLbLists.GetEntryCount() > 0 ) 601 { 602 aLbLists.SelectEntryPos( nCancelPos ); 603 LbSelectHdl( &aLbLists ); 604 aFtLists.Enable(); 605 aLbLists.Enable(); 606 } 607 else 608 { 609 aFtEntries.Disable(); 610 aEdEntries.Disable(); 611 aEdEntries.SetText( EMPTY_STRING ); 612 aBtnRemove.Disable(); 613 } 614 aBtnAdd.Disable(); 615 //----------------------------- 616 if ( pViewData && !bCopyDone ) 617 { 618 aBtnCopy.Enable(); 619 aFtCopyFrom.Enable(); 620 aEdCopyFrom.Enable(); 621 } 622 aBtnNew.SetText( aStrNew ); 623 bCancelMode = sal_False; 624 bModifyMode = sal_False; 625 } 626 } 627 else if ( pBtn == &aBtnAdd ) 628 { 629 String theEntriesStr( aEdEntries.GetText() ); 630 631 if ( !bModifyMode ) 632 { 633 if ( theEntriesStr.Len() > 0 ) 634 { 635 AddNewList( theEntriesStr ); 636 UpdateUserListBox(); 637 aLbLists.SelectEntryPos( aLbLists.GetEntryCount()-1 ); 638 LbSelectHdl( &aLbLists ); 639 aFtLists.Enable(); 640 aLbLists.Enable(); 641 } 642 else 643 { 644 if ( aLbLists.GetEntryCount() > 0 ) 645 { 646 aLbLists.SelectEntryPos( nCancelPos ); 647 LbSelectHdl( &aLbLists ); 648 aLbLists.Enable(); 649 aLbLists.Enable(); 650 } 651 } 652 653 aBtnAdd.Disable(); 654 aBtnRemove.Enable(); 655 aBtnNew.SetText( aStrNew ); 656 bCancelMode = sal_False; 657 } 658 else // if ( bModifyMode ) 659 { 660 sal_uInt16 nSelList = aLbLists.GetSelectEntryPos(); 661 662 DBG_ASSERT( nSelList != LISTBOX_ENTRY_NOTFOUND, "Modify without List :-/" ); 663 664 if ( theEntriesStr.Len() > 0 ) 665 { 666 ModifyList( nSelList, theEntriesStr ); 667 UpdateUserListBox(); 668 aLbLists.SelectEntryPos( nSelList ); 669 } 670 else 671 { 672 aLbLists.SelectEntryPos( 0 ); 673 LbSelectHdl( &aLbLists ); 674 } 675 676 aBtnNew.SetText( aStrNew ); bCancelMode = sal_False; 677 aBtnAdd.SetText( aStrAdd ); bModifyMode = sal_False; 678 aBtnAdd.Disable(); 679 aBtnRemove.Enable(); 680 aFtLists.Enable(); 681 aLbLists.Enable(); 682 } 683 684 if ( pViewData && !bCopyDone ) 685 { 686 aBtnCopy.Enable(); 687 aFtCopyFrom.Enable(); 688 aEdCopyFrom.Enable(); 689 } 690 } 691 else if ( pBtn == &aBtnRemove ) 692 { 693 if ( aLbLists.GetEntryCount() > 0 ) 694 { 695 sal_uInt16 nRemovePos = aLbLists.GetSelectEntryPos(); 696 String aMsg ( aStrQueryRemove.GetToken( 0, '#' ) ); 697 698 aMsg += aLbLists.GetEntry( nRemovePos ); 699 aMsg += aStrQueryRemove.GetToken( 1, '#' ); 700 701 702 if ( RET_YES == QueryBox( this, 703 WinBits( WB_YES_NO | WB_DEF_YES ), 704 aMsg 705 ).Execute() ) 706 { 707 RemoveList( nRemovePos ); 708 UpdateUserListBox(); 709 710 if ( aLbLists.GetEntryCount() > 0 ) 711 { 712 aLbLists.SelectEntryPos( 713 ( nRemovePos >= aLbLists.GetEntryCount() ) 714 ? aLbLists.GetEntryCount()-1 715 : nRemovePos ); 716 LbSelectHdl( &aLbLists ); 717 } 718 else 719 { 720 aFtLists.Disable(); 721 aLbLists.Disable(); 722 aFtEntries.Disable(); 723 aEdEntries.Disable(); 724 aEdEntries.SetText( EMPTY_STRING ); 725 aBtnRemove.Disable(); 726 } 727 } 728 729 if ( pViewData && !bCopyDone && !aBtnCopy.IsEnabled() ) 730 { 731 aBtnCopy.Enable(); 732 aFtCopyFrom.Enable(); 733 aEdCopyFrom.Enable(); 734 } 735 } 736 } 737 else if ( pViewData && (pBtn == &aBtnCopy) ) 738 { 739 if ( bCopyDone ) 740 return 0; 741 742 //----------------------------------------------------------- 743 744 ScRefAddress theStartPos; 745 ScRefAddress theEndPos; 746 String theAreaStr( aEdCopyFrom.GetText() ); 747 sal_Bool bAreaOk = sal_False; 748 749 if ( theAreaStr.Len() > 0 ) 750 { 751 bAreaOk = pRangeUtil->IsAbsArea( theAreaStr, 752 pDoc, 753 pViewData->GetTabNo(), 754 &theAreaStr, 755 &theStartPos, 756 &theEndPos, 757 pDoc->GetAddressConvention() ); 758 if ( !bAreaOk ) 759 { 760 bAreaOk = pRangeUtil->IsAbsPos( theAreaStr, 761 pDoc, 762 pViewData->GetTabNo(), 763 &theAreaStr, 764 &theStartPos, 765 pDoc->GetAddressConvention() ); 766 theEndPos = theStartPos; 767 } 768 } 769 770 if ( bAreaOk ) 771 { 772 CopyListFromArea( theStartPos, theEndPos ); 773 UpdateUserListBox(); 774 aLbLists.SelectEntryPos( aLbLists.GetEntryCount()-1 ); 775 LbSelectHdl( &aLbLists ); 776 aEdCopyFrom .SetText( theAreaStr ); 777 aEdCopyFrom .Disable(); 778 aBtnCopy .Disable(); 779 aFtCopyFrom .Disable(); 780 } 781 else 782 { 783 ErrorBox( this, WinBits( WB_OK | WB_DEF_OK ), 784 ScGlobal::GetRscString( STR_INVALID_TABREF ) 785 ).Execute(); 786 aEdCopyFrom.GrabFocus(); 787 aEdCopyFrom.SetSelection( Selection( 0, SELECTION_MAX ) ); 788 } 789 } 790 791 return 0; 792 } 793 794 // ----------------------------------------------------------------------- 795 796 IMPL_LINK( ScTpUserLists, EdEntriesModHdl, MultiLineEdit*, pEd ) 797 { 798 if ( pEd != &aEdEntries ) 799 return 0; 800 801 //----------------------------------------------------------- 802 803 if ( aBtnCopy.IsEnabled() ) 804 { 805 aBtnCopy .Disable(); 806 aFtCopyFrom .Disable(); 807 aEdCopyFrom .Disable(); 808 } 809 810 if ( aEdEntries.GetText().Len() > 0 ) 811 { 812 if ( !bCancelMode && !bModifyMode ) 813 { 814 aBtnNew.SetText( aStrCancel ); bCancelMode = sal_True; 815 aBtnAdd.SetText( aStrModify ); bModifyMode = sal_True; 816 aBtnAdd.Enable(); 817 aBtnRemove.Disable(); 818 aFtLists.Disable(); 819 aLbLists.Disable(); 820 } 821 else // if ( bCancelMode || bModifyMode ) 822 { 823 if ( !aBtnAdd.IsEnabled() ) aBtnAdd.Enable(); 824 } 825 } 826 else 827 { 828 if ( aBtnAdd.IsEnabled() ) aBtnAdd.Disable(); 829 } 830 831 return 0; 832 } 833 834 835 836