platform_widget_utils.hpp
Go to the documentation of this file.
00001 /* 00002 Copyright 2005-2007 Adobe Systems Incorporated 00003 Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt 00004 or a copy at http://stlab.adobe.com/licenses.html) 00005 */ 00006 00007 /****************************************************************************************************/ 00008 00009 #ifndef ADOBE_UI_CORE_OS_UTILITIES_HPP 00010 #define ADOBE_UI_CORE_OS_UTILITIES_HPP 00011 00012 /****************************************************************************************************/ 00013 00014 #define WINDOWS_LEAN_AND_MEAN 1 00015 #include <windows.h> 00016 00017 #include <adobe/config.hpp> 00018 00019 #include <adobe/future/windows_cast.hpp> 00020 #include <adobe/layout_attributes.hpp> 00021 #include <adobe/name_fwd.hpp> 00022 #include <adobe/widget_attributes.hpp> 00023 00024 #include <boost/filesystem/path.hpp> 00025 00026 #include <string> 00027 00028 /****************************************************************************************************/ 00029 00030 namespace hackery { 00031 00032 /****************************************************************************************************/ 00033 00034 std::string convert_utf(const WCHAR* buffer, std::size_t size); 00035 std::string convert_utf(const WCHAR* buffer); 00036 00037 #ifndef ADOBE_PLATFORM_CYGWIN 00038 std::wstring convert_utf(const CHAR* buffer, std::size_t size); 00039 std::wstring convert_utf(const CHAR* buffer); 00040 00041 inline std::wstring convert_utf(const std::string& name) 00042 { return convert_utf(name.c_str(), name.size()); } 00043 #endif 00044 00045 /****************************************************************************************************/ 00046 00047 } // namespace hackery 00048 00049 /****************************************************************************************************/ 00050 00051 namespace adobe { 00052 00053 /****************************************************************************************************/ 00054 00055 namespace implementation { 00056 00057 /****************************************************************************************************/ 00058 00059 typedef HWND platform_control_type; 00060 00061 /****************************************************************************************************/ 00062 00063 std::string get_window_title(HWND window); 00064 00065 inline std::string get_control_string(HWND control) 00066 { return implementation::get_window_title(control); } 00067 00068 void get_control_bounds(HWND control, RECT& bounds); 00069 00070 void set_control_bounds(HWND control, const place_data_t& place_data); 00071 00072 template <typename T> 00073 inline std::string get_field_text(T& x) 00074 { return get_control_string(x.control_m); } 00075 00076 template <> 00077 inline std::string get_field_text<HWND>(HWND& x) 00078 { return get_control_string(x); } 00079 00080 /****************************************************************************************************/ 00081 00082 template <typename T> 00083 inline bool is_focused(T& control) 00084 { return is_focused(control.control_m); } 00085 00086 template <> 00087 inline bool is_focused(HWND& control) 00088 { return ::GetFocus() == control; } 00089 00090 /****************************************************************************************************/ 00091 00092 void throw_last_error_exception(const char* file, long line); 00093 00094 /****************************************************************************************************/ 00095 00096 } // namespace implementation 00097 00098 /****************************************************************************************************/ 00099 00100 // 00107 // 00108 00109 bool forward_message(UINT message, WPARAM wParam, LPARAM lParam, LRESULT& forward_result); 00110 00111 /****************************************************************************************************/ 00112 00113 // 00117 // 00118 00119 void set_font(HWND window, int uxtheme_type); 00120 00121 /****************************************************************************************************/ 00122 00123 inline void set_control_visible(HWND control, bool make_visible) 00124 { 00125 assert(control); 00126 00127 ::ShowWindow(control, make_visible ? SW_SHOWNORMAL : SW_HIDE); 00128 } 00129 00130 /****************************************************************************************************/ 00131 00132 inline void set_control_enabled(HWND control, bool make_enabled) 00133 { 00134 assert(control); 00135 00136 ::EnableWindow(control, make_enabled); 00137 } 00138 00139 /****************************************************************************************************/ 00140 00141 bool context_menu(HWND parent, 00142 long x, long y, 00143 const name_t* first, 00144 const name_t* last, 00145 name_t& result); 00146 00147 /****************************************************************************************************/ 00148 00149 LONG_PTR get_user_reference(HWND control); 00150 00151 /****************************************************************************************************/ 00152 00153 template <typename T> 00154 void set_user_reference(HWND control, T data) 00155 { 00156 assert(control); 00157 00158 ::SetWindowLongPtr(control, GWLP_USERDATA, hackery::cast<LONG>(data)); 00159 } 00160 00161 /****************************************************************************************************/ 00162 00163 modifiers_t convert_modifiers(ULONG os_modifiers); 00164 modifiers_t convert_modifiers(BYTE keyboard_state[256]); 00165 00166 modifiers_t modifier_state(); 00167 00168 /****************************************************************************************************/ 00169 00170 } // namespace adobe 00171 00172 /****************************************************************************************************/ 00173 00174 #ifndef ADOBE_THROW_LAST_ERROR 00175 #define ADOBE_THROW_LAST_ERROR adobe::implementation::throw_last_error_exception(__FILE__, __LINE__) 00176 #endif 00177 00178 /****************************************************************************************************/ 00179 00180 #endif 00181 00182 /****************************************************************************************************/ |