| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef UI_VIEWS_CONTROLS_NATIVE_CONTROL_H_ | |
| 6 #define UI_VIEWS_CONTROLS_NATIVE_CONTROL_H_ | |
| 7 | |
| 8 #include <windows.h> | |
| 9 | |
| 10 #include "ui/events/keycodes/keyboard_codes.h" | |
| 11 #include "ui/views/view.h" | |
| 12 | |
| 13 namespace views { | |
| 14 | |
| 15 class NativeViewHost; | |
| 16 class NativeControlContainer; | |
| 17 | |
| 18 //////////////////////////////////////////////////////////////////////////////// | |
| 19 // | |
| 20 // NativeControl is an abstract view that is used to implement views wrapping | |
| 21 // native controls. Subclasses can simply implement CreateNativeControl() to | |
| 22 // wrap a new kind of control | |
| 23 // | |
| 24 //////////////////////////////////////////////////////////////////////////////// | |
| 25 class VIEWS_EXPORT NativeControl : public View { | |
| 26 public: | |
| 27 enum Alignment { | |
| 28 LEADING = 0, | |
| 29 CENTER, | |
| 30 TRAILING }; | |
| 31 | |
| 32 NativeControl(); | |
| 33 virtual ~NativeControl(); | |
| 34 | |
| 35 virtual void ViewHierarchyChanged( | |
| 36 const ViewHierarchyChangedDetails& details) OVERRIDE; | |
| 37 virtual void Layout(); | |
| 38 | |
| 39 // Overridden to properly set the native control state. | |
| 40 virtual void SetVisible(bool f); | |
| 41 virtual void OnEnabledChanged(); | |
| 42 | |
| 43 // Overridden to do nothing. | |
| 44 virtual void OnPaint(gfx::Canvas* canvas); | |
| 45 | |
| 46 protected: | |
| 47 friend class NativeControlContainer; | |
| 48 | |
| 49 // Overridden by sub-classes to create the windows control which is wrapped | |
| 50 virtual HWND CreateNativeControl(HWND parent_container) = 0; | |
| 51 | |
| 52 // Invoked when the native control sends a WM_NOTIFY message to its parent | |
| 53 virtual LRESULT OnNotify(int w_param, LPNMHDR l_param) = 0; | |
| 54 | |
| 55 // Invoked when the native control sends a WM_COMMAND message to its parent | |
| 56 virtual LRESULT OnCommand(UINT code, int id, HWND source) { return 0; } | |
| 57 | |
| 58 // Invoked when the appropriate gesture for a context menu is issued. | |
| 59 virtual void OnContextMenu(const POINT& location); | |
| 60 | |
| 61 // Overridden so to set the native focus to the native control. | |
| 62 virtual void OnFocus(); | |
| 63 | |
| 64 // Invoked when the native control sends a WM_DESTORY message to its parent. | |
| 65 virtual void OnDestroy() { } | |
| 66 | |
| 67 // Return the native control | |
| 68 virtual HWND GetNativeControlHWND(); | |
| 69 | |
| 70 // Invoked by the native windows control when it has been destroyed. This is | |
| 71 // invoked AFTER WM_DESTORY has been sent. Any window commands send to the | |
| 72 // HWND will most likely fail. | |
| 73 void NativeControlDestroyed(); | |
| 74 | |
| 75 // Overridden so that the control properly reflects parent's visibility. | |
| 76 virtual void VisibilityChanged(View* starting_from, bool is_visible); | |
| 77 | |
| 78 // Controls that have fixed sizes should call these methods to specify the | |
| 79 // actual size and how they should be aligned within their parent. | |
| 80 void SetFixedWidth(int width, Alignment alignment); | |
| 81 void SetFixedHeight(int height, Alignment alignment); | |
| 82 | |
| 83 // Invoked when a key is pressed on the control. | |
| 84 // Should return true if the key message was processed, false otherwise. | |
| 85 virtual bool OnKeyDown(ui::KeyboardCode virtual_key_code) { return false; } | |
| 86 | |
| 87 // Returns additional extended style flags. When subclasses call | |
| 88 // CreateWindowEx in order to create the underlying control, they must OR the | |
| 89 // ExStyle parameter with the value returned by this function. | |
| 90 // | |
| 91 // We currently use this method in order to add flags such as WS_EX_LAYOUTRTL | |
| 92 // to the HWND for views with right-to-left UI layout. | |
| 93 DWORD GetAdditionalExStyle() const; | |
| 94 | |
| 95 // TODO(xji): we use the following temporary function as we transition the | |
| 96 // various native controls to use the right set of RTL flags. This function | |
| 97 // will go away (and be replaced by GetAdditionalExStyle()) once all the | |
| 98 // controls are properly transitioned. | |
| 99 DWORD GetAdditionalRTLStyle() const; | |
| 100 | |
| 101 // This variable is protected to provide subclassers direct access. However | |
| 102 // subclassers should always check for NULL since this variable is only | |
| 103 // initialized in ValidateNativeControl(). | |
| 104 NativeViewHost* hwnd_view_; | |
| 105 | |
| 106 // Fixed size information. -1 for a size means no fixed size. | |
| 107 int fixed_width_; | |
| 108 Alignment horizontal_alignment_; | |
| 109 int fixed_height_; | |
| 110 Alignment vertical_alignment_; | |
| 111 | |
| 112 private: | |
| 113 | |
| 114 void ValidateNativeControl(); | |
| 115 | |
| 116 static LRESULT CALLBACK NativeControlWndProc(HWND window, UINT message, | |
| 117 WPARAM w_param, LPARAM l_param); | |
| 118 | |
| 119 NativeControlContainer* container_; | |
| 120 | |
| 121 DISALLOW_COPY_AND_ASSIGN(NativeControl); | |
| 122 }; | |
| 123 | |
| 124 } // namespace views | |
| 125 | |
| 126 #endif // UI_VIEWS_CONTROLS_NATIVE_CONTROL_H_ | |
| OLD | NEW |