LCOV - code coverage report
Current view: top level - sc/source/ui/miscdlgs - conflictsdlg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 343 0.3 %
Date: 2015-06-13 12:38:46 Functions: 2 45 4.4 %
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             :     ,m_pLbConflictsContainer  ( get<SvSimpleTableContainer>("container") )
     377           0 :     ,m_pLbConflicts     ( VclPtr<SvxRedlinTable>::Create(*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, HeaderBarItemBits::LEFT | HeaderBarItemBits::LEFTIMAGE | HeaderBarItemBits::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 :     maSelectionIdle.SetPriority( SchedulerPriority::LOW );
     424           0 :     maSelectionIdle.SetIdleHdl( 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 :     disposeOnce();
     446           0 : }
     447             : 
     448           0 : void ScConflictsDlg::dispose()
     449             : {
     450           0 :     m_pLbConflictsContainer.clear();
     451           0 :     m_pLbConflicts.disposeAndClear();
     452           0 :     m_pBtnKeepMine.clear();
     453           0 :     m_pBtnKeepOther.clear();
     454           0 :     m_pBtnKeepAllMine.clear();
     455           0 :     m_pBtnKeepAllOthers.clear();
     456           0 :     ModalDialog::dispose();
     457           0 : }
     458             : 
     459           0 : OUString ScConflictsDlg::GetConflictString( const ScConflictsListEntry& rConflictEntry )
     460             : {
     461           0 :     OUString aString;
     462           0 :     if ( mpOwnTrack )
     463             :     {
     464           0 :         const ScChangeAction* pAction = mpOwnTrack->GetAction( rConflictEntry.maOwnActions[ 0 ] );
     465           0 :         if ( pAction && mpOwnDoc )
     466             :         {
     467           0 :             SCTAB nTab = pAction->GetBigRange().MakeRange().aStart.Tab();
     468           0 :             mpOwnDoc->GetName( nTab, aString );
     469             :         }
     470             :     }
     471           0 :     return aString;
     472             : }
     473             : 
     474           0 : OUString ScConflictsDlg::GetActionString( const ScChangeAction* pAction, ScDocument* pDoc )
     475             : {
     476           0 :     OUString aString;
     477             : 
     478             :     OSL_ENSURE( pAction, "ScConflictsDlg::GetActionString(): pAction is null!" );
     479             :     OSL_ENSURE( pDoc, "ScConflictsDlg::GetActionString(): pDoc is null!" );
     480           0 :     if ( pAction && pDoc )
     481             :     {
     482           0 :         OUString aDesc;
     483           0 :         pAction->GetDescription(aDesc, pDoc, true, false);
     484           0 :         aString += aDesc;
     485           0 :         aString += "\t";
     486             : 
     487           0 :         OUString aUser = comphelper::string::strip(pAction->GetUser(), ' ');
     488           0 :         if ( aUser.isEmpty() )
     489             :         {
     490           0 :             aUser = maStrUnknownUser;
     491             :         }
     492           0 :         aString += aUser;
     493           0 :         aString += "\t";
     494             : 
     495           0 :         DateTime aDateTime = pAction->GetDateTime();
     496           0 :         aString += ScGlobal::pLocaleData->getDate( aDateTime );
     497           0 :         aString += " ";
     498           0 :         aString += ScGlobal::pLocaleData->getTime( aDateTime, false );
     499           0 :         aString += "\t";
     500             :     }
     501             : 
     502           0 :     return aString;
     503             : }
     504             : 
     505           0 : void ScConflictsDlg::HandleListBoxSelection( bool bSelectHandle )
     506             : {
     507           0 :     SvTreeListEntry* pSelEntry = m_pLbConflicts->GetCurEntry();
     508           0 :     if ( !pSelEntry )
     509             :     {
     510           0 :         pSelEntry = m_pLbConflicts->FirstSelected();
     511             :     }
     512           0 :     if ( !pSelEntry )
     513             :     {
     514           0 :         return;
     515             :     }
     516             : 
     517           0 :     SvTreeListEntry* pRootEntry = m_pLbConflicts->GetRootLevelParent( pSelEntry );
     518           0 :     if ( pRootEntry )
     519             :     {
     520           0 :         if ( bSelectHandle )
     521             :         {
     522           0 :             m_pLbConflicts->SelectAll( false );
     523             :         }
     524           0 :         if ( !m_pLbConflicts->IsSelected( pRootEntry ) )
     525             :         {
     526           0 :             m_pLbConflicts->Select( pRootEntry );
     527             :         }
     528           0 :         SvTreeListEntry* pEntry = m_pLbConflicts->FirstChild( pRootEntry );
     529           0 :         while ( pEntry )
     530             :         {
     531           0 :             if ( !m_pLbConflicts->IsSelected( pEntry ) )
     532             :             {
     533           0 :                 m_pLbConflicts->Select( pEntry );
     534             :             }
     535           0 :             pEntry = SvTreeListBox::NextSibling( pEntry );
     536             :         }
     537             :     }
     538             : }
     539             : 
     540           0 : IMPL_LINK_NOARG(ScConflictsDlg, SelectHandle)
     541             : {
     542           0 :     if ( mbInSelectHdl || mbInDeselectHdl )
     543             :     {
     544           0 :         return 0;
     545             :     }
     546             : 
     547           0 :     mbInSelectHdl = true;
     548           0 :     HandleListBoxSelection( true );
     549           0 :     maSelectionIdle.Start();
     550           0 :     mbInSelectHdl = false;
     551             : 
     552           0 :     return 0;
     553             : }
     554             : 
     555           0 : IMPL_LINK_NOARG(ScConflictsDlg, DeselectHandle)
     556             : {
     557           0 :     if ( mbInDeselectHdl || mbInSelectHdl )
     558             :     {
     559           0 :         return 0;
     560             :     }
     561             : 
     562           0 :     mbInDeselectHdl = true;
     563           0 :     HandleListBoxSelection( false );
     564           0 :     mbInDeselectHdl = false;
     565             : 
     566           0 :     return 0;
     567             : }
     568             : 
     569           0 : IMPL_LINK_NOARG_TYPED(ScConflictsDlg, UpdateSelectionHdl, Idle *, void)
     570             : {
     571           0 :     if ( !mpViewData || !mpOwnDoc )
     572             :     {
     573           0 :         return;
     574             :     }
     575             : 
     576           0 :     ScTabView* pTabView = mpViewData->GetView();
     577           0 :     pTabView->DoneBlockMode();
     578           0 :     bool bContMark = false;
     579           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->FirstSelected();
     580           0 :     while ( pEntry )
     581             :     {
     582           0 :         if ( pEntry != m_pLbConflicts->GetRootLevelParent( pEntry ) )
     583             :         {
     584           0 :             RedlinData* pUserData = static_cast< RedlinData* >( pEntry->GetUserData() );
     585           0 :             if  ( pUserData )
     586             :             {
     587           0 :                 ScChangeAction* pAction = static_cast< ScChangeAction* >( pUserData->pData );
     588           0 :                 if ( pAction && ( pAction->GetType() != SC_CAT_DELETE_TABS ) &&
     589           0 :                      ( pAction->IsClickable() || pAction->IsVisible() ) )
     590             :                 {
     591           0 :                     const ScBigRange& rBigRange = ( static_cast< const ScChangeAction* >( pAction ) )->GetBigRange();
     592           0 :                     if ( rBigRange.IsValid( mpOwnDoc ) )
     593             :                     {
     594           0 :                         bool bSetCursor = !m_pLbConflicts->NextSelected( pEntry );
     595           0 :                         pTabView->MarkRange( rBigRange.MakeRange(), bSetCursor, bContMark );
     596           0 :                         bContMark = true;
     597             :                     }
     598             :                 }
     599             :             }
     600             :         }
     601           0 :         pEntry = m_pLbConflicts->NextSelected( pEntry );
     602             :     }
     603             : }
     604             : 
     605           0 : void ScConflictsDlg::SetConflictAction( SvTreeListEntry* pRootEntry, ScConflictAction eConflictAction )
     606             : {
     607           0 :     RedlinData* pUserData = static_cast< RedlinData* >( pRootEntry ? pRootEntry->GetUserData() : NULL );
     608           0 :     ScConflictsListEntry* pConflictEntry = static_cast< ScConflictsListEntry* >( pUserData ? pUserData->pData : NULL );
     609           0 :     if ( pConflictEntry )
     610             :     {
     611           0 :         pConflictEntry->meConflictAction = eConflictAction;
     612             :     }
     613           0 : }
     614             : 
     615           0 : void ScConflictsDlg::KeepHandler( bool bMine )
     616             : {
     617           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->FirstSelected();
     618           0 :     SvTreeListEntry* pRootEntry = ( pEntry ? m_pLbConflicts->GetRootLevelParent( pEntry ) : NULL );
     619           0 :     if ( !pRootEntry )
     620             :     {
     621           0 :         return;
     622             :     }
     623           0 :     SetPointer( Pointer( PointerStyle::Wait ) );
     624           0 :     ScConflictAction eConflictAction = ( bMine ? SC_CONFLICT_ACTION_KEEP_MINE : SC_CONFLICT_ACTION_KEEP_OTHER );
     625           0 :     SetConflictAction( pRootEntry, eConflictAction );
     626           0 :     m_pLbConflicts->RemoveEntry( pRootEntry );
     627           0 :     SetPointer( Pointer( PointerStyle::Arrow ) );
     628           0 :     if ( m_pLbConflicts->GetEntryCount() == 0 )
     629             :     {
     630           0 :         EndDialog( RET_OK );
     631             :     }
     632             : }
     633             : 
     634           0 : void ScConflictsDlg::KeepAllHandler( bool bMine )
     635             : {
     636           0 :     SvTreeListEntry* pEntry = m_pLbConflicts->First();
     637           0 :     SvTreeListEntry* pRootEntry = ( pEntry ? m_pLbConflicts->GetRootLevelParent( pEntry ) : NULL );
     638           0 :     if ( !pRootEntry )
     639             :     {
     640           0 :         return;
     641             :     }
     642           0 :     SetPointer( Pointer( PointerStyle::Wait ) );
     643           0 :     ScConflictAction eConflictAction = ( bMine ? SC_CONFLICT_ACTION_KEEP_MINE : SC_CONFLICT_ACTION_KEEP_OTHER );
     644           0 :     while ( pRootEntry )
     645             :     {
     646           0 :         SetConflictAction( pRootEntry, eConflictAction );
     647           0 :         pRootEntry = SvTreeListBox::NextSibling( pRootEntry );
     648             :     }
     649           0 :     m_pLbConflicts->SetUpdateMode( false );
     650           0 :     m_pLbConflicts->Clear();
     651           0 :     m_pLbConflicts->SetUpdateMode( true );
     652           0 :     SetPointer( Pointer( PointerStyle::Arrow ) );
     653           0 :     EndDialog( RET_OK );
     654             : }
     655             : 
     656           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepMineHandle)
     657             : {
     658           0 :     KeepHandler( true );
     659             : 
     660           0 :     return 0;
     661             : }
     662             : 
     663           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepOtherHandle)
     664             : {
     665           0 :     KeepHandler( false );
     666             : 
     667           0 :     return 0;
     668             : }
     669             : 
     670           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepAllMineHandle)
     671             : {
     672           0 :     KeepAllHandler( true );
     673             : 
     674           0 :     return 0;
     675             : }
     676             : 
     677           0 : IMPL_LINK_NOARG(ScConflictsDlg, KeepAllOthersHandle)
     678             : {
     679           0 :     KeepAllHandler( false );
     680             : 
     681           0 :     return 0;
     682             : }
     683             : 
     684           0 : void ScConflictsDlg::UpdateView()
     685             : {
     686           0 :     ScConflictsList::iterator aEndItr = mrConflictsList.end();
     687           0 :     for ( ScConflictsList::iterator aItr = mrConflictsList.begin(); aItr != aEndItr; ++aItr )
     688             :     {
     689           0 :         ScConflictsListEntry* pConflictEntry = &(*aItr);
     690           0 :         if ( pConflictEntry && pConflictEntry->meConflictAction == SC_CONFLICT_ACTION_NONE )
     691             :         {
     692           0 :             RedlinData* pRootUserData = new RedlinData();
     693           0 :             pRootUserData->pData = static_cast< void* >( pConflictEntry );
     694           0 :             SvTreeListEntry* pRootEntry = m_pLbConflicts->InsertEntry( GetConflictString( *aItr ), pRootUserData );
     695             : 
     696           0 :             ScChangeActionList::const_iterator aEndShared = aItr->maSharedActions.end();
     697           0 :             for ( ScChangeActionList::const_iterator aItrShared = aItr->maSharedActions.begin(); aItrShared != aEndShared; ++aItrShared )
     698             :             {
     699           0 :                 ScChangeAction* pAction = mpSharedTrack ? mpSharedTrack->GetAction(*aItrShared) : NULL;
     700           0 :                 if ( pAction )
     701             :                 {
     702             :                     // only display shared top content entries
     703           0 :                     if ( pAction->GetType() == SC_CAT_CONTENT )
     704             :                     {
     705           0 :                         ScChangeActionContent* pNextContent = (dynamic_cast<ScChangeActionContent&>(*pAction)).GetNextContent();
     706           0 :                         if ( pNextContent && aItr->HasSharedAction( pNextContent->GetActionNumber() ) )
     707             :                         {
     708           0 :                             continue;
     709             :                         }
     710             :                     }
     711             : 
     712           0 :                     OUString aString( GetActionString( pAction, mpSharedDoc ) );
     713           0 :                     m_pLbConflicts->InsertEntry( aString, static_cast< RedlinData* >( NULL ), pRootEntry );
     714             :                 }
     715             :             }
     716             : 
     717           0 :             ScChangeActionList::const_iterator aEndOwn = aItr->maOwnActions.end();
     718           0 :             for ( ScChangeActionList::const_iterator aItrOwn = aItr->maOwnActions.begin(); aItrOwn != aEndOwn; ++aItrOwn )
     719             :             {
     720           0 :                 ScChangeAction* pAction = mpOwnTrack ? mpOwnTrack->GetAction(*aItrOwn) : NULL;
     721           0 :                 if ( pAction )
     722             :                 {
     723             :                     // only display own top content entries
     724           0 :                     if ( pAction->GetType() == SC_CAT_CONTENT )
     725             :                     {
     726           0 :                         ScChangeActionContent* pNextContent = ( dynamic_cast<ScChangeActionContent&>(*pAction) ).GetNextContent();
     727           0 :                         if ( pNextContent && aItr->HasOwnAction( pNextContent->GetActionNumber() ) )
     728             :                         {
     729           0 :                             continue;
     730             :                         }
     731             :                     }
     732             : 
     733           0 :                     OUString aString( GetActionString( pAction, mpOwnDoc ) );
     734           0 :                     RedlinData* pUserData = new RedlinData();
     735           0 :                     pUserData->pData = static_cast< void* >( pAction );
     736           0 :                     m_pLbConflicts->InsertEntry( aString, pUserData, pRootEntry );
     737             :                 }
     738             :             }
     739             : 
     740           0 :             m_pLbConflicts->Expand( pRootEntry );
     741             :         }
     742             :     }
     743         156 : }
     744             : 
     745             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11