PATCH: [ 1323107 ] Patch for crash on save filenames with different cases
From anonymous submitter
Src: DirDcoc.cpp
+ PATCH: [ 1286629 ] print support
+ Submitted by Markus Rollmann
+ Src: MainFrm.cpp Merge.rc MergeEditView.cpp MergeEditView.h
+ Src/Common: SplitterWndEx.cpp SplitterWndEx.h
+ Src/editlib: ccrystaleditview.cpp
+ Src/Languages: *.rc
2005-10-05 Perry
PATCH: [ 1242008 ] Update status to binary if open fails because binary
#include "stdafx.h"
#include "SplitterWndEx.h"
+#include "MergeEditView.h" // For printing - MasterPrint()
#ifdef _DEBUG
#undef THIS_FILE
}
-
+void CSplitterWndEx::MasterPrint(CDC* pDC, CPrintInfo* pInfo)
+{
+ CRect rDraw = pInfo->m_rectDraw;
+ CSize sz = rDraw.Size();
+ int midX = sz.cx / 2;
+
+ // print left pane
+ pInfo->m_rectDraw.right = midX;
+ CMergeEditView* pLeftPane = (CMergeEditView*)GetPane(0,0);
+ pLeftPane->SlavePrint(pDC,pInfo);
+
+ // print right pane
+ pInfo->m_rectDraw = rDraw;
+ pInfo->m_rectDraw.left = midX;
+
+ CMergeEditView* pRightPane = (CMergeEditView*)GetPane(0,1);
+ pRightPane->SlavePrint(pDC,pInfo);
+}
void EqualizeRows();
void EqualizeCols();
+ void MasterPrint(CDC* pDC, CPrintInfo* pInfo);
+
private:
BOOL m_bBarLocked;
BOOL m_bResizePanes;
MENUITEM "Save &As...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "L&eft Read-only", ID_FILE_LEFT_READONLY
MENUITEM "Ri&ght Read-only", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Ñúõðàíè &êàòî...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Î&ò ëÿâî ñàìî çà ÷åòåíå", ID_FILE_LEFT_READONLY
MENUITEM "Îò äÿñ&íî ñàìî çà ÷åòåíå", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "&Anomena i desa...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Fes l'es&querra només de lectura", ID_FILE_LEFT_READONLY
MENUITEM "Fes la dre&ta només de lectura", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Áí´æΪ(&A)...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "×ó²àÖ»¶Á(&E)", ID_FILE_LEFT_READONLY
MENUITEM "ÓÒ²àÖ»¶Á(&G)", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "¥t¦s·sÀÉ(&A)...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "¥ªÃä°ßŪ(&E)", ID_FILE_LEFT_READONLY
MENUITEM "¥kÃä°ßŪ(&G)", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Save &As...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "L&eft Read-only", ID_FILE_LEFT_READONLY
MENUITEM "Ri&ght Read-only", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Gem &som...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "V&enstre skrivebeskyttet", ID_FILE_LEFT_READONLY
MENUITEM "&Højre skrivebeskyttet", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Opslaan &als...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Links all&een lezen", ID_FILE_LEFT_READONLY
MENUITEM "Re&chts alleen lezen", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Enregistrer &sous...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Côté gauc&he lecture seulement", ID_FILE_LEFT_READONLY
MENUITEM "Côté droi&t lecture seulement", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Speichern &unter...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "L&inks schreibgeschützt", ID_FILE_LEFT_READONLY
MENUITEM "R&echts schreibgeschützt", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Menté&s más néven...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Bal oldal csak &olvasható", ID_FILE_LEFT_READONLY
MENUITEM "Jobb oldal csak o&lvasható", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "S&alva con nome...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Fil&e di sinistra di Sola lettura", ID_FILE_LEFT_READONLY
MENUITEM "F&ile di destra di Sola lettura", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "\96¼\91O\82ð\95t\82¯\82Ä\95Û\91¶(&A)...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "\8d¶\82ð\93Ç\82Ý\8eæ\82è\90ê\97p(&E)", ID_FILE_LEFT_READONLY
MENUITEM "\89E\82ð\93Ç\82Ý\8eæ\82è\90ê\97p(&I)", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "´Ù¸¥ À̸§À¸·Î ÀúÀå(&A)...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "¿ÞÂÊÀ» ÀбâÀü¿ëÀ¸·Î(E&)", ID_FILE_LEFT_READONLY
MENUITEM "¿À¸¥ÂÊÀ» ÀбâÀü¿ëÀ¸·Î(&G)", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Lagre &som...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "V&entsre skrivebeskyttet", ID_FILE_LEFT_READONLY
MENUITEM "H&øyre skrivebeskyttet", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Zachowaj &jako...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Lewa tylko &odczyt", ID_FILE_LEFT_READONLY
MENUITEM "Prawa t&ylko odczyt", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Ñîõðàíèòü &êàê...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Ôàéë ñ&ëåâà òîëüêî äëÿ ÷òåíèÿ", ID_FILE_LEFT_READONLY
MENUITEM "Ôàéë ñ&ëåâà òîëüêî äëÿ ÷òåíèÿ", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Save &As...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "L&eft Read-only", ID_FILE_LEFT_READONLY
MENUITEM "Ri&ght Read-only", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Guardar &como...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Lado i&zquierdo sólo lectura", ID_FILE_LEFT_READONLY
MENUITEM "Lado d&erecho sólo lectura", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "Spara so&m...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "V&änster fil skrivskyddad", ID_FILE_LEFT_READONLY
MENUITEM "Hö&ger fil skrivskyddad", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
MENUITEM "&Farklý Kaydet", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "Salt Okunur S&ol", ID_FILE_LEFT_READONLY
MENUITEM "Salt Okunu&r Sað", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
void CMainFrame::UpdatePrediffersMenu()
{
- HMENU hMainMenu = GetMenu()->m_hMenu;
+ CMenu* menu = GetMenu();
+ if (menu == NULL)
+ {
+ return;
+ }
+
+ HMENU hMainMenu = menu->m_hMenu;
HMENU prediffersSubmenu = GetPrediffersSubmenu(hMainMenu);
if (prediffersSubmenu != NULL)
{
MENUITEM "Save &As...", ID_FILE_SAVEAS_RIGHT
END
MENUITEM SEPARATOR
+ MENUITEM "&Print...", ID_FILE_PRINT
+ MENUITEM "Print P&review", ID_FILE_PRINT_PREVIEW
+ MENUITEM SEPARATOR
MENUITEM "L&eft Read-only", ID_FILE_LEFT_READONLY
MENUITEM "Ri&ght Read-only", ID_FILE_RIGHT_READONLY
MENUITEM SEPARATOR
#include "WMGotoDlg.h"
#include "OptionsDef.h"
#include "SyntaxColors.h"
+#include "SplitterWndEx.h" // For printing (OnPrint, SlavePrint)
#ifdef _DEBUG
#define new DEBUG_NEW
pCmdUI->Enable(TRUE);
pCmdUI->SetCheck(m_bWordDiffHighlight);
}
+
+void CMergeEditView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
+{
+ ((CSplitterWndEx*)GetParentSplitter(this, FALSE))->MasterPrint(pDC, pInfo);
+}
+
+void CMergeEditView::SlavePrint(CDC* pDC, CPrintInfo* pInfo)
+{
+ CGhostTextView::OnPrint(pDC,pInfo);
+}
class IMergeEditStatus;
class CLocationView;
+class CMergeDoc;
/**
This class is the base class for WinMerge editor panels.
int GetTopLine() { return m_nTopLine; };
int GetScreenLines() { return CCrystalTextView::GetScreenLines(); };
void RepaintLocationPane();
+ void SlavePrint(CDC* pDC, CPrintInfo* pInfo);
// to customize the mergeview menu
static HMENU createScriptsSubmenu(HMENU hMenu);
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
virtual BOOL PreTranslateMessage(MSG* pMsg);
+ virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
// Implementation
ASSERT (nLine >= 0 && nLine < GetLineCount ());
ASSERT (m_nPrintLineHeight > 0);
int nLength = GetLineLength (nLine);
- if (nLength == 0)
- return m_nPrintLineHeight;
-
CString line;
- LPCTSTR pszChars = GetLineChars (nLine);
- ExpandChars (pszChars, 0, nLength, line, 0);
+ if (nLength == 0)
+ {
+ line = "X";
+ } else
+ {
+ LPCTSTR pszChars = GetLineChars (nLine);
+ ExpandChars (pszChars, 0, nLength, line, 0);
+ }
+
CRect rcPrintArea = m_rcPrintArea;
- pdc->DrawText (line, &rcPrintArea, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK | DT_CALCRECT);
+ pdc->DrawText (line, &rcPrintArea, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_CALCRECT);
return rcPrintArea.Height ();
}
void CCrystalTextView::
OnBeginPrinting (CDC * pdc, CPrintInfo * pInfo)
{
+ if (m_pnPages != NULL)
+ {
+ delete[] m_pnPages;
+ m_pnPages = NULL;
+ }
+
ASSERT (m_pnPages == NULL);
ASSERT (m_pPrintFont == NULL);
CFont *pDisplayFont = GetFont ();
void CCrystalTextView::
OnPrint (CDC * pdc, CPrintInfo * pInfo)
{
+ LOGFONT lf;
+ memset (&lf, 0, sizeof (lf));
+ _tcscpy (m_lfBaseFont.lfFaceName, _T ("FixedSys"));
+ lf.lfHeight = -MulDiv (11, pdc->GetDeviceCaps (LOGPIXELSY), 72);
+ lf.lfWeight = FW_NORMAL;
+ lf.lfItalic = FALSE;
+ lf.lfCharSet = DEFAULT_CHARSET;
+ lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfQuality = DEFAULT_QUALITY;
+ lf.lfPitchAndFamily = DEFAULT_PITCH;
+
+ CFont font;
+ font.CreateFontIndirect(&lf);
+ CFont* prevFont = pdc->SelectObject(&font);
+
+ const COLORREF defaultLineColor = RGB(0,0,0);
+ const COLORREF defaultBgColor = RGB(255,255,255);
+
+ // TODO: calc maximum chars on a line;
+ // GetScreenChars() doesn't work right while printing
+ const int maxLineChars = 100;
+
if (m_pnPages == NULL)
{
RecalcPageLayouts (pdc, pInfo);
}
ASSERT (pInfo->m_nCurPage >= 1 && (int) pInfo->m_nCurPage <= m_nPrintPages);
- int nLine = m_pnPages[pInfo->m_nCurPage - 1];
+ int nLine = m_pnPages[pInfo->m_nCurPage - 1];
int nEndLine = GetLineCount ();
+
if ((int) pInfo->m_nCurPage < m_nPrintPages)
- nEndLine = m_pnPages[pInfo->m_nCurPage];
- TRACE (_T ("Printing page %d of %d, lines %d - %d\n"), pInfo->m_nCurPage, m_nPrintPages,
- nLine, nEndLine - 1);
+ {
+ nEndLine = m_pnPages[pInfo->m_nCurPage];
+ }
+
+ TRACE (_T ("Printing page %d of %d, lines %d - %d\n"),
+ pInfo->m_nCurPage, m_nPrintPages,nLine, nEndLine - 1);
+
+ pdc->SetTextColor(defaultLineColor);
+ pdc->SetBkColor(defaultBgColor);
if (m_bPrintHeader)
- PrintHeader (pdc, pInfo->m_nCurPage);
+ {
+ PrintHeader (pdc, pInfo->m_nCurPage);
+ }
+
if (m_bPrintFooter)
- PrintFooter (pdc, pInfo->m_nCurPage);
+ {
+ PrintFooter (pdc, pInfo->m_nCurPage);
+ }
int y = m_rcPrintArea.top;
for (; nLine < nEndLine; nLine++)
{
+ CRect rcPrintRect = m_rcPrintArea;
+ rcPrintRect.top = y;
+
int nLineLength = GetLineLength (nLine);
- if (nLineLength == 0)
+ CString line;
+
+ if (nLineLength > 0)
{
- y += m_nPrintLineHeight;
- continue;
+ LPCTSTR pszChars = GetLineChars (nLine);
+ ExpandChars (pszChars, 0, nLineLength, line, 0);
}
- CRect rcPrintRect = m_rcPrintArea;
- rcPrintRect.top = y;
- LPCTSTR pszChars = GetLineChars (nLine);
- CString line;
- ExpandChars (pszChars, 0, nLineLength, line, 0);
- y += pdc->DrawText (line, &rcPrintRect, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK);
+ line += CString(' ', maxLineChars - line.GetLength());
+
+ BOOL bDrawWhitespace = FALSE;
+ COLORREF crBkgnd, crText;
+ GetLineColors (nLine, crBkgnd, crText, bDrawWhitespace);
+
+ pdc->SetTextColor((crText == CLR_NONE) ? defaultLineColor : crText);
+ pdc->SetBkColor((crBkgnd == CLR_NONE) ? defaultBgColor : crBkgnd);
+
+ CString str;
+ y += pdc->DrawText (line, &rcPrintRect, DT_LEFT | DT_NOPREFIX | DT_TOP );
}
+
+ pdc->SelectObject(prevFont);
}