Code: Select all
// Required to include: CreateDialog_functions.js
if ((! AkelPad.Include("CreateDialog_functions.js")) || ((! AkelPad.IsPluginRunning("Coder::HighLight")) && (AkelPad.Call("Coder::HighLight") == -1 /*UD_FAILED*/)))
WScript.Quit();
var oSys = AkelPad.SystemFunction();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + AkelPad.GetInstanceDll();
var hFocus;
var IDTEXTE = 2000;
var IDCASEB = 2001;
var IDREGEXPB = 2002;
var IDCOLOR1S = 2003;
var IDCOLOR2S = 2004;
var IDFONTS = 2005;
var IDCOLOR1E = 2006;
var IDCOLOR2E = 2007;
var IDFONTCB = 2008;
var IDMARKB = 2009;
var IDUNMARKB = 2010;
var IDCLOSEB = 2011;
var aDlg = [];
aDlg.Class = sClass;
aDlg.Title = WScript.ScriptName;
aDlg.Style = WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU;
aDlg.X = 400;
aDlg.Y = 200;
aDlg.W = 250;
aDlg.H = 208;
aDlg.Parent = AkelPad.GetMainWnd();
aDlg.Callback = DialogCallback;
aDlg.CtlFirst = 2000;
aDlg.CtlStyle = WS_VISIBLE;
aDlg.CtlFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
aDlg.SizeClt = true;
aDlg[IDTEXTE] = {X: 10, Y: 10, W: 230, H: 60, Class: "AkelEditW", Style: WS_TABSTOP | WS_BORDER | ES_MULTILINE};
aDlg[IDCASEB] = {X: 10, Y: 80, W: 120, H: 16, Class: "BUTTON", Title: "Case sensitive", Style: WS_TABSTOP | BS_AUTOCHECKBOX};
aDlg[IDREGEXPB] = {X: 10, Y: 100, W: 120, H: 16, Class: "BUTTON", Title: "Regular expressions", Style: WS_TABSTOP | BS_AUTOCHECKBOX};
aDlg[IDCOLOR1S] = {X: 10, Y: 125, W: 60, H: 13, Class: "STATIC", Title: "Text color:"};
aDlg[IDCOLOR2S] = {X: 80, Y: 125, W: 60, H: 13, Class: "STATIC", Title: "Background:"};
aDlg[IDFONTS] = {X: 150, Y: 125, W: 90, H: 13, Class: "STATIC", Title: "Font style:"};
aDlg[IDCOLOR1E] = {X: 10, Y: 140, W: 60, H: 21, Class: "AkelEditW", Style: WS_TABSTOP | WS_BORDER};
aDlg[IDCOLOR2E] = {X: 80, Y: 140, W: 60, H: 21, Class: "AkelEditW", Style: WS_TABSTOP | WS_BORDER};
aDlg[IDFONTCB] = {X: 150, Y: 140, W: 90, H: 100, Class: "COMBOBOX", Style: WS_TABSTOP | CBS_DROPDOWNLIST};
aDlg[IDMARKB] = {X: 10, Y: 175, W: 70, H: 23, Class: "BUTTON", Title: "&Mark", Style: WS_TABSTOP | BS_PUSHBUTTON};
aDlg[IDUNMARKB] = {X: 90, Y: 175, W: 70, H: 23, Class: "BUTTON", Title: "&Unmark", Style: WS_TABSTOP | BS_PUSHBUTTON};
aDlg[IDCLOSEB] = {X: 170, Y: 175, W: 70, H: 23, Class: "BUTTON", Title: "Close", Style: WS_TABSTOP | BS_PUSHBUTTON};
AkelPad.WindowRegisterClass(sClass);
CreateDialogWindow(aDlg);
SendMessage(aDlg[IDTEXTE].HWND, 3242 /*AEM_SETWORDWRAP*/, 2 /*AEWW_SYMBOL*/, 0);
oSys.Call("User32::SetWindowTextW", aDlg[IDTEXTE].HWND, "Text");
SendMessage(aDlg[IDTEXTE].HWND, 0x00B1 /*EM_SETSEL*/, 0, -1);
oSys.Call("User32::SetWindowTextW", aDlg[IDCOLOR1E].HWND, "#000000");
SendMessage(aDlg[IDCOLOR1E].HWND, 0x00B1 /*EM_SETSEL*/, 0, -1);
SendMessage(aDlg[IDCOLOR1E].HWND, 8 /*WM_KILLFOCUS*/, 0, 0);
oSys.Call("User32::SetWindowTextW", aDlg[IDCOLOR2E].HWND, "#9BFF9B");
SendMessage(aDlg[IDCOLOR2E].HWND, 0x00B1 /*EM_SETSEL*/, 0, -1);
SendMessage(aDlg[IDCOLOR2E].HWND, 8 /*WM_KILLFOCUS*/, 0, 0);
SendMessage(aDlg[IDCASEB].HWND, 241 /*BM_SETCHECK*/, 1, 0);
SendMessage(aDlg[IDFONTCB].HWND, 0x143 /*CB_ADDSTRING*/, 0, "0 - ignored");
SendMessage(aDlg[IDFONTCB].HWND, 0x143 /*CB_ADDSTRING*/, 0, "1 - normal");
SendMessage(aDlg[IDFONTCB].HWND, 0x143 /*CB_ADDSTRING*/, 0, "2 - bold");
SendMessage(aDlg[IDFONTCB].HWND, 0x143 /*CB_ADDSTRING*/, 0, "3 - italic");
SendMessage(aDlg[IDFONTCB].HWND, 0x143 /*CB_ADDSTRING*/, 0, "4 - bold italic");
SendMessage(aDlg[IDFONTCB].HWND, 0x14E /*CB_SETCURSEL*/, 0, 0);
oSys.Call("User32::SetFocus", hFocus = aDlg[IDTEXTE].HWND);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClass);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
hFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7 /*WM_SETFOCUS*/)
oSys.Call("User32::SetFocus", hFocus);
else if (uMsg == 273 /*WM_COMMAND*/)
{
var nLowParam = LoWord(wParam);
if (nLowParam == IDMARKB)
Mark();
else if (nLowParam == IDUNMARKB)
AkelPad.Call("Coder::HighLight", 3, 0);
else if ((nLowParam == IDCLOSEB) || (nLowParam == 2 /*IDCANCEL*/))
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
oSys.Call("User32::DestroyWindow", hWnd);
else if (uMsg == 2 /*WM_DESTROY*/)
oSys.Call("User32::PostQuitMessage", 0);
return 0;
}
function LoWord(nDWORD)
{
return nDWORD & 0xFFFF;
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendMessageW", hWnd, uMsg, wParam, lParam);
}
function PostMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}
function MessageBox(sText)
{
AkelPad.MessageBox(aDlg.HWND, sText, WScript.ScriptName, 0x30 /*MB_ICONWARNING*/);
}
function GetTextAE(hWnd)
{
AkelPad.SetEditWnd(hWnd);
var sText = AkelPad.GetTextRange(0, -1);
AkelPad.SetEditWnd(0);
return sText;
}
function Mark()
{
var sText = GetTextAE(aDlg[IDTEXTE].HWND);
var sTextColor = GetTextAE(aDlg[IDCOLOR1E].HWND) || "0";
var sBackColor = GetTextAE(aDlg[IDCOLOR2E].HWND) || "0";
var nFlags = SendMessage(aDlg[IDCASEB].HWND, 240 /*BM_GETCHECK*/, 0, 0) | 2 * SendMessage(aDlg[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0);
var nFontStyle = SendMessage(aDlg[IDFONTCB].HWND, 0x147 /*CB_GETCURSEL*/, 0, 0);
if (! sText)
{
MessageBox("No text to mark.");
oSys.Call("User32::SetFocus", aDlg[IDTEXTE].HWND);
return;
}
if ((sTextColor != "0") && (! /^#[\da-f]{6}$/i.test(sTextColor)))
{
MessageBox("Incorrect color code.");
oSys.Call("User32::SetFocus", aDlg[IDCOLOR1E].HWND);
return;
}
if ((sBackColor != "0") && (! /^#[\da-f]{6}$/i.test(sBackColor)))
{
MessageBox("Incorrect color code.");
oSys.Call("User32::SetFocus", aDlg[IDCOLOR2E].HWND);
return;
}
AkelPad.Call("Coder::HighLight", 2, sTextColor, sBackColor, nFlags, nFontStyle, -1, sText);
}