blob: 3a56e987ff575b6457c0c6368723696e47c28adc [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_CONFLICTSDLG_HXX
#define SC_CONFLICTSDLG_HXX
#include <vcl/button.hxx>
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/lstbox.hxx>
#include <svx/ctredlin.hxx>
#include "chgtrack.hxx"
#include "docsh.hxx"
class ScViewData;
//=============================================================================
enum ScConflictAction
{
SC_CONFLICT_ACTION_NONE,
SC_CONFLICT_ACTION_KEEP_MINE,
SC_CONFLICT_ACTION_KEEP_OTHER
};
typedef ::std::vector< sal_uLong > ScChangeActionList;
//=============================================================================
// struct ScConflictsListEntry
//=============================================================================
struct ScConflictsListEntry
{
ScConflictAction meConflictAction;
ScChangeActionList maSharedActions;
ScChangeActionList maOwnActions;
bool HasSharedAction( sal_uLong nSharedAction ) const;
bool HasOwnAction( sal_uLong nOwnAction ) const;
};
//=============================================================================
typedef ::std::vector< ScConflictsListEntry > ScConflictsList;
//=============================================================================
// class ScConflictsListHelper
//=============================================================================
class ScConflictsListHelper
{
private:
static void Transform_Impl( ScChangeActionList& rActionList, ScChangeActionMergeMap* pMergeMap );
public:
//UNUSED2008-05 static bool HasSharedAction( ScConflictsList& rConflictsList, sal_uLong nSharedAction );
static bool HasOwnAction( ScConflictsList& rConflictsList, sal_uLong nOwnAction );
static ScConflictsListEntry* GetSharedActionEntry( ScConflictsList& rConflictsList, sal_uLong nSharedAction );
static ScConflictsListEntry* GetOwnActionEntry( ScConflictsList& rConflictsList, sal_uLong nOwnAction );
static void TransformConflictsList( ScConflictsList& rConflictsList,
ScChangeActionMergeMap* pSharedMap, ScChangeActionMergeMap* pOwnMap );
};
//=============================================================================
// class ScConflictsFinder
//=============================================================================
class ScConflictsFinder
{
private:
ScChangeTrack* mpTrack;
sal_uLong mnStartShared;
sal_uLong mnEndShared;
sal_uLong mnStartOwn;
sal_uLong mnEndOwn;
ScConflictsList& mrConflictsList;
static bool DoActionsIntersect( const ScChangeAction* pAction1, const ScChangeAction* pAction2 );
ScConflictsListEntry* GetIntersectingEntry( const ScChangeAction* pAction ) const;
ScConflictsListEntry* GetEntry( sal_uLong nSharedAction, const ScChangeActionList& rOwnActions );
public:
ScConflictsFinder( ScChangeTrack* pTrack, sal_uLong nStartShared, sal_uLong nEndShared,
sal_uLong nStartOwn, sal_uLong nEndOwn, ScConflictsList& rConflictsList );
virtual ~ScConflictsFinder();
bool Find();
};
//=============================================================================
// class ScConflictsResolver
//=============================================================================
class ScConflictsResolver
{
private:
ScChangeTrack* mpTrack;
ScConflictsList& mrConflictsList;
public:
ScConflictsResolver( ScChangeTrack* pTrack, ScConflictsList& rConflictsList );
virtual ~ScConflictsResolver();
void HandleAction( ScChangeAction* pAction, bool bIsSharedAction,
bool bHandleContentAction, bool bHandleNonContentAction );
};
//=============================================================================
// class ScConflictsListBox
//=============================================================================
class ScConflictsListBox: public SvxRedlinTable
{
private:
public:
//UNUSED2008-05 ScConflictsListBox( Window* pParent, WinBits nBits = WB_BORDER );
ScConflictsListBox( Window* pParent, const ResId& rResId );
~ScConflictsListBox();
//UNUSED2008-05 sal_uLong GetRootEntryPos( const SvLBoxEntry* pRootEntry ) const;
};
//=============================================================================
// class ScConflictsDlg
//=============================================================================
class ScConflictsDlg : public ModalDialog
{
private:
FixedText maFtConflicts;
ScConflictsListBox maLbConflicts;
PushButton maBtnKeepMine;
PushButton maBtnKeepOther;
FixedLine maFlConflicts;
PushButton maBtnKeepAllMine;
PushButton maBtnKeepAllOthers;
CancelButton maBtnCancel;
HelpButton maBtnHelp;
String maStrTitleConflict;
String maStrTitleAuthor;
String maStrTitleDate;
String maStrUnknownUser;
ScViewData* mpViewData;
ScDocument* mpOwnDoc;
ScChangeTrack* mpOwnTrack;
ScDocument* mpSharedDoc;
ScChangeTrack* mpSharedTrack;
ScConflictsList& mrConflictsList;
Size maDialogSize;
Timer maSelectionTimer;
bool mbInSelectHdl;
bool mbInDeselectHdl;
String GetConflictString( const ScConflictsListEntry& rConflictEntry );
String GetActionString( const ScChangeAction* pAction, ScDocument* pDoc );
void HandleListBoxSelection( bool bSelectHandle );
void SetConflictAction( SvLBoxEntry* pRootEntry, ScConflictAction eConflictAction );
void KeepHandler( bool bMine );
void KeepAllHandler( bool bMine );
DECL_LINK( SelectHandle, SvxRedlinTable* );
DECL_LINK( DeselectHandle, SvxRedlinTable* );
DECL_LINK( UpdateSelectionHdl, Timer* );
DECL_LINK( KeepMineHandle, void* );
DECL_LINK( KeepOtherHandle, void* );
DECL_LINK( KeepAllMineHandle, void* );
DECL_LINK( KeepAllOthersHandle, void* );
public:
ScConflictsDlg( Window* pParent, ScViewData* pViewData, ScDocument* pSharedDoc, ScConflictsList& rConflictsList );
~ScConflictsDlg();
virtual void Resize();
void UpdateView();
};
#endif