xref: /aosp_15_r20/external/lzma/CPP/Windows/Control/ComboBox.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Windows/Control/ComboBox.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/StringConvert.h"
7*f6dc9357SAndroid Build Coastguard Worker #endif
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker #include "ComboBox.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
12*f6dc9357SAndroid Build Coastguard Worker extern bool g_IsNT;
13*f6dc9357SAndroid Build Coastguard Worker #endif
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker namespace NWindows {
16*f6dc9357SAndroid Build Coastguard Worker namespace NControl {
17*f6dc9357SAndroid Build Coastguard Worker 
GetLBText(int index,CSysString & s)18*f6dc9357SAndroid Build Coastguard Worker LRESULT CComboBox::GetLBText(int index, CSysString &s)
19*f6dc9357SAndroid Build Coastguard Worker {
20*f6dc9357SAndroid Build Coastguard Worker   s.Empty();
21*f6dc9357SAndroid Build Coastguard Worker   LRESULT len = GetLBTextLen(index); // length, excluding the terminating null character
22*f6dc9357SAndroid Build Coastguard Worker   if (len == CB_ERR)
23*f6dc9357SAndroid Build Coastguard Worker     return len;
24*f6dc9357SAndroid Build Coastguard Worker   LRESULT len2 = GetLBText(index, s.GetBuf((unsigned)len));
25*f6dc9357SAndroid Build Coastguard Worker   if (len2 == CB_ERR)
26*f6dc9357SAndroid Build Coastguard Worker     return len;
27*f6dc9357SAndroid Build Coastguard Worker   if (len > len2)
28*f6dc9357SAndroid Build Coastguard Worker     len = len2;
29*f6dc9357SAndroid Build Coastguard Worker   s.ReleaseBuf_CalcLen((unsigned)len);
30*f6dc9357SAndroid Build Coastguard Worker   return len;
31*f6dc9357SAndroid Build Coastguard Worker }
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
AddString(LPCWSTR s)34*f6dc9357SAndroid Build Coastguard Worker LRESULT CComboBox::AddString(LPCWSTR s)
35*f6dc9357SAndroid Build Coastguard Worker {
36*f6dc9357SAndroid Build Coastguard Worker   if (g_IsNT)
37*f6dc9357SAndroid Build Coastguard Worker     return SendMsgW(CB_ADDSTRING, 0, (LPARAM)s);
38*f6dc9357SAndroid Build Coastguard Worker   return AddString(GetSystemString(s));
39*f6dc9357SAndroid Build Coastguard Worker }
40*f6dc9357SAndroid Build Coastguard Worker 
GetLBText(int index,UString & s)41*f6dc9357SAndroid Build Coastguard Worker LRESULT CComboBox::GetLBText(int index, UString &s)
42*f6dc9357SAndroid Build Coastguard Worker {
43*f6dc9357SAndroid Build Coastguard Worker   s.Empty();
44*f6dc9357SAndroid Build Coastguard Worker   if (g_IsNT)
45*f6dc9357SAndroid Build Coastguard Worker   {
46*f6dc9357SAndroid Build Coastguard Worker     LRESULT len = SendMsgW(CB_GETLBTEXTLEN, MY_int_TO_WPARAM(index), 0);
47*f6dc9357SAndroid Build Coastguard Worker     if (len == CB_ERR)
48*f6dc9357SAndroid Build Coastguard Worker       return len;
49*f6dc9357SAndroid Build Coastguard Worker     LRESULT len2 = SendMsgW(CB_GETLBTEXT, MY_int_TO_WPARAM(index), (LPARAM)s.GetBuf((unsigned)len));
50*f6dc9357SAndroid Build Coastguard Worker     if (len2 == CB_ERR)
51*f6dc9357SAndroid Build Coastguard Worker       return len;
52*f6dc9357SAndroid Build Coastguard Worker     if (len > len2)
53*f6dc9357SAndroid Build Coastguard Worker       len = len2;
54*f6dc9357SAndroid Build Coastguard Worker     s.ReleaseBuf_CalcLen((unsigned)len);
55*f6dc9357SAndroid Build Coastguard Worker     return len;
56*f6dc9357SAndroid Build Coastguard Worker   }
57*f6dc9357SAndroid Build Coastguard Worker   AString sa;
58*f6dc9357SAndroid Build Coastguard Worker   const LRESULT len = GetLBText(index, sa);
59*f6dc9357SAndroid Build Coastguard Worker   if (len == CB_ERR)
60*f6dc9357SAndroid Build Coastguard Worker     return len;
61*f6dc9357SAndroid Build Coastguard Worker   s = GetUnicodeString(sa);
62*f6dc9357SAndroid Build Coastguard Worker   return (LRESULT)s.Len();
63*f6dc9357SAndroid Build Coastguard Worker }
64*f6dc9357SAndroid Build Coastguard Worker #endif
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker }}
67