1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SC_CONFLICTSDLG_HXX 25 #define SC_CONFLICTSDLG_HXX 26 27 #include <vcl/button.hxx> 28 #include <vcl/dialog.hxx> 29 #include <vcl/fixed.hxx> 30 #include <vcl/lstbox.hxx> 31 #include <svx/ctredlin.hxx> 32 33 #include "chgtrack.hxx" 34 #include "docsh.hxx" 35 36 class ScViewData; 37 38 39 //============================================================================= 40 41 enum ScConflictAction 42 { 43 SC_CONFLICT_ACTION_NONE, 44 SC_CONFLICT_ACTION_KEEP_MINE, 45 SC_CONFLICT_ACTION_KEEP_OTHER 46 }; 47 48 typedef ::std::vector< sal_uLong > ScChangeActionList; 49 50 51 //============================================================================= 52 // struct ScConflictsListEntry 53 //============================================================================= 54 55 struct ScConflictsListEntry 56 { 57 ScConflictAction meConflictAction; 58 ScChangeActionList maSharedActions; 59 ScChangeActionList maOwnActions; 60 61 bool HasSharedAction( sal_uLong nSharedAction ) const; 62 bool HasOwnAction( sal_uLong nOwnAction ) const; 63 }; 64 65 66 //============================================================================= 67 68 typedef ::std::vector< ScConflictsListEntry > ScConflictsList; 69 70 71 //============================================================================= 72 // class ScConflictsListHelper 73 //============================================================================= 74 75 class ScConflictsListHelper 76 { 77 private: 78 static void Transform_Impl( ScChangeActionList& rActionList, ScChangeActionMergeMap* pMergeMap ); 79 80 public: 81 //UNUSED2008-05 static bool HasSharedAction( ScConflictsList& rConflictsList, sal_uLong nSharedAction ); 82 static bool HasOwnAction( ScConflictsList& rConflictsList, sal_uLong nOwnAction ); 83 84 static ScConflictsListEntry* GetSharedActionEntry( ScConflictsList& rConflictsList, sal_uLong nSharedAction ); 85 static ScConflictsListEntry* GetOwnActionEntry( ScConflictsList& rConflictsList, sal_uLong nOwnAction ); 86 87 static void TransformConflictsList( ScConflictsList& rConflictsList, 88 ScChangeActionMergeMap* pSharedMap, ScChangeActionMergeMap* pOwnMap ); 89 }; 90 91 92 //============================================================================= 93 // class ScConflictsFinder 94 //============================================================================= 95 96 class ScConflictsFinder 97 { 98 private: 99 ScChangeTrack* mpTrack; 100 sal_uLong mnStartShared; 101 sal_uLong mnEndShared; 102 sal_uLong mnStartOwn; 103 sal_uLong mnEndOwn; 104 ScConflictsList& mrConflictsList; 105 106 static bool DoActionsIntersect( const ScChangeAction* pAction1, const ScChangeAction* pAction2 ); 107 ScConflictsListEntry* GetIntersectingEntry( const ScChangeAction* pAction ) const; 108 ScConflictsListEntry* GetEntry( sal_uLong nSharedAction, const ScChangeActionList& rOwnActions ); 109 110 public: 111 ScConflictsFinder( ScChangeTrack* pTrack, sal_uLong nStartShared, sal_uLong nEndShared, 112 sal_uLong nStartOwn, sal_uLong nEndOwn, ScConflictsList& rConflictsList ); 113 virtual ~ScConflictsFinder(); 114 115 bool Find(); 116 }; 117 118 119 //============================================================================= 120 // class ScConflictsResolver 121 //============================================================================= 122 123 class ScConflictsResolver 124 { 125 private: 126 ScChangeTrack* mpTrack; 127 ScConflictsList& mrConflictsList; 128 129 public: 130 ScConflictsResolver( ScChangeTrack* pTrack, ScConflictsList& rConflictsList ); 131 virtual ~ScConflictsResolver(); 132 133 void HandleAction( ScChangeAction* pAction, bool bIsSharedAction, 134 bool bHandleContentAction, bool bHandleNonContentAction ); 135 }; 136 137 138 //============================================================================= 139 // class ScConflictsListBox 140 //============================================================================= 141 142 class ScConflictsListBox: public SvxRedlinTable 143 { 144 private: 145 146 public: 147 //UNUSED2008-05 ScConflictsListBox( Window* pParent, WinBits nBits = WB_BORDER ); 148 ScConflictsListBox( Window* pParent, const ResId& rResId ); 149 ~ScConflictsListBox(); 150 151 //UNUSED2008-05 sal_uLong GetRootEntryPos( const SvLBoxEntry* pRootEntry ) const; 152 }; 153 154 //============================================================================= 155 // class ScConflictsDlg 156 //============================================================================= 157 158 class ScConflictsDlg : public ModalDialog 159 { 160 private: 161 FixedText maFtConflicts; 162 ScConflictsListBox maLbConflicts; 163 PushButton maBtnKeepMine; 164 PushButton maBtnKeepOther; 165 FixedLine maFlConflicts; 166 PushButton maBtnKeepAllMine; 167 PushButton maBtnKeepAllOthers; 168 CancelButton maBtnCancel; 169 HelpButton maBtnHelp; 170 171 String maStrTitleConflict; 172 String maStrTitleAuthor; 173 String maStrTitleDate; 174 String maStrUnknownUser; 175 176 ScViewData* mpViewData; 177 ScDocument* mpOwnDoc; 178 ScChangeTrack* mpOwnTrack; 179 ScDocument* mpSharedDoc; 180 ScChangeTrack* mpSharedTrack; 181 ScConflictsList& mrConflictsList; 182 Size maDialogSize; 183 184 Timer maSelectionTimer; 185 bool mbInSelectHdl; 186 bool mbInDeselectHdl; 187 188 String GetConflictString( const ScConflictsListEntry& rConflictEntry ); 189 String GetActionString( const ScChangeAction* pAction, ScDocument* pDoc ); 190 void HandleListBoxSelection( bool bSelectHandle ); 191 192 void SetConflictAction( SvLBoxEntry* pRootEntry, ScConflictAction eConflictAction ); 193 void KeepHandler( bool bMine ); 194 void KeepAllHandler( bool bMine ); 195 196 DECL_LINK( SelectHandle, SvxRedlinTable* ); 197 DECL_LINK( DeselectHandle, SvxRedlinTable* ); 198 DECL_LINK( UpdateSelectionHdl, Timer* ); 199 DECL_LINK( KeepMineHandle, void* ); 200 DECL_LINK( KeepOtherHandle, void* ); 201 DECL_LINK( KeepAllMineHandle, void* ); 202 DECL_LINK( KeepAllOthersHandle, void* ); 203 204 public: 205 ScConflictsDlg( Window* pParent, ScViewData* pViewData, ScDocument* pSharedDoc, ScConflictsList& rConflictsList ); 206 ~ScConflictsDlg(); 207 208 virtual void Resize(); 209 void UpdateView(); 210 }; 211 212 #endif 213