mirror of
https://github.com/aaru-dps/Aaru.Compression.Native.git
synced 2025-12-16 19:24:31 +00:00
Update to lzma 23.01.
This commit is contained in:
@@ -2,10 +2,14 @@
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#ifdef Z7_OLD_WIN_SDK
|
||||
#include <ShlGuid.h>
|
||||
#endif
|
||||
|
||||
#include "../../../Common/IntToString.h"
|
||||
#include "../../../Common/StringConvert.h"
|
||||
|
||||
#include "../../../Windows/Control/Static.h"
|
||||
#include "../../../Windows/Clipboard.h"
|
||||
#include "../../../Windows/ErrorMsg.h"
|
||||
|
||||
#include "../GUI/ExtractRes.h"
|
||||
@@ -43,7 +47,7 @@ static const UINT kCreateDelay =
|
||||
|
||||
static const DWORD kPauseSleepTime = 100;
|
||||
|
||||
#ifdef LANG
|
||||
#ifdef Z7_LANG
|
||||
|
||||
static const UInt32 kLangIDs[] =
|
||||
{
|
||||
@@ -67,19 +71,19 @@ static const UInt32 kLangIDs_Colon[] =
|
||||
#endif
|
||||
|
||||
|
||||
#define UNDEFINED_VAL ((UInt64)(Int64)-1)
|
||||
#define INIT_AS_UNDEFINED(v) v = UNDEFINED_VAL;
|
||||
#define IS_UNDEFINED_VAL(v) ((v) == UNDEFINED_VAL)
|
||||
#define IS_DEFINED_VAL(v) ((v) != UNDEFINED_VAL)
|
||||
#define UNDEFINED_VAL ((UInt64)(Int64)-1)
|
||||
#define INIT_AS_UNDEFINED(v) v = UNDEFINED_VAL;
|
||||
#define IS_UNDEFINED_VAL(v) ((v) == UNDEFINED_VAL)
|
||||
#define IS_DEFINED_VAL(v) ((v) != UNDEFINED_VAL)
|
||||
|
||||
CProgressSync::CProgressSync():
|
||||
_stopped(false), _paused(false),
|
||||
_bytesProgressMode(true),
|
||||
_isDir(false),
|
||||
_totalBytes(UNDEFINED_VAL), _completedBytes(0),
|
||||
_totalFiles(UNDEFINED_VAL), _curFiles(0),
|
||||
_inSize(UNDEFINED_VAL),
|
||||
_outSize(UNDEFINED_VAL),
|
||||
_isDir(false)
|
||||
_outSize(UNDEFINED_VAL)
|
||||
{}
|
||||
|
||||
#define CHECK_STOP if (_stopped) return E_ABORT; if (!_paused) return S_OK;
|
||||
@@ -228,7 +232,7 @@ void CProgressSync::AddError_Message_Name(const wchar_t *message, const wchar_t
|
||||
AddError_Message(s);
|
||||
}
|
||||
|
||||
void CProgressSync::AddError_Code_Name(DWORD systemError, const wchar_t *name)
|
||||
void CProgressSync::AddError_Code_Name(HRESULT systemError, const wchar_t *name)
|
||||
{
|
||||
UString s = NError::MyFormatMessage(systemError);
|
||||
if (systemError == 0)
|
||||
@@ -239,7 +243,7 @@ void CProgressSync::AddError_Code_Name(DWORD systemError, const wchar_t *name)
|
||||
CProgressDialog::CProgressDialog():
|
||||
_timer(0),
|
||||
CompressingMode(true),
|
||||
MainWindow(0)
|
||||
MainWindow(NULL)
|
||||
{
|
||||
_isDir = false;
|
||||
|
||||
@@ -262,25 +266,25 @@ CProgressDialog::CProgressDialog():
|
||||
throw 1334987;
|
||||
if (_createDialogEvent.Create() != S_OK)
|
||||
throw 1334987;
|
||||
#ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
// #ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (void**)&_taskbarList);
|
||||
if (_taskbarList)
|
||||
_taskbarList->HrInit();
|
||||
#endif
|
||||
// #endif
|
||||
}
|
||||
|
||||
#ifndef _SFX
|
||||
#ifndef Z7_SFX
|
||||
|
||||
CProgressDialog::~CProgressDialog()
|
||||
{
|
||||
#ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
// #ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
SetTaskbarProgressState(TBPF_NOPROGRESS);
|
||||
#endif
|
||||
// #endif
|
||||
AddToTitle(L"");
|
||||
}
|
||||
void CProgressDialog::AddToTitle(LPCWSTR s)
|
||||
{
|
||||
if (MainWindow != 0)
|
||||
if (MainWindow)
|
||||
{
|
||||
CWindow window(MainWindow);
|
||||
window.SetText((UString)s + MainTitle);
|
||||
@@ -292,7 +296,7 @@ void CProgressDialog::AddToTitle(LPCWSTR s)
|
||||
|
||||
void CProgressDialog::SetTaskbarProgressState()
|
||||
{
|
||||
#ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
// #ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
if (_taskbarList && _hwndForTaskbar)
|
||||
{
|
||||
TBPFLAG tbpFlags;
|
||||
@@ -302,7 +306,7 @@ void CProgressDialog::SetTaskbarProgressState()
|
||||
tbpFlags = _errorsWereDisplayed ? TBPF_ERROR: TBPF_NORMAL;
|
||||
SetTaskbarProgressState(tbpFlags);
|
||||
}
|
||||
#endif
|
||||
// #endif
|
||||
}
|
||||
|
||||
static const unsigned kTitleFileNameSizeLimit = 36;
|
||||
@@ -331,23 +335,23 @@ bool CProgressDialog::OnInit()
|
||||
if (!_hwndForTaskbar)
|
||||
_hwndForTaskbar = *this;
|
||||
|
||||
INIT_AS_UNDEFINED(_progressBar_Range);
|
||||
INIT_AS_UNDEFINED(_progressBar_Pos);
|
||||
INIT_AS_UNDEFINED(_progressBar_Range)
|
||||
INIT_AS_UNDEFINED(_progressBar_Pos)
|
||||
|
||||
INIT_AS_UNDEFINED(_prevPercentValue);
|
||||
INIT_AS_UNDEFINED(_prevElapsedSec);
|
||||
INIT_AS_UNDEFINED(_prevRemainingSec);
|
||||
INIT_AS_UNDEFINED(_prevPercentValue)
|
||||
INIT_AS_UNDEFINED(_prevElapsedSec)
|
||||
INIT_AS_UNDEFINED(_prevRemainingSec)
|
||||
|
||||
INIT_AS_UNDEFINED(_prevSpeed);
|
||||
INIT_AS_UNDEFINED(_prevSpeed)
|
||||
_prevSpeed_MoveBits = 0;
|
||||
|
||||
_prevTime = ::GetTickCount();
|
||||
_elapsedTime = 0;
|
||||
|
||||
INIT_AS_UNDEFINED(_totalBytes_Prev);
|
||||
INIT_AS_UNDEFINED(_processed_Prev);
|
||||
INIT_AS_UNDEFINED(_packed_Prev);
|
||||
INIT_AS_UNDEFINED(_ratio_Prev);
|
||||
INIT_AS_UNDEFINED(_totalBytes_Prev)
|
||||
INIT_AS_UNDEFINED(_processed_Prev)
|
||||
INIT_AS_UNDEFINED(_packed_Prev)
|
||||
INIT_AS_UNDEFINED(_ratio_Prev)
|
||||
|
||||
_filesStr_Prev.Empty();
|
||||
_filesTotStr_Prev.Empty();
|
||||
@@ -357,13 +361,14 @@ bool CProgressDialog::OnInit()
|
||||
m_ProgressBar.Attach(GetItem(IDC_PROGRESS1));
|
||||
_messageList.Attach(GetItem(IDL_PROGRESS_MESSAGES));
|
||||
_messageList.SetUnicodeFormat();
|
||||
_messageList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT);
|
||||
|
||||
_wasCreated = true;
|
||||
_dialogCreatedEvent.Set();
|
||||
|
||||
#ifdef LANG
|
||||
LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
|
||||
LangSetDlgItems_Colon(*this, kLangIDs_Colon, ARRAY_SIZE(kLangIDs_Colon));
|
||||
#ifdef Z7_LANG
|
||||
LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
|
||||
LangSetDlgItems_Colon(*this, kLangIDs_Colon, Z7_ARRAY_SIZE(kLangIDs_Colon));
|
||||
#endif
|
||||
|
||||
CWindow window(GetItem(IDB_PROGRESS_BACKGROUND));
|
||||
@@ -452,12 +457,12 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
|
||||
|
||||
InvalidateRect(NULL);
|
||||
|
||||
int xSizeClient = xSize - mx * 2;
|
||||
const int xSizeClient = xSize - mx * 2;
|
||||
|
||||
{
|
||||
int i;
|
||||
unsigned i;
|
||||
for (i = 800; i > 40; i = i * 9 / 10)
|
||||
if (Units_To_Pixels_X(i) <= xSizeClient)
|
||||
if (Units_To_Pixels_X((int)i) <= xSizeClient)
|
||||
break;
|
||||
_numReduceSymbols = i / 4;
|
||||
}
|
||||
@@ -472,7 +477,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
|
||||
int mx2 = mx;
|
||||
for (;; mx2--)
|
||||
{
|
||||
int bSize2 = bSizeX * 3 + mx2 * 2;
|
||||
const int bSize2 = bSizeX * 3 + mx2 * 2;
|
||||
if (bSize2 <= xSizeClient)
|
||||
break;
|
||||
if (mx2 < 5)
|
||||
@@ -487,7 +492,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
|
||||
{
|
||||
RECT r;
|
||||
GetClientRectOfItem(IDL_PROGRESS_MESSAGES, r);
|
||||
int y = r.top;
|
||||
const int y = r.top;
|
||||
int ySize2 = yPos - my - y;
|
||||
const int kMinYSize = _buttonSizeY + _buttonSizeY * 3 / 4;
|
||||
int xx = xSize - mx * 2;
|
||||
@@ -518,13 +523,13 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
|
||||
labelSize = Units_To_Pixels_X(MY_PROGRESS_LABEL_UNITS_MIN);
|
||||
valueSize = Units_To_Pixels_X(MY_PROGRESS_VAL_UNITS);
|
||||
padSize = Units_To_Pixels_X(MY_PROGRESS_PAD_UNITS);
|
||||
int requiredSize = (labelSize + valueSize) * 2 + padSize;
|
||||
const int requiredSize = (labelSize + valueSize) * 2 + padSize;
|
||||
|
||||
int gSize;
|
||||
{
|
||||
if (requiredSize < xSizeClient)
|
||||
{
|
||||
int incr = (xSizeClient - requiredSize) / 3;
|
||||
const int incr = (xSizeClient - requiredSize) / 3;
|
||||
labelSize += incr;
|
||||
}
|
||||
else
|
||||
@@ -539,7 +544,7 @@ bool CProgressDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
|
||||
labelSize = gSize - valueSize;
|
||||
|
||||
yPos = my;
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(kIDs); i += 2)
|
||||
for (unsigned i = 0; i < Z7_ARRAY_SIZE(kIDs); i += 2)
|
||||
{
|
||||
int x = mx;
|
||||
const unsigned kNumColumn1Items = 5 * 2;
|
||||
@@ -565,7 +570,7 @@ void CProgressDialog::SetProgressRange(UInt64 range)
|
||||
if (range == _progressBar_Range)
|
||||
return;
|
||||
_progressBar_Range = range;
|
||||
INIT_AS_UNDEFINED(_progressBar_Pos);
|
||||
INIT_AS_UNDEFINED(_progressBar_Pos)
|
||||
_progressConv.Init(range);
|
||||
m_ProgressBar.SetRange32(0, _progressConv.Count(range));
|
||||
}
|
||||
@@ -577,10 +582,10 @@ void CProgressDialog::SetProgressPos(UInt64 pos)
|
||||
pos - _progressBar_Pos >= (_progressBar_Range >> 10))
|
||||
{
|
||||
m_ProgressBar.SetPos(_progressConv.Count(pos));
|
||||
#ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
// #ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
if (_taskbarList && _hwndForTaskbar)
|
||||
_taskbarList->SetProgressValue(_hwndForTaskbar, pos, _progressBar_Range);
|
||||
#endif
|
||||
// #endif
|
||||
_progressBar_Pos = pos;
|
||||
}
|
||||
}
|
||||
@@ -602,10 +607,10 @@ void GetTimeString(UInt64 timeValue, wchar_t *s)
|
||||
else
|
||||
{
|
||||
UInt32 hours32 = (UInt32)hours;
|
||||
UINT_TO_STR_2(hours32);
|
||||
UINT_TO_STR_2(hours32)
|
||||
}
|
||||
*s++ = ':'; UINT_TO_STR_2(minutes);
|
||||
*s++ = ':'; UINT_TO_STR_2(seconds);
|
||||
*s++ = ':'; UINT_TO_STR_2(minutes)
|
||||
*s++ = ':'; UINT_TO_STR_2(seconds)
|
||||
*s = 0;
|
||||
}
|
||||
|
||||
@@ -626,7 +631,7 @@ static void ConvertSizeToString(UInt64 v, wchar_t *s)
|
||||
}
|
||||
}
|
||||
|
||||
void CProgressDialog::ShowSize(int id, UInt64 val, UInt64 &prev)
|
||||
void CProgressDialog::ShowSize(unsigned id, UInt64 val, UInt64 &prev)
|
||||
{
|
||||
if (val == prev)
|
||||
return;
|
||||
@@ -770,7 +775,7 @@ void CProgressDialog::UpdateStatInfo(bool showAll)
|
||||
{
|
||||
if (IS_DEFINED_VAL(_prevRemainingSec))
|
||||
{
|
||||
INIT_AS_UNDEFINED(_prevRemainingSec);
|
||||
INIT_AS_UNDEFINED(_prevRemainingSec)
|
||||
SetItemText(IDT_PROGRESS_REMAINING_VAL, L"");
|
||||
}
|
||||
}
|
||||
@@ -789,8 +794,9 @@ void CProgressDialog::UpdateStatInfo(bool showAll)
|
||||
}
|
||||
}
|
||||
{
|
||||
UInt64 elapsedTime = (_elapsedTime == 0) ? 1 : _elapsedTime;
|
||||
UInt64 v = (progressCompleted * 1000) / elapsedTime;
|
||||
const UInt64 elapsedTime = (_elapsedTime == 0) ? 1 : _elapsedTime;
|
||||
// 22.02: progressCompleted can be for number of files
|
||||
UInt64 v = (completed * 1000) / elapsedTime;
|
||||
Byte c = 0;
|
||||
unsigned moveBits = 0;
|
||||
if (v >= ((UInt64)10000 << 10)) { moveBits = 20; c = 'M'; }
|
||||
@@ -956,7 +962,7 @@ INT_PTR CProgressDialog::Create(const UString &title, NWindows::CThread &thread,
|
||||
CWaitCursor waitCursor;
|
||||
HANDLE h[] = { thread, _createDialogEvent };
|
||||
|
||||
DWORD res2 = WaitForMultipleObjects(ARRAY_SIZE(h), h, FALSE, kCreateDelay);
|
||||
const DWORD res2 = WaitForMultipleObjects(Z7_ARRAY_SIZE(h), h, FALSE, kCreateDelay);
|
||||
if (res2 == WAIT_OBJECT_0 && !Sync.ThereIsMessage())
|
||||
return 0;
|
||||
}
|
||||
@@ -978,9 +984,9 @@ INT_PTR CProgressDialog::Create(const UString &title, NWindows::CThread &thread,
|
||||
bool CProgressDialog::OnExternalCloseMessage()
|
||||
{
|
||||
// it doesn't work if there is MessageBox.
|
||||
#ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
// #ifdef __ITaskbarList3_INTERFACE_DEFINED__
|
||||
SetTaskbarProgressState(TBPF_NOPROGRESS);
|
||||
#endif
|
||||
// #endif
|
||||
// AddToTitle(L"Finished ");
|
||||
// SetText(L"Finished2 ");
|
||||
|
||||
@@ -1046,6 +1052,8 @@ bool CProgressDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
if (_inCancelMessageBox)
|
||||
{
|
||||
/* if user is in MessageBox(), we will call OnExternalCloseMessage()
|
||||
later, when MessageBox() will be closed */
|
||||
_externalCloseMessageWasReceived = true;
|
||||
break;
|
||||
}
|
||||
@@ -1085,7 +1093,7 @@ void CProgressDialog::SetTitleText()
|
||||
}
|
||||
|
||||
s.Add_Space();
|
||||
#ifndef _SFX
|
||||
#ifndef Z7_SFX
|
||||
{
|
||||
unsigned len = s.Len();
|
||||
s += MainAddTitle;
|
||||
@@ -1142,13 +1150,16 @@ void CProgressDialog::OnPriorityButton()
|
||||
|
||||
void CProgressDialog::AddMessageDirect(LPCWSTR message, bool needNumber)
|
||||
{
|
||||
int itemIndex = _messageList.GetItemCount();
|
||||
wchar_t sz[16];
|
||||
sz[0] = 0;
|
||||
if (needNumber)
|
||||
ConvertUInt32ToString(_numMessages + 1, sz);
|
||||
_messageList.InsertItem(itemIndex, sz);
|
||||
_messageList.SetSubItem(itemIndex, 1, message);
|
||||
const unsigned itemIndex = _messageStrings.Size(); // _messageList.GetItemCount();
|
||||
if (_messageList.InsertItem(itemIndex, sz) == (int)itemIndex)
|
||||
{
|
||||
_messageList.SetSubItem(itemIndex, 1, message);
|
||||
_messageStrings.Add(message);
|
||||
}
|
||||
}
|
||||
|
||||
void CProgressDialog::AddMessage(LPCWSTR message)
|
||||
@@ -1157,12 +1168,12 @@ void CProgressDialog::AddMessage(LPCWSTR message)
|
||||
bool needNumber = true;
|
||||
while (!s.IsEmpty())
|
||||
{
|
||||
int pos = s.Find(L'\n');
|
||||
const int pos = s.Find(L'\n');
|
||||
if (pos < 0)
|
||||
break;
|
||||
AddMessageDirect(s.Left(pos), needNumber);
|
||||
AddMessageDirect(s.Left((unsigned)pos), needNumber);
|
||||
needNumber = false;
|
||||
s.DeleteFrontal(pos + 1);
|
||||
s.DeleteFrontal((unsigned)pos + 1);
|
||||
}
|
||||
AddMessageDirect(s, needNumber);
|
||||
_numMessages++;
|
||||
@@ -1204,7 +1215,7 @@ void CProgressDialog::UpdateMessagesDialog()
|
||||
}
|
||||
|
||||
|
||||
bool CProgressDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
|
||||
bool CProgressDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
|
||||
{
|
||||
switch (buttonID)
|
||||
{
|
||||
@@ -1217,24 +1228,42 @@ bool CProgressDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
|
||||
End(IDCLOSE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (_cancelWasPressed)
|
||||
return true;
|
||||
|
||||
bool paused = Sync.Get_Paused();
|
||||
const bool paused = Sync.Get_Paused();
|
||||
|
||||
if (!paused)
|
||||
OnPauseButton();
|
||||
_inCancelMessageBox = true;
|
||||
int res = ::MessageBoxW(*this, LangString(IDS_PROGRESS_ASK_CANCEL), _title, MB_YESNOCANCEL);
|
||||
_inCancelMessageBox = false;
|
||||
if (!paused)
|
||||
OnPauseButton();
|
||||
if (res == IDCANCEL || res == IDNO)
|
||||
{
|
||||
if (_externalCloseMessageWasReceived)
|
||||
OnExternalCloseMessage();
|
||||
OnPauseButton();
|
||||
}
|
||||
|
||||
_inCancelMessageBox = true;
|
||||
const int res = ::MessageBoxW(*this, LangString(IDS_PROGRESS_ASK_CANCEL), _title, MB_YESNOCANCEL);
|
||||
_inCancelMessageBox = false;
|
||||
if (res == IDYES)
|
||||
_cancelWasPressed = true;
|
||||
|
||||
if (!paused)
|
||||
{
|
||||
OnPauseButton();
|
||||
}
|
||||
|
||||
if (_externalCloseMessageWasReceived)
|
||||
{
|
||||
/* we have received kCloseMessage while we were in MessageBoxW().
|
||||
so we call OnExternalCloseMessage() here.
|
||||
it can show MessageBox and it can close dialog */
|
||||
OnExternalCloseMessage();
|
||||
return true;
|
||||
}
|
||||
|
||||
_cancelWasPressed = true;
|
||||
if (!_cancelWasPressed)
|
||||
return true;
|
||||
|
||||
MessagesDisplayed = true;
|
||||
// we will call Sync.Set_Stopped(true) in OnButtonClicked() : OnCancel()
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1270,6 +1299,87 @@ void CProgressDialog::ProcessWasFinished()
|
||||
}
|
||||
|
||||
|
||||
bool CProgressDialog::OnNotify(UINT /* controlID */, LPNMHDR header)
|
||||
{
|
||||
if (header->hwndFrom != _messageList)
|
||||
return false;
|
||||
switch (header->code)
|
||||
{
|
||||
case LVN_KEYDOWN:
|
||||
{
|
||||
LPNMLVKEYDOWN keyDownInfo = LPNMLVKEYDOWN(header);
|
||||
switch (keyDownInfo->wVKey)
|
||||
{
|
||||
case 'A':
|
||||
{
|
||||
if (IsKeyDown(VK_CONTROL))
|
||||
{
|
||||
_messageList.SelectAll();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_INSERT:
|
||||
case 'C':
|
||||
{
|
||||
if (IsKeyDown(VK_CONTROL))
|
||||
{
|
||||
CopyToClipboard();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static void ListView_GetSelected(NControl::CListView &listView, CUIntVector &vector)
|
||||
{
|
||||
vector.Clear();
|
||||
int index = -1;
|
||||
for (;;)
|
||||
{
|
||||
index = listView.GetNextSelectedItem(index);
|
||||
if (index < 0)
|
||||
break;
|
||||
vector.Add((unsigned)index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CProgressDialog::CopyToClipboard()
|
||||
{
|
||||
CUIntVector indexes;
|
||||
ListView_GetSelected(_messageList, indexes);
|
||||
UString s;
|
||||
unsigned numIndexes = indexes.Size();
|
||||
if (numIndexes == 0)
|
||||
numIndexes = (unsigned)_messageList.GetItemCount();
|
||||
|
||||
for (unsigned i = 0; i < numIndexes; i++)
|
||||
{
|
||||
const unsigned index = (i < indexes.Size() ? indexes[i] : i);
|
||||
// s.Add_UInt32(index);
|
||||
// s += ": ";
|
||||
s += _messageStrings[index];
|
||||
{
|
||||
s +=
|
||||
#ifdef _WIN32
|
||||
"\r\n"
|
||||
#else
|
||||
"\n"
|
||||
#endif
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
ClipboardSetText(*this, s);
|
||||
}
|
||||
|
||||
|
||||
static THREAD_FUNC_DECL MyThreadFunction(void *param)
|
||||
{
|
||||
CProgressThreadVirt *p = (CProgressThreadVirt *)param;
|
||||
@@ -1286,7 +1396,9 @@ static THREAD_FUNC_DECL MyThreadFunction(void *param)
|
||||
HRESULT CProgressThreadVirt::Create(const UString &title, HWND parentWindow)
|
||||
{
|
||||
NWindows::CThread thread;
|
||||
RINOK(thread.Create(MyThreadFunction, this));
|
||||
const WRes wres = thread.Create(MyThreadFunction, this);
|
||||
if (wres != 0)
|
||||
return HRESULT_FROM_WIN32(wres);
|
||||
CProgressDialog::Create(title, thread, parentWindow);
|
||||
return S_OK;
|
||||
}
|
||||
@@ -1312,7 +1424,7 @@ void CProgressThreadVirt::Process()
|
||||
catch(int v)
|
||||
{
|
||||
m = "Error #";
|
||||
m.Add_UInt32(v);
|
||||
m.Add_UInt32((unsigned)v);
|
||||
}
|
||||
catch(...) { m = "Error"; }
|
||||
if (Result != E_ABORT)
|
||||
|
||||
Reference in New Issue
Block a user