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

Generated by: LCOV version 1.10