Code: Select all
function Ranges()
{
var aEven = [["", sTxtAll],
["even", sTxtEven],
["odd", sTxtOdd]];
var aRotation = [["", sTxtNone],
["north", sTxtNorth + " (0°)"],
["east", sTxtEast + " (90°)"],
["south", sTxtSouth + " (180°)"],
["west", sTxtWest + " (270°)"],
["left", sTxtLeft + " (-90°)"],
["right", sTxtRight + " (+90°)"],
["down", sTxtDown + " (+180°)"]];
var aRange = aPDF[nPDF].R.split(/ /);
var nRange = 0;
var oRect = {};
var nWAY2;
var bCloseCB;
var aWnd = [];
var IDRPDFS = 2000;
var IDRRANGELV = 2001;
var IDRPAGESG = 2002;
var IDRFROMS = 2003;
var IDRFROME = 2004;
var IDRFROMB = 2005;
var IDRTOS = 2006;
var IDRTOE = 2007;
var IDRTOB = 2008;
var IDRLASTS = 2009;
var IDREVENS = 2010;
var IDREVENCB = 2011;
var IDRROTS = 2012;
var IDRROTCB = 2013;
var IDRNEWB = 2014;
var IDRREMOVEB = 2015;
var IDRCLEARB = 2016;
var IDRUPB = 2017;
var IDRDOWNB = 2018;
var IDROKB = 2019;
var IDRCANCELB = 2020;
aWnd[IDRPDFS] = {X: 10, Y: 10, W: 380, H: 13, T: oFSO.GetFileName(aPDF[nPDF].F), C: "STATIC", S: 0x50000080 /*WS_CHILD|WS_VISIBLE|SS_NOPREFIX*/};
aWnd[IDRRANGELV] = {X: 10, Y: 30, W: 160, H: 193, C: "SysListView32", S: 0x5081800D /*WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP|LVS_NOSORTHEADER|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT*/};
aWnd[IDRPAGESG] = {X: 180, Y: 35, W: 170, H: 144, T: sTxtPages, C: "BUTTON", S: 0x50000307 /*WS_CHILD|WS_VISIBLE|BS_CENTER|BS_GROUPBOX*/};
aWnd[IDRFROMS] = {X: 190, Y: 50, W: 70, H: 13, T: sTxtFrom, C: "STATIC", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/};
aWnd[IDRFROME] = {X: 190, Y: 65, W: 70, H: 21, C: "EDIT", S: 0x50010000 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP*/, ES: 0x00000200 /*WS_EX_CLIENTEDGE*/};
aWnd[IDRFROMB] = {X: 190, Y: 90, W: 70, H: 16, T: sTxtFromEnd, C: "BUTTON", S: 0x50010003 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX*/};
aWnd[IDRTOS] = {X: 270, Y: 50, W: 70, H: 13, T: sTxtTo, C: "STATIC", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/};
aWnd[IDRTOE] = {X: 270, Y: 65, W: 70, H: 21, C: "EDIT", S: 0x50010000 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP*/, ES: 0x00000200 /*WS_EX_CLIENTEDGE*/};
aWnd[IDRTOB] = {X: 270, Y: 90, W: 70, H: 16, T: sTxtFromEnd, C: "BUTTON", S: 0x50010003 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX*/};
aWnd[IDRLASTS] = {X: 190, Y: 110, W: 150, H: 13, T: "e = " + sTxtNumLastPage, C: "STATIC", S: 0x50000001 /*WS_CHILD|WS_VISIBLE|SS_CENTER*/};
aWnd[IDREVENS] = {X: 210, Y: 130, W: 110, H: 13, T: sTxtEven + "/" + sTxtOdd + ":", C: "STATIC", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/};
aWnd[IDREVENCB] = {X: 210, Y: 145, W: 110, H: 100, C: "COMBOBOX", S: 0x50010003 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST*/};
aWnd[IDRROTS] = {X: 210, Y: 187, W: 110, H: 13, T: sTxtRotation + ":", C: "STATIC", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/};
aWnd[IDRROTCB] = {X: 210, Y: 202, W: 110, H: 300, C: "COMBOBOX", S: 0x50010003 /*WS_CHILD|WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST*/};
aWnd[IDRNEWB] = {X: 360, Y: 30, W: 70, H: 23, T: sTxtNew, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/, K: "Insert"};
aWnd[IDRREMOVEB] = {X: 360, Y: 55, W: 70, H: 23, T: sTxtRemove, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/, K: "Alt+Del"};
aWnd[IDRCLEARB] = {X: 360, Y: 80, W: 70, H: 23, T: sTxtClear, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/, K: "Shift+Alt+Del"};
aWnd[IDRUPB] = {X: 360, Y: 105, W: 70, H: 23, T: sTxtMoveUp, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/, K: "Alt+Up"};
aWnd[IDRDOWNB] = {X: 360, Y: 130, W: 70, H: 23, T: sTxtMoveDown, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/, K: "Alt+Down"};
aWnd[IDROKB] = {X: 360, Y: 175, W: 70, H: 23, T: sTxtOK, C: "BUTTON", S: 0x50000001 /*WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON*/};
aWnd[IDRCANCELB] = {X: 360, Y: 200, W: 70, H: 23, T: sTxtCancel, C: "BUTTON", S: 0x50000000 /*WS_CHILD|WS_VISIBLE*/};
GetWindowPos(0, oRect);
nWAY2 = oRect.Y + oRect.H;
GetWindowPos(aDlg[IDPDFLV].HWND, oRect);
aWnd.W = Scale.X(440) + oSys.Call("User32::GetSystemMetrics", 7 /*SM_CXFIXEDFRAME*/) * 2;
aWnd.H = Scale.Y(233) + oSys.Call("User32::GetSystemMetrics", 8 /*SM_CYFIXEDFRAME*/) * 2 + oSys.Call("User32::GetSystemMetrics", 4 /*SM_CYCAPTION*/);
aWnd.X = oRect.X + (oRect.W - aWnd.W) / 2;
GetItemRectLV(aDlg[IDPDFLV].HWND, nPDF, oRect);
aWnd.Y = (oRect.Y2 + aWnd.H < nWAY2) ? oRect.Y2 + 2 : oRect.Y1 - aWnd.H - 2;
aWnd.T = sTxtPagesToCopy + "/" + sTxtRotation;
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClass, //lpClassName
aWnd.T, //lpWindowName
0x90C80000, //dwStyle=WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU
aWnd.X, //x
aWnd.Y, //y
aWnd.W, //nWidth
aWnd.H, //nHeight
hDlg, //hWndParent
0, //hMenu
hInstDLL, //hInstance
RangeCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
nOutPages -= aPDF[nPDF].OP;
nOutRanges -= aPDF[nPDF].OR;
oSys.Call("User32::EnableWindow", hDlg, 0);
AkelPad.WindowGetMessage();
nOutPages += aPDF[nPDF].OP;
nOutRanges += aPDF[nPDF].OR;
function RangeCallback(hWnd, uMsg, wParam, lParam)
{
var nID, nCode, i;
if (uMsg == 1 /*WM_CREATE*/)
{
aWnd.HWND = hWnd;
if (! hMainWnd)
SendMessage(hWnd, 128 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIconSmall);
for (i = IDRPDFS; i < aWnd.length; ++i)
{
aWnd[i].HWND = oSys.Call("User32::CreateWindowExW",
aWnd[i].ES, //dwExStyle
aWnd[i].C, //lpClassName
aWnd[i].T, //lpWindowName
aWnd[i].S, //dwStyle
Scale.X(aWnd[i].X), //x
Scale.Y(aWnd[i].Y), //y
Scale.X(aWnd[i].W), //nWidth
Scale.Y(aWnd[i].H), //nHeight
hWnd, //hWndParent
i, //ID
hInstDLL, //hInstance
0); //lpParam
SendMessage(aWnd[i].HWND, 48 /*WM_SETFONT*/, hGuiFont, 1);
}
SendMessage(aWnd[IDRFROME].HWND, 197 /*EM_SETLIMITTEXT*/, 6, 0);
SendMessage(aWnd[IDRTOE].HWND, 197 /*EM_SETLIMITTEXT*/, 6, 0);
for (i = 0; i < aEven.length; ++i)
SendMessage(aWnd[IDREVENCB].HWND, 323 /*CB_ADDSTRING*/, i, aEven[i][1]);
for (i = 0; i < aRotation.length; ++i)
SendMessage(aWnd[IDRROTCB].HWND, 323 /*CB_ADDSTRING*/, i, aRotation[i][1]);
FillRangeLV();
aWnd.Focus = aWnd[IDRRANGELV].HWND;
}
else if (uMsg == 0x8001 /*WM_APP+1*/)
oSys.Call("User32::SetFocus", lParam);
else if (uMsg == 6 /*WM_ACTIVATE*/)
{
if (wParam == 0 /*WA_INACTIVE*/)
aWnd.Focus = oSys.Call("User32::GetFocus");
}
else if (uMsg == 7 /*WM_SETFOCUS*/)
oSys.Call("User32::SetFocus", aWnd.Focus);
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
nID = oSys.Call("User32::GetDlgCtrlID", oSys.Call("User32::GetFocus"))
if (wParam == 0x0D /*VK_RETURN*/)
{
if ((nID < IDRNEWB) && bCloseCB && ! Ctrl() && ! Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDROKB, 0);
}
else if ((nID == IDRRANGELV) && ! Ctrl() && ! Shift())
{
if (wParam == 0x2D /*VK_INSERT*/)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDRNEWB, 0);
else if (wParam == 0x5D /*VK_APPS*/)
MenuRangeLV();
}
}
else if (uMsg == 260 /*WM_SYSKEYDOWN*/)
{
if (oSys.Call("User32::GetFocus") == aWnd[IDRRANGELV].HWND)
{
if (wParam == 0x2E /*VK_DELETE*/)
PostMessage(hWnd, 273 /*WM_COMMAND*/, Shift() ? IDRCLEARB : IDRREMOVEB, 0);
else if (wParam == 0x26 /*VK_UP*/)
{
if (! Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDRUPB, 0);
}
else if (wParam == 0x28 /*VK_DOWN*/)
{
if (! Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDRDOWNB, 0);
}
}
}
else if (uMsg == 78 /*WM_NOTIFY*/)
{
if (wParam == IDRRANGELV)
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/))
{
case -101 : //LVN_ITEMCHANGED
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, 3 /*DT_DWORD*/) & 0x2 /*LVIS_SELECTED*/)
{
nRange = GetCurSelLV(aWnd[IDRRANGELV].HWND);
SetPages();
EnableControlsRange();
}
break;
case -2 : //NM_CLICK
case -3 : //NM_DBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, 3 /*DT_DWORD*/) == -1)
SetCurSelLV(aWnd[IDRRANGELV].HWND, GetCurFocLV(aWnd[IDRRANGELV].HWND));
break;
case -5 : //NM_RCLICK
case -6 : //NM_RDBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, 3 /*DT_DWORD*/) == -1)
SetCurSelLV(aWnd[IDRRANGELV].HWND, GetCurFocLV(aWnd[IDRRANGELV].HWND));
MenuRangeLV(_PtrAdd(lParam, _X64 ? 44 : 32) /*NMITEMACTIVATE.ptAction*/);
break;
}
}
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
bCloseCB = 1;
if ((nID == IDRFROME) || (nID == IDRTOE))
{
if (nCode == 0x0300 /*EN_CHANGE*/)
SetRange();
EnableControlsRange();
}
else if ((nID == IDRFROMB) || (nID == IDRTOB))
SetRange();
else if ((nID == IDREVENCB) || (nID == IDRROTCB))
{
if ((nCode == 1 /*CBN_SELCHANGE*/) || (nCode == 8 /*CBN_CLOSEUP*/))
{
SetRange();
EnableControlsRange();
if (nCode == 8 /*CBN_CLOSEUP*/)
bCloseCB = 0;
}
}
else if ((nID >= IDRNEWB) && (nID <= IDRDOWNB))
{
if (oSys.Call("User32::IsWindowEnabled", aWnd[nID].HWND))
{
if (nID == IDRNEWB)
NewRange();
else if (nID == IDRREMOVEB)
RemoveRange();
else if (nID == IDRCLEARB)
ClearRange();
else if (nID == IDRUPB)
MoveUpRange();
else
MoveDownRange();
for (i = IDRNEWB; i <= IDRDOWNB; ++i)
SendMessage(aWnd[i].HWND, 244 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
SendMessage(aWnd[IDROKB].HWND, 244 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 1);
EnableControlsRange();
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, aWnd[IDRRANGELV].HWND);
}
}
else if (nID == IDROKB)
{
aPDF[nPDF].R = aRange.join(" ");
CheckRanges(nPDF);
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if ((nID == IDRCANCELB) || (nID == 2 /*IDCANCEL*/))
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
oSys.Call("User32::EnableWindow", hDlg, 1);
oSys.Call("User32::DestroyWindow", hWnd);
}
else if (uMsg == 2 /*WM_DESTROY*/)
oSys.Call("User32::PostQuitMessage", 0);
return 0;
}
function EnableControlsRange()
{
var nFrom = SendMessage(aWnd[IDRFROME].HWND, 14 /*WM_GETTEXTLENGTH*/, 0, 0);
var nTo = SendMessage(aWnd[IDRTOE].HWND, 14 /*WM_GETTEXTLENGTH*/, 0, 0);
var nEven = SendMessage(aWnd[IDREVENCB].HWND, 327 /*CB_GETCURSEL*/, 0, 0);
var nRot = SendMessage(aWnd[IDRROTCB].HWND, 327 /*CB_GETCURSEL*/, 0, 0);
var lpLVCOLUMN = AkelPad.MemAlloc(_X64 ? 56 : 44 /*sizeof(LVCOLUMN)*/);
var lpText = AkelPad.MemAlloc(64);
oSys.Call("User32::EnableWindow", aWnd[IDRFROMB].HWND, (nFrom || (aRange.length > 1)));
oSys.Call("User32::EnableWindow", aWnd[IDRTOS].HWND, (nFrom || (aRange.length > 1)));
oSys.Call("User32::EnableWindow", aWnd[IDRTOE].HWND, (nFrom || (aRange.length > 1)));
oSys.Call("User32::EnableWindow", aWnd[IDRTOB].HWND, (nFrom || (aRange.length > 1)) && nTo);
oSys.Call("User32::EnableWindow", aWnd[IDRNEWB].HWND, nFrom);
oSys.Call("User32::EnableWindow", aWnd[IDRREMOVEB].HWND, aRange.length > 1);
oSys.Call("User32::EnableWindow", aWnd[IDRCLEARB].HWND, (nFrom || (aRange.length > 1)) || (nEven > 0) || (nRot > 0));
oSys.Call("User32::EnableWindow", aWnd[IDRUPB].HWND, nRange > 0);
oSys.Call("User32::EnableWindow", aWnd[IDRDOWNB].HWND, nRange < aRange.length - 1);
AkelPad.MemCopy(lpText, sTxtRanges + (aRange.length ? " (" + (nRange + 1) + "/" + aRange.length + ")" : ""), 1 /*DT_UNICODE*/);
AkelPad.MemCopy(lpLVCOLUMN, 4 /*LVCF_TEXT*/, 3 /*DT_DWORD*/); //mask
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, _X64 ? 16 : 12), lpText, 2 /*DT_QWORD*/);
SendMessage(aWnd[IDRRANGELV].HWND, 4192 /*LVM_SETCOLUMNW*/, 0, lpLVCOLUMN);
AkelPad.MemFree(lpLVCOLUMN);
AkelPad.MemFree(lpText);
}
function SetPages()
{
var aP = aRange[nRange].split(/-/);
var aMatch;
var i;
if (! aP[1]) aP[1] = "";
i = 0;
if (aMatch = aRange[nRange].match(/north|east|south|west|left|right|down/))
{
for (; i < aRotation.length; ++i)
{
if (aRotation[i][0] == aMatch[0])
break;
}
}
SendMessage(aWnd[IDRROTCB].HWND, 334 /*CB_SETCURSEL*/, i, 0);
i = 0;
if (aMatch = aRange[nRange].match(/even|odd/))
{
for (; i < aEven.length; ++i)
{
if (aEven[i][0] == aMatch[0])
break;
}
}
SendMessage(aWnd[IDREVENCB].HWND, 334 /*CB_SETCURSEL*/, i, 0);
SendMessage(aWnd[IDRFROMB].HWND, 241 /*BM_SETCHECK*/, /^r/.test(aP[0]), 0);
SendMessage(aWnd[IDRTOB].HWND, 241 /*BM_SETCHECK*/, /^r/.test(aP[1]), 0);
if (/end|\d+/.test(aP[0]))
aP[0] = aP[0].replace(/^r?(e(?=nd)|\d+).*/, "$1");
else
aP[0] = "";
SetWindowText(aWnd[IDRFROME].HWND, aP[0]);
SetWindowText(aWnd[IDRTOE].HWND, aP[1].replace(/^r?(e(?=nd)|\d+).*/, "$1"));
}
function SetRange()
{
var sFrom = GetWindowText(aWnd[IDRFROME].HWND);
var sTo = GetWindowText(aWnd[IDRTOE].HWND);
if (sFrom || (aRange.length > 1))
{
if (sFrom.toLowerCase() == "e")
sFrom = "end";
else if (/^0*[1-9]\d*$/.test(sFrom))
sFrom = parseInt(sFrom, 10).toString();
else
sFrom = "1";
if (SendMessage(aWnd[IDRFROMB].HWND, 240 /*BM_GETCHECK*/, 0, 0))
sFrom = "r" + sFrom;
}
else
{
sFrom = aEven[SendMessage(aWnd[IDREVENCB].HWND, 327 /*CB_GETCURSEL*/, 0, 0)][0];
sTo = "";
}
if (sTo)
{
if (sTo.toLowerCase() == "e")
sTo = "end";
else if (/^0*[1-9]\d*$/.test(sTo))
sTo = parseInt(sTo, 10).toString();
else
sTo = aPDF[nPDF].TP;
if (SendMessage(aWnd[IDRTOB].HWND, 240 /*BM_GETCHECK*/, 0, 0))
sTo = "r" + sTo;
sTo = "-" + sTo + aEven[SendMessage(aWnd[IDREVENCB].HWND, 327 /*CB_GETCURSEL*/, 0, 0)][0];
}
aRange[nRange] = sFrom + sTo + aRotation[SendMessage(aWnd[IDRROTCB].HWND, 327 /*CB_GETCURSEL*/, 0, 0)][0];
SetItemTextLV(aWnd[IDRRANGELV].HWND, nRange, 0, aRange[nRange] ? aRange[nRange] : sTxtAll);
}
function FillRangeLV()
{
var lpLVCOLUMN = AkelPad.MemAlloc(_X64 ? 56 : 44 /*sizeof(LVCOLUMN)*/);
var i;
AkelPad.MemCopy(lpLVCOLUMN, 4 /*LVCF_TEXT*/, 3 /*DT_DWORD*/); //mask
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, _X64 ? 16 : 12), AkelPad.MemStrPtr(sTxtRanges), 2 /*DT_QWORD*/); //pszText
SendMessage(aWnd[IDRRANGELV].HWND, 4193 /*LVM_INSERTCOLUMNW*/, 0, lpLVCOLUMN);
AkelPad.MemFree(lpLVCOLUMN);
for (i = 0; i < aRange.length; ++i)
InsertItemLV(aWnd[IDRRANGELV].HWND, i, aRange[i]);
SendMessage(aWnd[IDRRANGELV].HWND, 4150 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0, 0x0421 /*LVS_EX_INFOTIP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES*/);
SendMessage(aWnd[IDRRANGELV].HWND, 4126 /*LVM_SETCOLUMNWIDTH*/, 0, -2 /*LVSCW_AUTOSIZE_USEHEADER*/);
SetCurSelLV(aWnd[IDRRANGELV].HWND, nRange);
}
function MenuRangeLV(lpPoint)
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var hMenu = oSys.Call("User32::CreatePopupMenu");
var oRect;
var nX, nY;
var nCmd;
var i;
//menu from mouse r-click
if (lpPoint)
{
oSys.Call("User32::ClientToScreen", aWnd[IDRRANGELV].HWND, lpPoint);
nX = AkelPad.MemRead(_PtrAdd(lpPoint, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPoint, 4), 3 /*DT_DWORD*/);
}
//menu from keyboard
else
{
oRect = {};
GetItemRectLV(aWnd[IDRRANGELV].HWND, nRange, oRect);
nX = oRect.X1;
nY = oRect.Y2;
}
for (i = IDRNEWB; i <= IDRDOWNB; ++i)
oSys.Call("User32::AppendMenuW", hMenu, oSys.Call("User32::IsWindowEnabled", aWnd[i].HWND) ? MF_STRING : MF_GRAYED, i, aWnd[i].T + "\t" + aWnd[i].K);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, aWnd.HWND, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd)
PostMessage(aWnd.HWND, 273 /*WM_COMMAND*/, nCmd, 0);
}
function NewRange()
{
aRange.splice(nRange, 0, aRange[nRange]);
InsertItemLV(aWnd[IDRRANGELV].HWND, nRange, aRange[nRange]);
SetCurSelLV(aWnd[IDRRANGELV].HWND, ++nRange);
}
function RemoveRange()
{
aRange.splice(nRange, 1);
DeleteItemLV(aWnd[IDRRANGELV].HWND, nRange);
if (nRange >= aRange.length)
--nRange;
SetCurSelLV(aWnd[IDRRANGELV].HWND, nRange);
}
function ClearRange()
{
aRange.length = 1;
SendMessage(aWnd[IDRRANGELV].HWND, 4105 /*LVM_DELETEALLITEMS*/, 0, 0);
aRange[0] = "";
InsertItemLV(aWnd[IDRRANGELV].HWND, 0, aRange[0]);
SetCurSelLV(aWnd[IDRRANGELV].HWND, 0);
}
function MoveUpRange()
{
aRange.splice(nRange - 1, 0, aRange[nRange]);
aRange.splice(nRange + 1, 1);
DeleteItemLV(aWnd[IDRRANGELV].HWND, nRange--);
InsertItemLV(aWnd[IDRRANGELV].HWND, nRange);
SetCurSelLV(aWnd[IDRRANGELV].HWND, nRange);
}
function MoveDownRange()
{
aRange.splice(nRange + 2, 0, aRange[nRange]);
aRange.splice(nRange, 1);
DeleteItemLV(aWnd[IDRRANGELV].HWND, nRange++);
InsertItemLV(aWnd[IDRRANGELV].HWND, nRange);
SetCurSelLV(aWnd[IDRRANGELV].HWND, nRange);
}
}
function Open()
{
if (oFSO.FileExists(aPDF[nPDF].F))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + aPDF[nPDF].F + '"');
}
else
MsgBox(aPDF[nPDF].F + "\n\n" + sTxtNoFile);
}
function Refresh(bAll)
{
var nPDFCur = nPDF;
var oFile = {};
var sOutput;
var aMatch;
var sPass;
var bDelete;
var i;
if (! IsPDFtkExists())
return;
bRefreshing = 1;
EnableControlsDlg();
nTotalPages = 0;
nOutPages = 0;
nOutRanges = 0;
for (i = 0; i < aPDF.length; ++i)
{
if ((! bAll) && aPDF[i].TP)
{
nTotalPages += aPDF[i].TP;
nOutPages += aPDF[i].OP;
nOutRanges += aPDF[i].OR;
}
else
{
SetCurSelLV(aDlg[IDPDFLV].HWND, i);
SetItemTextLV(aDlg[IDPDFLV].HWND, i, 1, sTxtReading);
if (oFile[aPDF[i].F.toUpperCase()])
{
aPDF[i].P = oFile[aPDF[i].F.toUpperCase()].P;
aPDF[i].TP = oFile[aPDF[i].F.toUpperCase()].TP;
SetItemTextLV(aDlg[IDPDFLV].HWND, i, 1, aPDF[i].TP);
CheckRanges(i);
nTotalPages += aPDF[i].TP;
nOutPages += aPDF[i].OP;
nOutRanges += aPDF[i].OR;
}
else
{
sPass = aPDF[i].P;
for (;;)
{
sOutput = RunCmd('"' + sPDFtkExe + '" "' + aPDF[i].F + '" input_pw "' + sPass + '" dump_data_annots');
aMatch = sOutput.match(/NumberOfPages: (\d+)/);
if (aMatch && (aMatch.length == 2))
{
aPDF[i].P = sPass;
aPDF[i].TP = parseInt(aMatch[1]);
SetItemTextLV(aDlg[IDPDFLV].HWND, i, 1, aPDF[i].TP);
CheckRanges(i);
nTotalPages += aPDF[i].TP;
nOutPages += aPDF[i].OP;
nOutRanges += aPDF[i].OR;
break;
}
else
{
if ((nExitCode == 1) && /OWNER PASSWORD REQUIRED/.test(sOutput))
{
if (oFile[aPDF[i].F.toUpperCase()])
sPass = oFile[aPDF[i].F.toUpperCase()].P;
else
{
sPass = EnterPassword(oFSO.GetFileName(aPDF[i].F), sPass);
if (typeof sPass != "string")
{
bDelete = 1;
break;
}
}
}
else
{
bDelete = 1;
break;
}
}
}
if (bDelete)
{
if (i <= nPDFCur)
--nPDFCur;
aPDF.splice(i, 1);
DeleteItemLV(aDlg[IDPDFLV].HWND, i);
}
}
}
if (bDelete)
{
bDelete = 0;
--i;
}
else
oFile[aPDF[i].F.toUpperCase()] = {P: aPDF[i].P, TP: aPDF[i].TP};
}
bRefreshing = 0;
oSys.Call("User32::UpdateWindow", aDlg[IDPDFLV].HWND);
SetCurSelLV(aDlg[IDPDFLV].HWND, nPDFCur);
EnableControlsDlg();
if (aPDF.length)
{
if (! bCreating)
{
SetDefButton();
PostMessage(hDlg, 0x8001 /*WM_APP+1*/, 0, aDlg[IDPDFLV].HWND);
}
}
else
SetDefButton(IDADDB, IDADDB);
}
function CheckRanges(nPDF)
{
var aR;
var nFrom;
var nTo;
var nTmp;
var aMatch;
var i;
aPDF[nPDF].OP = 0;
aR = aPDF[nPDF].R.toLowerCase().replace(/^ +| +$/g, "").split(/ +/);
for (i = 0; i < aR.length; ++i)
{
aR[i] = aR[i].replace(/^-+|-+$/g, "").split(/-+/, 2);
if (aR[i][0])
{
if (/^r?(end|\d+)(north|east|south|west|left|right|down)?$/.test(aR[i][0]))
{
aMatch = aR[i][0].match(/end|\d+/);
if (aMatch[0] == "end")
nFrom = aPDF[nPDF].TP;
else
{
nFrom = parseInt(aMatch[0], 10);
if (nFrom == 0)
nFrom = 1;
else if (nFrom > aPDF[nPDF].TP)
nFrom = aPDF[nPDF].TP;
aR[i][0] = aR[i][0].replace(/\d+/, nFrom.toString());
}
if (/^r/.test(aR[i][0]))
nFrom = aPDF[nPDF].TP - nFrom + 1;
if (/north|east|south|west|left|right|down/.test(aR[i][0]))
aR[i][1] = "";
nTo = nFrom;
}
else if (/^(even|odd)?(north|east|south|west|left|right|down)?$/.test(aR[i][0]))
{
aR[i][1] = "";
nFrom = 1;
nTo = aPDF[nPDF].TP;
if (nFrom == nTo)
aR[i][0] = aR[i][0].replace(/even|odd/, "");
else
{
if (/even/.test(aR[i][0]))
{
if ((nFrom % 2) == 1)
++nFrom;
if ((nTo % 2) == 1)
--nTo;
nTo = nFrom + (nTo - nFrom) / 2;
}
else if (/odd/.test(aR[i][0]))
{
if ((nFrom % 2) == 0)
++nFrom;
if ((nTo % 2) == 0)
--nTo;
nTo = nFrom + (nTo - nFrom) / 2;
}
}
}
else
aR[i][0] = "";
}
if (! aR[i][0])
{
aR[i][1] = "";
nFrom = 1;
nTo = aPDF[nPDF].TP;
}
if (aR[i][1])
{
if (/^r?(end|\d+)(even|odd)?(north|east|south|west|left|right|down)?$/.test(aR[i][1]))
{
aMatch = aR[i][1].match(/end|\d+/);
if (aMatch[0] == "end")
nTo = aPDF[nPDF].TP;
else
{
nTo = parseInt(aMatch[0], 10);
if (nTo == 0)
nTo = 1;
else if (nTo > aPDF[nPDF].TP)
nTo = aPDF[nPDF].TP;
aR[i][1] = aR[i][1].replace(/\d+/, nTo.toString());
}
if (/^r/.test(aR[i][1]))
nTo = aPDF[nPDF].TP - nTo + 1;
if (nFrom == nTo)
aR[i][1] = aR[i][1].replace(/even|odd/, "");
else
{
if (nFrom > nTo)
{
nTmp = nFrom;
nFrom = nTo;
nTo = nTmp;
}
if (/even/.test(aR[i][1]))
{
if ((nFrom % 2) == 1)
++nFrom;
if ((nTo % 2) == 1)
--nTo;
nTo = nFrom + (nTo - nFrom) / 2;
}
else if (/odd/.test(aR[i][1]))
{
if ((nFrom % 2) == 0)
++nFrom;
if ((nTo % 2) == 0)
--nTo;
nTo = nFrom + (nTo - nFrom) / 2;
}
}
}
else
aR[i][1] = "";
}
aR[i] = aR[i][0] + (aR[i][1] ? ("-" + aR[i][1]) : "");
aPDF[nPDF].OP += nTo - nFrom + 1;
}
aPDF[nPDF].R = aR.join(" ");
aPDF[nPDF].OR = aR.length;
SetItemTextLV(aDlg[IDPDFLV].HWND, nPDF, 2, aPDF[nPDF].R ? aPDF[nPDF].R : sTxtAll);
SetItemTextLV(aDlg[IDPDFLV].HWND, nPDF, 3, aPDF[nPDF].OP);
}
function Create()
{
if (IsPDFtkExists())
{
if (! oFSO.FolderExists(sLastDir))
sLastDir = sScriptDir;
if (nTab == 0)
Collate();
else if (nTab == 1)
Shuffle();
else if (nTab == 2)
Split();
else if (nTab == 3)
Watermark();
else if (nTab == 4)
Bookmarks();
else if (nTab == 5)
PDFInfo();
}
}
function Collate()
{
var sOutFile;
var sTmpFile;
var sTmpDir;
var sFiles;
var sPass;
var sHandle;
var sRanges;
var nMaxRange;
var aRange;
var nRange;
var sCmd;
var sCmdOut;
var bFileExists;
var aInList;
var aTmp;
var nChoice;
var i, n;
if (bCollateW && ! oFSO.FileExists(sWaterPDF))
{
nTab = 3;
SendMessage(aDlg[IDTABTC].HWND, 4912 /*TCM_SETCURFOCUS*/, nTab, 0);
SendMessage(aDlg[IDWATERPDFE].HWND, 177 /*EM_SETSEL*/, 0, -1);
oSys.Call("User32::SetFocus", aDlg[IDWATERPDFE].HWND);
MsgBox(sWaterPDF ? sWaterPDF + "\n\n" + sTxtNoFile : sTxtNoWaterFile);
return;
}
if (! (sOutFile = GetOpenSaveFileName(1, "", "pdf", GetFileUniqueName(sLastDir, oFSO.GetFileName(aPDF[nPDF].F)))))
return;
if (! (sTmpDir = CreateTempDir()))
{
MsgBox(sTxtNoTempDir);
return;
}
bCreating = 1;
EnableControlsDlg();
SetDefButton(IDCREATEB, IDCREATEB);
sFiles = '';
sPass = '';
sRanges = '';
nMaxRange = 10;
bFileExists = oFSO.FileExists(sOutFile);
aInList = [];
aTmp = [];
nExitCode = 0
if (nOutRanges > nMaxRange)
{
nRange = 0;
i = 0;
for (n = 1; n <= nOutRanges; ++n)
{
if (nRange == 0)
{
aRange = aPDF[i].R.split(" ");
sHandle = GetInputPDFHandle(i);
sFiles += sHandle + '="' + aPDF[i].F + '" ';
if (aPDF[i].P)
sPass += sHandle + '="' + aPDF[i].P + '" ';
if (bFileExists && (aPDF[i].F.toUpperCase() == sOutFile.toUpperCase()))
aInList.push(i);
}
sRanges += sHandle + aRange[nRange] + ' ';
if ((n % nMaxRange == 0) || (n == nOutRanges))
{
if (sPass)
sPass = 'input_pw ' + sPass;
aTmp.push(GetTempFile(sTmpDir));
sCmdOut = RunCmd('"' + sPDFtkExe + '" ' + sFiles + sPass + 'cat ' + sRanges + 'output "' + aTmp[aTmp.length - 1] + '"');
if (nExitCode > 0)
{
if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
break;
}
if (nRange == aRange.length - 1)
{
sFiles = '';
sPass = '';
}
sRanges = '';
}
if (nRange == aRange.length - 1)
{
++i;
nRange = 0;
}
else
++nRange;
}
while ((aTmp.length > 1) && (nExitCode == 0))
{
sFiles = '';
n = aTmp.length;
for (i = 0; i < n; ++i)
{
sFiles += '"' + aTmp[i] + '" ';
if (((i + 1) % nMaxRange == 0) || (i + 1 == n))
{
aTmp.push(GetTempFile(sTmpDir));
sCmdOut = RunCmd('"' + sPDFtkExe + '" ' + sFiles + 'cat output "' + aTmp[aTmp.length - 1] + '"');
if (nExitCode > 0)
{
if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
break;
}
sFiles = '';
}
}
aTmp.splice(0, n);
}
if (nExitCode == 0)
{
if (bCollateW && oFSO.FileExists(sWaterPDF))
sCmd = '"' + sPDFtkExe + '" "' + aTmp[0] + '" ' + GetWaterString();
else
sCmd = '"' + sPDFtkExe + '" "' + aTmp[0] + '" ' + 'cat ';
}
}
else
{
for (i = 0; i < aPDF.length; ++i)
{
sHandle = GetInputPDFHandle(i);
sFiles += sHandle + '="' + aPDF[i].F + '" ';
sRanges += sHandle + aPDF[i].R.replace(/ /g, ' ' + sHandle) + ' ';
if (aPDF[i].P)
sPass += sHandle + '="' + aPDF[i].P + '" ';
if (bFileExists && (aPDF[i].F.toUpperCase() == sOutFile.toUpperCase()))
aInList.push(i);
}
if (sPass)
sPass = 'input_pw ' + sPass;
if (bCollateW && oFSO.FileExists(sWaterPDF))
{
aTmp[0] = GetTempFile(sTmpDir);
sCmdOut = RunCmd('"' + sPDFtkExe + '" ' + sFiles + sPass + 'cat ' + sRanges + 'output "' + aTmp[0] + '"');
if (nExitCode == 0)
sCmd = '"' + sPDFtkExe + '" "' + aTmp[0] + '" ' + GetWaterString();
else if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
}
else
sCmd = '"' + sPDFtkExe + '" ' + sFiles + sPass + 'cat ' + sRanges;
}
if (nExitCode == 0)
{
sTmpFile = bFileExists ? GetTempFile(sTmpDir) : sOutFile;
sCmdOut = RunCmd(sCmd + 'output "' + sTmpFile + '"' + GetPermissString());
if (nExitCode == 0)
{
if (bFileExists)
{
while (sOutFile)
{
if (DeleteFile(sOutFile))
{
CopyFile(sTmpFile, sOutFile, 1);
break;
}
else
{
if (MsgBox(sOutFile + "\n\n" + sTxtWriteError + "\n" + sTxtSelOtherName, 0, 0, [sTxtOK, sTxtCancel]) == 0)
sOutFile = GetOpenSaveFileName(1, "", "pdf", sOutFile);
else
sOutFile = "";
}
}
}
if (oFSO.FileExists(sOutFile))
{
if (aInList.length)
{
for (i = 0; i < aInList.length; ++i)
aPDF[aInList[i]].TP = 0;
Refresh();
}
if (nAfter == 0)
nChoice = MsgBox(sTxtCreated + "\n" + sOutFile, 0, 0, [sTxtOK, sTxtOpenPDF, sTxtOpenDir]);
if ((nAfter == 1) || (nChoice == 1))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + sOutFile + '"');
}
else if ((nAfter == 2) || (nChoice == 2))
OpenFolder(sOutFile);
}
}
else if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
}
bCreating = 0;
EnableControlsDlg();
DeleteFolder(sTmpDir);
}
function Shuffle()
{
var sOutFile;
var sTmpFile;
var sTmpDir;
var sTmp;
var sFiles;
var sPass;
var sRanges;
var sHandle;
var sCmd;
var sCmdOut;
var bFileExists;
var aInList;
var nChoice;
var i;
if (bShuffleW && ! oFSO.FileExists(sWaterPDF))
{
nTab = 3;
SendMessage(aDlg[IDTABTC].HWND, 4912 /*TCM_SETCURFOCUS*/, nTab, 0);
SendMessage(aDlg[IDWATERPDFE].HWND, 177 /*EM_SETSEL*/, 0, -1);
oSys.Call("User32::SetFocus", aDlg[IDWATERPDFE].HWND);
MsgBox(sWaterPDF ? sWaterPDF + "\n\n" + sTxtNoFile : sTxtNoWaterFile);
return;
}
if (! (sOutFile = GetOpenSaveFileName(1, "", "pdf", GetFileUniqueName(sLastDir, oFSO.GetFileName(aPDF[nPDF].F)))))
return;
if (! (sTmpDir = CreateTempDir()))
{
MsgBox(sTxtNoTempDir);
return;
}
if (bFileExists = oFSO.FileExists(sOutFile))
sTmpFile = GetTempFile(sTmpDir);
else
sTmpFile = sOutFile;
sFiles = '';
sPass = '';
sRanges = '';
aInList = [];
for (i = 0; i < aPDF.length; ++i)
{
sHandle = GetInputPDFHandle(i);
sFiles += sHandle + '="' + aPDF[i].F + '" ';
sRanges += sHandle + aPDF[i].R.replace(/ /g, ' ' + sHandle) + ' ';
if (aPDF[i].P)
sPass += sHandle + '="' + aPDF[i].P + '" ';
if (bFileExists && (aPDF[i].F.toUpperCase() == sOutFile.toUpperCase()))
aInList.push(i);
}
if (sPass)
sPass = 'input_pw ' + sPass;
if (bShuffleW && oFSO.FileExists(sWaterPDF))
{
sTmp = GetTempFile(sTmpDir);
sCmd = '"' + sPDFtkExe + '" ' + sFiles + sPass + 'shuffle ' + sRanges + 'output "' + sTmp;
}
else
sCmd = '"' + sPDFtkExe + '" ' + sFiles + sPass + 'shuffle ' + sRanges + 'output "' + sTmpFile + '"' + GetPermissString();
if (sCmd.length > 32767)
{
DeleteFolder(sTmpDir);
MsgBox(sTxtTooManyDocs);
return;
}
bCreating = 1;
EnableControlsDlg();
SetDefButton(IDCREATEB, IDCREATEB);
sCmdOut = RunCmd(sCmd);
if ((nExitCode == 0) && bShuffleW && oFSO.FileExists(sWaterPDF))
sCmdOut = RunCmd('"' + sPDFtkExe + '" "' + sTmp + '" ' + GetWaterString() + 'output "' + sTmpFile + '"' + GetPermissString());
if (nExitCode == 0)
{
if (bFileExists)
{
while (sOutFile)
{
if (DeleteFile(sOutFile))
{
CopyFile(sTmpFile, sOutFile, 1);
break;
}
else
{
if (MsgBox(sOutFile + "\n\n" + sTxtWriteError + "\n" + sTxtSelOtherName, 0, 0, [sTxtOK, sTxtCancel]) == 0)
sOutFile = GetOpenSaveFileName(1, "", "pdf", sOutFile);
else
sOutFile = "";
}
}
}
if (oFSO.FileExists(sOutFile))
{
if (aInList.length)
{
for (i = 0; i < aInList.length; ++i)
aPDF[aInList[i]].TP = 0;
Refresh();
}
if (nAfter == 0)
nChoice = MsgBox(sTxtCreated + "\n" + sOutFile, 0, 0, [sTxtOK, sTxtOpenPDF, sTxtOpenDir]);
if ((nAfter == 1) || (nChoice == 1))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + sOutFile + '"');
}
else if ((nAfter == 2) || (nChoice == 2))
OpenFolder(sOutFile);
}
}
else if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
bCreating = 0;
EnableControlsDlg();
DeleteFolder(sTmpDir);
}
function Split()
{
var sOutDir;
var sOutFile;
var sCmdOut;
var nFrom;
var nTo;
var aInpFile;
var nChoice;
var sNumber;
var i, n;
if (! (sOutDir = BrowseForFolder(sLastDir, "\n" + sTxtSelOutDir)))
return;
sLastDir = sOutDir;
sOutDir += (sOutDir.slice(-1) == "\\") ? "" : "\\";
aInpFile = [];
if (bSplitAll)
{
nFrom = 0;
nTo = aPDF.length - 1;
}
else
{
nFrom = nPDF;
nTo = nPDF;
}
bCreating = 1;
EnableControlsDlg();
SetDefButton(IDCREATEB, IDCREATEB);
for (i = nFrom; i <= nTo; ++i)
{
SetCurSelLV(aDlg[IDPDFLV].HWND, i);
if (! aInpFile[aPDF[i].F.toUpperCase()])
{
sOutFile = sOutDir + AkelPad.GetFilePath(aPDF[i].F, 3 /*CPF_FILEBASENAME*/) + "_%0" + aPDF[i].TP.toString().length.toString() + "d.pdf";
sCmdOut = RunCmd('"' + sPDFtkExe + '" "' + aPDF[i].F + '" ' + (aPDF[i].P ? 'input_pw "' + aPDF[i].P + '" ': '') + 'burst output "' + sOutFile + '"' + GetPermissString());
if (nExitCode == 0)
{
aInpFile[aPDF[i].F.toUpperCase()] = 1;
aInpFile.push(i);
}
else
{
if (nExitCode < 259)
aInpFile.push(i);
if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
break;
}
}
}
DeleteFile(sOutDir + "doc_data.txt");
if (nExitCode == 0)
{
nChoice = 0;
if (nAfter == 0)
{
sOutFile = "";
if (aInpFile.length > 20)
{
for (i = 0; i < 18; ++i)
sOutFile += "\n" + aPDF[aInpFile[i]].F;
sOutFile += "\n...\n" + aPDF[aInpFile[aInpFile.length - 1]].F;
}
else
{
for (i = 0; i < aInpFile.length; ++i)
sOutFile += "\n" + aPDF[aInpFile[i]].F;
}
nChoice = MsgBox(sTxtSplitted + sOutFile, 0, 0, [sTxtOK, sTxtOpenPDF, sTxtOpenDir]);
}
sOutFile = sOutDir + AkelPad.GetFilePath(aPDF[aInpFile[aInpFile.length - 1]].F, 3 /*CPF_FILEBASENAME*/) + "_" + aPDF[aInpFile[aInpFile.length - 1]].TP.toString() + ".pdf";
if ((nAfter == 1) || (nChoice == 1))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + sOutFile + '"');
}
else if ((nAfter == 2) || (nChoice == 2))
OpenFolder(sOutFile);
}
else
{
for (i = 0; i < aInpFile.length; ++i)
{
sOutFile = sOutDir + AkelPad.GetFilePath(aPDF[aInpFile[i]].F, 3 /*CPF_FILEBASENAME*/) + "_";
for (n = 1; n <= aPDF[aInpFile[i]].TP; ++n)
{
sNumber = n.toString();
while (sNumber.length < aPDF[aInpFile[i]].TP.toString().length)
sNumber = "0" + sNumber;
DeleteFile(sOutFile + sNumber + ".pdf");
}
}
}
bCreating = 0;
EnableControlsDlg();
}
function Watermark()
{
var sOutFile;
var sTmpFile;
var sOutDir;
var sTmpDir;
var sCmdOut;
var bFileExists;
var nChoice;
var nIndex;
var aInpFile;
var aOutFile;
var i;
if (! oFSO.FileExists(sWaterPDF))
{
SendMessage(aDlg[IDWATERPDFE].HWND, 177 /*EM_SETSEL*/, 0, -1);
SetDefButton(0, IDWATERPDFE);
MsgBox(sWaterPDF + "\n\n" + sTxtNoFile);
return;
}
if (bWaterAll && (aPDF.length > 1))
{
nIndex = sWaterAdd.search(/[<>:"\/\\|?*]/);
if (nIndex >= 0)
{
SendMessage(aDlg[IDWATERADDE].HWND, 177 /*EM_SETSEL*/, nIndex, nIndex + 1);
SetDefButton(0, IDWATERADDE);
MsgBox(sTxtInvalidChar);
return;
}
if (! (sOutDir = BrowseForFolder(sLastDir, "\n" + sTxtSelOutDir)))
return;
if (! (sTmpDir = CreateTempDir()))
{
MsgBox(sTxtNoTempDir);
return;
}
sLastDir = sOutDir;
sOutDir += (sOutDir.slice(-1) == "\\") ? "" : "\\";
aInpFile = [];
aOutFile = [];
nExitCode = 0;
bCreating = 1;
EnableControlsDlg();
SetDefButton(IDCREATEB, IDCREATEB);
for (i = 0; (i < aPDF.length) && (nExitCode == 0); ++i)
{
SetCurSelLV(aDlg[IDPDFLV].HWND, i);
if (! aInpFile[aPDF[i].F.toUpperCase()])
{
sOutFile = sOutDir + AkelPad.GetFilePath(aPDF[i].F, 3 /*CPF_FILEBASENAME*/) + sWaterAdd + "." + AkelPad.GetFilePath(aPDF[i].F, 4 /*CPF_FILEEXT*/);
if (bFileExists = oFSO.FileExists(sOutFile))
sTmpFile = GetTempFile(sTmpDir);
else
sTmpFile = sOutFile;
sCmdOut = RunCmd('"' + sPDFtkExe + '" "' + aPDF[i].F + '" ' + (aPDF[i].P ? 'input_pw "' + aPDF[i].P + '" ': '') + GetWaterString() + 'output "' + sTmpFile + '"' + GetPermissString());
if (nExitCode == 0)
{
if (bFileExists)
{
if ((nChoice != 1) && (nChoice != 3))
nChoice = MsgBox(sOutFile + "\n\n" + sTxtFileExists, 0, 0, [sTxtReplace, sTxtReplaceAll, sTxtSkip, sTxtSkipAll, sTxtCancel]);
if ((nChoice == -1) || (nChoice == 4))
nExitCode = 260;
else if ((nChoice == 0) || (nChoice == 1))
{
for (;;)
{
if (DeleteFile(sOutFile))
{
CopyFile(sTmpFile, sOutFile, 1);
aInpFile[aPDF[i].F.toUpperCase()] = 1;
aOutFile[sOutFile.toUpperCase()] = 1;
aOutFile.push(sOutFile);
break;
}
else if (MsgBox(sOutFile + "\n\n" + sTxtWriteError + " " + sTxtUnlockFile, 0, 0, [sTxtRetry, sTxtSkip]) != 0)
break;
}
}
}
else
{
aInpFile[aPDF[i].F.toUpperCase()] = 1;
aOutFile[sOutFile.toUpperCase()] = 1;
aOutFile.push(sOutFile);
}
}
else if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
}
}
if (aOutFile.length)
{
for (i = 0; i < aPDF.length; ++i)
{
if (aOutFile[aPDF[i].F.toUpperCase()])
aPDF[i].TP = 0;
}
Refresh();
nChoice = 0;
if (nAfter == 0)
{
sOutFile = "";
if (aOutFile.length > 20)
{
for (i = 0; i < 18; ++i)
sOutFile += "\n" + aOutFile[i];
sOutFile += "\n...\n" + aOutFile[aOutFile.length - 1];
}
else
{
for (i = 0; i < aOutFile.length; ++i)
sOutFile += "\n" + aOutFile[i];
}
nChoice = MsgBox(sTxtCreated + sOutFile, 0, 0, [sTxtOK, sTxtOpenPDF, sTxtOpenDir]);
}
if ((nAfter == 1) || (nChoice == 1))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + aOutFile[aOutFile.length - 1] + '"');
}
else if ((nAfter == 2) || (nChoice == 2))
OpenFolder(aOutFile[aOutFile.length - 1]);
}
}
else
{
if (! (sOutFile = GetOpenSaveFileName(1, "", "pdf", GetFileUniqueName(sLastDir, oFSO.GetFileName(aPDF[nPDF].F)))))
return;
if (! (sTmpDir = CreateTempDir()))
{
MsgBox(sTxtNoTempDir);
return;
}
if (bFileExists = oFSO.FileExists(sOutFile))
sTmpFile = GetTempFile(sTmpDir);
else
sTmpFile = sOutFile;
bCreating = 1;
EnableControlsDlg();
SetDefButton(IDCREATEB, IDCREATEB);
sCmdOut = RunCmd('"' + sPDFtkExe + '" "' + aPDF[nPDF].F + '" ' + (aPDF[nPDF].P ? 'input_pw "' + aPDF[nPDF].P + '" ': '') + GetWaterString() + 'output "' + sTmpFile + '"' + GetPermissString());
if (nExitCode == 0)
{
if (bFileExists)
{
while (sOutFile)
{
if (DeleteFile(sOutFile))
{
CopyFile(sTmpFile, sOutFile, 1);
break;
}
else
{
if (MsgBox(sOutFile + "\n\n" + sTxtWriteError + "\n" + sTxtSelOtherName, 0, 0, [sTxtOK, sTxtCancel]) == 0)
sOutFile = GetOpenSaveFileName(1, "", "pdf", sOutFile);
else
sOutFile = "";
}
}
}
if (oFSO.FileExists(sOutFile))
{
if (bFileExists)
{
for (i = 0; i < aPDF.length; ++i)
{
if (aPDF[i].F.toUpperCase() == sOutFile.toUpperCase())
aPDF[i].TP = 0;
}
Refresh();
}
if (nAfter == 0)
nChoice = MsgBox(sTxtCreated + "\n" + sOutFile, 0, 0, [sTxtOK, sTxtOpenPDF, sTxtOpenDir]);
if ((nAfter == 1) || (nChoice == 1))
{
if (IsReaderExists())
AkelPad.Exec('"' + sPDFReader + '" "' + sOutFile + '"');
}
else if ((nAfter == 2) || (nChoice == 2))
OpenFolder(sOutFile);
}
}
else if (nExitCode < 258)
MsgBox(sCmdOut, sTxtPDFtkError);
}
bCreating = 0;
EnableControlsDlg();
DeleteFolder(sTmpDir);
}