xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/MessagesDialog.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1 // MessagesDialog.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "../../../Common/IntToString.h"
6 
7 #include "../../../Windows/ResourceString.h"
8 
9 #include "MessagesDialog.h"
10 
11 #include "LangUtils.h"
12 
13 #include "ProgressDialog2Res.h"
14 
15 using namespace NWindows;
16 
AddMessageDirect(LPCWSTR message)17 void CMessagesDialog::AddMessageDirect(LPCWSTR message)
18 {
19   const unsigned i = (unsigned)_messageList.GetItemCount();
20   wchar_t sz[16];
21   ConvertUInt32ToString(i, sz);
22   _messageList.InsertItem(i, sz);
23   _messageList.SetSubItem(i, 1, message);
24 }
25 
AddMessage(LPCWSTR message)26 void CMessagesDialog::AddMessage(LPCWSTR message)
27 {
28   UString s = message;
29   while (!s.IsEmpty())
30   {
31     const int pos = s.Find(L'\n');
32     if (pos < 0)
33       break;
34     AddMessageDirect(s.Left(pos));
35     s.DeleteFrontal((unsigned)pos + 1);
36   }
37   AddMessageDirect(s);
38 }
39 
OnInit()40 bool CMessagesDialog::OnInit()
41 {
42   #ifdef Z7_LANG
43   LangSetWindowText(*this, IDD_MESSAGES);
44   LangSetDlgItems(*this, NULL, 0);
45   SetItemText(IDOK, LangString(IDS_CLOSE));
46   #endif
47   _messageList.Attach(GetItem(IDL_MESSAGE));
48   _messageList.SetUnicodeFormat();
49 
50   _messageList.InsertColumn(0, L"", 30);
51   _messageList.InsertColumn(1, LangString(IDS_MESSAGE), 600);
52 
53   FOR_VECTOR (i, *Messages)
54     AddMessage((*Messages)[i]);
55 
56   _messageList.SetColumnWidthAuto(0);
57   _messageList.SetColumnWidthAuto(1);
58   NormalizeSize();
59   return CModalDialog::OnInit();
60 }
61 
OnSize(WPARAM,int xSize,int ySize)62 bool CMessagesDialog::OnSize(WPARAM /* wParam */, int xSize, int ySize)
63 {
64   int mx, my;
65   GetMargins(8, mx, my);
66   int bx, by;
67   GetItemSizes(IDOK, bx, by);
68   int y = ySize - my - by;
69   int x = xSize - mx - bx;
70 
71   InvalidateRect(NULL);
72 
73   MoveItem(IDOK, x, y, bx, by);
74   _messageList.Move(mx, my, xSize - mx * 2, y - my * 2);
75   return false;
76 }
77