Menu

[r58]: / trunk / src / DiffViewer.cpp  Maximize  Restore  History

Download this file

128 lines (112 with data), 3.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "StdAfx.h"
#include "DiffViewer.h"
#include "SciLexer.h"
#include <stdio.h>
extern HINSTANCE hInst;
CDiffViewer::CDiffViewer(void)
{
Scintilla_RegisterClasses(hInst);
}
CDiffViewer::~CDiffViewer(void)
{
}
LRESULT CDiffViewer::SendEditor(UINT Msg, WPARAM wParam, LPARAM lParam)
{
if (m_directFunction)
{
return ((SciFnDirect) m_directFunction)(m_directPointer, Msg, wParam, lParam);
}
return ::SendMessage(m_hWnd, Msg, wParam, lParam);
}
bool CDiffViewer::Initialize()
{
m_hWnd = ::CreateWindow(
_T("Scintilla"),
_T("Source"),
WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX | WS_SYSMENU | WS_VSCROLL | WS_HSCROLL | WS_CLIPCHILDREN,
0, 0,
640, 480,
NULL,
0,
hInst,
0);
if (m_hWnd == NULL)
return false;
m_directFunction = SendMessage(m_hWnd, SCI_GETDIRECTFUNCTION, 0, 0);
m_directPointer = SendMessage(m_hWnd, SCI_GETDIRECTPOINTER, 0, 0);
// Set up the global default style. These attributes are used wherever no explicit choices are made.
//SetAStyle(STYLE_DEFAULT, black, white, (DWORD)CRegStdWORD(_T("Software\\TortoiseMerge\\LogFontSize"), 10),
// ((stdstring)(CRegStdString(_T("Software\\TortoiseMerge\\LogFontName"), _T("Courier New")))).c_str());
SetAStyle(STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOWTEXT), ::GetSysColor(COLOR_WINDOW), 10, "Courier New");
SendEditor(SCI_SETTABWIDTH, 4);
SendEditor(SCI_SETREADONLY, TRUE);
LRESULT pix = SendEditor(SCI_TEXTWIDTH, STYLE_LINENUMBER, (LPARAM)"_99999");
SendEditor(SCI_SETMARGINWIDTHN, 0, pix);
SendEditor(SCI_SETMARGINWIDTHN, 1);
SendEditor(SCI_SETMARGINWIDTHN, 2);
//Set the default windows colors for edit controls
SendEditor(SCI_STYLESETFORE, STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOWTEXT));
SendEditor(SCI_STYLESETBACK, STYLE_DEFAULT, ::GetSysColor(COLOR_WINDOW));
SendEditor(SCI_SETSELFORE, TRUE, ::GetSysColor(COLOR_HIGHLIGHTTEXT));
SendEditor(SCI_SETSELBACK, TRUE, ::GetSysColor(COLOR_HIGHLIGHT));
SendEditor(SCI_SETCARETFORE, ::GetSysColor(COLOR_WINDOWTEXT));
return true;
}
bool CDiffViewer::LoadFile(LPCTSTR filename)
{
SendEditor(SCI_SETREADONLY, FALSE);
SendEditor(SCI_CLEARALL);
SendEditor(EM_EMPTYUNDOBUFFER);
SendEditor(SCI_SETSAVEPOINT);
SendEditor(SCI_CANCEL);
SendEditor(SCI_SETUNDOCOLLECTION, 0);
FILE *fp = NULL;
_tfopen_s(&fp, filename, _T("rb"));
if (fp)
{
//SetTitle();
char data[4096];
int lenFile = fread(data, 1, sizeof(data), fp);
while (lenFile > 0)
{
SendEditor(SCI_ADDTEXT, lenFile,
reinterpret_cast<LPARAM>(static_cast<char *>(data)));
lenFile = fread(data, 1, sizeof(data), fp);
}
fclose(fp);
}
else
{
return false;
}
SendEditor(SCI_SETUNDOCOLLECTION, 1);
::SetFocus(m_hWnd);
SendEditor(EM_EMPTYUNDOBUFFER);
SendEditor(SCI_SETSAVEPOINT);
SendEditor(SCI_GOTOPOS, 0);
SendEditor(SCI_SETREADONLY, TRUE);
SendEditor(SCI_CLEARDOCUMENTSTYLE, 0, 0);
SendEditor(SCI_SETSTYLEBITS, 5, 0);
//SetAStyle(SCE_DIFF_DEFAULT, RGB(0, 0, 0));
SetAStyle(SCE_DIFF_COMMAND, RGB(0x0A, 0x24, 0x36));
SetAStyle(SCE_DIFF_POSITION, RGB(0xFF, 0, 0));
SetAStyle(SCE_DIFF_HEADER, RGB(0x80, 0, 0), RGB(0xFF, 0xFF, 0x80));
SetAStyle(SCE_DIFF_COMMENT, RGB(0, 0x80, 0));
SendEditor(SCI_STYLESETBOLD, SCE_DIFF_COMMENT, TRUE);
SetAStyle(SCE_DIFF_DELETED, ::GetSysColor(COLOR_WINDOWTEXT), RGB(0xFF, 0x80, 0x80));
SetAStyle(SCE_DIFF_ADDED, ::GetSysColor(COLOR_WINDOWTEXT), RGB(0x80, 0xFF, 0x80));
SendEditor(SCI_SETLEXER, SCLEX_DIFF);
//SendEditor(SCI_SETKEYWORDS, 0, (LPARAM)"Revision");
SendEditor(SCI_COLOURISE, 0, -1);
::ShowWindow(m_hWnd, SW_SHOW);
return true;
}
void CDiffViewer::SetAStyle(int style, COLORREF fore, COLORREF back, int size, const char *face)
{
SendEditor(SCI_STYLESETFORE, style, fore);
SendEditor(SCI_STYLESETBACK, style, back);
if (size >= 1)
SendEditor(SCI_STYLESETSIZE, style, size);
if (face)
SendEditor(SCI_STYLESETFONT, style, reinterpret_cast<LPARAM>(face));
}