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