OSDN Git Service

Fix failed test
[winmerge-jp/winmerge-jp.git] / Src / MergeEditSplitterView.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 //    WinMerge:  an interactive diff/merge utility
3 //    Copyright (C) 1997-2000  Thingamahoochie Software
4 //    Author: Dean Grimm
5 //    SPDX-License-Identifier: GPL-2.0-or-later
6 /////////////////////////////////////////////////////////////////////////////
7 /**
8  * @file  MergeEditSplitterView.cpp
9  *
10  * @brief Implementation of the CMergeEditSplitterView class
11  */
12
13 #include "StdAfx.h"
14 #include "MergeEditSplitterView.h"
15 #include "Merge.h"
16 #include "MergeDoc.h"
17 #include "MergeEditview.h"
18 #include "MainFrm.h"
19 #include "OptionsMgr.h"
20 #include "OptionsDef.h"
21
22 #ifdef _DEBUG
23 #define new DEBUG_NEW
24 #endif
25
26 #define SWAPPARAMS_IF(c, a, b) (c ? a : b), (c ? b : a)
27
28 /////////////////////////////////////////////////////////////////////////////
29 // CMergeEditSplitterView
30
31 IMPLEMENT_DYNCREATE(CMergeEditSplitterView, CView)
32
33 CMergeEditSplitterView::CMergeEditSplitterView(): m_bDetailView(false), m_nThisGroup(0)
34 {
35 }
36
37 CMergeEditSplitterView::~CMergeEditSplitterView()
38 {
39         dynamic_cast<CMergeDoc *>(GetDocument())->RemoveMergeViews(m_nThisGroup);
40 }
41
42
43 BEGIN_MESSAGE_MAP(CMergeEditSplitterView, CView)
44         //{{AFX_MSG_MAP(CMergeEditSplitterView)
45         ON_WM_SIZE()
46         ON_WM_ERASEBKGND()
47         ON_WM_MOUSEACTIVATE()
48         //}}AFX_MSG_MAP
49 END_MESSAGE_MAP()
50
51
52 /////////////////////////////////////////////////////////////////////////////
53 // CMergeEditSplitterView diagnostics
54
55 /////////////////////////////////////////////////////////////////////////////
56 // CMergeEditSplitterView message handlers
57
58 BOOL CMergeEditSplitterView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
59 {
60         CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
61
62         bool bSplitVert = !GetOptionsMgr()->GetBool(OPT_SPLIT_HORIZONTALLY);
63         if (m_bDetailView)
64                 bSplitVert = !bSplitVert;
65
66         CMergeDoc * pDoc = dynamic_cast<CMergeDoc *>(GetDocument());
67         if (pDoc == nullptr)
68                 return FALSE;
69
70         // create a splitter with 1 row, 2 columns
71         if (!m_wndSplitter.CreateStatic(this, SWAPPARAMS_IF(bSplitVert, 1, pDoc->m_nBuffers),
72                 WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL) )
73         {
74                 TRACE0("Failed to CreateStaticSplitter\n");
75                 return FALSE;
76         }
77
78         for (int nBuffer = 0; nBuffer < pDoc->m_nBuffers; nBuffer++)
79         {
80                 if (!m_wndSplitter.CreateView(SWAPPARAMS_IF(bSplitVert, 0, nBuffer),
81                         RUNTIME_CLASS(CMergeEditView), CSize(-1, 200), pContext))
82                 {
83                         TRACE1("Failed to create pane%d\n", nBuffer);
84                         return FALSE;
85                 }
86         }
87
88         m_wndSplitter.ResizablePanes(true);
89         m_wndSplitter.AutoResizePanes(GetOptionsMgr()->GetBool(OPT_RESIZE_PANES));
90
91         m_nThisGroup = pDoc->m_nGroups;
92
93         // stash left & right pointers into the mergedoc
94         CMergeEditView * pView[3];
95         for (int nBuffer = 0; nBuffer < pDoc->m_nBuffers; nBuffer++)
96         {
97                 pView[nBuffer] = static_cast<CMergeEditView *>(m_wndSplitter.GetPane(SWAPPARAMS_IF(bSplitVert, 0, nBuffer)));
98                 // connect merge views up to display of status info
99                 pView[nBuffer]->m_nThisPane = nBuffer;
100                 pView[nBuffer]->m_nThisGroup = m_nThisGroup;
101                 pView[nBuffer]->m_bDetailView = m_bDetailView;
102         }
103         pDoc->AddMergeViews(pView);
104         if (!m_bDetailView && pDoc->m_nGroups > 1)
105         {
106                 for (int nBuffer = 0; nBuffer < pDoc->m_nBuffers; nBuffer++)
107                 {
108                         CMergeEditView *pView2 = pDoc->GetView(pDoc->m_nGroups - 1, nBuffer);
109                         pView2->SendMessage(WM_INITIALUPDATE);
110                         pView2->CopyProperties(pDoc->GetView(0, nBuffer));
111                         pView2->SetStatusInterface(pDoc->GetView(0, nBuffer)->m_piMergeEditStatus);
112                 }
113                 m_wndSplitter.RecalcLayout();
114         }
115         return TRUE;
116 }
117
118 void CMergeEditSplitterView::OnInitialUpdate()
119 {
120         CView::OnInitialUpdate();
121         CMergeDoc * pDoc = dynamic_cast<CMergeDoc *>(GetDocument());
122
123 }
124
125 void CMergeEditSplitterView::OnDraw(CDC* pDC)
126 {
127 }
128
129 BOOL CMergeEditSplitterView::OnEraseBkgnd (CDC * pdc)
130 {
131   UNREFERENCED_PARAMETER(pdc);
132   return true;
133 }
134
135 void CMergeEditSplitterView::OnSize(UINT nType, int cx, int cy)
136 {
137         CView::OnSize(nType, cx, cy);
138         if (m_wndSplitter.m_hWnd)
139                 m_wndSplitter.MoveWindow(0, 0, cx, cy);
140 }