Merge branch 'fixes' into main/rendor-staging
[ryzomcore.git] / nel / src / misc / win32_util.cpp
bloba99ca57d75141bcbb0a32e05fd1bea08c46aed17
1 // NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
2 // Copyright (C) 2010 Winch Gate Property Limited
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Affero General Public License as
6 // published by the Free Software Foundation, either version 3 of the
7 // License, or (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU Affero General Public License for more details.
14 // You should have received a copy of the GNU Affero General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include "stdmisc.h"
18 #include "nel/misc/win32_util.h"
19 #include "nel/misc/i18n.h"
21 #ifdef NL_OS_WINDOWS
23 #ifdef DEBUG_NEW
24 #define new DEBUG_NEW
25 #endif
27 namespace NLMISC
31 //*************************************************************************************
32 void CWin32Util::localizeWindow(HWND wnd)
34 if (!wnd) return;
35 sint textLength = GetWindowTextLengthW(wnd);
36 if (textLength > 0)
38 wchar_t str[1024];
39 GetWindowTextW(wnd, str, 1024);
40 std::string winText = wideToUtf8(str);
41 if (CI18N::hasTranslation(winText))
43 if (!SetWindowTextW(wnd, (const WCHAR *) CI18N::get(winText).c_str()))
45 nlwarning("SetWindowText failed: %s", formatErrorMessage(getLastError()).c_str());
49 HWND currSon = GetWindow(wnd, GW_CHILD);
50 if (currSon)
52 HWND lastSon = GetWindow(currSon, GW_HWNDLAST);
53 for(;;)
55 localizeWindow(currSon);
56 if (currSon == lastSon) break;
57 currSon = GetWindow(currSon, GW_HWNDNEXT);
62 //*************************************************************************************
63 void CWin32Util::appendChildWindows(HWND parentWnd, std::vector<HWND> &childWindows)
65 if (!parentWnd) return;
66 HWND currSon = GetWindow(parentWnd, GW_CHILD);
67 if (currSon)
69 HWND lastSon = GetWindow(currSon, GW_HWNDLAST);
70 for(;;)
72 childWindows.push_back(currSon);
73 appendChildWindows(currSon, childWindows);
74 if (currSon == lastSon) break;
75 currSon = GetWindow(currSon, GW_HWNDNEXT);
84 } // NLMISC
87 #endif