LCOV - code coverage report
Current view: top level - sc/source/ui/miscdlgs - conflictsdlg.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 335 0.3 %
Date: 2014-11-03 Functions: 2 44 4.5 %
Legend: Lines: hit not hit

          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 <comphelper/string.hxx>
      21             : #include <vcl/msgbox.hxx>
      22             : 
      23             : #include "conflictsdlg.hxx"
      24             : #include "sc.hrc"
      25             : #include "scresid.hxx"
      26             : #include "viewdata.hxx"
      27             : #include "dbfunc.hxx"
      28             : 
      29             : // struct ScConflictsListEntry
      30             : 
      31           0 : bool ScConflictsListEntry::HasSharedAction( sal_uLong nSharedAction ) const
      32             : {
      33           0 :     ScChangeActionList::const_iterator aEnd = maSharedActions.end();
      34           0 :     for ( ScChangeActionList::const_iterator aItr = maSharedActions.begin(); aItr != aEnd; ++aItr )
      35             :     {
      36           0 :         if ( *aItr == nSharedAction )
      37             :         {
      38           0 :             return true;
      39             :         }
      40             :     }
      41             : 
      42           0 :     return false;
      43             : }
      44             : 
      45           0 : bool ScConflictsListEntry::HasOwnAction( sal_uLong nOwnAction ) const
      46             : {
      47           0 :     ScChangeActionList::const_iterator aEnd = maOwnActions.end();
      48           0 :     for ( ScChangeActionList::const_iterator aItr = maOwnActions.begin(); aItr != aEnd; ++aItr )
      49             :     {
      50           0 :         if ( *aItr == nOwnAction )
      51             :         {
      52           0 :             return true;
      53             :         }
      54             :     }
      55             : 
      56           0 :     return false;
      57             : }
      58             : 
      59             : // class ScConflictsListHelper
      60             : 
      61           0 : bool ScConflictsListHelper::HasOwnAction( ScConflictsList& rConflictsList, sal_uLong nOwnAction )
      62             : {
      63           0 :     ScConflictsList::const_iterator aEnd = rConflictsList.end();
      64           0 :     for ( ScConflictsList::const_iterator aItr = rConflictsList.begin(); aItr != aEnd; ++aItr )
      65             :     {
      66           0 :         if ( aItr->HasOwnAction( nOwnAction ) )
      67             :         {
      68           0 :             return true;
      69             :         }
      70             :     }
      71             : 
      72           0 :     return false;
      73             : }
      74             : 
      75           0 : ScConflictsListEntry* ScConflictsListHelper::GetSharedActionEntry( ScConflictsList& rConflictsList, sal_uLong nSharedAction )
      76             : {
      77           0 :     ScConflictsList::iterator aEnd = rConflictsList.end();
      78           0 :     for ( ScConflictsList::iterator aItr = rConflictsList.begin(); aItr != aEnd; ++aItr )
      79             :     {
      80           0 :         if ( aItr->HasSharedAction( nSharedAction ) )
      81             :         {
      82           0 :             return &(*aItr);
      83             :         }
      84             :     }
      85             : 
      86           0 :     return NULL;
      87             : }
      88             : 
      89           0 : ScConflictsListEntry* ScConflictsListHelper::GetOwnActionEntry( ScConflictsList& rConflictsList, sal_uLong nOwnAction )
      90             : {
      91           0 :     ScConflictsList::iterator aEnd = rConflictsList.end();
      92           0 :     for ( ScConflictsList::iterator aItr = rConflictsList.begin(); aItr != aEnd; ++aItr )
      93             :     {
      94           0 :         if ( aItr->HasOwnAction( nOwnAction ) )
      95             :         {
      96           0 :             return &(*aItr);
      97             :         }
      98             :     }
      99             : 
     100           0 :     return NULL;
     101             : }
     102             : 
     103           0 : void ScConflictsListHelper::Transform_Impl( ScChangeActionList& rActionList, ScChangeActionMergeMap* pMergeMap )
     104             : {
     105           0 :     if ( !pMergeMap )
     106             :     {
     107           0 :         return;
     108             :     }
     109             : 
     110           0 :     for ( ScChangeActionList::iterator aItr = rActionList.begin(); aItr != rActionList.end(); )
     111             :     {
     112           0 :         ScChangeActionMergeMap::iterator aItrMap = pMergeMap->find( *aItr );
     113           0 :         if ( aItrMap != pMergeMap->end() )
     114             :         {
     115           0 :             *aItr = aItrMap->second;
     116           0 :             ++aItr;
     117             :         }
     118             :         else
     119             :         {
     120           0 :             aItr = rActionList.erase( aItr );
     121             :             OSL_FAIL( "ScConflictsListHelper::Transform_Impl: erased action from conflicts list!" );
     122             :         }
     123             :     }
     124             : }
     125             : 
     126           0 : void ScConflictsListHelper::TransformConflictsList( ScConflictsList& rConflictsList,
     127             :     ScChangeActionMergeMap* pSharedMap, ScChangeActionMergeMap* pOwnMap )
     128             : {
     129           0 :     ScConflictsList::iterator aEnd = rConflictsList.end();
     130           0 :     for ( ScConflictsList::iterator aItr = rConflictsList.begin(); aItr != aEnd; ++aItr )
     131             :     {
     132           0 :         if ( pSharedMap )
     133             :         {
     134           0 :             ScConflictsListHelper::Transform_Impl( aItr->maSharedActions, pSharedMap );
     135             :         }
     136             : 
     137           0 :         if ( pOwnMap )
     138             :         {
     139           0 :             ScConflictsListHelper::Transform_Impl( aItr->maOwnActions, pOwnMap );
     140             :         }
     141             :     }
     142           0 : }
     143             : 
     144             : // class ScConflictsFinder
     145             : 
     146           0 : ScConflictsFinder::ScConflictsFinder( ScChangeTrack* pTrack, sal_uLong nStartShared, sal_uLong nEndShared,
     147             :         sal_uLong nStartOwn, sal_uLong nEndOwn, ScConflictsList& rConflictsList )
     148             :     :mpTrack( pTrack )
     149             :     ,mnStartShared( nStartShared )
     150             :     ,mnEndShared( nEndShared )
     151             :     ,mnStartOwn( nStartOwn )
     152             :     ,mnEndOwn( nEndOwn )
     153           0 :     ,mrConflictsList( rConflictsList )
     154             : {
     155           0 : }
     156             : 
     157           0 : ScConflictsFinder::~ScConflictsFinder()
     158             : {
     159           0 : }
     160             : 
     161           0 : bool ScConflictsFinder::DoActionsIntersect( const ScChangeAction* pAction1, const ScChangeAction* pAction2 )
     162             : {
     163           0 :     if ( pAction1 && pAction2 && pAction1->GetBigRange().Intersects( pAction2->GetBigRange() ) )
     164             :     {
     165           0 :         return true;
     166             :     }
     167           0 :     return false;
     168             : }
     169             : 
     170           0 : ScConflictsListEntry* ScConflictsFinder::GetIntersectingEntry( const ScChangeAction* pAction ) const
     171             : {
     172           0 :     ScConflictsList::iterator aEnd = mrConflictsList.end();
     173           0 :     for ( ScConflictsList::iterator aItr = mrConflictsList.begin(); aItr != aEnd; ++aItr )
     174             :     {
     175           0 :         ScChangeActionList::const_iterator aEndShared = aItr->maSharedActions.end();
     176           0 :         for ( ScChangeActionList::const_iterator aItrShared = aItr->maSharedActions.begin(); aItrShared != aEndShared; ++aItrShared )
     177             :         {
     178           0 :             if ( DoActionsIntersect( mpTrack->GetAction( *aItrShared ), pAction ) )
     179             :             {
     180           0 :                 return &(*aItr);
     181             :             }
     182             :         }
     183             : 
     184           0 :         ScChangeActionList::const_iterator aEndOwn = aItr->maOwnActions.end();
     185           0 :         for ( ScChangeActionList::const_iterator aItrOwn = aItr->maOwnActions.begin(); aItrOwn != aEndOwn; ++aItrOwn )
     186             :         {
     187           0 :             if ( DoActionsIntersect( mpTrack->GetAction( *aItrOwn ), pAction ) )
     188             :             {
     189           0 :                 return &(*aItr);
     190             :             }
     191             :         }
     192             :     }
     193             : 
     194           0 :     return NULL;
     195             : }
     196             : 
     197           0 : ScConflictsListEntry* ScConflictsFinder::GetEntry( sal_uLong nSharedAction, const ScChangeActionList& rOwnActions )
     198             : {
     199             :     // try to get a list entry which already contains the shared action
     200           0 :     ScConflictsListEntry* pEntry = ScConflictsListHelper::GetSharedActionEntry( mrConflictsList, nSharedAction );
     201           0 :     if ( pEntry )
     202             :     {
     203           0 :         return pEntry;
     204             :     }
     205             : 
     206             :     // try to get a list entry for which the shared action intersects with any
     207             :     // other action of this entry
     208           0 :     pEntry = GetIntersectingEntry( mpTrack->GetAction( nSharedAction ) );
     209           0 :     if ( pEntry )
     210             :     {
     211           0 :         pEntry->maSharedActions.push_back( nSharedAction );
     212           0 :         return pEntry;
     213             :     }
     214             : 
     215             :     // try to get a list entry for which any of the own actions intersects with
     216             :     // any other action of this entry
     217           0 :     ScChangeActionList::const_iterator aEnd = rOwnActions.end();
     218           0 :     for ( ScChangeActionList::const_iterator aItr = rOwnActions.begin(); aItr != aEnd; ++aItr )
     219             :     {
     220           0 :         pEntry = GetIntersectingEntry( mpTrack->GetAction( *aItr ) );
     221           0 :         if ( pEntry )
     222             :         {
     223           0 :             pEntry->maSharedActions.push_back( nSharedAction );
     224           0 :             return pEntry;
     225             :         }
     226             :     }
     227             : 
     228             :     // if no entry was found, create a new one
     229           0 :     ScConflictsListEntry aEntry;
     230           0 :     aEntry.meConflictAction = SC_CONFLICT_ACTION_NONE;
     231           0 :     aEntry.maSharedActions.push_back( nSharedAction );
     232           0 :     mrConflictsList.push_back( aEntry );
     233           0 :     return &(mrConflictsList.back());
     234             : }
     235             : 
     236           0 : bool ScConflictsFinder::Find()
     237             : {
     238           0 :     if ( !mpTrack )
     239             :     {
     240           0 :         return false;
     241             :     }
     242             : 
     243           0 :     bool bReturn = false;
     244           0 :     ScChangeAction* pSharedAction = mpTrack->GetAction( mnStartShared );
     245           0 :     while ( pSharedAction && pSharedAction->GetActionNumber() <= mnEndShared )
     246             :     {
     247           0 :         ScChangeActionList aOwnActions;
     248           0 :         ScChangeAction* pOwnAction = mpTrack->GetAction( mnStartOwn );
     249           0 :         while ( pOwnAction && pOwnAction->GetActionNumber() <= mnEndOwn )
     250             :         {
     251           0 :             if ( DoActionsIntersect( pSharedAction, pOwnAction ) )
     252             :             {
     253           0 :                 aOwnActions.push_back( pOwnAction->GetActionNumber() );
     254             :             }
     255           0 :             pOwnAction = pOwnAction->GetNext();
     256             :         }
     257             : 
     258           0 :         if ( aOwnActions.size() )
     259             :         {
     260           0 :             ScConflictsListEntry* pEntry = GetEntry( pSharedAction->GetActionNumber(), aOwnActions );
     261           0 :             ScChangeActionList::iterator aEnd = aOwnActions.end();
     262           0 :             for ( ScChangeActionList::iterator aItr = aOwnActions.begin(); aItr != aEnd; ++aItr )
     263             :             {
     264           0 :                 if ( pEntry && !ScConflictsListHelper::HasOwnAction( mrConflictsList, *aItr ) )
     265             :                 {
     266           0 :                     pEntry->maOwnActions.push_back( *aItr );
     267             :                 }
     268             :             }
     269           0 :             bReturn = true;
     270             :         }
     271             : 
     272           0 :         pSharedAction = pSharedAction->GetNext();
     273           0 :     }
     274             : 
     275           0 :     return bReturn;
     276             : }
     277             : 
     278             : // class ScConflictsResolver
     279             : 
     280           0 : ScConflictsResolver::ScConflictsResolver( ScChangeTrack* pTrack, ScConflictsList& rConflictsList )
     281             :     :mpTrack ( pTrack )
     282           0 :     ,mrConflictsList ( rConflictsList )
     283             : {
     284             :     OSL_ENSURE( mpTrack, "ScConflictsResolver CTOR: mpTrack is null!" );
     285           0 : }
     286             : 
     287           0 : ScConflictsResolver::~ScConflictsResolver()
     288             : {
     289           0 : }
     290             : 
     291           0 : void ScConflictsResolver::HandleAction( ScChangeAction* pAction, bool bIsSharedAction,
     292             :     bool bHandleContentAction, bool bHandleNonContentAction )
     293             : {
     294           0 :     if ( !mpTrack || !pAction )
     295             :     {
     296           0 :         return;
     297             :     }
     298             : 
     299           0 :     if ( bIsSharedAction )
     300             :     {
     301             :         ScConflictsListEntry* pConflictEntry = ScConflictsListHelper::GetSharedActionEntry(
     302           0 :             mrConflictsList, pAction->GetActionNumber() );
     303           0 :         if ( pConflictEntry )
     304             :         {
     305           0 :             ScConflictAction eConflictAction = pConflictEntry->meConflictAction;
     306           0 :             if ( eConflictAction == SC_CONFLICT_ACTION_KEEP_MINE )
     307             :             {
     308           0 :                 if ( pAction->GetType() == SC_CAT_CONTENT )
     309             :                 {
     310           0 :                     if ( bHandleContentAction )
     311             :                     {
     312           0 :                         mpTrack->Reject( pAction );
     313             :                     }
     314             :                 }
     315             :                 else
     316             :                 {
     317           0 :                     if ( bHandleNonContentAction )
     318             :                     {
     319           0 :                         mpTrack->Reject( pAction );
     320             :                     }
     321             :                 }
     322             :             }
     323             :         }
     324             :     }
     325             :     else
     326             :     {
     327             :         ScConflictsListEntry* pConflictEntry = ScConflictsListHelper::GetOwnActionEntry(
     328           0 :             mrConflictsList, pAction->GetActionNumber() );
     329           0 :         if ( pConflictEntry )
     330             :         {
     331           0 :             ScConflictAction eConflictAction = pConflictEntry->meConflictAction;
     332           0 :             if ( eConflictAction == SC_CONFLICT_ACTION_KEEP_MINE )
     333             :             {
     334           0 :                 if ( pAction->GetType() == SC_CAT_CONTENT )
     335             :                 {
     336             :                     if ( bHandleContentAction )
     337             :                     {
     338             :                         // do nothing
     339             :                         //mpTrack->SelectContent( pAction );
     340             :                     }
     341             :                 }
     342             :                 else
     343             :                 {
     344             :                     if ( bHandleNonContentAction )
     345             :                     {
     346             :                         // do nothing
     347             :                         //mpTrack->Accept( pAction );
     348             :                     }
     349             :                 }
     350             :             }
     351           0 :             else if ( eConflictAction == SC_CONFLICT_ACTION_KEEP_OTHER )
     352             :             {
     353           0 :                 if ( pAction->GetType() == SC_CAT_CONTENT )
     354             :                 {
     355           0 :                     if ( bHandleContentAction )
     356             :                     {
     357           0 :                         mpTrack->Reject( pAction );
     358             :                     }
     359             :                 }
     360             :                 else
     361             :                 {
     362           0 :                     if ( bHandleNonContentAction )
     363             :                     {
     364           0 :                         mpTrack->Reject( pAction );
     365             :                     }
     366             :                 }
     367             :             }
     368             :         }
     369             :     }
     370             : }
     371             : 
     372             : // class ScConflictsDlg
     373             : 
     374           0 : ScConflictsDlg::ScConflictsDlg( vcl::Window* pParent, ScViewData* pViewData, ScDocument* pSharedDoc, ScConflictsList& rConflictsList )
     375             :     :ModalDialog( pParent, "ConflictsDialog", "modules/scalc/ui/conflictsdialog.ui" )
     376           0 :     ,m_pLbConflictsContainer  ( get<SvSimpleTableContainer>("container") )
     377           0 :     ,m_pLbConflicts     ( new SvxRedlinTable(*m_pLbConflictsContainer) )
     378             :     ,maStrTitleConflict ( ScResId( STR_TITLE_CONFLICT ) )
     379             :     ,maStrTitleAuthor   ( ScResId( STR_TITLE_AUTHOR ) )
     380             :     ,maStrTitleDate     ( ScResId( STR_TITLE_DATE ) )
     381             :     ,maStrUnknownUser   ( ScResId( STR_UNKNOWN_USER_CONFLICT ) )
     382             :     ,mpViewData         ( pViewData )
     383             :     ,mpOwnDoc           ( NULL )
     384             :     ,mpOwnTrack         ( NULL )
     385             :     ,mpSharedDoc        ( pSharedDoc )
     386             :     ,mpSharedTrack      ( NULL )
     387             :     ,mrConflictsList    ( rConflictsList )
     388           0 :     ,maDialogSize       ( GetSizePixel() )
     389             :     ,mbInSelectHdl      ( false )
     390           0 :     ,mbInDeselectHdl    ( false )
     391             : {
     392           0 :     get(m_pBtnKeepMine, "keepmine");
     393           0 :     get(m_pBtnKeepOther, "keepother");
     394           0 :     get(m_pBtnKeepAllMine, "keepallmine");
     395           0 :     get(m_pBtnKeepAllOthers, "keepallothers");
     396             : 
     397             :     OSL_ENSURE( mpViewData, "ScConflictsDlg CTOR: mpViewData is null!" );
     398           0 :     mpOwnDoc = ( mpViewData ? mpViewData->GetDocument() : NULL );
     399             :     OSL_ENSURE( mpOwnDoc, "ScConflictsDlg CTOR: mpOwnDoc is null!" );
     400           0 :     mpOwnTrack = ( mpOwnDoc ? mpOwnDoc->GetChangeTrack() : NULL );
     401             :     OSL_ENSURE( mpOwnTrack, "ScConflictsDlg CTOR: mpOwnTrack is null!" );
     402             :     OSL_ENSURE( mpSharedDoc, "ScConflictsDlg CTOR: mpSharedDoc is null!" );
     403           0 :     mpSharedTrack = ( mpSharedDoc ? mpSharedDoc->GetChangeTrack() : NULL );
     404             :     OSL_ENSURE( mpSharedTrack, "ScConflictsDlg CTOR: mpSharedTrack is null!" );
     405             : 
     406           0 :     SetMinOutputSizePixel( maDialogSize );
     407             : 
     408           0 :     long nTabs[] = { 3, 10, 216, 266 };
     409           0 :     m_pLbConflicts->SetTabs( nTabs );
     410             : 
     411           0 :     OUString aTab('\t');
     412           0 :     OUString aHeader( maStrTitleConflict );
     413           0 :     aHeader += aTab;
     414           0 :     aHeader += maStrTitleAuthor;
     415           0 :     aHeader += aTab;
     416           0 :     aHeader += maStrTitleDate;
     417           0 :     m_pLbConflicts->InsertHeaderEntry( aHeader, HEADERBAR_APPEND, HIB_LEFT | HIB_LEFTIMAGE | HIB_VCENTER );
     418             : 
     419           0 :     m_pLbConflicts->SetStyle( m_pLbConflicts->GetStyle() | WB_HASLINES | WB_CLIPCHILDREN | WB_HASBUTTONS | WB_HASBUTTONSATROOT | WB_HSCROLL );
     420           0 :     m_pLbConflicts->SetSelectionMode( MULTIPLE_SELECTION );
     421           0 :     m_pLbConflicts->SetHighlightRange();
     422             : 
     423           0 :     maSelectionTimer.SetTimeout( 100 );
     424           0 :     maSelectionTimer.SetTimeoutHdl( LINK( this, ScConflictsDlg, UpdateSelectionHdl ) );
     425             : 
     426           0 :     m_pLbConflicts->SetSelectHdl( LINK( this, ScConflictsDlg, SelectHandle ) );
     427           0 :     m_pLbConflicts->SetDeselectHdl( LINK( this, ScConflictsDlg, DeselectHandle ) );
     428             : 
     429           0 :     m_pBtnKeepMine->SetClickHdl( LINK( this, ScConflictsDlg, KeepMineHandle ) );
     430           0 :     m_pBtnKeepOther->SetClickHdl( LINK( this, ScConflictsDlg, KeepOtherHandle ) );
     431           0 :     m_pBtnKeepAllMine->SetClickHdl( LINK( this, ScConflictsDlg, KeepAllMineHandle ) );
     432           0 :     m_pBtnKeepAllOthers->SetClickHdl( LINK( this, ScConflictsDlg, KeepAllOthersHandle ) );
     433             : 
     434           0 :     UpdateView();
     435             : 
     436           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->First();
     437           0 :     if ( pEntry != NULL )
     438             :     {
     439           0 :         m_pLbConflicts->Select( pEntry );
     440           0 :     }
     441           0 : }
     442             : 
     443           0 : ScConflictsDlg::~ScConflictsDlg()
     444             : {
     445           0 : }
     446             : 
     447           0 : OUString ScConflictsDlg::GetConflictString( const ScConflictsListEntry& rConflictEntry )
     448             : {
     449           0 :     OUString aString;
     450           0 :     if ( mpOwnTrack )
     451             :     {
     452           0 :         const ScChangeAction* pAction = mpOwnTrack->GetAction( rConflictEntry.maOwnActions[ 0 ] );
     453           0 :         if ( pAction && mpOwnDoc )
     454             :         {
     455           0 :             SCTAB nTab = pAction->GetBigRange().MakeRange().aStart.Tab();
     456           0 :             mpOwnDoc->GetName( nTab, aString );
     457             :         }
     458             :     }
     459           0 :     return aString;
     460             : }
     461             : 
     462           0 : OUString ScConflictsDlg::GetActionString( const ScChangeAction* pAction, ScDocument* pDoc )
     463             : {
     464           0 :     OUString aString;
     465             : 
     466             :     OSL_ENSURE( pAction, "ScConflictsDlg::GetActionString(): pAction is null!" );
     467             :     OSL_ENSURE( pDoc, "ScConflictsDlg::GetActionString(): pDoc is null!" );
     468           0 :     if ( pAction && pDoc )
     469             :     {
     470           0 :         OUString aDesc;
     471           0 :         pAction->GetDescription(aDesc, pDoc, true, false);
     472           0 :         aString += aDesc;
     473           0 :         aString += "\t";
     474             : 
     475           0 :         OUString aUser = comphelper::string::strip(pAction->GetUser(), ' ');
     476           0 :         if ( aUser.isEmpty() )
     477             :         {
     478           0 :             aUser = maStrUnknownUser;
     479             :         }
     480           0 :         aString += aUser;
     481           0 :         aString += "\t";
     482             : 
     483           0 :         DateTime aDateTime = pAction->GetDateTime();
     484           0 :         aString += ScGlobal::pLocaleData->getDate( aDateTime );
     485           0 :         aString += " ";
     486           0 :         aString += ScGlobal::pLocaleData->getTime( aDateTime, false );
     487           0 :         aString += "\t";
     488             :     }
     489             : 
     490           0 :     return aString;
     491             : }
     492             : 
     493           0 : void ScConflictsDlg::HandleListBoxSelection( bool bSelectHandle )
     494             : {
     495           0 :     SvTreeListEntry* pSelEntry = m_pLbConflicts->GetCurEntry();
     496           0 :     if ( !pSelEntry )
     497             :     {
     498           0 :         pSelEntry = m_pLbConflicts->FirstSelected();
     499             :     }
     500           0 :     if ( !pSelEntry )
     501             :     {
     502           0 :         return;
     503             :     }
     504             : 
     505           0 :     SvTreeListEntry* pRootEntry = m_pLbConflicts->GetRootLevelParent( pSelEntry );
     506           0 :     if ( pRootEntry )
     507             :     {
     508           0 :         if ( bSelectHandle )
     509             :         {
     510           0 :             m_pLbConflicts->SelectAll( false );
     511             :         }
     512           0 :         if ( !m_pLbConflicts->IsSelected( pRootEntry ) )
     513             :         {
     514           0 :             m_pLbConflicts->Select( pRootEntry );
     515             :         }
     516           0 :         SvTreeListEntry* pEntry = m_pLbConflicts->FirstChild( pRootEntry );
     517           0 :         while ( pEntry )
     518             :         {
     519           0 :             if ( !m_pLbConflicts->IsSelected( pEntry ) )
     520             :             {
     521           0 :                 m_pLbConflicts->Select( pEntry );
     522             :             }
     523           0 :             pEntry = m_pLbConflicts->NextSibling( pEntry );
     524             :         }
     525             :     }
     526             : }
     527             : 
     528           0 : IMPL_LINK_NOARG(ScConflictsDlg, SelectHandle)
     529             : {
     530           0 :     if ( mbInSelectHdl || mbInDeselectHdl )
     531             :     {
     532           0 :         return 0;
     533             :     }
     534             : 
     535           0 :     mbInSelectHdl = true;
     536           0 :     HandleListBoxSelection( true );
     537           0 :     maSelectionTimer.Start();
     538           0 :     mbInSelectHdl = false;
     539             : 
     540           0 :     return 0;
     541             : }
     542             : 
     543           0 : IMPL_LINK_NOARG(ScConflictsDlg, DeselectHandle)
     544             : {
     545           0 :     if ( mbInDeselectHdl || mbInSelectHdl )
     546             :     {
     547           0 :         return 0;
     548             :     }
     549             : 
     550           0 :     mbInDeselectHdl = true;
     551           0 :     HandleListBoxSelection( false );
     552           0 :     mbInDeselectHdl = false;
     553             : 
     554           0 :     return 0;
     555             : }
     556             : 
     557           0 : IMPL_LINK_NOARG(ScConflictsDlg, UpdateSelectionHdl)
     558             : {
     559           0 :     if ( !mpViewData || !mpOwnDoc )
     560             :     {
     561           0 :         return 0;
     562             :     }
     563             : 
     564           0 :     ScTabView* pTabView = mpViewData->GetView();
     565           0 :     pTabView->DoneBlockMode();
     566           0 :     bool bContMark = false;
     567           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->FirstSelected();
     568           0 :     while ( pEntry )
     569             :     {
     570           0 :         if ( pEntry != m_pLbConflicts->GetRootLevelParent( pEntry ) )
     571             :         {
     572           0 :             RedlinData* pUserData = static_cast< RedlinData* >( pEntry->GetUserData() );
     573           0 :             if  ( pUserData )
     574             :             {
     575           0 :                 ScChangeAction* pAction = static_cast< ScChangeAction* >( pUserData->pData );
     576           0 :                 if ( pAction && ( pAction->GetType() != SC_CAT_DELETE_TABS ) &&
     577           0 :                      ( pAction->IsClickable() || pAction->IsVisible() ) )
     578             :                 {
     579           0 :                     const ScBigRange& rBigRange = ( static_cast< const ScChangeAction* >( pAction ) )->GetBigRange();
     580           0 :                     if ( rBigRange.IsValid( mpOwnDoc ) )
     581             :                     {
     582           0 :                         bool bSetCursor = !m_pLbConflicts->NextSelected( pEntry );
     583           0 :                         pTabView->MarkRange( rBigRange.MakeRange(), bSetCursor, bContMark );
     584           0 :                         bContMark = true;
     585             :                     }
     586             :                 }
     587             :             }
     588             :         }
     589           0 :         pEntry = m_pLbConflicts->NextSelected( pEntry );
     590             :     }
     591             : 
     592           0 :     return 0;
     593             : }
     594             : 
     595           0 : void ScConflictsDlg::SetConflictAction( SvTreeListEntry* pRootEntry, ScConflictAction eConflictAction )
     596             : {
     597           0 :     RedlinData* pUserData = static_cast< RedlinData* >( pRootEntry ? pRootEntry->GetUserData() : NULL );
     598           0 :     ScConflictsListEntry* pConflictEntry = static_cast< ScConflictsListEntry* >( pUserData ? pUserData->pData : NULL );
     599           0 :     if ( pConflictEntry )
     600             :     {
     601           0 :         pConflictEntry->meConflictAction = eConflictAction;
     602             :     }
     603           0 : }
     604             : 
     605           0 : void ScConflictsDlg::KeepHandler( bool bMine )
     606             : {
     607           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->FirstSelected();
     608           0 :     SvTreeListEntry* pRootEntry = ( pEntry ? m_pLbConflicts->GetRootLevelParent( pEntry ) : NULL );
     609           0 :     if ( !pRootEntry )
     610             :     {
     611           0 :         return;
     612             :     }
     613           0 :     SetPointer( Pointer( POINTER_WAIT ) );
     614           0 :     ScConflictAction eConflictAction = ( bMine ? SC_CONFLICT_ACTION_KEEP_MINE : SC_CONFLICT_ACTION_KEEP_OTHER );
     615           0 :     SetConflictAction( pRootEntry, eConflictAction );
     616           0 :     m_pLbConflicts->RemoveEntry( pRootEntry );
     617           0 :     SetPointer( Pointer( POINTER_ARROW ) );
     618           0 :     if ( m_pLbConflicts->GetEntryCount() == 0 )
     619             :     {
     620           0 :         EndDialog( RET_OK );
     621             :     }
     622             : }
     623             : 
     624           0 : void ScConflictsDlg::KeepAllHandler( bool bMine )
     625             : {
     626           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->First();
     627           0 :     SvTreeListEntry* pRootEntry = ( pEntry ? m_pLbConflicts->GetRootLevelParent( pEntry ) : NULL );
     628           0 :     if ( !pRootEntry )
     629             :     {
     630           0 :         return;
     631             :     }
     632           0 :     SetPointer( Pointer( POINTER_WAIT ) );
     633           0 :     ScConflictAction eConflictAction = ( bMine ? SC_CONFLICT_ACTION_KEEP_MINE : SC_CONFLICT_ACTION_KEEP_OTHER );
     634           0 :     while ( pRootEntry )
     635             :     {
     636           0 :         SetConflictAction( pRootEntry, eConflictAction );
     637           0 :         pRootEntry = m_pLbConflicts->NextSibling( pRootEntry );
     638             :     }
     639           0 :     m_pLbConflicts->SetUpdateMode( false );
     640           0 :     m_pLbConflicts->Clear();
     641           0 :     m_pLbConflicts->SetUpdateMode( true );
     642           0 :     SetPointer( Pointer( POINTER_ARROW ) );
     643           0 :     EndDialog( RET_OK );
     644             : }
     645             : 
     646           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepMineHandle)
     647             : {
     648           0 :     KeepHandler( true );
     649             : 
     650           0 :     return 0;
     651             : }
     652             : 
     653           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepOtherHandle)
     654             : {
     655           0 :     KeepHandler( false );
     656             : 
     657           0 :     return 0;
     658             : }
     659             : 
     660           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepAllMineHandle)
     661             : {
     662           0 :     KeepAllHandler( true );
     663             : 
     664           0 :     return 0;
     665             : }
     666             : 
     667           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepAllOthersHandle)
     668             : {
     669           0 :     KeepAllHandler( false );
     670             : 
     671           0 :     return 0;
     672             : }
     673             : 
     674           0 : void ScConflictsDlg::UpdateView()
     675             : {
     676           0 :     ScConflictsList::iterator aEndItr = mrConflictsList.end();
     677           0 :     for ( ScConflictsList::iterator aItr = mrConflictsList.begin(); aItr != aEndItr; ++aItr )
     678             :     {
     679           0 :         ScConflictsListEntry* pConflictEntry = &(*aItr);
     680           0 :         if ( pConflictEntry && pConflictEntry->meConflictAction == SC_CONFLICT_ACTION_NONE )
     681             :         {
     682           0 :             RedlinData* pRootUserData = new RedlinData();
     683           0 :             pRootUserData->pData = static_cast< void* >( pConflictEntry );
     684           0 :             SvTreeListEntry* pRootEntry = m_pLbConflicts->InsertEntry( GetConflictString( *aItr ), pRootUserData );
     685             : 
     686           0 :             ScChangeActionList::const_iterator aEndShared = aItr->maSharedActions.end();
     687           0 :             for ( ScChangeActionList::const_iterator aItrShared = aItr->maSharedActions.begin(); aItrShared != aEndShared; ++aItrShared )
     688             :             {
     689           0 :                 ScChangeAction* pAction = mpSharedTrack ? mpSharedTrack->GetAction(*aItrShared) : NULL;
     690           0 :                 if ( pAction )
     691             :                 {
     692             :                     // only display shared top content entries
     693           0 :                     if ( pAction->GetType() == SC_CAT_CONTENT )
     694             :                     {
     695           0 :                         ScChangeActionContent* pNextContent = (dynamic_cast<ScChangeActionContent&>(*pAction)).GetNextContent();
     696           0 :                         if ( pNextContent && aItr->HasSharedAction( pNextContent->GetActionNumber() ) )
     697             :                         {
     698           0 :                             continue;
     699             :                         }
     700             :                     }
     701             : 
     702           0 :                     OUString aString( GetActionString( pAction, mpSharedDoc ) );
     703           0 :                     m_pLbConflicts->InsertEntry( aString, static_cast< RedlinData* >( NULL ), pRootEntry );
     704             :                 }
     705             :             }
     706             : 
     707           0 :             ScChangeActionList::const_iterator aEndOwn = aItr->maOwnActions.end();
     708           0 :             for ( ScChangeActionList::const_iterator aItrOwn = aItr->maOwnActions.begin(); aItrOwn != aEndOwn; ++aItrOwn )
     709             :             {
     710           0 :                 ScChangeAction* pAction = mpOwnTrack ? mpOwnTrack->GetAction(*aItrOwn) : NULL;
     711           0 :                 if ( pAction )
     712             :                 {
     713             :                     // only display own top content entries
     714           0 :                     if ( pAction->GetType() == SC_CAT_CONTENT )
     715             :                     {
     716           0 :                         ScChangeActionContent* pNextContent = ( dynamic_cast<ScChangeActionContent&>(*pAction) ).GetNextContent();
     717           0 :                         if ( pNextContent && aItr->HasOwnAction( pNextContent->GetActionNumber() ) )
     718             :                         {
     719           0 :                             continue;
     720             :                         }
     721             :                     }
     722             : 
     723           0 :                     OUString aString( GetActionString( pAction, mpOwnDoc ) );
     724           0 :                     RedlinData* pUserData = new RedlinData();
     725           0 :                     pUserData->pData = static_cast< void* >( pAction );
     726           0 :                     m_pLbConflicts->InsertEntry( aString, pUserData, pRootEntry );
     727             :                 }
     728             :             }
     729             : 
     730           0 :             m_pLbConflicts->Expand( pRootEntry );
     731             :         }
     732             :     }
     733         228 : }
     734             : 
     735             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10